From a43394bcb222ff1e685ca6b398c81128be45590a Mon Sep 17 00:00:00 2001 From: RingsC Date: Thu, 29 Jun 2023 19:18:18 +0800 Subject: [PATCH] feat(tianmu): merge to Stonedb 5.7 stable (#1915) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs(downlaod):update the docs of download(#1453) * fix(mtr):Resolve the nightly run error problem(#1458) * fix(workflow): fix can not run lcov in workflow * feat(tianmu):New configuration parameters: "tianmu_mandatory" and "tianmu_no_key_error (#1462)" In version 1.0.4, we will discard "MANDATORY_TIANMU" and "NO_KEY_ERROR" in (sql_mode) Specifies whether to enable mandatory Tianmu engine in table. if yes ,set tianmu_mandatory to ON, otherwise set the variable to OFF. Specifies whether to to directly skip DDL statements that are not supported by the SQL layer, instead of reporting errors. if yes ,set tianmu_no_key_error to ON, otherwise set the variable to OFF. * feat(tianmu):Discard "MANDATORY_TIANMU" and "NO_KEY_ERROR" in (sql_mode) * feat(tianmu):Resolve the issue of warning messages when setting new parameters * fix(tianmu):(Primary/Secondary)Error 1032 occasionally occurs during primary/secondary synchronization if UUIDs are used as the primary key(#1464) Cause of the problem: When performing a primary key scan under the master slave, "ha_tianmu:: position()" is called first to obtain the primary key value from the "record", However, in this scenario, after calling the "key_copy()" function, the "record" will be cleared, resulting in the subsequent "GetKeys()" obtaining a null primary key value. Solution: Because the value "handler->ref" is not used in the future, you can simply delete the call to "key_copy()". * test(mtr): add integer/unsigned/in subquery/create temporary testcases and update escape.test(#1196) * docs(v1.0.3): update the docs for v1.0.3 * fix(dcoker): FixDocker deployment commands(#1499) * feat: add Baidu statistics script(#1498) * fix(website): fix Baidu statistics script(#1502) * test(mtr): Optimize parallel scheduling to execute more innodb engine testcases, add date type and std func testcase(#1196) * fix crash when the aggregated element was decimal (#1402) 1. Fix the crash first 2. then redesign the entire aggregated data stream * build(deps): bump nth-check and unist-util-select in /website Bumps [nth-check](https://github.com/fb55/nth-check) to 2.1.1 and updates ancestor dependency [unist-util-select](https://github.com/syntax-tree/unist-util-select). These dependencies need to be updated together. Updates `nth-check` from 1.0.2 to 2.1.1 - [Release notes](https://github.com/fb55/nth-check/releases) - [Commits](https://github.com/fb55/nth-check/compare/v1.0.2...v2.1.1) Updates `unist-util-select` from 2.0.2 to 4.0.1 - [Release notes](https://github.com/syntax-tree/unist-util-select/releases) - [Commits](https://github.com/syntax-tree/unist-util-select/compare/2.0.2...4.0.1) --- updated-dependencies: - dependency-name: nth-check dependency-type: indirect - dependency-name: unist-util-select dependency-type: direct:production ... Signed-off-by: dependabot[bot] * docs(deploy): Update the document and fix the link * update the copyright * update the readme(#1324) * Create FUNDING.yml update the Sponsor button * Update FUNDING.yml fix the link of opencollective * remove dup lines in git workflow * feat(tianmu): mv func from public to protected(#1501) * style change * strip spaces * remove dup lines * change to uint * fix(tianmu):Resolve DDL and insert inot select Possible space inflation issues(#366) Cause of the problem: 1. For multiple versions, Tianmu needs to first copy an original pack when performing DML operations, Modify the copied package and use append write or overwrite write after modification (If there is invalid space in the DATA file that can be written to the current pack, use overwrite write, otherwise use append write) to write to the file, After the latest package is written to a file, the latest version chain will point to the address that was last written. There is a problem with the current (TianmuAttr:: LoadData) logic. Every time you call (TianmuAttr:: LoadData), Will write data to disk, If there are multiple rows written in a transaction, there will be multiple copies of data, "Because the current transaction has not been committed, the space for previous repeated writes has not been released, so the logic of overwriting writes will not be reached.", "I only follow the logic of additional writing, which is the fundamental reason for the skyrocketing space.". If you encounter a particularly large multiline write transaction, it will lead to a space explosion. Moreover, disk IO is performed once per load line, which can also lead to degraded insert performance. Solution: To optimize the logic of (TianmuAttr:: LoadData), it is necessary to determine whether the data in the pack is full before saving changes, Is whether to reach 65536 lines, and if so, write again, If it cannot be reached, it is necessary to write again in the commit phase. * feat(tianmu):Reconstruct direct insert into parallel execution, improving direct insert performance. * feat(tianmu):Add code comments for easy understanding * fix(tianmu):The myloader cann't work if the autocommit is closed. (#1510) Currently, TIANMU does not support manual transactions and only supports automatic commit. However, it does determine whether to commit the transaction based on the automatic commit parameters of MySQL. If automatic commit is turned off, automatic commit will not be performed on the transaction * fix(core): fix bug: The instance occasionally crashes if both fields specified for an equi-join are of the string data types (#1476) * fix: page hover font style * feat(mtr): To fix the mtr usage The disabeld mtr use cases should follow the mtr conventional rules. Adds a disabled.def to indeciate which case is disabled or not. * fix(tianmu):The mysqld is crashed when you are starting replication.(#1523) It is possible to update null values with null values in the delta layer, For example: update t set name="xiaohua" where id=1; update t set name=null where id=1; So when encountering this situation, directly return * feat(tianmu):Add delta layer mtr * bug 1538:The instance occasionally crashes when the parallel degree is enabled of the right table #1538 * feat(tianmu): To support vocalno framwork The PRs to support vocalno framwork include a serials of PR. Part1: Refine framework of code to make it clean and clear to read. * docs(quickstart): add stonedb-8.0 compiling guide #1449 * fix(website): fix website error #1449 * feat(tianmu): support volcano framewrok (#1546) * feat(tianmu): To support volcano framework This is a serial of PRs, part2: To remove global var `ha_kvstore`, which should be in an engine. To support volcano framework. and In order to do that, at secondly, ha_kvstore_, a global variable removed to the engine. That follows innodb conventional rules. * fix(tianmu): revert code, mv ret value from try block back to catch block [summary] The logic of this modification is as follows: Previously, set ret action has been moved to try block, which is not efficient because every time we do truncate success, ret will be setted to 1. This time we will move the set ret action back to catch block, which will only trigged when truncate failed. * feat(tiamnu): hard code in defs.h (#1481) change magic number to readable const * docs:update the compile guides #1562 * test(mtr): add more innodb testcases and tianmu range testcase(#1196) * fix(tianmu):Remove excess log printing and add some code comments(#1545) * fix(tianmu): fix mysqld crash when exec query with AggregateRough, assert failed on i < m_idx.size() at tianmu_attr.h:387, msg: [bad dpn index 0/0] (#1580) * fix(website): fix the download link of 5.7(#1518) * feat(website): update the latest content(#1587) * feat(tianmu): support volcano framework (#1554) Part3: To remove the `ha_tianmu_engine`, and gets it from hton's data. This makes it behavior just like innodb. MySQL gets innodb handler instance from table->s->file. and it will make the code logic more concise. * fix: max-width navbar search style * feat(website): upgrade the docusaurus version(#1604) fix #1604 * fix(website): fix Roadmap module location(#1597) * website(community): update the content * feat(website): update the logo of XinChuang(#1590) * fix(tianmu):The instance occasionally crashes when the memory leak. (#1549) * fix(tianmu):Modify merge_ The assignment method of ID, delaying the assignment to ensure that the final value is correct * fix(tianmu):Fix bug in delta layer initialization * fix(tianmu):Resolve the issue of assertion failure caused by memory allocation bugs in (pack_int) * fix(tianmu):Code format adjustment * fix(website): fix the wrong QR code(#1624) * feat(tianmu):Add delta layer information output and table name output * fix(tianmu):Perfect atomic operations for delta_table * feat(tianmu):Optimize delta layer merge operations to remove useless logic * fix(tianmu):assert failed on ptr == buff.get() + data_.sum_len at pack_str.cpp:584(#1620) * fix(tianmu):assert failed on oldv <= dpn_->max_i at pack_int.cpp:337 (#1610) * feat(tianmu):Increase assertion printing information and optimize code logic(#1617) * fix(tianmu): fix mysqld crash when query where JOIN::propagate_dependencies (#1628) * fix(tianmu): fix MySQL server has gone away when exec query (#1641 #1640) * fix(tianmu):Support insert ignore syntax (#1637) * fix(tianmu): fix query input variables wrong result (#1647) * fix(tianmu): fix result of the query using the subquery derived table is incorrect (#1662) * fix(tianmu): fix results of two queries using a derived table and a custom face change are incorrect (#1696) * feat(tianmu): Test cases that supplement custom variables (#1703) * fix(tianmu): fix mysqld crash when assigning return values using both custom variables and derived tables (#1707) * fix(tianmu): Insert ignore can insert duplicate values.(#1699) * fix(tianmu): fix error occurred in the union all query result (#1599) * remove unused code block * fix bug and change test case exptected result * add stonedb-8.0 compiling guide for CentOS 7.x * docs(quickstart): add stonedb-8.0 compiling guide(Chinese) for CentOS 7.x * fix(tianmu):Even if a primary key is defined, duplicate data may be imported.(#1648) * add delete/drop into tianmu log stat * open log for all cmds * fit format * fix(tianmu): fix Error result set of the IN subquery with semi join (#1764) * doc(develop-guide): modify method for complie stonedb using docker 1. change the version of the stonedb from 5.6 to 5.7 in docs. 2. list both manual install and automatic install in docs. 3. update the reference in zh-doc to a valid one: 可以参考:[StoneDB快速部署手册](https://stonedb.io/zh/docs/getting-started/quick-deployment) 可以参考:[StoneDB快速部署手册](https://stonedb.io/zh/docs/quick-deployment) * docs:add docker compile guide of stonedb8.0.(#1780) * feature: remove DBUG_OFF and repalce DEBUG_ASSERT with assert * automatically formatting * fix: fix storage of DT type * fix incorrect result of TIME type by distinguishing the processing of TIME type from other time types * fix(tinmu): fix tianmu crash when set varchar to num when order by * docs(website): update the documentation for Compile StoneDB 8.0 in Docker(#1823) * fix(tianmu): fix up the incompatible type 1) In result value setup phase, it only deals with num, but in some case, some non-num types involved, therefore, we should also deal with these types. 2) To fixup the boundary of the error codes. * fix(tianmu): Fix up the unknown exception after instance killed randomly (#1841) If the instance was killed by `kill -9 'pid'` randomly, the new inserted data will not be written into `DATA` file under the param of `tianmu_insert_delayed` was set to 0. Under this configuration, the data will write to memory not a `DATA` file. Therefore, when the instance was killed and restarted, the data will be lost, and the `DATA` can not be found, and an TianmuError exception will be thrown. changed the writing behavior of instance from writting data into memory to writting data into `DATA` file immediately as that of `tianmu_insert_delayed=1`. * fix(tianmu): fix up the incorrect meta-info leads unexpected behavior (#1840) In `ColumnShare::scan_dpn`, it will throw an exception to identify the in-consistent meta-data, which the offset violates the rules. Now, the deleted DPNs should not be added to `segs`. And, some auxiliary functions are added for helping to identify the status of files. * fix(workflow): nightly build failed #1830 [summary] Currently we disable tar pkg in ci/cd. * feat(tianmu): revert assert() --> debug_assert() #1551 [summary] To avoid some cases of some assert failed in release mode. * feat(tianmu): fixup the default delimeter for load data (#1843) Tianmu default delimiter is ';' not '\t'. In order to follow the mysql convention, we change the default delimeter to `\t`. * fix(tianmu): revert PR #1841. (#1850) Due to the disk space flattion, this PR is used to revert PR #1841. But this will lead to data in-consistent after the instance killed at randomly because the new data inserted into memory, and will lost. The root cause pls ref to discussion in #1621. * fix(tianmu): fix up mtr test case for delim of load data command (#1854) To fix up some MTR test cases because the delim of load data is changed from ; to \t. * fix(tianmu): fix up the `group_concat` function in tianmu (#1852) To allow `group_concat` function executed in tianmu, and Changes `SI` to `SpecialInstruction`. Some exceptions are catched. * fix(tianmu): To fixup the instance crashed if the result of aggregate function goes out of bounds (#1856) To caculate `sum(length())` will lead a corruption in destructor of `ValueOrNull`, frees an array of char. Before the array deletes, the validity of that should be checked, and after that the pointer of that arrary should also be set to nullptr, which make sure it's a safe code piece. * docs(developer-guide): update the compiling guide of stonedb 8.0 for centos7.x(#1817) * fix(tianmu): Fixup the mem leakage of aggregation function 1: Fixup the memory leakage of aggregation function, which may lead to failed of malloc. 2: Re-impl the operator= of `ValueOrNull`. 3: Fixup the assertion of `dow_cast` in ` Query::ClearSubselectTransformation`, `Item_func_trig_cond`. * fix(tianmu): fix UNION of non-matching columns (column no 0) * test(tianmu): add order by sentence in the mtr case various_join.test * test(mtr): add more test cases for tianmu(#1196) [summary] case_when.test drop_restric.test empty_string_not_null.test left_right_func.test like_not_like.test multi_join.test order_by.test ssb_small.test union_case.test * test(mtr): add order by sentence in the mtr case various_join.test * ci(codecov): update the config * fix(tianmu): To suuport ignore option for update statement To support `update ignore` statement. The logic of uniqueness check is re-implemented. * ci(codecov): update the codecov congfig * docs(intro): update the support for 8.0 * wokflow(codecov): Filter out excess code files * workflow(coverage): Update the lcov running logic * fix(tianmu): default value of the field take unaffect in load #1865 Cause: in the function ParsingStrategy::ParseResult ParsingStrategy::GetOneRow field->val_str(str) cannot distinguish 0 and NULL value. Solution: Check whether field's default value is NULL. * fix(tianmu): To support union(all) the statement which is without from clause 1: To fixup unsupport union or union all a sql statement which is without from clause. 2: Re-format some codes and functions. * fix(tianmu): To remove unnessary optimization in tianmu 1:Removes the unnessary optimization in stage of compiliation of tianmu. It doesnot have any helps for us. and may introuduce unexepected behaviors. 2:Refine MTR: issue848, issue1865, alter_table1, issue1523 * fix(tianmu): hotfix corruption in ValueOrNull under multi-thread In multi-thread aggregation, ExpressionColumn will occur double free due to without protection. Thread A will do ValueOrNull::operator ==, but in thread B, it will try to free it. Therefore, it leads to instance crash. * fix(tianmu): incorrect result when using where expr and args > bigint_max #1564 [summary] 1. static_cast(18446744073709551601) = -15 2. Item will set 18446744073709551601 with unsigned flag, but in tianmu transform to ValueOrNot, the value will be set to `-15`. 3. add `unsigned flag` in value_or_null & TianmuNum & tianmu expr. * fix(tianmu): add TIME_to_ulonglong_time_round process and fix up precision loss problem (#1173) When converting TIME/DATETIME to ulonglong numeric, tianmu engine does not take the TIME_to_ulonglong_time_round process. This causes the results different from innodb. Furthermore, when we close the tianmu_insert_delayed parameter and execute an insert SQL, the TIME/DATETIME/TIMESTAMP type's data will loss precision due to incomplete attribute copying. PR Close #1173 * fix(tianmu): fix format using clang-format #792 * feat: rm files after rebase leftover #1217 files deleted: storage/tianmu/core/rc_attr_typeinfo.h storage/tianmu/handler/tianmu_handler.cpp storage/tianmu/handler/tianmu_handler_com.cpp storage/tianmu/types/rc_data_types.cpp storage/tianmu/types/rc_num.cpp storage/tianmu/types/rc_num.h storage/tianmu/types/rc_value_object.cpp --------- Signed-off-by: dependabot[bot] Co-authored-by: LiMK Co-authored-by: lihongjian Co-authored-by: shizhao Co-authored-by: adofsauron Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: StoneAtom <98451811+stoneatomadmin@users.noreply.github.com> Co-authored-by: zzzz-vincent Co-authored-by: wisehead Co-authored-by: Agility6 Co-authored-by: Double0101 Co-authored-by: dysprosium0626 <1119493091@qq.com> Co-authored-by: augety Co-authored-by: xuxinqiang Co-authored-by: Jinrong Duan Co-authored-by: unknown Co-authored-by: hustjieke --- .github/FUNDING.yml | 13 + .github/workflows/nightly.yml | 39 +- .github/workflows/pull_requests.yml | 24 +- CONTRIBUTING.md | 2 +- Docs/02-getting-started/quick-add-mtr-test.md | 103 + .../quick-deploy-in-docker.md | 24 +- .../deploy-stonedb-with-deb.md | 4 +- .../quick-deployment/quick-deployment-57.md | 7 +- .../compile-using-centos7-for-56.md | 4 +- .../compile-using-centos7-for-57.md | 2 +- .../compile-using-centos7-for-80.md | 457 + .../compile-using-docker/_category_.json | 5 + .../compile-using-docker-for-56-57.md} | 140 +- .../compile-using-docker-for-80.md | 83 + .../compile-using-ubuntu2004-for-56.md | 1 - .../compile-using-ubuntu2004-for-57.md | 1 - .../compile-using-ubuntu2204/_category_.json | 5 + .../compile-using-ubuntu2204-for-80.md | 335 + Docs/download.md | 1 + Docs/release-notes.md | 2 +- Docs/stonedb_wecaht_group.png | Bin 485143 -> 76378 bytes README.md | 21 +- README_zh-hans.md | 11 +- codecov.yml | 3 + include/mysqld_error.h | 2 +- mysql-test/r/mysql_config_editor.result | 2 +- .../suite/innodb/include/innodb_testlist | 771 +- mysql-test/suite/tianmu/r/alter_table1.result | 15 +- .../suite/tianmu/r/bigint_unsigned.result | 359 + mysql-test/suite/tianmu/r/case_when.result | 192 + mysql-test/suite/tianmu/r/create_tmp.result | 133 + mysql-test/suite/tianmu/r/date_formats.result | 420 + mysql-test/suite/tianmu/r/double_float.result | 95 +- mysql-test/suite/tianmu/r/drop_index.result | 4 +- mysql-test/suite/tianmu/r/drop_restric.result | 25 + .../tianmu/r/empty_string_not_null.result | 80 + mysql-test/suite/tianmu/r/escape.result | 14 + mysql-test/suite/tianmu/r/hash_join.result | 100 + mysql-test/suite/tianmu/r/in_withpk.result | 182 + .../tianmu/r/init_auto_increment_value.result | 2 +- .../suite/tianmu/r/integer_range.result | 275 + mysql-test/suite/tianmu/r/issue1065.result | 15 +- .../suite/tianmu/r/issue1079_366.result | 57 + mysql-test/suite/tianmu/r/issue1090.result | 68 +- mysql-test/suite/tianmu/r/issue1111.result | 7 + mysql-test/suite/tianmu/r/issue1131.result | 28 +- mysql-test/suite/tianmu/r/issue1173.result | 20 + mysql-test/suite/tianmu/r/issue1174.result | 7 + mysql-test/suite/tianmu/r/issue1175.result | 67 + mysql-test/suite/tianmu/r/issue1325.result | 30 +- mysql-test/suite/tianmu/r/issue1402.result | 53 + mysql-test/suite/tianmu/r/issue1464.result | 51 + mysql-test/suite/tianmu/r/issue1510.result | 18 + mysql-test/suite/tianmu/r/issue1523.result | 156 + mysql-test/suite/tianmu/r/issue1564.result | 99 + mysql-test/suite/tianmu/r/issue1599.result | 81 + mysql-test/suite/tianmu/r/issue1616.result | 61 + mysql-test/suite/tianmu/r/issue1637.result | 12 + mysql-test/suite/tianmu/r/issue1662.result | 52 + mysql-test/suite/tianmu/r/issue1696.result | 87 + mysql-test/suite/tianmu/r/issue1707.result | 34 + mysql-test/suite/tianmu/r/issue1784.result | 144 + mysql-test/suite/tianmu/r/issue1808.result | 11 + mysql-test/suite/tianmu/r/issue1848.result | 3 + mysql-test/suite/tianmu/r/issue1855.result | 26 + mysql-test/suite/tianmu/r/issue1860.result | 55 + mysql-test/suite/tianmu/r/issue1861.result | 61 + mysql-test/suite/tianmu/r/issue1864.result | 32 + mysql-test/suite/tianmu/r/issue1865.result | 29 + mysql-test/suite/tianmu/r/issue663.result | 4 +- mysql-test/suite/tianmu/r/issue848.result | 23 +- mysql-test/suite/tianmu/r/issue880.result | 6 +- mysql-test/suite/tianmu/r/issue956.result | 40 +- .../suite/tianmu/r/left_right_func.result | 36 + .../suite/tianmu/r/like_not_like.result | 17 + mysql-test/suite/tianmu/r/multi_join.result | 29 + mysql-test/suite/tianmu/r/order_by.result | 58 + mysql-test/suite/tianmu/r/range.result | 1154 + mysql-test/suite/tianmu/r/ssb_small.result | 84 + mysql-test/suite/tianmu/r/std_test.result | 193 + mysql-test/suite/tianmu/r/union_case.result | 55 + .../r/unsigned_support_issue1267.result | 2 +- mysql-test/suite/tianmu/r/various_join.result | 40 +- .../suite/tianmu/std_data/issue1865.dat | 2 + .../suite/tianmu/std_data/tinyint_range.tbl | 254 + mysql-test/suite/tianmu/t/alter_table1.test | 15 +- ..._increment.testbak => auto_increment.test} | 0 .../suite/tianmu/t/bigint_unsigned.test | 229 + mysql-test/suite/tianmu/t/case_when.test | 163 + mysql-test/suite/tianmu/t/create_tmp.test | 107 + mysql-test/suite/tianmu/t/date_formats.test | 172 + mysql-test/suite/tianmu/t/disabled.def | 19 + mysql-test/suite/tianmu/t/double_float.test | 16 +- .../suite/tianmu/t/drop_index-master.opt | 3 +- mysql-test/suite/tianmu/t/drop_index.test | 2 +- mysql-test/suite/tianmu/t/drop_restric.test | 30 + .../suite/tianmu/t/empty_string_not_null.test | 71 + mysql-test/suite/tianmu/t/escape.test | 12 +- mysql-test/suite/tianmu/t/hash_join.test | 107 + mysql-test/suite/tianmu/t/in_withpk.test | 126 + .../tianmu/t/init_auto_increment_value.test | 2 +- mysql-test/suite/tianmu/t/integer_range.test | 236 + mysql-test/suite/tianmu/t/issue1065.test | 15 +- mysql-test/suite/tianmu/t/issue1079_366.test | 50 + mysql-test/suite/tianmu/t/issue1090.test | 28 +- mysql-test/suite/tianmu/t/issue1111-slave.opt | 2 + .../t/{issue1111.testbak => issue1111.test} | 2 +- mysql-test/suite/tianmu/t/issue1131.test | 20 +- mysql-test/suite/tianmu/t/issue1173.test | 21 + mysql-test/suite/tianmu/t/issue1174-slave.opt | 2 + mysql-test/suite/tianmu/t/issue1174.test | 2 +- mysql-test/suite/tianmu/t/issue1175.test | 54 + mysql-test/suite/tianmu/t/issue1186-slave.opt | 3 +- .../suite/tianmu/t/issue1318-master.opt | 3 +- mysql-test/suite/tianmu/t/issue1325-slave.opt | 2 + mysql-test/suite/tianmu/t/issue1325.test | 13 +- mysql-test/suite/tianmu/t/issue1402.test | 43 + mysql-test/suite/tianmu/t/issue1464-slave.opt | 2 + mysql-test/suite/tianmu/t/issue1464.test | 44 + .../suite/tianmu/t/issue1510-master.opt | 1 + mysql-test/suite/tianmu/t/issue1510.test | 23 + mysql-test/suite/tianmu/t/issue1523-slave.opt | 3 + mysql-test/suite/tianmu/t/issue1523.test | 154 + mysql-test/suite/tianmu/t/issue1564.test | 27 + mysql-test/suite/tianmu/t/issue1599.test | 42 + mysql-test/suite/tianmu/t/issue1616.test | 64 + .../suite/tianmu/t/issue1637-master.opt | 3 + mysql-test/suite/tianmu/t/issue1637.test | 22 + mysql-test/suite/tianmu/t/issue1662.test | 53 + mysql-test/suite/tianmu/t/issue1696.test | 77 + mysql-test/suite/tianmu/t/issue1707.test | 41 + mysql-test/suite/tianmu/t/issue1784.test | 158 + mysql-test/suite/tianmu/t/issue1808.test | 20 + mysql-test/suite/tianmu/t/issue1848.test | 43 + mysql-test/suite/tianmu/t/issue1855.test | 88 + mysql-test/suite/tianmu/t/issue1860.test | 43 + mysql-test/suite/tianmu/t/issue1861.test | 78 + mysql-test/suite/tianmu/t/issue1864.test | 32 + mysql-test/suite/tianmu/t/issue1865.test | 29 + .../t/{issue364.test.bak => issue364.test} | 0 .../t/{issue433.testbak => issue433.test} | 0 .../t/{issue446.testbak => issue446.test} | 0 .../t/{issue581.test.bak => issue581.test} | 0 mysql-test/suite/tianmu/t/issue848-master.opt | 2 + mysql-test/suite/tianmu/t/issue848.test | 24 +- mysql-test/suite/tianmu/t/issue880.test | 6 +- mysql-test/suite/tianmu/t/issue956.test | 20 +- .../suite/tianmu/t/left_right_func.test | 36 + mysql-test/suite/tianmu/t/like_not_like.test | 25 + .../tianmu/t/{load.testbak => load.test} | 0 mysql-test/suite/tianmu/t/multi_join.test | 36 + mysql-test/suite/tianmu/t/order_by.test | 28 + mysql-test/suite/tianmu/t/range.test | 971 + mysql-test/suite/tianmu/t/ssb_small.test | 96 + mysql-test/suite/tianmu/t/std_test.test | 121 + .../t/{trigger.test.bak => trigger.test} | 0 mysql-test/suite/tianmu/t/union_case.test | 51 + .../tianmu/t/unsigned_support_issue1267.test | 2 +- mysql-test/suite/tianmu/t/various_join.test | 32 +- scripts/mysql_system_tables.sql | 4 +- scripts/mysql_system_tables_fix.sql | 8 +- sql/auth/sql_authorization.cc | 6 +- sql/item.h | 2 +- sql/sql_class.h | 14 +- sql/sql_load.cc | 2 +- sql/sql_optimizer.cc | 55 +- sql/sql_parse.cc | 12 +- sql/sql_resolver.cc | 4 +- sql/sql_show.cc | 2 +- sql/sql_table.cc | 34 +- sql/sql_trigger.cc | 5 +- sql/sql_union.cc | 2 +- sql/sys_vars.cc | 20 +- storage/tianmu/CMakeLists.txt | 19 +- storage/tianmu/async_tests/task_executor.cpp | 2 +- storage/tianmu/common/common_definitions.h | 3 +- storage/tianmu/common/defs.h | 17 +- storage/tianmu/compress/basic_data_filt.h | 2 +- storage/tianmu/compress/dictionary.cpp | 2 +- storage/tianmu/compress/num_compressor.h | 2 +- storage/tianmu/compress/range_code.h | 2 +- storage/tianmu/core/data_cache.cpp | 2 +- storage/tianmu/core/data_cache.h | 2 +- storage/tianmu/core/delta_table.cpp | 61 +- storage/tianmu/core/delta_table.h | 2 +- storage/tianmu/core/dimension_group.h | 6 +- .../tianmu/core/dimension_group_multiple.h | 6 +- storage/tianmu/core/engine.cpp | 163 +- storage/tianmu/core/engine.h | 25 +- storage/tianmu/core/engine_execute.cpp | 177 +- storage/tianmu/core/engine_results.cpp | 18 +- storage/tianmu/core/ftree.h | 2 +- storage/tianmu/core/hash_table.cpp | 2 +- storage/tianmu/core/hash_table.h | 2 +- storage/tianmu/core/item_tianmu_field.cpp | 21 +- storage/tianmu/core/item_tianmu_field.h | 5 +- storage/tianmu/core/joner_hash.h | 4 +- storage/tianmu/core/just_a_table.cpp | 7 +- storage/tianmu/core/just_a_table.h | 4 + storage/tianmu/core/mysql_expression.cpp | 5 +- storage/tianmu/core/parallel_hash_join.cpp | 36 +- storage/tianmu/core/parallel_hash_join.h | 6 +- storage/tianmu/core/parameterized_filter.cpp | 22 +- storage/tianmu/core/parameterized_filter.h | 8 +- storage/tianmu/core/proxy_hash_joiner.cpp | 10 +- storage/tianmu/core/proxy_hash_joiner.h | 4 +- storage/tianmu/core/query.cpp | 56 +- storage/tianmu/core/query.h | 6 +- storage/tianmu/core/query_compile.cpp | 2662 +- storage/tianmu/core/quick_math.h | 2 +- storage/tianmu/core/table_share.cpp | 11 +- storage/tianmu/core/table_share.h | 7 +- storage/tianmu/core/temp_table.cpp | 260 +- storage/tianmu/core/temp_table.h | 31 +- storage/tianmu/core/temp_table_com.cpp | 18 +- storage/tianmu/core/temp_table_low.cpp | 88 +- storage/tianmu/core/temp_table_roughquery.cpp | 4 +- storage/tianmu/core/tianmu_table.cpp | 301 +- storage/tianmu/core/tianmu_table.h | 4 +- storage/tianmu/core/transaction.cpp | 4 +- .../tianmu/core/value_matching_hashtable.cpp | 2 +- storage/tianmu/core/value_matching_table.h | 4 +- storage/tianmu/core/value_or_null.cpp | 75 +- storage/tianmu/core/value_or_null.h | 38 +- storage/tianmu/core/value_set.cpp | 4 +- storage/tianmu/{core => data}/dpn.h | 7 +- storage/tianmu/{core => data}/pack.cpp | 29 +- storage/tianmu/{core => data}/pack.h | 15 +- .../tianmu/{core => data}/pack_guardian.cpp | 637 +- storage/tianmu/{core => data}/pack_guardian.h | 0 storage/tianmu/{core => data}/pack_int.cpp | 208 +- storage/tianmu/{core => data}/pack_int.h | 18 +- .../tianmu/{core => data}/pack_orderer.cpp | 2 +- storage/tianmu/{core => data}/pack_orderer.h | 0 storage/tianmu/{core => data}/pack_str.cpp | 150 +- storage/tianmu/{core => data}/pack_str.h | 6 +- .../{core => executor}/combined_iterator.cpp | 7 +- .../{core => executor}/combined_iterator.h | 6 +- storage/tianmu/{core => executor}/ctask.h | 0 storage/tianmu/{core => executor}/filter.cpp | 2 +- storage/tianmu/{core => executor}/filter.h | 0 .../{core => executor}/filter_block.cpp | 6 +- .../{core => executor}/filter_iterators.cpp | 4 +- .../{core => executor}/join_thread_table.cpp | 2 +- .../{core => executor}/join_thread_table.h | 4 +- .../{core => executor}/merge_operator.cpp | 13 +- .../{core => executor}/merge_operator.h | 0 .../{core => executor}/query_operator.h | 0 .../{core => executor}/task_executor.cpp | 9 +- .../tianmu/{core => executor}/task_executor.h | 0 storage/tianmu/exporter/data_exporter.cpp | 7 +- storage/tianmu/exporter/data_exporter.h | 2 +- storage/tianmu/handler/ha_tianmu.cpp | 377 +- storage/tianmu/handler/ha_tianmu.h | 5 + .../tianmu/{core => index}/index_table.cpp | 2 +- storage/tianmu/{core => index}/index_table.h | 0 storage/tianmu/index/kv_store.cpp | 11 +- storage/tianmu/index/kv_store.h | 10 +- storage/tianmu/index/kv_transaction.cpp | 28 +- .../{core => index}/mi_new_contents.cpp | 8 +- .../tianmu/{core => index}/mi_new_contents.h | 0 .../{core => index}/mi_rough_sorter.cpp | 0 .../tianmu/{core => index}/mi_rough_sorter.h | 2 +- .../tianmu/{core => index}/multi_index.cpp | 993 +- storage/tianmu/{core => index}/multi_index.h | 373 +- .../{core => index}/multi_index_builder.cpp | 6 +- .../{core => index}/multi_index_builder.h | 12 +- storage/tianmu/index/rdb_meta_manager.cpp | 2 +- .../{core => index}/rough_multi_index.cpp | 2 +- .../{core => index}/rough_multi_index.h | 6 +- storage/tianmu/{core => index}/rsi_bloom.cpp | 4 +- storage/tianmu/{core => index}/rsi_bloom.h | 2 +- storage/tianmu/{core => index}/rsi_cmap.cpp | 4 +- storage/tianmu/{core => index}/rsi_cmap.h | 2 +- .../tianmu/{core => index}/rsi_histogram.cpp | 4 +- .../tianmu/{core => index}/rsi_histogram.h | 4 +- storage/tianmu/{core => index}/rsi_index.h | 4 +- storage/tianmu/index/tianmu_table_index.cpp | 90 +- storage/tianmu/index/tianmu_table_index.h | 4 + storage/tianmu/loader/load_parser.cpp | 8 +- storage/tianmu/loader/parsing_strategy.cpp | 14 +- storage/tianmu/loader/parsing_strategy.h | 2 +- storage/tianmu/mm/memory_handling_policy.cpp | 4 +- storage/tianmu/mm/reference_object.h | 2 +- storage/tianmu/mm/release2q.cpp | 2 +- storage/tianmu/mm/tcm_heap_policy.cpp | 2 +- storage/tianmu/mm/traceable_object.cpp | 12 +- storage/tianmu/mm/traceable_object.h | 2 +- .../aggregation_algorithm.cpp | 135 +- .../aggregation_algorithm.h | 6 +- .../tianmu/{core => optimizer}/aggregator.h | 2 +- .../aggregator_advanced.cpp | 58 +- .../{core => optimizer}/aggregator_advanced.h | 34 +- .../{core => optimizer}/aggregator_basic.cpp | 14 +- .../{core => optimizer}/aggregator_basic.h | 4 +- .../compile}/compilation_tools.cpp | 4 +- .../compile}/compilation_tools.h | 0 .../compile}/compiled_query.cpp | 10 +- .../compile}/compiled_query.h | 11 +- storage/tianmu/optimizer/compile/compiler.cpp | 35 + storage/tianmu/optimizer/compile/compiler.h | 73 + .../{core => optimizer/compile}/cq_term.cpp | 6 +- .../{core => optimizer/compile}/cq_term.h | 0 .../compile}/descriptor.cpp | 12 +- .../{core => optimizer/compile}/descriptor.h | 2 +- .../tianmu/{core => optimizer}/condition.cpp | 0 .../tianmu/{core => optimizer}/condition.h | 4 +- .../{core => optimizer}/condition_encoder.cpp | 46 +- .../{core => optimizer}/condition_encoder.h | 4 +- .../group_distinct_cache.cpp | 0 .../group_distinct_cache.h | 0 .../group_distinct_table.cpp | 2 +- .../group_distinct_table.h | 6 +- .../{core => optimizer}/group_table.cpp | 29 +- .../tianmu/{core => optimizer}/group_table.h | 18 +- .../{core => optimizer}/groupby_wrapper.cpp | 3 +- .../{core => optimizer}/groupby_wrapper.h | 49 +- .../iterators}/mi_iterator.cpp | 2 +- .../iterators}/mi_iterator.h | 2 +- .../iterators}/mi_step_iterator.cpp | 0 .../iterators}/mi_step_iterator.h | 4 +- .../iterators}/mi_updating_iterator.cpp | 0 .../iterators}/mi_updating_iterator.h | 2 +- storage/tianmu/{core => optimizer}/joiner.cpp | 8 +- storage/tianmu/{core => optimizer}/joiner.h | 8 +- .../{core => optimizer}/joiner_general.cpp | 30 +- .../{core => optimizer}/joiner_hash.cpp | 6 +- .../tianmu/{core => optimizer}/joiner_hash.h | 4 +- .../{core => optimizer}/joiner_hash_table.cpp | 2 +- .../{core => optimizer}/joiner_hash_table.h | 8 +- .../{core => optimizer}/joiner_mapped.cpp | 27 +- .../{core => optimizer}/joiner_mapped.h | 6 +- .../{core => optimizer}/joiner_sort.cpp | 6 +- .../tianmu/{core => optimizer}/joiner_sort.h | 4 +- storage/tianmu/optimizer/plan/query_plan.h | 74 + .../tianmu/{handler => sql}/ha_my_tianmu.cpp | 41 +- .../tianmu/{handler => sql}/ha_my_tianmu.h | 5 +- storage/tianmu/system/cacheable_item.cpp | 2 +- storage/tianmu/system/channel.cpp | 2 +- storage/tianmu/system/fet.h | 2 +- storage/tianmu/system/file.cpp | 2 +- storage/tianmu/system/file_system.cpp | 6 +- storage/tianmu/system/io_parameters.h | 2 +- storage/tianmu/system/large_buffer.cpp | 2 +- storage/tianmu/system/tianmu_file.h | 5 + storage/tianmu/system/tianmu_system.cpp | 15 +- storage/tianmu/system/tianmu_system.h | 9 +- storage/tianmu/types/bstring.cpp | 4 +- storage/tianmu/{core => types}/data_type.cpp | 2 +- storage/tianmu/{core => types}/data_type.h | 0 storage/tianmu/types/tianmu_data_types.cpp | 4 +- storage/tianmu/types/tianmu_data_types.h | 22 +- storage/tianmu/types/tianmu_datetime.cpp | 2 +- storage/tianmu/types/tianmu_num.cpp | 17 +- storage/tianmu/types/tianmu_num.h | 7 +- storage/tianmu/types/value_parser4txt.h | 2 +- storage/tianmu/{core => util}/bin_tools.cpp | 2 +- storage/tianmu/{core => util}/bin_tools.h | 0 storage/tianmu/{core => util}/sorter3.cpp | 4 +- storage/tianmu/{core => util}/sorter3.h | 0 .../tianmu/{core => util}/sorter_wrapper.cpp | 17 +- .../tianmu/{core => util}/sorter_wrapper.h | 8 +- storage/tianmu/{core => util}/tools.h | 0 storage/tianmu/{core => vc}/column.h | 2 +- .../{core => vc}/column_bin_encoder.cpp | 10 +- .../tianmu/{core => vc}/column_bin_encoder.h | 4 +- storage/tianmu/{core => vc}/column_share.cpp | 42 +- storage/tianmu/{core => vc}/column_share.h | 20 +- storage/tianmu/{core => vc}/column_type.cpp | 4 +- storage/tianmu/{core => vc}/column_type.h | 2 +- storage/tianmu/vc/const_column.cpp | 4 +- storage/tianmu/vc/const_column.h | 5 +- storage/tianmu/vc/const_expr_column.cpp | 4 +- storage/tianmu/vc/const_expr_column.h | 6 +- storage/tianmu/vc/expr_column.cpp | 85 +- storage/tianmu/vc/expr_column.h | 5 +- storage/tianmu/vc/in_set_column.cpp | 4 +- storage/tianmu/vc/in_set_column.h | 4 +- storage/tianmu/vc/multi_value_column.h | 8 +- storage/tianmu/{core => vc}/physical_column.h | 4 +- storage/tianmu/vc/single_column.cpp | 4 +- storage/tianmu/vc/single_column.h | 7 +- storage/tianmu/vc/subselect_column.cpp | 4 +- storage/tianmu/vc/subselect_column.h | 4 +- storage/tianmu/{core => vc}/tianmu_attr.cpp | 279 +- storage/tianmu/{core => vc}/tianmu_attr.h | 29 +- .../{core => vc}/tianmu_attr_exeq_rs.cpp | 22 +- .../tianmu/{core => vc}/tianmu_attr_exqp.cpp | 27 +- .../{core => vc}/tianmu_attr_typeinfo.cpp | 4 +- .../{core => vc}/tianmu_attr_typeinfo.h | 0 storage/tianmu/vc/type_cast_column.h | 3 +- storage/tianmu/vc/virtual_column.h | 2 +- storage/tianmu/vc/virtual_column_base.cpp | 4 +- storage/tianmu/vc/virtual_column_base.h | 8 +- website/community/main.md | 93 - website/docusaurus.config.js | 1 + website/i18n/zh/code.json | 2 +- .../current/00-about-stonedb/intro.md | 2 +- .../current/00-about-stonedb/limits.md | 2 +- .../02-getting-started/quick-add-mtr-test.md | 103 + .../quick-deploy-in-docker.md | 25 +- .../quick-deployment/quick-deployment-57.md | 2 +- .../compile-using-centos7-for-56.md | 4 +- .../compile-using-centos7-for-57.md | 4 +- .../compile-using-centos7-for-80.md | 452 + .../compile-using-docker-for-56-57.md} | 90 +- .../compile-using-docker-for-80.md | 81 + .../compile-using-ubuntu2004-for-56.md | 1 - .../compile-using-ubuntu2004-for-57.md | 1 - .../compile-using-ubuntu2204-for-80.md | 331 + .../current/09-FAQ/stonedb-faq.md | 2 +- .../current/download.md | 3 +- .../current/release-notes.md | 4 +- .../community.md | 34 +- .../docusaurus-plugin-content-pages/index.md | 19 +- website/package-lock.json | 25967 ---------------- website/package.json | 26 +- website/src/components/contact/index.tsx | 2 +- website/src/components/roadMap/step/index.tsx | 2 +- website/src/components/showCase/data.tsx | 36 + website/src/components/showCase/index.tsx | 10 +- website/src/css/custom.less | 5 +- website/src/pages/community.md | 33 +- website/src/pages/index.md | 6 +- website/static/resource/ghzz.png | Bin 0 -> 32142 bytes website/static/resource/hgxx.png | Bin 0 -> 22136 bytes website/static/resource/zkfd.png | Bin 0 -> 67368 bytes website/static/resource/zkkk.png | Bin 0 -> 21909 bytes website/yarn-error.log | 10418 ------- website/yarn.lock | 10831 +++++++ yarn.lock | 4 + 431 files changed, 28096 insertions(+), 40973 deletions(-) create mode 100644 .github/FUNDING.yml create mode 100644 Docs/02-getting-started/quick-add-mtr-test.md create mode 100644 Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md create mode 100644 Docs/04-developer-guide/00-compiling-methods/compile-using-docker/_category_.json rename Docs/04-developer-guide/00-compiling-methods/{compile-using-docker.md => compile-using-docker/compile-using-docker-for-56-57.md} (70%) create mode 100644 Docs/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md create mode 100644 Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/_category_.json create mode 100644 Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md create mode 100644 codecov.yml create mode 100644 mysql-test/suite/tianmu/r/bigint_unsigned.result create mode 100644 mysql-test/suite/tianmu/r/case_when.result create mode 100644 mysql-test/suite/tianmu/r/create_tmp.result create mode 100644 mysql-test/suite/tianmu/r/date_formats.result create mode 100644 mysql-test/suite/tianmu/r/drop_restric.result create mode 100644 mysql-test/suite/tianmu/r/empty_string_not_null.result create mode 100644 mysql-test/suite/tianmu/r/hash_join.result create mode 100644 mysql-test/suite/tianmu/r/in_withpk.result create mode 100644 mysql-test/suite/tianmu/r/integer_range.result create mode 100644 mysql-test/suite/tianmu/r/issue1079_366.result create mode 100644 mysql-test/suite/tianmu/r/issue1173.result create mode 100644 mysql-test/suite/tianmu/r/issue1175.result create mode 100644 mysql-test/suite/tianmu/r/issue1402.result create mode 100644 mysql-test/suite/tianmu/r/issue1464.result create mode 100644 mysql-test/suite/tianmu/r/issue1510.result create mode 100644 mysql-test/suite/tianmu/r/issue1523.result create mode 100644 mysql-test/suite/tianmu/r/issue1564.result create mode 100644 mysql-test/suite/tianmu/r/issue1599.result create mode 100644 mysql-test/suite/tianmu/r/issue1616.result create mode 100644 mysql-test/suite/tianmu/r/issue1637.result create mode 100644 mysql-test/suite/tianmu/r/issue1662.result create mode 100644 mysql-test/suite/tianmu/r/issue1696.result create mode 100644 mysql-test/suite/tianmu/r/issue1707.result create mode 100644 mysql-test/suite/tianmu/r/issue1784.result create mode 100644 mysql-test/suite/tianmu/r/issue1808.result create mode 100644 mysql-test/suite/tianmu/r/issue1848.result create mode 100644 mysql-test/suite/tianmu/r/issue1855.result create mode 100644 mysql-test/suite/tianmu/r/issue1860.result create mode 100644 mysql-test/suite/tianmu/r/issue1861.result create mode 100644 mysql-test/suite/tianmu/r/issue1864.result create mode 100644 mysql-test/suite/tianmu/r/issue1865.result create mode 100644 mysql-test/suite/tianmu/r/left_right_func.result create mode 100644 mysql-test/suite/tianmu/r/like_not_like.result create mode 100644 mysql-test/suite/tianmu/r/multi_join.result create mode 100644 mysql-test/suite/tianmu/r/order_by.result create mode 100644 mysql-test/suite/tianmu/r/range.result create mode 100644 mysql-test/suite/tianmu/r/ssb_small.result create mode 100644 mysql-test/suite/tianmu/r/std_test.result create mode 100644 mysql-test/suite/tianmu/r/union_case.result create mode 100644 mysql-test/suite/tianmu/std_data/issue1865.dat create mode 100644 mysql-test/suite/tianmu/std_data/tinyint_range.tbl rename mysql-test/suite/tianmu/t/{auto_increment.testbak => auto_increment.test} (100%) create mode 100644 mysql-test/suite/tianmu/t/bigint_unsigned.test create mode 100644 mysql-test/suite/tianmu/t/case_when.test create mode 100644 mysql-test/suite/tianmu/t/create_tmp.test create mode 100644 mysql-test/suite/tianmu/t/date_formats.test create mode 100644 mysql-test/suite/tianmu/t/disabled.def create mode 100644 mysql-test/suite/tianmu/t/drop_restric.test create mode 100644 mysql-test/suite/tianmu/t/empty_string_not_null.test create mode 100644 mysql-test/suite/tianmu/t/hash_join.test create mode 100644 mysql-test/suite/tianmu/t/in_withpk.test create mode 100644 mysql-test/suite/tianmu/t/integer_range.test create mode 100644 mysql-test/suite/tianmu/t/issue1079_366.test create mode 100644 mysql-test/suite/tianmu/t/issue1111-slave.opt rename mysql-test/suite/tianmu/t/{issue1111.testbak => issue1111.test} (99%) create mode 100644 mysql-test/suite/tianmu/t/issue1173.test create mode 100644 mysql-test/suite/tianmu/t/issue1174-slave.opt create mode 100644 mysql-test/suite/tianmu/t/issue1175.test create mode 100644 mysql-test/suite/tianmu/t/issue1325-slave.opt create mode 100644 mysql-test/suite/tianmu/t/issue1402.test create mode 100644 mysql-test/suite/tianmu/t/issue1464-slave.opt create mode 100644 mysql-test/suite/tianmu/t/issue1464.test create mode 100644 mysql-test/suite/tianmu/t/issue1510-master.opt create mode 100644 mysql-test/suite/tianmu/t/issue1510.test create mode 100644 mysql-test/suite/tianmu/t/issue1523-slave.opt create mode 100644 mysql-test/suite/tianmu/t/issue1523.test create mode 100644 mysql-test/suite/tianmu/t/issue1564.test create mode 100644 mysql-test/suite/tianmu/t/issue1599.test create mode 100644 mysql-test/suite/tianmu/t/issue1616.test create mode 100644 mysql-test/suite/tianmu/t/issue1637-master.opt create mode 100644 mysql-test/suite/tianmu/t/issue1637.test create mode 100644 mysql-test/suite/tianmu/t/issue1662.test create mode 100644 mysql-test/suite/tianmu/t/issue1696.test create mode 100644 mysql-test/suite/tianmu/t/issue1707.test create mode 100644 mysql-test/suite/tianmu/t/issue1784.test create mode 100644 mysql-test/suite/tianmu/t/issue1808.test create mode 100644 mysql-test/suite/tianmu/t/issue1848.test create mode 100644 mysql-test/suite/tianmu/t/issue1855.test create mode 100644 mysql-test/suite/tianmu/t/issue1860.test create mode 100644 mysql-test/suite/tianmu/t/issue1861.test create mode 100644 mysql-test/suite/tianmu/t/issue1864.test create mode 100644 mysql-test/suite/tianmu/t/issue1865.test rename mysql-test/suite/tianmu/t/{issue364.test.bak => issue364.test} (100%) rename mysql-test/suite/tianmu/t/{issue433.testbak => issue433.test} (100%) rename mysql-test/suite/tianmu/t/{issue446.testbak => issue446.test} (100%) rename mysql-test/suite/tianmu/t/{issue581.test.bak => issue581.test} (100%) create mode 100644 mysql-test/suite/tianmu/t/issue848-master.opt create mode 100644 mysql-test/suite/tianmu/t/left_right_func.test create mode 100644 mysql-test/suite/tianmu/t/like_not_like.test rename mysql-test/suite/tianmu/t/{load.testbak => load.test} (100%) create mode 100644 mysql-test/suite/tianmu/t/multi_join.test create mode 100644 mysql-test/suite/tianmu/t/order_by.test create mode 100644 mysql-test/suite/tianmu/t/range.test create mode 100644 mysql-test/suite/tianmu/t/ssb_small.test create mode 100644 mysql-test/suite/tianmu/t/std_test.test rename mysql-test/suite/tianmu/t/{trigger.test.bak => trigger.test} (100%) create mode 100644 mysql-test/suite/tianmu/t/union_case.test rename storage/tianmu/{core => data}/dpn.h (96%) rename storage/tianmu/{core => data}/pack.cpp (86%) rename storage/tianmu/{core => data}/pack.h (95%) rename storage/tianmu/{core => data}/pack_guardian.cpp (96%) rename storage/tianmu/{core => data}/pack_guardian.h (100%) rename storage/tianmu/{core => data}/pack_int.cpp (85%) rename storage/tianmu/{core => data}/pack_int.h (90%) rename storage/tianmu/{core => data}/pack_orderer.cpp (99%) rename storage/tianmu/{core => data}/pack_orderer.h (100%) rename storage/tianmu/{core => data}/pack_str.cpp (85%) rename storage/tianmu/{core => data}/pack_str.h (98%) rename storage/tianmu/{core => executor}/combined_iterator.cpp (92%) rename storage/tianmu/{core => executor}/combined_iterator.h (96%) rename storage/tianmu/{core => executor}/ctask.h (100%) rename storage/tianmu/{core => executor}/filter.cpp (99%) rename storage/tianmu/{core => executor}/filter.h (100%) rename storage/tianmu/{core => executor}/filter_block.cpp (99%) rename storage/tianmu/{core => executor}/filter_iterators.cpp (99%) rename storage/tianmu/{core => executor}/join_thread_table.cpp (99%) rename storage/tianmu/{core => executor}/join_thread_table.h (98%) rename storage/tianmu/{core => executor}/merge_operator.cpp (94%) rename storage/tianmu/{core => executor}/merge_operator.h (100%) rename storage/tianmu/{core => executor}/query_operator.h (100%) rename storage/tianmu/{core => executor}/task_executor.cpp (93%) rename storage/tianmu/{core => executor}/task_executor.h (100%) rename storage/tianmu/{core => index}/index_table.cpp (99%) rename storage/tianmu/{core => index}/index_table.h (100%) rename storage/tianmu/{core => index}/mi_new_contents.cpp (98%) rename storage/tianmu/{core => index}/mi_new_contents.h (100%) rename storage/tianmu/{core => index}/mi_rough_sorter.cpp (100%) rename storage/tianmu/{core => index}/mi_rough_sorter.h (99%) rename storage/tianmu/{core => index}/multi_index.cpp (92%) rename storage/tianmu/{core => index}/multi_index.h (77%) rename storage/tianmu/{core => index}/multi_index_builder.cpp (98%) rename storage/tianmu/{core => index}/multi_index_builder.h (93%) rename storage/tianmu/{core => index}/rough_multi_index.cpp (99%) rename storage/tianmu/{core => index}/rough_multi_index.h (97%) rename storage/tianmu/{core => index}/rsi_bloom.cpp (98%) rename storage/tianmu/{core => index}/rsi_bloom.h (98%) rename storage/tianmu/{core => index}/rsi_cmap.cpp (99%) rename storage/tianmu/{core => index}/rsi_cmap.h (99%) rename storage/tianmu/{core => index}/rsi_histogram.cpp (99%) rename storage/tianmu/{core => index}/rsi_histogram.h (98%) rename storage/tianmu/{core => index}/rsi_index.h (96%) rename storage/tianmu/{core => optimizer}/aggregation_algorithm.cpp (92%) rename storage/tianmu/{core => optimizer}/aggregation_algorithm.h (97%) rename storage/tianmu/{core => optimizer}/aggregator.h (99%) rename storage/tianmu/{core => optimizer}/aggregator_advanced.cpp (83%) rename storage/tianmu/{core => optimizer}/aggregator_advanced.h (91%) rename storage/tianmu/{core => optimizer}/aggregator_basic.cpp (98%) rename storage/tianmu/{core => optimizer}/aggregator_basic.h (99%) rename storage/tianmu/{core => optimizer/compile}/compilation_tools.cpp (99%) rename storage/tianmu/{core => optimizer/compile}/compilation_tools.h (100%) rename storage/tianmu/{core => optimizer/compile}/compiled_query.cpp (96%) rename storage/tianmu/{core => optimizer/compile}/compiled_query.h (97%) create mode 100644 storage/tianmu/optimizer/compile/compiler.cpp create mode 100644 storage/tianmu/optimizer/compile/compiler.h rename storage/tianmu/{core => optimizer/compile}/cq_term.cpp (97%) rename storage/tianmu/{core => optimizer/compile}/cq_term.h (100%) rename storage/tianmu/{core => optimizer/compile}/descriptor.cpp (99%) rename storage/tianmu/{core => optimizer/compile}/descriptor.h (97%) rename storage/tianmu/{core => optimizer}/condition.cpp (100%) rename storage/tianmu/{core => optimizer}/condition.h (94%) rename storage/tianmu/{core => optimizer}/condition_encoder.cpp (95%) rename storage/tianmu/{core => optimizer}/condition_encoder.h (97%) rename storage/tianmu/{core => optimizer}/group_distinct_cache.cpp (100%) rename storage/tianmu/{core => optimizer}/group_distinct_cache.h (100%) rename storage/tianmu/{core => optimizer}/group_distinct_table.cpp (99%) rename storage/tianmu/{core => optimizer}/group_distinct_table.h (98%) rename storage/tianmu/{core => optimizer}/group_table.cpp (99%) rename storage/tianmu/{core => optimizer}/group_table.h (96%) rename storage/tianmu/{core => optimizer}/groupby_wrapper.cpp (99%) rename storage/tianmu/{core => optimizer}/groupby_wrapper.h (90%) rename storage/tianmu/{core => optimizer/iterators}/mi_iterator.cpp (99%) rename storage/tianmu/{core => optimizer/iterators}/mi_iterator.h (99%) rename storage/tianmu/{core => optimizer/iterators}/mi_step_iterator.cpp (100%) rename storage/tianmu/{core => optimizer/iterators}/mi_step_iterator.h (94%) rename storage/tianmu/{core => optimizer/iterators}/mi_updating_iterator.cpp (100%) rename storage/tianmu/{core => optimizer/iterators}/mi_updating_iterator.h (99%) rename storage/tianmu/{core => optimizer}/joiner.cpp (94%) rename storage/tianmu/{core => optimizer}/joiner.h (97%) rename storage/tianmu/{core => optimizer}/joiner_general.cpp (96%) rename storage/tianmu/{core => optimizer}/joiner_hash.cpp (99%) rename storage/tianmu/{core => optimizer}/joiner_hash.h (98%) rename storage/tianmu/{core => optimizer}/joiner_hash_table.cpp (99%) rename storage/tianmu/{core => optimizer}/joiner_hash_table.h (98%) rename storage/tianmu/{core => optimizer}/joiner_mapped.cpp (96%) rename storage/tianmu/{core => optimizer}/joiner_mapped.h (98%) rename storage/tianmu/{core => optimizer}/joiner_sort.cpp (99%) rename storage/tianmu/{core => optimizer}/joiner_sort.h (99%) create mode 100644 storage/tianmu/optimizer/plan/query_plan.h rename storage/tianmu/{handler => sql}/ha_my_tianmu.cpp (77%) rename storage/tianmu/{handler => sql}/ha_my_tianmu.h (96%) rename storage/tianmu/{core => types}/data_type.cpp (99%) rename storage/tianmu/{core => types}/data_type.h (100%) rename storage/tianmu/{core => util}/bin_tools.cpp (99%) rename storage/tianmu/{core => util}/bin_tools.h (100%) rename storage/tianmu/{core => util}/sorter3.cpp (99%) rename storage/tianmu/{core => util}/sorter3.h (100%) rename storage/tianmu/{core => util}/sorter_wrapper.cpp (97%) rename storage/tianmu/{core => util}/sorter_wrapper.h (96%) rename storage/tianmu/{core => util}/tools.h (100%) rename storage/tianmu/{core => vc}/column.h (98%) rename storage/tianmu/{core => vc}/column_bin_encoder.cpp (99%) rename storage/tianmu/{core => vc}/column_bin_encoder.h (99%) rename storage/tianmu/{core => vc}/column_share.cpp (83%) rename storage/tianmu/{core => vc}/column_share.h (85%) rename storage/tianmu/{core => vc}/column_type.cpp (97%) rename storage/tianmu/{core => vc}/column_type.h (99%) rename storage/tianmu/{core => vc}/physical_column.h (99%) rename storage/tianmu/{core => vc}/tianmu_attr.cpp (86%) rename storage/tianmu/{core => vc}/tianmu_attr.h (96%) rename storage/tianmu/{core => vc}/tianmu_attr_exeq_rs.cpp (98%) rename storage/tianmu/{core => vc}/tianmu_attr_exqp.cpp (98%) rename storage/tianmu/{core => vc}/tianmu_attr_typeinfo.cpp (95%) rename storage/tianmu/{core => vc}/tianmu_attr_typeinfo.h (100%) delete mode 100644 website/community/main.md create mode 100644 website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-add-mtr-test.md create mode 100644 website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md rename website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/{compile-using-docker.md => compile-using-docker/compile-using-docker-for-56-57.md} (83%) create mode 100644 website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md create mode 100644 website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md delete mode 100644 website/package-lock.json create mode 100644 website/static/resource/ghzz.png create mode 100644 website/static/resource/hgxx.png create mode 100644 website/static/resource/zkfd.png create mode 100644 website/static/resource/zkkk.png delete mode 100644 website/yarn-error.log create mode 100644 website/yarn.lock create mode 100644 yarn.lock diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..5f7e03d87 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,13 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: stonedb +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 8f721c7d6..fae9c5ac9 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -53,9 +53,7 @@ jobs: -DDOWNLOAD_BOOST=0 \ -DWITH_BOOST=/usr/local/stonedb-boost/ \ -DDOWNLOAD_ROCKSDB=0 \ - -DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb/ \ -DWITH_MARISA=/usr/local/stonedb-marisa/ \ - -DDOWNLOAD_ROCKSDB=0 \ -DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb && make -j`nproc` && make -j`nproc` install tar -zcPvf ../pkg_outdir/stonedb57_nightly-`date +%y%m%d%H%M`.tar.gz /stonedb57/ @@ -68,21 +66,22 @@ jobs: cd /stonedb57/install/mysql-test ./mysql-test-run.pl --suite=tianmu --nowarnings --force --nocheck-testcases --retry=0 - - name: output some vars - id: vars - env: - SHA_EXT: sha256sum.txt - run: | - find pkg_outdir -type f \( -iname \*.deb -o -iname \*.rpm -o -iname \*.tar.gz \) -exec bash -c "sha256sum {} > {}.sha256sum.txt" \; - subdir=$(date -u +%Y.%m.%d) - echo "::set-output name=subdir::$subdir" - - - name: copy file via ssh password - uses: appleboy/scp-action@master - with: - host: ${{ secrets.FILE_SERVER_HOST }} - username: ${{ secrets.FILE_SERVER_USERNAME }} - password: ${{ secrets.FILE_SERVER_PASSWORD }} - port: ${{ secrets.FILE_SERVER_PORT }} - source: "pkg_outdir/*" - target: "${{ secrets.FILE_SERVER_DIR }}" \ No newline at end of file + # TODO(): physical machine has been removed, we restart this funcion again in the future. + #- name: output some vars + # id: vars + # env: + # SHA_EXT: sha256sum.txt + # run: | + # find pkg_outdir -type f \( -iname \*.deb -o -iname \*.rpm -o -iname \*.tar.gz \) -exec bash -c "sha256sum {} > {}.sha256sum.txt" \; + # subdir=$(date -u +%Y.%m.%d) + # echo "::set-output name=subdir::$subdir" + # + #- name: copy file via ssh password + # uses: appleboy/scp-action@master + # with: + # host: ${{ secrets.FILE_SERVER_HOST }} + # username: ${{ secrets.FILE_SERVER_USERNAME }} + # password: ${{ secrets.FILE_SERVER_PASSWORD }} + # port: ${{ secrets.FILE_SERVER_PORT }} + # source: "pkg_outdir/*" + # target: "${{ secrets.FILE_SERVER_DIR }}" diff --git a/.github/workflows/pull_requests.yml b/.github/workflows/pull_requests.yml index e4341ff96..cabfc9cac 100644 --- a/.github/workflows/pull_requests.yml +++ b/.github/workflows/pull_requests.yml @@ -82,21 +82,21 @@ jobs: image: stoneatom/stonedb_buildenv:${{ matrix.os }} steps: - uses: actions/checkout@v3 - with: - ssh-strict: 'false' - - name: compile stonedb - id: compile - run: | + - run: | case ${{ matrix.os }} in debian10_1.0.3) - apt-get update && apt-get install curl lcov bc libssl-dev -y + apt-get --allow-releaseinfo-change update && apt-get install curl lcov bc libssl-dev -y ;; centos7_1.0.3) yum install curl lcov.noarch bc.x86_64 -y rm -rf /usr/bin/gcc && ln -s /opt/rh/devtoolset-9/root/bin/gcc /usr/bin/gcc ;; esac - + #with: + # ssh-strict: 'false' + - name: compile stonedb + id: compile + run: | mkdir build && cd build git config --global --add safe.directory /__w/stonedb/stonedb git fetch --tags @@ -119,9 +119,7 @@ jobs: -DDOWNLOAD_BOOST=0 \ -DWITH_BOOST=/usr/local/stonedb-boost/ \ -DDOWNLOAD_ROCKSDB=0 \ - -DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb/ \ -DWITH_MARISA=/usr/local/stonedb-marisa/ \ - -DDOWNLOAD_ROCKSDB=0 \ -DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb -DENABLE_GCOV=1 && make -j`nproc` && make -j`nproc` install - name: mtr test @@ -130,13 +128,15 @@ jobs: groupadd mysql && useradd -g mysql mysql chown -R mysql:mysql /stonedb57 && chown -R mysql:mysql ./build cd /stonedb57/install/mysql-test - ./mysql-test-run.pl --suite=innodb --nowarnings --force --nocheck-testcases --retry=0 --defaults-file=/stonedb57/install/mysql-test/suite/innodb/include/my_innodb.cnf --do-test-list=/stonedb57/install/mysql-test/suite/innodb/include/innodb_testlist + ./mysql-test-run.pl --suite=innodb,main --mysqld=--default-storage-engine=innodb --nowarnings --force --nocheck-testcases --retry=0 --do-test-list=./suite/innodb/include/innodb_testlist --parallel=15 ./mysql-test-run.pl --suite=tianmu --nowarnings --force --nocheck-testcases --retry=0 --parallel=10 - name: create coverage.info run: | + cat codecov.yml | curl --data-binary @- https://codecov.io/validate cd build - lcov --capture --directory . --output-file coverage.info --test-name coverage + lcov --capture --directory . --output-file coverage.info --test-name coverage - name: Codecov - uses: codecov/codecov-action@v3.1.1 + uses: codecov/codecov-action@v3.1.4 + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f2826acef..56fd20b12 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,7 @@ Check if  `git` has been installed. If not, install it first. 1. Issue report: Open a regular [StoneDB issue](https://github.com/stoneatom/stonedb/issues/new/choose) to bind your pull request.
For more details about creating github issue concepts, see: [create an github issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/creating-an-issue) 2. Fork [StoneDB repo](https://github.com/stoneatom/stonedb) to your own account. 3. After add you own code, add unit test -4. Do *make mtr test* +4. Do *make mtr test* [How to add mtr test](https://stonedb.io/docs/getting-started/quick-add-mtr-test/) 5. After all test passed, use *clang-format* to formate your code according to [google c++ styleguide](https://google.github.io/styleguide/cppguide.html) 6. Submit a [Draft Pull Requests](https://github.blog/2019-02-14-introducing-draft-pull-requests/) and  [write your PR description](https://github.com/stoneatom/stonedb/blob/stonedb-5.7/.github/pull_request_template.md)
For more details about pr concepts, see [creating-a-pull-request-from-a-fork](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)
For more detail about draft pr concepts,  see [draft-pull-request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests) 7. After all CI tests are passed, change the status to “Ready for review”. diff --git a/Docs/02-getting-started/quick-add-mtr-test.md b/Docs/02-getting-started/quick-add-mtr-test.md new file mode 100644 index 000000000..9725e4586 --- /dev/null +++ b/Docs/02-getting-started/quick-add-mtr-test.md @@ -0,0 +1,103 @@ +--- +id: quick-add-mtr-test +sidebar_position: 3.6 +--- + +# Qucik Add MTR Test + +## Add and Run a MTR test + +When you contribute your code into StoneDB, test your code in the meantime. + +Test cases are in the path \${StoneDB-Source-DIR}/mysql-test/suite/tianmu/. + +:::info +`${StoneDB-Source-DIR}` is your StoneDB source code directory. + +`${TEST-PATH}=${StoneDB-Source-DIR}/mysql-test/suite/tianmu/` in the following context. +::: + +### Step 1. Write your test file and result file + +Put your test file in the `${TEST-PATH}/t/` and result file in the `${TEST-PATH}/r/`. + +You can write your test cases like this. + +issue736.test +```sql +--source include/have_tianmu.inc +use test; +CREATE TABLE t1(col1 INT, col2 CHAR(5))ENGINE=tianmu; +INSERT INTO t1 VALUES(NULL,''),(1,'a'),(1,'b'),(1,'c'),(2,'dd'),(3,'eee'); +INSERT INTO t1 VALUES(8,UNHEX('CEB2')); +SELECT COUNT(DISTINCT col2) FROM t1; +SELECT COUNT(DISTINCT col1) FROM t1; +DROP TABLE t1; +``` + +Issue736.result +```sql +use test; +CREATE TABLE t1(col1 INT, col2 CHAR(5))ENGINE=tianmu; +INSERT INTO t1 VALUES(NULL,''),(1,'a'),(1,'b'),(1,'c'),(2,'dd'),(3,'eee'); +INSERT INTO t1 VALUES(8,UNHEX('CEB2')); +SELECT COUNT(DISTINCT col2) FROM t1; +COUNT(DISTINCT col2) +7 +SELECT COUNT(DISTINCT col1) FROM t1; +COUNT(DISTINCT col1) +4 +DROP TABLE t1; + +``` + +### Step 2. Compile your StoneDB. + +In this example, I compile my StoneDB in `${StoneDB-Source-DIR}/build/mysql8/` and install in `${StoneDB-Source-DIR}/build/install8/` + + ```shell +cd stonedb/build +mkdir mysql8 install8 +# build your stonedb +......... + ``` + +### Step 3. Run your test. + +After installation, test cases will be moved into your installation directory.In this example, the path is `${StoneDB-Source-DIR}/build/install8/mysql-test` + +``` shell +cd install8/mysql-test +# run your test case. issue736 is my testcase. +# run one case. +./mtr --suite=tianmu testcase +# run all cases. +./mysql-test-run.pl --suite=tianmu --nowarnings --force --nocheck-testcases --parallel=10 + +### Execute the test in this example. +root@htap-dev-64-2:/stonedb/build/install8/mysql-test# ./mtr --suite=tianmu issue736 +Logging: ./mtr --suite=tianmu issue736 +MySQL Version 8.0.30 +Checking supported features + - Binaries are debug compiled +Collecting tests +Checking leftover processes +Removing old var directory +Creating var directory '/stonedb/build/install8/mysql-test/var' +Installing system database +Using parallel: 1 + +============================================================================== + TEST NAME RESULT TIME (ms) COMMENT +------------------------------------------------------------------------------ +worker[1] mysql-test-run: WARNING: running this script as _root_ will cause some tests to be skipped +[ 50%] tianmu.issue736 [ pass ] 78 +[100%] shutdown_report [ pass ] +------------------------------------------------------------------------------ +The servers were restarted 0 times +The servers were reinitialized 0 times +Spent 0.078 of 35 seconds executing testcases + +Completed: All 2 tests were successful. + +``` \ No newline at end of file diff --git a/Docs/02-getting-started/quick-deploy-in-docker.md b/Docs/02-getting-started/quick-deploy-in-docker.md index 3953d5d18..5f7543a46 100644 --- a/Docs/02-getting-started/quick-deploy-in-docker.md +++ b/Docs/02-getting-started/quick-deploy-in-docker.md @@ -5,25 +5,30 @@ sidebar_position: 3.2 # Quick Deployment in a Docker Container ## Prerequisites -The image of StoneDB is downloaded from Docker Hub. - +The image of StoneDB is downloaded from Docker Hub. You can read the Dockerhub documentation, which must be up to date. [Docker Hub](https://hub.docker.com/r/stoneatom/stonedb) ## Procedure -The username and password for login are **root** and **stonedb123**. +The username and password for login are **root**. The **password** is customized by yourself. + +Make sure your CPU supports AVX + +```bash +cat /proc/cpuinfo |grep avx +``` ### 1. Pull the image Run the following command: ```bash -docker pull stoneatom/stonedb:v1.0.2 +docker pull stoneatom/stonedb:v1.0.3 ``` ### 2. Run the image Run the following command: ```bash -docker run -p 13306:3306 -v $stonedb_volumn_dir/data/:/stonedb56/install/data/ -it -d stoneatom/stonedb:v0.1 /bin/bash +docker run -p 3306:3306 -itd -v $YOU_DATA_DIR:/opt -e MYSQL_ROOT_PASSWORD='$YOU_PASSWORD' stoneatom/stonedb:v1.0.3 ``` Altenatively, run the following command: ```bash -docker run -p 13306:3306 -it -d stoneatom/stonedb:v0.1 /bin/bash +docker run -p 3306:3306 -itd -e MYSQL_ROOT_PASSWORD='$YOU_PASSWORD' stoneatom/stonedb:v1.0.3 ``` Parameter description: @@ -32,16 +37,17 @@ Parameter description: - **-i**: the interaction. - **-t**: the terminal. - **-d**: Do not enter the container upon startup. If you want to enter the container upon startup, run the docker exec command. -### **3. Log in to StoneDB in the container** +### 3. Log in to StoneDB in the container ```bash # Obtain the Docker container ID. docker ps # Use the "cocker ps" command to obtain the container ID and enter the Docker container. docker exec -it bash -$ /stonedb56/install/bin/mysql -uroot -pstonedb123 + +$ /opt/stonedb57/install/bin/mysql -uroot -p$YOU_PASSWORD ``` ### **4. Log in to StoneDB using a third-party tool** You can log in to StoneDB by using third-party tools such as mysql, Navicat, and DBeaver. The following code uses mysql as an example. ```shell -mysql -h -uroot -pstonedb123 -P +mysql -h -uroot -p$YOU_PASSWORD -P ``` \ No newline at end of file diff --git a/Docs/02-getting-started/quick-deployment/deploy-stonedb-with-deb.md b/Docs/02-getting-started/quick-deployment/deploy-stonedb-with-deb.md index 0c75f572c..c1021eb11 100644 --- a/Docs/02-getting-started/quick-deployment/deploy-stonedb-with-deb.md +++ b/Docs/02-getting-started/quick-deployment/deploy-stonedb-with-deb.md @@ -7,12 +7,12 @@ sidebar_position: 3.14 ## Step 1. Install StoneDB 1. Download the StoneDB software package. ```sql -wget https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/stonedb-ce-5.7_v1.0.2.ubuntu.amd64.deb +wget https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7_v1.0.3.ubuntu.amd64.deb ``` 2. Use the DPKG command to install the DEB package. ```sql -dpkg -i stonedb-ce-5.7_v1.0.2.ubuntu.amd64.deb +dpkg -i stonedb-ce-5.7_v1.0.3.ubuntu.amd64.deb ``` :::info If this step fails, run `ldd /opt/stonedb57/install/bin/mysqld | grep 'not found'` to check whether any dependent libraries are missing. If yes, run `source /opt/stonedb57/install/bin/sourceenv` and then retry this step. diff --git a/Docs/02-getting-started/quick-deployment/quick-deployment-57.md b/Docs/02-getting-started/quick-deployment/quick-deployment-57.md index 4f6711a32..5a753e6af 100644 --- a/Docs/02-getting-started/quick-deployment/quick-deployment-57.md +++ b/Docs/02-getting-started/quick-deployment/quick-deployment-57.md @@ -5,7 +5,10 @@ sidebar_position: 3.12 # Quick Deploy StoneDB-5.7 ## 1. Download the installation package -Click [here](https://static.stoneatom.com/custom/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz) to download the latest installation package of StoneDB. + +Click [Github](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz) or [Gitee](https://gitee.com/StoneDB/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz) to download the latest installation package of StoneDB. + + :::info To simplify deployment, the installation package provided here is pre-compiled to include all required dependencies. ::: @@ -31,6 +34,8 @@ Users can start StoneDB in two ways: manual installation and automatic installat ```shell groupadd mysql useradd -g mysql mysql + +# Here are the optional execution statements passwd mysql ``` ### 4.2 Manually install StoneDB diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md index e3d370943..e2cd54095 100644 --- a/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md @@ -1,6 +1,6 @@ --- -id: compile-using-centos7-foe-56 -sidebar_position: 5.122 +id: compile-using-centos7-for-56 +sidebar_position: 5.123 --- # Compile StoneDB for MySQL5.6 on CentOS 7 diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md index 627dbbe57..43a51c712 100644 --- a/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md @@ -1,6 +1,6 @@ --- id: compile-using-centos7-for-57 -sidebar_position: 5.121 +sidebar_position: 5.122 --- # Compile StoneDB for MySQL5.7 on CentOS 7 diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md new file mode 100644 index 000000000..7a29c5c86 --- /dev/null +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md @@ -0,0 +1,457 @@ +--- +id: compile-using-centos7-for-80 +sidebar_position: 5.121 +--- + +# Compile StoneDB for MySQL8.0 on CentOS 7 + +This topic describes how to compile StoneDB for MySQL8.0 on CentOS 7. + +## Precautions + +Ensure that the tools and third-party libraries used in your environment meet the following version requirements: + + - GCC 11.2.0 + - Make 3.82 or later + - CMake 3.7.2 or later + - marisa 0.77 + - rocksdb 6.12.6 + - boost 1.77 + + ## Procedure + +:::info +Permission issues may occur when executing the following commands. You are advised to run the commands with the administrator permission +::: + +:::tip +All commands in this article are run under root privileges by default +::: + +### Step 1. Install the dependencies + +```bash +yum install -y tree +yum install -y gcc +yum install -y gcc-c++ +yum install -y libzstd-devel +yum install -y make +yum install -y ncurses +yum install -y ncurses-devel +yum install -y bison +yum install -y libaio +yum install -y perl +yum install -y perl-DBI +yum install -y perl-DBD-MySQL +yum install -y perl-Time-HiRes +yum install -y readline-devel +yum install -y numactl +yum install -y zlib +yum install -y zlib-devel +yum install -y openssl +yum install -y openssl-devel +yum install -y redhat-lsb-core +yum install -y git +yum install -y autoconf +yum install -y automake +yum install -y libtool +yum install -y lrzsz +yum install -y lz4 +yum install -y lz4-devel +yum install -y snappy +yum install -y snappy-devel +yum install -y bzip2 +yum install -y bzip2-devel +yum install -y zstd +yum install -y libedit +yum install -y libedit-devel +yum install -y libaio-devel +yum install -y libicu +yum install -y libicu-devel +yum install -y jemalloc-devel +``` + +:::info +If your current yum source cannot find the required package, configure another epel source, the command is as follows: +```bash +yum install -y epel-release +``` +::: + +### Step 2. Install GCC 11.2.0 + +Before performing the follow-up steps, you must ensure the GCC version is 11.2.0.You can run the following command to check the GCC version. + +```bash +gcc --version +``` + +If the version is earlier than 11.0.0, perform the following steps to upgrade GCC. + +#### 1. Install the SCL utility. + +```bash +yum install centos-release-scl scl-utils-build -y +``` + +#### 2. Install GCC, GCC-C++, or BINUTILS of version 11.2.0. + +```bash +yum install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils -y +``` + +#### 3. Switch the version to 11.2.0. + +```bash +scl enable devtoolset-11 bash +``` + +#### 4. Check that the version is switched to 11.2.0. + +```bash +gcc --version +``` + +### Step 3. Install third-party libraries + +StoneDB is dependent on marisa, rocksdb, and boost. You are advised to specify paths for saving these libraries when you install them, instead of using the default paths. + +#### 1. Install cmake + +Check if the current cmake version meets the installation requirements. + +```bash +cmake --version +``` + +If your cmake version >= 3.7.2, you don’t need to install cmake, otherwise follow the steps below to compile and install the appropriate version of cmake. + +```bash +wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz +tar -zxvf cmake-3.7.2.tar.gz +cd cmake-3.7.2 +./bootstrap && make && make install +/usr/local/bin/cmake --version +rm -rf /usr/bin/cmake +ln -s /usr/local/bin/cmake /usr/bin/cmake +cmake --version +``` + +:::info +GCC11 will report a compilation error when compiling cmake-3.7.2. You can add `#include ` in the beginning of `cmake-3.7.2/Source/cmServerProtocol.cxx` to solve it. +```c++ +#include +#include +#include +#include +``` +::: + +#### 2. Install make + +Check if the current make version meets the installation requirements. + +```bash +make --version +``` + +If your make version >= 3.82, you don’t need to install make, otherwise follow the steps below to compile and install the appropriate version of make. + +```bash +wget http://mirrors.ustc.edu.cn/gnu/make/make-4.3.tar.gz +tar -zxvf make-4.3.tar.gz +cd make-4.3 +./configure --prefix=/usr/local/make +make && make install +/usr/local/make/bin/make --version +rm -rf /usr/bin/make +ln -s /usr/local/make/bin/make /usr/bin/make +make --version +``` + +#### 3. Install marisa + +```bash +git clone https://github.com/s-yata/marisa-trie.git +cd marisa-trie +autoreconf -i +./configure --enable-native-code --prefix=/usr/local/stonedb-marisa +sudo make && make install +``` + +The installation directory of marisa in the example is `/usr/local/stonedb-marisa`. You can change it based on your actual conditions. After compiling and installing, the following directories and files are generated in `/usr/local/stonedb-marisa/lib`. + +```bash +[root@localhost /usr/local/stonedb-marisa/lib]#ll +total 6768 +-rw-r--r--. 1 root root 4977788 May 5 07:33 libmarisa.a +-rwxr-xr-x. 1 root root 946 May 5 07:33 libmarisa.la +lrwxrwxrwx. 1 root root 18 May 5 07:33 libmarisa.so -> libmarisa.so.0.0.0 +lrwxrwxrwx. 1 root root 18 May 5 07:33 libmarisa.so.0 -> libmarisa.so.0.0.0 +-rwxr-xr-x. 1 root root 1945584 May 5 07:33 libmarisa.so.0.0.0 +drwxr-xr-x. 2 root root 23 May 5 07:33 pkgconfig +``` + +#### 4. Install rocksdb + +```bash +wget https://github.com/facebook/rocksdb/archive/refs/tags/v6.12.6.tar.gz +tar -zxvf v6.12.6.tar.gz +cd rocksdb-6.12.6 + +cmake ./ \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local/stonedb-gcc-rocksdb \ + -DCMAKE_INSTALL_LIBDIR=/usr/local/stonedb-gcc-rocksdb \ + -DWITH_JEMALLOC=ON \ + -DWITH_SNAPPY=ON \ + -DWITH_LZ4=ON \ + -DWITH_ZLIB=ON \ + -DWITH_ZSTD=ON \ + -DUSE_RTTI=ON \ + -DROCKSDB_BUILD_SHARED=ON \ + -DWITH_GFLAGS=OFF \ + -DWITH_TOOLS=OFF \ + -DWITH_BENCHMARK_TOOLS=OFF \ + -DWITH_CORE_TOOLS=OFF + +make -j`nproc` +make install -j`nproc` +``` + +The installation directory of rocksdb in the example is `/usr/local/stonedb-gcc-rocksdb`. You can change it based on your actual conditions. After compiling and installing, the following directories and files are generated in `/usr/local/stonedb-gcc-rocksdb`. + +```bash +[root@localhost /usr/local/stonedb-gcc-rocksdb]#ll +total 28736 +drwxr-xr-x. 3 root root 21 May 5 07:39 cmake +drwxr-xr-x. 3 root root 21 May 5 07:39 include +-rw-r--r--. 1 root root 20332942 May 5 07:38 librocksdb.a +lrwxrwxrwx. 1 root root 15 May 5 07:39 librocksdb.so -> librocksdb.so.6 +lrwxrwxrwx. 1 root root 20 May 5 07:39 librocksdb.so.6 -> librocksdb.so.6.12.6 +-rwxr-xr-x. 1 root root 9086272 May 5 07:39 librocksdb.so.6.12.6 +``` + +#### 5. Install boost + +```bash +wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz +tar -zxvf boost_1_77_0.tar.gz +cd boost_1_77_0 +./bootstrap.sh --prefix=/usr/local/stonedb-boost177 +./b2 install --with=all +``` + +The installation directory of boost in the example is `/usr/local/stonedb-boost177`. You can change it based on your actual conditions. After compiling and installing, the following directories and files are generated in `/usr/local/stonedb-boost177/lib`. + +```bash +[root@localhost /usr/local/stonedb-boost177/lib]#ll +total 43412 +drwxr-xr-x. 50 root root 4096 May 5 08:34 cmake +-rw-r--r--. 1 root root 14152 May 5 08:33 libboost_atomic.a +lrwxrwxrwx. 1 root root 25 May 5 08:34 libboost_atomic.so -> libboost_atomic.so.1.77.0 +-rwxr-xr-x. 1 root root 27632 May 5 08:34 libboost_atomic.so.1.77.0 +-rw-r--r--. 1 root root 182964 May 5 08:33 libboost_chrono.a +lrwxrwxrwx. 1 root root 25 May 5 08:34 libboost_chrono.so -> libboost_chrono.so.1.77.0 +-rwxr-xr-x. 1 root root 161408 May 5 08:34 libboost_chrono.so.1.77.0 +-rw-r--r--. 1 root root 172262 May 5 08:33 libboost_container.a +lrwxrwxrwx. 1 root root 28 May 5 08:34 libboost_container.so -> libboost_container.so.1.77.0 +-rwxr-xr-x. 1 root root 116424 May 5 08:34 libboost_container.so.1.77.0 +-rw-r--r--. 1 root root 7202 May 5 08:33 libboost_context.a +lrwxrwxrwx. 1 root root 26 May 5 08:34 libboost_context.so -> libboost_context.so.1.77.0 +-rwxr-xr-x. 1 root root 17024 May 5 08:34 libboost_context.so.1.77.0 +-rw-r--r--. 1 root root 284652 May 5 08:33 libboost_contract.a +lrwxrwxrwx. 1 root root 27 May 5 08:34 libboost_contract.so -> libboost_contract.so.1.77.0 +-rwxr-xr-x. 1 root root 254408 May 5 08:34 libboost_contract.so.1.77.0 +-rw-r--r--. 1 root root 196532 May 5 08:33 libboost_coroutine.a +lrwxrwxrwx. 1 root root 28 May 5 08:34 libboost_coroutine.so -> libboost_coroutine.so.1.77.0 +-rwxr-xr-x. 1 root root 84592 May 5 08:34 libboost_coroutine.so.1.77.0 +-rw-r--r--. 1 root root 1466 May 5 08:33 libboost_date_time.a +lrwxrwxrwx. 1 root root 28 May 5 08:34 libboost_date_time.so -> libboost_date_time.so.1.77.0 +-rwxr-xr-x. 1 root root 15832 May 5 08:34 libboost_date_time.so.1.77.0 +-rw-r--r--. 1 root root 1662 May 5 08:34 libboost_exception.a +-rw-r--r--. 1 root root 255586 May 5 08:33 libboost_fiber.a +lrwxrwxrwx. 1 root root 24 May 5 08:32 libboost_fiber.so -> libboost_fiber.so.1.77.0 +-rwxr-xr-x. 1 root root 108704 May 5 08:32 libboost_fiber.so.1.77.0 +-rw-r--r--. 1 root root 520624 May 5 08:33 libboost_filesystem.a +lrwxrwxrwx. 1 root root 29 May 5 08:32 libboost_filesystem.so -> libboost_filesystem.so.1.77.0 +-rwxr-xr-x. 1 root root 271120 May 5 08:32 libboost_filesystem.so.1.77.0 +-rw-r--r--. 1 root root 1039814 May 5 08:33 libboost_graph.a +lrwxrwxrwx. 1 root root 24 May 5 08:32 libboost_graph.so -> libboost_graph.so.1.77.0 +-rwxr-xr-x. 1 root root 504312 May 5 08:32 libboost_graph.so.1.77.0 +-rw-r--r--. 1 root root 263000 May 5 08:33 libboost_iostreams.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_iostreams.so -> libboost_iostreams.so.1.77.0 +-rwxr-xr-x. 1 root root 124640 May 5 08:32 libboost_iostreams.so.1.77.0 +-rw-r--r--. 1 root root 491206 May 5 08:33 libboost_json.a +lrwxrwxrwx. 1 root root 23 May 5 08:32 libboost_json.so -> libboost_json.so.1.77.0 +-rwxr-xr-x. 1 root root 426856 May 5 08:32 libboost_json.so.1.77.0 +-rw-r--r--. 1 root root 3221762 May 5 08:33 libboost_locale.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_locale.so -> libboost_locale.so.1.77.0 +-rwxr-xr-x. 1 root root 1088632 May 5 08:32 libboost_locale.so.1.77.0 +-rw-r--r--. 1 root root 3715884 May 5 08:33 libboost_log.a +-rw-r--r--. 1 root root 3141980 May 5 08:33 libboost_log_setup.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_log_setup.so -> libboost_log_setup.so.1.77.0 +-rwxr-xr-x. 1 root root 1363320 May 5 08:32 libboost_log_setup.so.1.77.0 +lrwxrwxrwx. 1 root root 22 May 5 08:32 libboost_log.so -> libboost_log.so.1.77.0 +-rwxr-xr-x. 1 root root 1325072 May 5 08:32 libboost_log.so.1.77.0 +-rw-r--r--. 1 root root 201806 May 5 08:33 libboost_math_c99.a +-rw-r--r--. 1 root root 185294 May 5 08:33 libboost_math_c99f.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_c99f.so -> libboost_math_c99f.so.1.77.0 +-rwxr-xr-x. 1 root root 71888 May 5 08:32 libboost_math_c99f.so.1.77.0 +-rw-r--r--. 1 root root 184610 May 5 08:33 libboost_math_c99l.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_c99l.so -> libboost_math_c99l.so.1.77.0 +-rwxr-xr-x. 1 root root 70640 May 5 08:32 libboost_math_c99l.so.1.77.0 +lrwxrwxrwx. 1 root root 27 May 5 08:32 libboost_math_c99.so -> libboost_math_c99.so.1.77.0 +-rwxr-xr-x. 1 root root 73640 May 5 08:32 libboost_math_c99.so.1.77.0 +-rw-r--r--. 1 root root 1168442 May 5 08:33 libboost_math_tr1.a +-rw-r--r--. 1 root root 1190212 May 5 08:33 libboost_math_tr1f.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_tr1f.so -> libboost_math_tr1f.so.1.77.0 +-rwxr-xr-x. 1 root root 278584 May 5 08:32 libboost_math_tr1f.so.1.77.0 +-rw-r--r--. 1 root root 1137874 May 5 08:33 libboost_math_tr1l.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_tr1l.so -> libboost_math_tr1l.so.1.77.0 +-rwxr-xr-x. 1 root root 289168 May 5 08:32 libboost_math_tr1l.so.1.77.0 +lrwxrwxrwx. 1 root root 27 May 5 08:32 libboost_math_tr1.so -> libboost_math_tr1.so.1.77.0 +-rwxr-xr-x. 1 root root 294848 May 5 08:32 libboost_math_tr1.so.1.77.0 +-rw-r--r--. 1 root root 22466 May 5 08:33 libboost_nowide.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_nowide.so -> libboost_nowide.so.1.77.0 +-rwxr-xr-x. 1 root root 24712 May 5 08:32 libboost_nowide.so.1.77.0 +-rw-r--r--. 1 root root 176758 May 5 08:34 libboost_prg_exec_monitor.a +lrwxrwxrwx. 1 root root 35 May 5 08:32 libboost_prg_exec_monitor.so -> libboost_prg_exec_monitor.so.1.77.0 +-rwxr-xr-x. 1 root root 195640 May 5 08:32 libboost_prg_exec_monitor.so.1.77.0 +-rw-r--r--. 1 root root 1319422 May 5 08:33 libboost_program_options.a +lrwxrwxrwx. 1 root root 34 May 5 08:32 libboost_program_options.so -> libboost_program_options.so.1.77.0 +-rwxr-xr-x. 1 root root 651768 May 5 08:32 libboost_program_options.so.1.77.0 +-rw-r--r--. 1 root root 63270 May 5 08:33 libboost_random.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_random.so -> libboost_random.so.1.77.0 +-rwxr-xr-x. 1 root root 152064 May 5 08:32 libboost_random.so.1.77.0 +-rw-r--r--. 1 root root 797262 May 5 08:33 libboost_regex.a +lrwxrwxrwx. 1 root root 24 May 5 08:32 libboost_regex.so -> libboost_regex.so.1.77.0 +-rwxr-xr-x. 1 root root 473968 May 5 08:32 libboost_regex.so.1.77.0 +-rw-r--r--. 1 root root 1177984 May 5 08:34 libboost_serialization.a +lrwxrwxrwx. 1 root root 32 May 5 08:32 libboost_serialization.so -> libboost_serialization.so.1.77.0 +-rwxr-xr-x. 1 root root 457280 May 5 08:32 libboost_serialization.so.1.77.0 +-rw-r--r--. 1 root root 23484 May 5 08:34 libboost_stacktrace_addr2line.a +lrwxrwxrwx. 1 root root 39 May 5 08:32 libboost_stacktrace_addr2line.so -> libboost_stacktrace_addr2line.so.1.77.0 +-rwxr-xr-x. 1 root root 125792 May 5 08:32 libboost_stacktrace_addr2line.so.1.77.0 +-rw-r--r--. 1 root root 13906 May 5 08:34 libboost_stacktrace_basic.a +lrwxrwxrwx. 1 root root 35 May 5 08:32 libboost_stacktrace_basic.so -> libboost_stacktrace_basic.so.1.77.0 +-rwxr-xr-x. 1 root root 22456 May 5 08:32 libboost_stacktrace_basic.so.1.77.0 +-rw-r--r--. 1 root root 2938 May 5 08:33 libboost_stacktrace_noop.a +lrwxrwxrwx. 1 root root 34 May 5 08:32 libboost_stacktrace_noop.so -> libboost_stacktrace_noop.so.1.77.0 +-rwxr-xr-x. 1 root root 16376 May 5 08:32 libboost_stacktrace_noop.so.1.77.0 +-rw-r--r--. 1 root root 1436 May 5 08:33 libboost_system.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_system.so -> libboost_system.so.1.77.0 +-rwxr-xr-x. 1 root root 15816 May 5 08:32 libboost_system.so.1.77.0 +-rw-r--r--. 1 root root 2331082 May 5 08:33 libboost_test_exec_monitor.a +-rw-r--r--. 1 root root 322240 May 5 08:33 libboost_thread.a +lrwxrwxrwx. 1 root root 25 May 5 08:34 libboost_thread.so -> libboost_thread.so.1.77.0 +-rwxr-xr-x. 1 root root 260920 May 5 08:34 libboost_thread.so.1.77.0 +-rw-r--r--. 1 root root 53892 May 5 08:34 libboost_timer.a +lrwxrwxrwx. 1 root root 24 May 5 08:33 libboost_timer.so -> libboost_timer.so.1.77.0 +-rwxr-xr-x. 1 root root 45472 May 5 08:33 libboost_timer.so.1.77.0 +-rw-r--r--. 1 root root 123412 May 5 08:34 libboost_type_erasure.a +lrwxrwxrwx. 1 root root 31 May 5 08:33 libboost_type_erasure.so -> libboost_type_erasure.so.1.77.0 +-rwxr-xr-x. 1 root root 76952 May 5 08:33 libboost_type_erasure.so.1.77.0 +-rw-r--r--. 1 root root 2312932 May 5 08:34 libboost_unit_test_framework.a +lrwxrwxrwx. 1 root root 38 May 5 08:33 libboost_unit_test_framework.so -> libboost_unit_test_framework.so.1.77.0 +-rwxr-xr-x. 1 root root 1028120 May 5 08:33 libboost_unit_test_framework.so.1.77.0 +-rw-r--r--. 1 root root 4746706 May 5 08:34 libboost_wave.a +lrwxrwxrwx. 1 root root 23 May 5 08:33 libboost_wave.so -> libboost_wave.so.1.77.0 +-rwxr-xr-x. 1 root root 1599392 May 5 08:33 libboost_wave.so.1.77.0 +-rw-r--r--. 1 root root 779892 May 5 08:34 libboost_wserialization.a +lrwxrwxrwx. 1 root root 33 May 5 08:33 libboost_wserialization.so -> libboost_wserialization.so.1.77.0 +-rwxr-xr-x. 1 root root 320040 May 5 08:33 libboost_wserialization.so.1.77.0 +``` + +#### 6. Install gtest + +```bash +git clone https://github.com/google/googletest.git -b release-1.12.0 +cd googletest +mkdir build +cd build +cmake .. -DBUILD_GMOCK=OFF +make +make install +``` + +Install in `/usr/local/` by default. + +```bash +ls /usr/local/include/ +...... gtest +ls /usr/local/lib/ # 32-bit os +ls /usr/local/lib64/ # 64-bit os +...... cmake libgtest.a libgtest_main.a +``` + +### Step 4. Compile StoneDB + +Currently, StoneDB has three branches: StoneDB-5.6 (for MySQL 5.6)、 StoneDB-5.7 (for MySQL 5.7) and StoneDB-8.0 (for MySQL 8.0). The link provided in this topic is to the source code package of StoneDB-8.0. In the following example, the source code package is saved to the root directory. + +```bash +cd / +git clone -b stonedb-8.0-dev https://github.com/stoneatom/stonedb.git +``` + +Before compilation, modify the compilation script as follows: + +:::info +You cna change the installation directory of StoneDB based on your actual conditions. In this example, `/stonedb/`is used. Remember to change the installation directories of marisa, rocksdb, and boost based on your actual conditions. +::: + +```bash +cd stonedb +mkdir build +cd build +mkdir install8 mysql8 +cd mysql8 +cmake ../../ \ +-DCMAKE_BUILD_TYPE=Debug \ +-DCMAKE_INSTALL_PREFIX=/stonedb/build/install8 \ +-DMYSQL_DATADIR=/stonedb/build/install8/data \ +-DSYSCONFDIR=/stonedb/build/install8 \ +-DMYSQL_UNIX_ADDR=/stonedb/build/install8/tmp/mysql.sock \ +-DWITH_BOOST=/usr/local/stonedb-boost177 \ +-DWITH_MARISA=/usr/local/stonedb-marisa \ +-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb \ +-DDOWNLOAD_BOOST=0 +make -j`nproc` +make install -j`nproc` +``` + +### Step 5. Start StoneDB + +You need to manually create directories, and then initialize and start StoneDB. You also need to configure parameters in file my.cnf, including the installation directories and port. + +```bash +cd ../install8 + +### Create directories. +mkdir data binlog log tmp redolog undolog + +### Configure parameters in my.cnf. +cp ../../scripts/my.cnf.sample my.cnf +sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf + +### Initialize StoneDB. +./bin/mysqld --defaults-file=./my.cnf --initialize-insecure + +### Start StoneDB. +./bin/mysqld --user=root & + +### Stop StoneDB +./bin/mysqladmin -uroot shutdown +``` + +### Step 6. Login to StoneDB + +```bash +./bin/mysql -uroot +### set the password of user root to stonedb123 +mysql> alter user 'root'@'localhost' identified by 'stonedb123'; +Query OK, 0 rows affected +### allow remote access +mysql> update user set host='%' where user='root'; +``` + diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/_category_.json b/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/_category_.json new file mode 100644 index 000000000..355c6e68a --- /dev/null +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/_category_.json @@ -0,0 +1,5 @@ +{ + "position": 5.16, + "label": "Compile StoneDB in Docker", + "collapsible": true +} \ No newline at end of file diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-docker.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-56-57.md similarity index 70% rename from Docs/04-developer-guide/00-compiling-methods/compile-using-docker.md rename to Docs/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-56-57.md index bab1768b3..45dbd5c66 100644 --- a/Docs/04-developer-guide/00-compiling-methods/compile-using-docker.md +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-56-57.md @@ -1,9 +1,9 @@ --- -id: compile-using-docker -sidebar_position: 5.15 +id: compile-using-docker-for-56-57 +sidebar_position: 5.161 --- -# Compile StoneDB in a Docker Container +# Compile StoneDB 5.7 in a Docker Container ## Introduction Compiling StoneDB on a physical server requires installation of third-party repositories, which is complicated. In addition, if the OS in your environment is Fedora or Ubuntu, you also need to install many dependencies. We recommend that you compile StoneDB in a Docker container. After StoneDB is compiled, you can directly run StoneDB in the container or copy the compilation files to your environment. ## Prerequisites @@ -159,72 +159,80 @@ After the `make` commands are successful, you can choose either to compress the ### Compress compilation files to a TAR file ```bash # Compress the 'home' folder to a TAR file and mount the TAR file to a directory outside the container. -[root@06f1f385d3b3 build]# tar -zcPvf /home/stonedb56.tar.gz /stonedb56/ +[root@06f1f385d3b3 build]# tar -zcPvf /home/stonedb57.tar.gz /stonedb57/ ``` ### Directly use StoneDB in the container -You can refer to [Quick Deployment](.../../../../02-getting-started/quick-deployment/quick-deployment-56.md) or the following code to deploy and use StoneDB in the container. -```bash -[root@06f1f385d3b3 build]# cd /stonedb56/install/ - -[root@06f1f385d3b3 install]# groupadd mysql - -[root@06f1f385d3b3 install]# useradd -g mysql mysql - -[root@06f1f385d3b3 install]# ll -total 180 --rw-r--r--. 1 root root 17987 Jun 8 03:41 COPYING --rw-r--r--. 1 root root 102986 Jun 8 03:41 INSTALL-BINARY --rw-r--r--. 1 root root 2615 Jun 8 03:41 README -drwxr-xr-x. 2 root root 4096 Jun 8 06:16 bin -drwxr-xr-x. 3 root root 18 Jun 8 06:16 data -drwxr-xr-x. 2 root root 55 Jun 8 06:16 docs -drwxr-xr-x. 3 root root 4096 Jun 8 06:16 include --rwxr-xr-x. 1 root root 267 Jun 8 03:41 install.sh -drwxr-xr-x. 3 root root 272 Jun 8 06:16 lib -drwxr-xr-x. 4 root root 30 Jun 8 06:16 man -drwxr-xr-x. 10 root root 4096 Jun 8 06:16 mysql-test --rwxr-xr-x. 1 root root 12516 Jun 8 03:41 mysql_server --rwxr-xr-x. 1 root root 764 Jun 8 03:41 reinstall.sh -drwxr-xr-x. 2 root root 57 Jun 8 06:16 scripts -drwxr-xr-x. 28 root root 4096 Jun 8 06:16 share -drwxr-xr-x. 4 root root 4096 Jun 8 06:16 sql-bench --rw-r--r--. 1 root root 5526 Jun 8 03:41 stonedb.cnf -drwxr-xr-x. 2 root root 136 Jun 8 06:16 support-files -[root@06f1f385d3b3 install]# ./reinstall.sh - -... - -# If the following information is returned, StoneDB is started. -+ log_success_msg -+ /etc/redhat-lsb/lsb_log_message success -/etc/redhat-lsb/lsb_log_message: line 3: /etc/init.d/functions: No such file or directory -/etc/redhat-lsb/lsb_log_message: line 11: success: command not found - -+ return 0 -+ return_value=0 -+ test -w /var/lock/subsys -+ touch /var/lock/subsys/mysql -+ exit 0 - - -# Reset the password of local user 'root'. -[root@06f1f385d3b3 install]# /stonedb56/install/bin/mysqladmin flush-privileges -u root password "*******" -Warning: Using a password on the command line interface can be insecure. -# Create a username and password for remote connection. -[root@06f1f385d3b3 install]# /stonedb56/install/bin/mysql -uroot -p******* -Warning: Using a password on the command line interface can be insecure. -Welcome to the MySQL monitor. Commands end with ; or \g. -Your MySQL connection id is 5 -Server version: 5.6.24-StoneDB-log build- +You can refer to [Quick Deployment](.../../../../02-getting-started/quick-deployment/quick-deployment-57.md) or the following code to deploy and use StoneDB in the container. +### 1. Create an account +```shell +groupadd mysql +useradd -g mysql mysql + +# Here are the optional execution statements +passwd mysql +``` +### 2. Manually install StoneDB +You need to manually create directories, configure the parameter file, and then initialize and start StoneDB. +```shell +### Create directories. +mkdir -p /stonedb57/install/data +mkdir -p /stonedb57/install/binlog +mkdir -p /stonedb57/install/log +mkdir -p /stonedb57/install/tmp +mkdir -p /stonedb57/install/redolog +mkdir -p /stonedb57/install/undolog +chown -R mysql:mysql /stonedb57 + +### Configure my.cnf. +mv my.cnf my.cnf.bak +vim /stonedb57/install/my.cnf +[mysqld] +port = 3306 +socket = /stonedb57/install/tmp/mysql.sock +basedir = /stonedb57/install +datadir = /stonedb57/install/data +pid_file = /stonedb57/install/data/mysqld.pid +log_error = /stonedb57/install/log/mysqld.log +innodb_log_group_home_dir = /stonedb57/install/redolog/ +innodb_undo_directory = /stonedb57/install/undolog/ + +chown -R mysql:mysql /stonedb57/install/my.cnf + +### Initialize StoneDB. +/stonedb57/install/bin/mysqld --defaults-file=/stonedb57/install/my.cnf --initialize --user=mysql + +### Start StoneDB. +/stonedb57/install/bin/mysqld_safe --defaults-file=/stonedb57/install/my.cnf --user=mysql & +``` +### 3. Automatically install StoneDB +The process of executing the **reinstall.sh** script is to initialize and start the StoneDB. +```shell +cd /stonedb57/install +./reinstall.sh +``` +:::info +Differences between **reinstall.sh** and **install.sh**: -Copyright (c) 2000, 2022 StoneAtom Group Holding Limited -Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. +- **reinstall.sh** is the script for automatic installation. When the script is being executed, directories are created, and StoneDB is initialized and started. Therefore, do not execute the script unless for the initial startup of StoneDB. Otherwise, all directories will be deleted and StoneDB will be initialized again. +- **install.sh** is the script for manual installation. You can specify the installation directories based on your needs and then execute the script. Same as reinstall.sh, when the script is being executed, directories are created, and StoneDB is initialized and started. Therefore, do not execute the script unless for the initial startup. Otherwise, all directories will be deleted and StoneDB will be initialized again. + ::: -mysql> grant all ON *.* to root@'%' identified by '********'; -Query OK, 0 rows affected (0.00 sec) +### 4. Log in to StoneDB +```shell +cat /stonedb57/install/log/mysqld.log |grep password +[Note] A temporary password is generated for root@localhost: ceMuEuj6l4+! -mysql> flush privileges; -Query OK, 0 rows affected (0.00 sec) +/stonedb57/install/bin/mysql -uroot -p -S /stonedb57/install/tmp/mysql.sock +mysql: [Warning] Using a password on the command line interface can be insecure. +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 2 +Server version: 5.7.36-StoneDB-debug-log build- -``` -After you start StoneDB in the container, you can log in to and use StoneDB or run the `docker run -p ` command to connect to StoneDB. +Copyright (c) 2021, 2022 StoneAtom Group Holding Limited +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. + +mysql> alter user 'root'@'localhost' identified by 'stonedb123'; +# Allow root user to log in remotely +mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'stonedb123' WITH GRANT OPTION; +mysql> FLUSH PRIVILEGES; +``` \ No newline at end of file diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md new file mode 100644 index 000000000..7b9bd2f4e --- /dev/null +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md @@ -0,0 +1,83 @@ +--- +id: compile-using-docker-for-80 +sidebar_position: 5.162 +--- + +# Compile StoneDB 8.0 in a Docker Container +## Introduction +Compiling StoneDB on a physical server requires installation of third-party repositories, which is complicated. In addition, if the OS in your environment is Fedora or Ubuntu, you also need to install many dependencies. We recommend that you compile StoneDB in a Docker container. After StoneDB is compiled, you can directly run StoneDB in the container or copy the compilation files to your environment. + +## Prerequisites +Docker has been installed. For information about how to install Docker, visit [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/). + +## Procedure +The url of our image:[stoneatom/stonedb80_buildenv](https://hub.docker.com/r/stoneatom/stonedb80_buildenv) + +### Pull image from dockerhub +```bash +$ docker pull stoneatom/stonedb80_buildenv +# show all images +$ docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +stoneatom/stonedb80_buildenv latest cc644347ffed 7 months ago 771MB +``` + +### Launch a container & Get into it +```bash +# docker run parameter description +# -v Directory mounting. Specify the directory on the host first and then the directory in the container. +# -p Port mapping. Specify the port on the host first and then the port in the container.It can allow connection +# from outside the container. +$ docker run -v /home/src/:/home/ -p 23306:3306 -it stoneatom/stonedb80_buildenv /bin/bash +``` +### Create an account +```bash +groupadd mysql +useradd -g mysql mysql +passwd mysql +``` +### Download source code & Compile and Install +```bash +root@71a1384e5ee3:/home# git clone -b stonedb-8.0-dev https://github.com/stoneatom/stonedb.git + +root@fb0bf0c54de0:/home# cd stonedb +root@fb0bf0c54de0:/home/stonedb# mkdir build +root@fb0bf0c54de0:/home/stonedb# cd build +# The intall directory here is /stonedb8/install,you can change it by yourself +root@fb0bf0c54de0:/home/stonedb/build# cmake .. \ +-DCMAKE_BUILD_TYPE=Release \ +-DCMAKE_INSTALL_PREFIX=/stonedb8/install \ +-DMYSQL_DATADIR=/stonedb8/install/data \ +-DSYSCONFDIR=/stonedb8/install \ +-DMYSQL_UNIX_ADDR=/stonedb8/install/tmp/mysql.sock \ +-DWITH_BOOST=/usr/local/stonedb-boost \ +-DWITH_MARISA=/usr/local/stonedb-marisa \ +-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb + +root@fb0bf0c54de0:/home/stonedb/build# make -j `nproc` && make install -j`nproc` +``` + +### Initialize & Start StoneDB +```bash +root@fb0bf0c54de0:/home/stonedb/build# cd /stonedb8/install +# Create directories +root@fb0bf0c54de0:/stonedb8/install# mkdir data binlog log tmp redolog undolog +# Configure parameters in my.cnf +root@fb0bf0c54de0:/stonedb8/install# cp /home/stonedb/scripts/my.cnf.sample my.cnf +root@fb0bf0c54de0:/stonedb8/install# sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf +# Initialize StoneDB. +root@fb0bf0c54de0:/stonedb8/install# chown -R mysql:mysql /stonedb8/install +root@fb0bf0c54de0:/stonedb8/install# ./bin/mysqld --defaults-file=./my.cnf --initialize-insecure --user=mysql +# Start StoneDB +root@fb0bf0c54de0:/stonedb8/install# ./bin/mysqld --user=mysql & +``` + +### Login StoneDB +```bash +root@fb0bf0c54de0:/stonedb8/install# ./bin/mysql -uroot +# Set the password of user root to stonedb123 +mysql> alter user 'root'@'localhost' identified by 'stonedb123'; +# Allow remote access +mysql> use mysql; +mysql> update user set host='%' where user='root'; +``` \ No newline at end of file diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md index f07c4cc80..ed5edf338 100644 --- a/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md @@ -50,7 +50,6 @@ sudo apt install -y libaio-dev sudo apt install -y libncurses5-dev sudo apt install -y libreadline-dev sudo apt install -y libpam0g-dev -sudo apt install -y zlib1g-dev sudo apt install -y libicu-dev sudo apt install -y libboost-dev sudo apt install -y libgflags-dev diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md index f5d099168..ea1139da2 100644 --- a/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md @@ -51,7 +51,6 @@ sudo apt install -y libaio-dev sudo apt install -y libncurses5-dev sudo apt install -y libreadline-dev sudo apt install -y libpam0g-dev -sudo apt install -y zlib1g-dev sudo apt install -y libicu-dev sudo apt install -y libboost-dev sudo apt install -y libgflags-dev diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/_category_.json b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/_category_.json new file mode 100644 index 000000000..1becabb50 --- /dev/null +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/_category_.json @@ -0,0 +1,5 @@ +{ + "position": 5.15, + "label": "Compile StoneDB 8.0 on Ubuntu22.04", + "collapsible": true +} \ No newline at end of file diff --git a/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md new file mode 100644 index 000000000..eb90eb299 --- /dev/null +++ b/Docs/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md @@ -0,0 +1,335 @@ +--- +id: compile-using-ubuntu22.04-for-80 +sidebar_position: 5.151 +--- + +# Compile StoneDB for MySQL8.0 on Ubuntu 22.04 + +This topic describes how to compile StoneDB for MySQL8.0 on Ubuntu 22.04. + +## Precautions + +Ensure that the tools and third-party libraries used in your environment meet the following version requirements: +* GCC 9.4.0 +* Make 3.82 or later +* CMake 3.7.2 or later +* marisa 0.77 +* RocksDB 6.12.6 +* Boost 1.77 + +## Procedure +:::info +When executing following commands, you may run into peimission issues, so using 'sudo' is a good idea. +::: +### Step 1. Install the dependencies + +```bash +sudo apt install -y gcc +sudo apt install -y g++ +sudo apt install -y make +sudo apt install -y cmake +sudo apt install -y build-essential +sudo apt install -y autoconf +sudo apt install -y tree +sudo apt install -y bison +sudo apt install -y git +sudo apt install -y libtool +sudo apt install -y numactl +sudo apt install -y python3-dev +sudo apt install -y openssl +sudo apt install -y perl +sudo apt install -y binutils +sudo apt install -y libgmp-dev +sudo apt install -y libmpfr-dev +sudo apt install -y libmpc-dev +sudo apt install -y libisl-dev +sudo apt install -y zlib1g-dev +sudo apt install -y liblz4-dev +sudo apt install -y libbz2-dev +sudo apt install -y libzstd-dev +sudo apt install -y zstd +sudo apt install -y lz4 +sudo apt install -y ncurses-dev +sudo apt install -y libsnappy-dev +sudo apt install -y libedit-dev +sudo apt install -y libaio-dev +sudo apt install -y libncurses5-dev +sudo apt install -y libreadline-dev +sudo apt install -y libpam0g-dev +sudo apt install -y libicu-dev +sudo apt install -y libboost-dev +sudo apt install -y libgflags-dev +sudo apt install -y libjemalloc-dev +sudo apt install -y libssl-dev +sudo apt install -y pkg-config +``` +:::info +libssl-dev may cannot install use apt, you can install it use aptitude. +```bash +sudo apt install aptitude +sudo aptitude install libssl-dev +... +# type n y y +``` +::: + +### Step 2. Install third-party dependencies +StoneDB is dependent on marisa, RocksDB, and Boost. You are advised to specify paths for saving these libraries when you install them, instead of using the default paths. +#### 1. Install cmake +Check your CMake version first. If your cmake version < 3.72, install cmake +```bash +wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz +tar -zxvf cmake-3.7.2.tar.gz +cd cmake-3.7.2 +./bootstrap && make && make install +/usr/local/bin/cmake --version +apt remove cmake -y +ln -s /usr/local/bin/cmake /usr/bin/ +cmake --version +``` + +:::info +If your gcc version too high, it may cause the compilation to fail. You can add `#include ` in the beginning of `cmake-3.72/Source/cmServerProtocal.cxx` to solve it. +```c++ +#include +#include +#include +#include +``` +::: + +#### 2. Install make +If your make version < 3.82, install make + +```bash +wget http://mirrors.ustc.edu.cn/gnu/make/make-3.82.tar.gz +tar -zxvf make-3.82.tar.gz +cd make-3.82 +./configure --prefix=/usr/local/make +make && make install +rm -rf /usr/local/bin/make +ln -s /usr/local/make/bin/make /usr/local/bin/make +make --version +``` + +#### 3. Install marisa + +```bash +git clone https://github.com/s-yata/marisa-trie.git +cd marisa-trie +autoreconf -i +./configure --enable-native-code --prefix=/usr/local/stonedb-marisa +sudo make && make install +``` + +The installation directory of marisa in the example is `/usr/local/stonedb-marisa`. You can change it based on your actual conditions. In this step, the following directories and files are generated in `/usr/local/stonedb-marisa/lib`. + +```bash +root@htap-dev-64-2:/usr/local/stonedb-marisa/lib$ ls -l +total 4136 +-rw-r--r-- 1 root root 2947618 Mar 20 16:25 libmarisa.a +-rwxr-xr-x 1 root root 967 Mar 20 16:25 libmarisa.la +lrwxrwxrwx 1 root root 18 Mar 20 16:25 libmarisa.so -> libmarisa.so.0.0.0 +lrwxrwxrwx 1 root root 18 Mar 20 16:25 libmarisa.so.0 -> libmarisa.so.0.0.0 +-rwxr-xr-x 1 root root 1273936 Mar 20 16:25 libmarisa.so.0.0.0 +drwxrwxr-x 2 root root 4096 Mar 20 16:25 pkgconfig +``` + +#### 4. Install RocksDB + +```bash +wget https://github.com/facebook/rocksdb/archive/refs/tags/v6.12.6.tar.gz +tar -zxvf v6.12.6.tar.gz +cd rocksdb-6.12.6 + +sudo cmake ./ \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local/stonedb-gcc-rocksdb \ + -DCMAKE_INSTALL_LIBDIR=/usr/local/stonedb-gcc-rocksdb \ + -DWITH_JEMALLOC=ON \ + -DWITH_SNAPPY=ON \ + -DWITH_LZ4=ON \ + -DWITH_ZLIB=ON \ + -DWITH_ZSTD=ON \ + -DUSE_RTTI=ON \ + -DROCKSDB_BUILD_SHARED=ON \ + -DWITH_GFLAGS=OFF \ + -DWITH_TOOLS=OFF \ + -DWITH_BENCHMARK_TOOLS=OFF \ + -DWITH_CORE_TOOLS=OFF + +sudo make -j`nproc` +sudo make install -j`nproc` +``` + +:::info +Your gcc version may too high, modify your CMakeLists.txt row#310-317 like this. +```shell +if(FAIL_ON_WARNINGS) + if(MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") + else() # assume GCC + # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") + endif() +endif() +``` +::: + +The installation directory of RocksDB in the example is `/usr/local/stonedb-gcc-rocksdb`. You can change it based on your actual conditions. In this step, the following directories and files are generated in `/usr/local/stonedb-gcc-rocksdb` + +```bash +root@htap-dev-64-2:/usr/local/stonedb-gcc-rocksdb$ ls -l +total 29352 +drwxr-xr-x 3 root root 4096 Mar 20 17:12 cmake +drwxr-xr-x 3 root root 4096 Mar 20 17:12 include +-rw-r--r-- 1 root root 20555728 Mar 20 17:11 librocksdb.a +lrwxrwxrwx 1 root root 15 Mar 20 17:12 librocksdb.so -> librocksdb.so.6 +lrwxrwxrwx 1 root root 20 Mar 20 17:12 librocksdb.so.6 -> librocksdb.so.6.12.6 +-rw-r--r-- 1 root root 9490272 Mar 20 17:12 librocksdb.so.6.12.6 +``` + +#### 5. Install Boost + +```bash +wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz +tar -zxvf boost_1_77_0.tar.gz +cd boost_1_77_0 +./bootstrap.sh --prefix=/usr/local/stonedb-boost177 +./b2 install --with=all +``` + +The installation directory of Boost in the example is `/usr/local/stonedb-boost`. You can change it based on your actual conditions. In this step, the following directories and files are generated in `/usr/local/stonedb-boost/lib`. + +```bash +root@htap-dev-64-2:/usr/local/stonedb-boost177/lib$ ls -l +total 41612 +drwxrwxr-x 49 root root 4096 Mar 20 18:57 cmake +-rw-rw-r-- 1 root root 14648 Mar 20 18:56 libboost_atomic.a +lrwxrwxrwx 1 root root 25 Mar 20 18:57 libboost_atomic.so -> libboost_atomic.so.1.77.0 +-rwxrwxr-x 1 root root 22248 Mar 20 18:57 libboost_atomic.so.1.77.0 +-rw-rw-r-- 1 root root 181638 Mar 20 18:56 libboost_chrono.a +lrwxrwxrwx 1 root root 25 Mar 20 18:57 libboost_chrono.so -> libboost_chrono.so.1.77.0 +-rwxrwxr-x 1 root root 55000 Mar 20 18:57 libboost_chrono.so.1.77.0 +-rw-rw-r-- 1 root root 166894 Mar 20 18:56 libboost_container.a +lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_container.so -> libboost_container.so.1.77.0 +-rwxrwxr-x 1 root root 111912 Mar 20 18:57 libboost_container.so.1.77.0 +-rw-rw-r-- 1 root root 6874 Mar 20 18:56 libboost_context.a +lrwxrwxrwx 1 root root 26 Mar 20 18:57 libboost_context.so -> libboost_context.so.1.77.0 +-rwxrwxr-x 1 root root 16584 Mar 20 18:57 libboost_context.so.1.77.0 +-rw-rw-r-- 1 root root 275376 Mar 20 18:56 libboost_contract.a +lrwxrwxrwx 1 root root 27 Mar 20 18:57 libboost_contract.so -> libboost_contract.so.1.77.0 +-rwxrwxr-x 1 root root 148672 Mar 20 18:57 libboost_contract.so.1.77.0 +-rw-rw-r-- 1 root root 178370 Mar 20 18:56 libboost_coroutine.a +lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_coroutine.so -> libboost_coroutine.so.1.77.0 +-rwxrwxr-x 1 root root 84440 Mar 20 18:57 libboost_coroutine.so.1.77.0 +-rw-rw-r-- 1 root root 1458 Mar 20 18:56 libboost_date_time.a +lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_date_time.so -> libboost_date_time.so.1.77.0 +-rwxrwxr-x 1 root root 15184 Mar 20 18:57 libboost_date_time.so.1.77.0 +-rw-rw-r-- 1 root root 1654 Mar 20 18:57 libboost_exception.a +-rw-rw-r-- 1 root root 249818 Mar 20 18:56 libboost_fiber.a +lrwxrwxrwx 1 root root 24 Mar 20 18:56 libboost_fiber.so -> libboost_fiber.so.1.77.0 +-rwxrwxr-x 1 root root 107648 Mar 20 18:56 libboost_fiber.so.1.77.0 +-rw-rw-r-- 1 root root 520738 Mar 20 18:56 libboost_filesystem.a +lrwxrwxrwx 1 root root 29 Mar 20 18:56 libboost_filesystem.so -> libboost_filesystem.so.1.77.0 +-rwxrwxr-x 1 root root 178288 Mar 20 18:56 libboost_filesystem.so.1.77.0 +-rw-rw-r-- 1 root root 1015048 Mar 20 18:57 libboost_graph.a +lrwxrwxrwx 1 root root 24 Mar 20 18:56 libboost_graph.so -> libboost_graph.so.1.77.0 +-rwxrwxr-x 1 root root 525440 Mar 20 18:56 libboost_graph.so.1.77.0 +-rw-rw-r-- 1 root root 250402 Mar 20 18:56 libboost_iostreams.a +lrwxrwxrwx 1 root root 28 Mar 20 18:56 libboost_iostreams.so -> libboost_iostreams.so.1.77.0 +-rwxrwxr-x 1 root root 129440 Mar 20 18:56 libboost_iostreams.so.1.77.0 +-rw-rw-r-- 1 root root 478396 Mar 20 18:57 libboost_json.a +lrwxrwxrwx 1 root root 23 Mar 20 18:56 libboost_json.so -> libboost_json.so.1.77.0 +-rwxrwxr-x 1 root root 329512 Mar 20 18:56 libboost_json.so.1.77.0 +-rw-rw-r-- 1 root root 3158276 Mar 20 18:57 libboost_locale.a +lrwxrwxrwx 1 root root 25 Mar 20 18:56 libboost_locale.so -> libboost_locale.so.1.77.0 +-rwxrwxr-x 1 root root 1177200 Mar 20 18:56 libboost_locale.so.1.77.0 +``` + +#### 6.Install Gtest + +```bash +sudo git clone https://github.com/google/googletest.git -b release-1.12.0 +cd googletest +sudo mkdir build +cd build +sudo cmake .. -DBUILD_GMOCK=OFF +sudo make +sudo make install +``` + +Install in `/usr/local/` by default. + +```bash +ls /usr/local/include/ +...... gtest +ls /usr/local/lib/ # 32-bit os +ls /usr/local/lib64/ # 64-bit os +...... cmake libgtest.a libgtest_main.a +``` + +### Step 3. Compile StoneDB + +Currently, StoneDB has three branches: StoneDB-5.6 (for MySQL 5.6)、 StoneDB-5.7 (for MySQL 5.7) and StoneDB-8.0 (for MySQL 8.0). The link provided in this topic is to the source code package of StoneDB-8.0. In the following example, the source code package is saved to the root directory. + +```bash +cd / +git clone https://github.com/stoneatom/stonedb.git +``` + +Before compilation, modify the compilation script as follows: +:::info +You cna change the installation directory of StoneDB based on your actual conditions. In this example, `/stonedb/`is used. Remember to change the installation directories of marisa, RocksDB, and Boost based on your actual conditions. +::: +```bash +cd stonedb +git checkout -b 8.0 origin/stonedb-8.0-dev +mkdir build +cd build +mkdir install8 mysql8 +cd mysql8 +cmake ../../ \ +-DCMAKE_BUILD_TYPE=Debug \ +-DCMAKE_INSTALL_PREFIX=/stonedb/build/install8 \ +-DMYSQL_DATADIR=/stonedb/build/install8/data \ +-DSYSCONFDIR=/stonedb/build/install8 \ +-DMYSQL_UNIX_ADDR=/stonedb/build/install8/tmp/mysql.sock \ +-DWITH_BOOST=/usr/local/stonedb-boost177 \ +-DWITH_MARISA=/usr/local/stonedb-marisa \ +-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb \ +-DDOWNLOAD_BOOST=0 +make -j`nproc` +make install -j`nproc` +``` + +### Step 4. Start StoneDB + +You need to manually create directories, and then initialize and start StoneDB. You also need to configure parameters in file my.cnf, including the installation directories and port. + +```bash +cd ../install8 +### Create directories. +sudo mkdir data binlog log tmp redolog undolog + +### Configure parameters in my.cnf. +sudo cp ../../scripts/my.cnf.sample my.cnf +sudo sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf + +### Initialize StoneDB. +sudo ./bin/mysqld --defaults-file=./my.cnf --initialize-insecure + +### Start StoneDB. +sudo ./bin/mysqld --user=root & +``` + +### Step 5.Login to StoneDB + +```bash +./bin/mysql -uroot +### set the password of user root to stonedb123 +mysql> alter user 'root'@'localhost' identified by 'stonedb123'; +Query OK, 0 rows affected +### allow remote access +mysql> use mysql; +mysql> update user set host='%' where user='root'; +``` diff --git a/Docs/download.md b/Docs/download.md index c1d0cb3b7..aea18c50a 100644 --- a/Docs/download.md +++ b/Docs/download.md @@ -15,5 +15,6 @@ Click here to download the latest installation package of StoneDB. | [5.7-v1.0.0](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.0-GA) | 2022-8-31 | [Download](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.0-GA/stonedb-ce-5.7-v1.0.0.el7.x86_64.tar.gz) | e23593b80b50e0118f59627216613a2f | \ | | [5.7-v1.0.1](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.1-GA) | 2022-10-24 | [Download](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.1-GA/stonedb-ce-5.7-v1.0.1.el7.x86_64.tar.gz) | 73911e56ac89af5f568dd7e9de9e9af5 | You can [download the DEB package](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.1-GA/stonedb-ce-5.7-v1.0.1.debain.x86_64.tar.gz);If you run into a lack of dependencies when compiling the installation, you can go to Github and [download the related dependency package](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.1-GA/stonedb-lib.tar.gz) | | [5.7-v1.0.2](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.2-GA) | 2023-01-15 | [Download](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/stonedb-ce-5.7-v1.0.2.el7.x86_64.tar.gz) | be54d4ebb74517bf09fbfe1806f6e2ab | 1.You can [download the DEB package](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/stonedb-ce-5.7_v1.0.2.ubuntu.amd64.deb);2.You can [download the RPM package](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/stonedb-ce-5.7-v1.0.2.el7.x86_64.rpm) and experience StoneDB installation in two minutes;3.You can [download the Shell script](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/shell.for.deploy.stonedb.as.replic.tar.gz)| +| [5.7-v1.0.3](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.3-GA) | 2023-03-20 | [Download](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz) | 679491c2a154b2b00de534c47dea507b | 1.You can [download the DEB package](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.ubuntu.amd64.deb);2.You can [download the RPM package](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.rpm) | | Next Version | Coming soon~ | Coming soon~ | Coming soon~ | \ | diff --git a/Docs/release-notes.md b/Docs/release-notes.md index aaaecc98d..75dc9099b 100644 --- a/Docs/release-notes.md +++ b/Docs/release-notes.md @@ -6,7 +6,7 @@ sidebar_position: 11.0 # Release Notes ## StoneDB-5.7-V1.0.3 -Release date: March 15,2023 +Release date: March 20,2023 - Reconstructed the binlog mechanism to filter out DDL statements that are not supported by the Tianmu storage engine. - Added an argument named **NO_KEY_ERROR** for SQL mode to directly skip DDL statements that are not supported by the SQL layer, instead of reporting errors. diff --git a/Docs/stonedb_wecaht_group.png b/Docs/stonedb_wecaht_group.png index 2d0384d964716b20dd45b97d0842dbff0a900956..fbd96288883afa284338f702dfb3401295a45fca 100644 GIT binary patch literal 76378 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 aJHG}0&j&p5llu?{kTg|wRqB;qhy5S1x>uY4 literal 485143 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 z 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�CoFSD-fEeg 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
u{8Ngv9XTg`wR` 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

!U+Lajq?a4;71+FB)HzMt%l;?beO3F??T7a=B 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%0AustK7%P1%fl*@4wp~e*9zjazFJ1u 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.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "@algolia/autocomplete-core@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz#025538b8a9564a9f3dd5bcf8a236d6951c76c7d1" - integrity sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg== - dependencies: - "@algolia/autocomplete-shared" "1.7.1" - - "@algolia/autocomplete-preset-algolia@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz#7dadc5607097766478014ae2e9e1c9c4b3f957c8" - integrity sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg== - dependencies: - "@algolia/autocomplete-shared" "1.7.1" - - "@algolia/autocomplete-shared@1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74" - integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg== - - "@algolia/cache-browser-local-storage@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936" - integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA== - dependencies: - "@algolia/cache-common" "4.14.2" - - "@algolia/cache-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598" - integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg== - - "@algolia/cache-in-memory@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24" - integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ== - dependencies: - "@algolia/cache-common" "4.14.2" - - "@algolia/client-account@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16" - integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w== - dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/client-search" "4.14.2" - "@algolia/transporter" "4.14.2" - - "@algolia/client-analytics@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb" - integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ== - dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/client-search" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" - - "@algolia/client-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300" - integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q== - dependencies: - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" - - "@algolia/client-personalization@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec" - integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw== - dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" - - "@algolia/client-search@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92" - integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw== - dependencies: - "@algolia/client-common" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/transporter" "4.14.2" - - "@algolia/events@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" - integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== - - "@algolia/logger-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee" - integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA== - - "@algolia/logger-console@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b" - integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g== - dependencies: - "@algolia/logger-common" "4.14.2" - - "@algolia/requester-browser-xhr@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2" - integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw== - dependencies: - "@algolia/requester-common" "4.14.2" - - "@algolia/requester-common@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1" - integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg== - - "@algolia/requester-node-http@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115" - integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg== - dependencies: - "@algolia/requester-common" "4.14.2" - - "@algolia/transporter@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d" - integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ== - dependencies: - "@algolia/cache-common" "4.14.2" - "@algolia/logger-common" "4.14.2" - "@algolia/requester-common" "4.14.2" - - "@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - - "@ant-design/colors@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" - integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ== - dependencies: - "@ctrl/tinycolor" "^3.4.0" - - "@ant-design/icons-svg@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" - integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw== - - "@ant-design/icons@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.7.0.tgz#8c3cbe0a556ba92af5dc7d1e70c0b25b5179af0f" - integrity sha512-aoB4Z7JA431rt6d4u+8xcNPPCrdufSRMUOpxa1ab6mz1JCQZOEVolj2WVs/tDFmN62zzK30mNelEsprLYsSF3g== - dependencies: - "@ant-design/colors" "^6.0.0" - "@ant-design/icons-svg" "^4.2.1" - "@babel/runtime" "^7.11.2" - classnames "^2.2.6" - rc-util "^5.9.4" - - "@ant-design/react-slick@~0.29.1": - version "0.29.2" - resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-0.29.2.tgz#53e6a7920ea3562eebb304c15a7fc2d7e619d29c" - integrity sha512-kgjtKmkGHa19FW21lHnAfyyH9AAoh35pBdcJ53rHmQ3O+cfFHGHnUbj/HFrRNJ5vIts09FKJVAD8RpaC+RaWfA== - dependencies: - "@babel/runtime" "^7.10.4" - classnames "^2.2.5" - json2mq "^0.2.0" - lodash "^4.17.21" - resize-observer-polyfill "^1.5.1" - - "@apideck/better-ajv-errors@^0.3.1": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" - integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== - dependencies: - json-schema "^0.4.0" - jsonpointer "^5.0.0" - leven "^3.1.0" - - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.8.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - - "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8", "@babel/compat-data@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.1.tgz#72d647b4ff6a4f82878d184613353af1dd0290f9" - integrity sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg== - - "@babel/core@7.12.9": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - - "@babel/core@^7.11.1", "@babel/core@^7.18.5", "@babel/core@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.1.tgz#c8fa615c5e88e272564ace3d42fbc8b17bfeb22b" - integrity sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-compilation-targets" "^7.19.1" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helpers" "^7.19.0" - "@babel/parser" "^7.19.1" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.1" - "@babel/types" "^7.19.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - - "@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.0.tgz#785596c06425e59334df2ccee63ab166b738419a" - integrity sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg== - dependencies: - "@babel/types" "^7.19.0" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - - "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - - "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" - - "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz#7f630911d83b408b76fe584831c98e5395d7a17c" - integrity sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg== - dependencies: - "@babel/compat-data" "^7.19.1" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - semver "^6.3.0" - - "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" - integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - - "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" - integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" - - "@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - - "@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - - "@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== - dependencies: - "@babel/types" "^7.18.6" - - "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - - "@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - - "@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== - dependencies: - "@babel/types" "^7.18.9" - - "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - - "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" - integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - - "@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== - dependencies: - "@babel/types" "^7.18.6" - - "@babel/helper-plugin-utils@7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - - "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" - integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== - - "@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - - "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" - integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.18.9" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/traverse" "^7.19.1" - "@babel/types" "^7.19.0" - - "@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== - dependencies: - "@babel/types" "^7.18.6" - - "@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== - dependencies: - "@babel/types" "^7.18.9" - - "@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - - "@babel/helper-string-parser@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" - integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== - - "@babel/helper-validator-identifier@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - - "@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== - - "@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== - dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - - "@babel/helpers@^7.12.5", "@babel/helpers@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" - integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== - dependencies: - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" - - "@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - - "@babel/parser@^7.12.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.8", "@babel/parser@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.1.tgz#6f6d6c2e621aad19a92544cc217ed13f1aac5b4c" - integrity sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A== - - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - - "@babel/plugin-proposal-async-generator-functions@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz#34f6f5174b688529342288cd264f80c9ea9fb4a7" - integrity sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - - "@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - - "@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - - "@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - - "@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - - "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - - "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - - "@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - - "@babel/plugin-proposal-object-rest-spread@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" - integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.1" - - "@babel/plugin-proposal-object-rest-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== - dependencies: - "@babel/compat-data" "^7.18.8" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.8" - - "@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - - "@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - - "@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - - "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - - "@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - - "@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - - "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - - "@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - - "@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - - "@babel/plugin-syntax-jsx@7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" - integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - - "@babel/plugin-syntax-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" - integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - - "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - - "@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - - "@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - - "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - - "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - - "@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - - "@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - - "@babel/plugin-syntax-typescript@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" - - "@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-block-scoping@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" - integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-classes@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz#0e61ec257fba409c41372175e7c1e606dc79bb20" - integrity sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.19.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.18.9" - "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" - - "@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-destructuring@^7.18.13": - version "7.18.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz#9e03bc4a94475d62b7f4114938e6c5c33372cbf5" - integrity sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== - dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-modules-amd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" - integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" - - "@babel/plugin-transform-modules-commonjs@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" - integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" - - "@babel/plugin-transform-modules-systemjs@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz#5f20b471284430f02d9c5059d9b9a16d4b085a1f" - integrity sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A== - dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" - - "@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== - dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888" - integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - - "@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" - - "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" - integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-react-constant-elements@^7.17.12": - version "7.18.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz#edf3bec47eb98f14e84fa0af137fcc6aad8e0443" - integrity sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-react-display-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" - integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" - - "@babel/plugin-transform-react-jsx@^7.18.6": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" - integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.19.0" - - "@babel/plugin-transform-react-pure-annotations@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" - integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" - - "@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-runtime@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz#a3df2d7312eea624c7889a2dcd37fd1dfd25b2c6" - integrity sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA== - dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - semver "^6.3.0" - - "@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-spread@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz#dd60b4620c2fec806d60cfaae364ec2188d593b6" - integrity sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" - - "@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-typescript@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.1.tgz#adcf180a041dcbd29257ad31b0c65d4de531ce8d" - integrity sha512-+ILcOU+6mWLlvCwnL920m2Ow3wWx3Wo8n2t5aROQmV55GZt+hOiLvBaa3DNzRjSEHa1aauRs4/YLmkCfFkhhRQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-typescript" "^7.18.6" - - "@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - - "@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - - "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.19.1.tgz#9f04c916f9c0205a48ebe5cc1be7768eb1983f67" - integrity sha512-c8B2c6D16Lp+Nt6HcD+nHl0VbPKVnNPTpszahuxJJnurfMtKeZ80A+qUv48Y7wqvS+dTFuLuaM9oYxyNHbCLWA== - dependencies: - "@babel/compat-data" "^7.19.1" - "@babel/helper-compilation-targets" "^7.19.1" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.19.1" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.18.6" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.9" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.18.6" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.18.6" - "@babel/plugin-transform-async-to-generator" "^7.18.6" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.9" - "@babel/plugin-transform-classes" "^7.19.0" - "@babel/plugin-transform-computed-properties" "^7.18.9" - "@babel/plugin-transform-destructuring" "^7.18.13" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.8" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.18.6" - "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.19.0" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.8" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.18.6" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.19.0" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" - - "@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - - "@babel/preset-react@^7.17.12", "@babel/preset-react@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" - - "@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" - integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-typescript" "^7.18.6" - - "@babel/runtime-corejs3@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz#f0cbbe7edda7c4109cd253bb1dee99aba4594ad9" - integrity sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g== - dependencies: - core-js-pure "^3.25.1" - regenerator-runtime "^0.13.4" - - "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.8.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" - - "@babel/template@^7.12.7", "@babel/template@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" - integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.10" - "@babel/types" "^7.18.10" - - "@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.4.5": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.1.tgz#0fafe100a8c2a603b4718b1d9bf2568d1d193347" - integrity sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.19.0" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.19.1" - "@babel/types" "^7.19.0" - debug "^4.1.0" - globals "^11.1.0" - - "@babel/types@^7.12.7", "@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.4.4": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" - integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== - dependencies: - "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" - - "@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - - "@ctrl/tinycolor@^3.4.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" - integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== - - "@docsearch/css@3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.2.1.tgz#c05d7818b0e43b42f9efa2d82a11c36606b37b27" - integrity sha512-gaP6TxxwQC+K8D6TRx5WULUWKrcbzECOPA2KCVMuI+6C7dNiGUk5yXXzVhc5sld79XKYLnO9DRTI4mjXDYkh+g== - - "@docsearch/react@^3.1.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.2.1.tgz#112ad88db07367fa6fd933d67d58421d8d8289aa" - integrity sha512-EzTQ/y82s14IQC5XVestiK/kFFMe2aagoYFuTAIfIb/e+4FU7kSMKonRtLwsCiLQHmjvNQq+HO+33giJ5YVtaQ== - dependencies: - "@algolia/autocomplete-core" "1.7.1" - "@algolia/autocomplete-preset-algolia" "1.7.1" - "@docsearch/css" "3.2.1" - algoliasearch "^4.0.0" - - "@docusaurus/core@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.1.0.tgz#4aedc306f4c4cd2e0491b641bf78941d4b480ab6" - integrity sha512-/ZJ6xmm+VB9Izbn0/s6h6289cbPy2k4iYFwWDhjiLsVqwa/Y0YBBcXvStfaHccudUC3OfP+26hMk7UCjc50J6Q== - dependencies: - "@babel/core" "^7.18.6" - "@babel/generator" "^7.18.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.18.6" - "@babel/preset-env" "^7.18.6" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.18.6" - "@babel/runtime" "^7.18.6" - "@babel/runtime-corejs3" "^7.18.6" - "@babel/traverse" "^7.18.8" - "@docusaurus/cssnano-preset" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@slorber/static-site-generator-webpack-plugin" "^4.0.7" - "@svgr/webpack" "^6.2.1" - autoprefixer "^10.4.7" - babel-loader "^8.2.5" - babel-plugin-dynamic-import-node "^2.3.3" - boxen "^6.2.1" - chalk "^4.1.2" - chokidar "^3.5.3" - clean-css "^5.3.0" - cli-table3 "^0.6.2" - combine-promises "^1.1.0" - commander "^5.1.0" - copy-webpack-plugin "^11.0.0" - core-js "^3.23.3" - css-loader "^6.7.1" - css-minimizer-webpack-plugin "^4.0.0" - cssnano "^5.1.12" - del "^6.1.1" - detect-port "^1.3.0" - escape-html "^1.0.3" - eta "^1.12.3" - file-loader "^6.2.0" - fs-extra "^10.1.0" - html-minifier-terser "^6.1.0" - html-tags "^3.2.0" - html-webpack-plugin "^5.5.0" - import-fresh "^3.3.0" - leven "^3.1.0" - lodash "^4.17.21" - mini-css-extract-plugin "^2.6.1" - postcss "^8.4.14" - postcss-loader "^7.0.0" - prompts "^2.4.2" - react-dev-utils "^12.0.1" - react-helmet-async "^1.3.0" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" - react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.3.3" - react-router-config "^5.1.1" - react-router-dom "^5.3.3" - rtl-detect "^1.0.4" - semver "^7.3.7" - serve-handler "^6.1.3" - shelljs "^0.8.5" - terser-webpack-plugin "^5.3.3" - tslib "^2.4.0" - update-notifier "^5.1.0" - url-loader "^4.1.1" - wait-on "^6.0.1" - webpack "^5.73.0" - webpack-bundle-analyzer "^4.5.0" - webpack-dev-server "^4.9.3" - webpack-merge "^5.8.0" - webpackbar "^5.0.2" - - "@docusaurus/cssnano-preset@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.1.0.tgz#5b42107769b7cbc61655496090bc262d7788d6ab" - integrity sha512-pRLewcgGhOies6pzsUROfmPStDRdFw+FgV5sMtLr5+4Luv2rty5+b/eSIMMetqUsmg3A9r9bcxHk9bKAKvx3zQ== - dependencies: - cssnano-preset-advanced "^5.3.8" - postcss "^8.4.14" - postcss-sort-media-queries "^4.2.1" - tslib "^2.4.0" - - "@docusaurus/eslint-plugin@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/eslint-plugin/-/eslint-plugin-2.1.0.tgz#c1d6718d82cb3cfa6d757c456bc08802f2f4759d" - integrity sha512-OCMGVORXDEXyPMjY9Qnoyd6THT/2wxtOgkMm3FZf2EHWVJB+EJap0Q2slCNViyvhryb2qpQT5vIIDSP5UAz8bA== - dependencies: - "@typescript-eslint/utils" "^5.30.5" - tslib "^2.4.0" - - "@docusaurus/logger@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.1.0.tgz#86c97e948f578814d3e61fc2b2ad283043cbe87a" - integrity sha512-uuJx2T6hDBg82joFeyobywPjSOIfeq05GfyKGHThVoXuXsu1KAzMDYcjoDxarb9CoHCI/Dor8R2MoL6zII8x1Q== - dependencies: - chalk "^4.1.2" - tslib "^2.4.0" - - "@docusaurus/lqip-loader@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/lqip-loader/-/lqip-loader-2.1.0.tgz#0cde274b59caf8451b5963c92bfa2ea127a4b552" - integrity sha512-4I8Lq+SjF+GvvPGpPh4o8hW66fIoIaY3qUmSRT9anyF9Fa1007JcMqU4LbbDN8/yC6ps3Mfvji46K5WLfQBGgg== - dependencies: - "@docusaurus/logger" "2.1.0" - file-loader "^6.2.0" - lodash "^4.17.21" - sharp "^0.30.7" - tslib "^2.4.0" - - "@docusaurus/mdx-loader@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.1.0.tgz#3fca9576cc73a22f8e7d9941985590b9e47a8526" - integrity sha512-i97hi7hbQjsD3/8OSFhLy7dbKGH8ryjEzOfyhQIn2CFBYOY3ko0vMVEf3IY9nD3Ld7amYzsZ8153RPkcnXA+Lg== - dependencies: - "@babel/parser" "^7.18.8" - "@babel/traverse" "^7.18.8" - "@docusaurus/logger" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@mdx-js/mdx" "^1.6.22" - escape-html "^1.0.3" - file-loader "^6.2.0" - fs-extra "^10.1.0" - image-size "^1.0.1" - mdast-util-to-string "^2.0.0" - remark-emoji "^2.2.0" - stringify-object "^3.3.0" - tslib "^2.4.0" - unified "^9.2.2" - unist-util-visit "^2.0.3" - url-loader "^4.1.1" - webpack "^5.73.0" - - "@docusaurus/module-type-aliases@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.1.0.tgz#322f8fd5b436af2154c0dddfa173435730e66261" - integrity sha512-Z8WZaK5cis3xEtyfOT817u9xgGUauT0PuuVo85ysnFRX8n7qLN1lTPCkC+aCmFm/UcV8h/W5T4NtIsst94UntQ== - dependencies: - "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/types" "2.1.0" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - "@types/react-router-dom" "*" - react-helmet-async "*" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" - - "@docusaurus/plugin-client-redirects@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.1.0.tgz#4141040552faad48aefc5bc8f3827c3c4eba1ab8" - integrity sha512-3PhzwHSyZWqBAFPJuLJE3dZVuKWQEj9ReQP85Z3/2hpnQoVNBgAqc+64FIko0FvvK1iluLeasO7NWGyuATngvw== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - eta "^1.12.3" - fs-extra "^10.1.0" - lodash "^4.17.21" - tslib "^2.4.0" - - "@docusaurus/plugin-content-blog@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.1.0.tgz#32b1a7cd4b0026f4a76fce4edc5cfdd0edb1ec42" - integrity sha512-xEp6jlu92HMNUmyRBEeJ4mCW1s77aAEQO4Keez94cUY/Ap7G/r0Awa6xSLff7HL0Fjg8KK1bEbDy7q9voIavdg== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - cheerio "^1.0.0-rc.12" - feed "^4.2.2" - fs-extra "^10.1.0" - lodash "^4.17.21" - reading-time "^1.5.0" - tslib "^2.4.0" - unist-util-visit "^2.0.3" - utility-types "^3.10.0" - webpack "^5.73.0" - - "@docusaurus/plugin-content-docs@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.1.0.tgz#3fcdf258c13dde27268ce7108a102b74ca4c279b" - integrity sha512-Rup5pqXrXlKGIC4VgwvioIhGWF7E/NNSlxv+JAxRYpik8VKlWsk9ysrdHIlpX+KJUCO9irnY21kQh2814mlp/Q== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/module-type-aliases" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@types/react-router-config" "^5.0.6" - combine-promises "^1.1.0" - fs-extra "^10.1.0" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.4.0" - utility-types "^3.10.0" - webpack "^5.73.0" - - "@docusaurus/plugin-content-pages@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.1.0.tgz#714d24f71d49dbfed888f50c15e975c2154c3ce8" - integrity sha512-SwZdDZRlObHNKXTnFo7W2aF6U5ZqNVI55Nw2GCBryL7oKQSLeI0lsrMlMXdzn+fS7OuBTd3MJBO1T4Zpz0i/+g== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - fs-extra "^10.1.0" - tslib "^2.4.0" - webpack "^5.73.0" - - "@docusaurus/plugin-debug@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.1.0.tgz#b3145affb40e25cf342174638952a5928ddaf7dc" - integrity sha512-8wsDq3OIfiy6440KLlp/qT5uk+WRHQXIXklNHEeZcar+Of0TZxCNe2FBpv+bzb/0qcdP45ia5i5WmR5OjN6DPw== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - fs-extra "^10.1.0" - react-json-view "^1.21.3" - tslib "^2.4.0" - - "@docusaurus/plugin-google-analytics@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.1.0.tgz#c9a7269817b38e43484d38fad9996e39aac4196c" - integrity sha512-4cgeqIly/wcFVbbWP03y1QJJBgH8W+Bv6AVbWnsXNOZa1yB3AO6hf3ZdeQH9x20v9T2pREogVgAH0rSoVnNsgg== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - tslib "^2.4.0" - - "@docusaurus/plugin-google-gtag@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.1.0.tgz#e4f351dcd98b933538d55bb742650a2a36ca9a32" - integrity sha512-/3aDlv2dMoCeiX2e+DTGvvrdTA+v3cKQV3DbmfsF4ENhvc5nKV23nth04Z3Vq0Ci1ui6Sn80TkhGk/tiCMW2AA== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - tslib "^2.4.0" - - "@docusaurus/plugin-ideal-image@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-ideal-image/-/plugin-ideal-image-2.1.0.tgz#a734a88bfcb1a271fc28484b9c6e89d8ed1a426a" - integrity sha512-Yzi4Yg11U5M38FaKkvYsmYl/9ZkdDoI3f69K+CAWEH/S81DdZ3V/SVfjXHkVVlihRejlquuHYJ64P0Sc8GDtjA== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/lqip-loader" "2.1.0" - "@docusaurus/responsive-loader" "^1.7.0" - "@docusaurus/theme-translations" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@endiliey/react-ideal-image" "^0.0.11" - react-waypoint "^10.3.0" - sharp "^0.30.7" - tslib "^2.4.0" - webpack "^5.73.0" - - "@docusaurus/plugin-pwa@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-pwa/-/plugin-pwa-2.1.0.tgz#e6deb53a4c4b10de85c73886a75497a48bedd258" - integrity sha512-SOhEbv9sECaD/c9Ym2Bq6ruK56PAxV9Ftj6Hk2rKFdrASBv3ruri2iCT5YPKMpXqmzWd84GnE2pusMW2s1w2Sw== - dependencies: - "@babel/core" "^7.18.6" - "@babel/preset-env" "^7.18.6" - "@docusaurus/core" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-translations" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - babel-loader "^8.2.5" - clsx "^1.2.1" - core-js "^3.23.3" - terser-webpack-plugin "^5.3.3" - tslib "^2.4.0" - webpack "^5.73.0" - webpack-merge "^5.8.0" - workbox-build "^6.5.3" - workbox-precaching "^6.5.3" - workbox-window "^6.5.3" - - "@docusaurus/plugin-sitemap@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.1.0.tgz#b316bb9a42a1717845e26bd4e2d3071748a54b47" - integrity sha512-2Y6Br8drlrZ/jN9MwMBl0aoi9GAjpfyfMBYpaQZXimbK+e9VjYnujXlvQ4SxtM60ASDgtHIAzfVFBkSR/MwRUw== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - fs-extra "^10.1.0" - sitemap "^7.1.1" - tslib "^2.4.0" - - "@docusaurus/preset-classic@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.1.0.tgz#45b23c8ec10c96ded9ece128fac3a39b10bcbc56" - integrity sha512-NQMnaq974K4BcSMXFSJBQ5itniw6RSyW+VT+6i90kGZzTwiuKZmsp0r9lC6BYAvvVMQUNJQwrETmlu7y2XKW7w== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/plugin-content-blog" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/plugin-content-pages" "2.1.0" - "@docusaurus/plugin-debug" "2.1.0" - "@docusaurus/plugin-google-analytics" "2.1.0" - "@docusaurus/plugin-google-gtag" "2.1.0" - "@docusaurus/plugin-sitemap" "2.1.0" - "@docusaurus/theme-classic" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-search-algolia" "2.1.0" - "@docusaurus/types" "2.1.0" - - "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== - dependencies: - "@types/react" "*" - prop-types "^15.6.2" - - "@docusaurus/responsive-loader@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@docusaurus/responsive-loader/-/responsive-loader-1.7.0.tgz#508df2779e04311aa2a38efb67cf743109afd681" - integrity sha512-N0cWuVqTRXRvkBxeMQcy/OF2l7GN8rmni5EzR3HpwR+iU2ckYPnziceojcxvvxQ5NqZg1QfEW0tycQgHp+e+Nw== - dependencies: - loader-utils "^2.0.0" - - "@docusaurus/theme-classic@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.1.0.tgz#d957a907ea8dd035c1cf911d0fbe91d8f24aef3f" - integrity sha512-xn8ZfNMsf7gaSy9+ClFnUu71o7oKgMo5noYSS1hy3svNifRTkrBp6+MReLDsmIaj3mLf2e7+JCBYKBFbaGzQng== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/module-type-aliases" "2.1.0" - "@docusaurus/plugin-content-blog" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/plugin-content-pages" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-translations" "2.1.0" - "@docusaurus/types" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-common" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@mdx-js/react" "^1.6.22" - clsx "^1.2.1" - copy-text-to-clipboard "^3.0.1" - infima "0.2.0-alpha.42" - lodash "^4.17.21" - nprogress "^0.2.0" - postcss "^8.4.14" - prism-react-renderer "^1.3.5" - prismjs "^1.28.0" - react-router-dom "^5.3.3" - rtlcss "^3.5.0" - tslib "^2.4.0" - utility-types "^3.10.0" - - "@docusaurus/theme-common@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.1.0.tgz#dff4d5d1e29efc06125dc06f7b259f689bb3f24d" - integrity sha512-vT1otpVPbKux90YpZUnvknsn5zvpLf+AW1W0EDcpE9up4cDrPqfsh0QoxGHFJnobE2/qftsBFC19BneN4BH8Ag== - dependencies: - "@docusaurus/mdx-loader" "2.1.0" - "@docusaurus/module-type-aliases" "2.1.0" - "@docusaurus/plugin-content-blog" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/plugin-content-pages" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - clsx "^1.2.1" - parse-numeric-range "^1.3.0" - prism-react-renderer "^1.3.5" - tslib "^2.4.0" - utility-types "^3.10.0" - - "@docusaurus/theme-live-codeblock@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-live-codeblock/-/theme-live-codeblock-2.1.0.tgz#3ae6aee0f05ff8776b8b9742a8185a5fd0f22a24" - integrity sha512-HVb1xBFLyYHKTzCkflvNLMBN+iWR4mxDL537bStgYd2npTYwEb00vmxa5oGXv/IuUiqqjv7GI5b9vbHl6gfpYw== - dependencies: - "@docusaurus/core" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-translations" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - "@philpl/buble" "^0.19.7" - clsx "^1.2.1" - fs-extra "^10.1.0" - react-live "2.2.3" - tslib "^2.4.0" - - "@docusaurus/theme-search-algolia@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.1.0.tgz#e7cdf64b6f7a15b07c6dcf652fd308cfdaabb0ee" - integrity sha512-rNBvi35VvENhucslEeVPOtbAzBdZY/9j55gdsweGV5bYoAXy4mHB6zTGjealcB4pJ6lJY4a5g75fXXMOlUqPfg== - dependencies: - "@docsearch/react" "^3.1.1" - "@docusaurus/core" "2.1.0" - "@docusaurus/logger" "2.1.0" - "@docusaurus/plugin-content-docs" "2.1.0" - "@docusaurus/theme-common" "2.1.0" - "@docusaurus/theme-translations" "2.1.0" - "@docusaurus/utils" "2.1.0" - "@docusaurus/utils-validation" "2.1.0" - algoliasearch "^4.13.1" - algoliasearch-helper "^3.10.0" - clsx "^1.2.1" - eta "^1.12.3" - fs-extra "^10.1.0" - lodash "^4.17.21" - tslib "^2.4.0" - utility-types "^3.10.0" - - "@docusaurus/theme-translations@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.1.0.tgz#ce9a2955afd49bff364cfdfd4492b226f6dd3b6e" - integrity sha512-07n2akf2nqWvtJeMy3A+7oSGMuu5F673AovXVwY0aGAux1afzGCiqIFlYW3EP0CujvDJAEFSQi/Tetfh+95JNg== - dependencies: - fs-extra "^10.1.0" - tslib "^2.4.0" - - "@docusaurus/types@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.1.0.tgz#01e13cd9adb268fffe87b49eb90302d5dc3edd6b" - integrity sha512-BS1ebpJZnGG6esKqsjtEC9U9qSaPylPwlO7cQ1GaIE7J/kMZI3FITnNn0otXXu7c7ZTqhb6+8dOrG6fZn6fqzQ== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - commander "^5.1.0" - joi "^17.6.0" - react-helmet-async "^1.3.0" - utility-types "^3.10.0" - webpack "^5.73.0" - webpack-merge "^5.8.0" - - "@docusaurus/utils-common@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.1.0.tgz#248434751096f8c6c644ed65eed2a5a070a227f8" - integrity sha512-F2vgmt4yRFgRQR2vyEFGTWeyAdmgKbtmu3sjHObF0tjjx/pN0Iw/c6eCopaH34E6tc9nO0nvp01pwW+/86d1fg== - dependencies: - tslib "^2.4.0" - - "@docusaurus/utils-validation@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.1.0.tgz#c8cf1d8454d924d9a564fefa86436268f43308e3" - integrity sha512-AMJzWYKL3b7FLltKtDXNLO9Y649V2BXvrnRdnW2AA+PpBnYV78zKLSCz135cuWwRj1ajNtP4onbXdlnyvCijGQ== - dependencies: - "@docusaurus/logger" "2.1.0" - "@docusaurus/utils" "2.1.0" - joi "^17.6.0" - js-yaml "^4.1.0" - tslib "^2.4.0" - - "@docusaurus/utils@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.1.0.tgz#b77b45b22e61eb6c2dcad8a7e96f6db0409b655f" - integrity sha512-fPvrfmAuC54n8MjZuG4IysaMdmvN5A/qr7iFLbSGSyDrsbP4fnui6KdZZIa/YOLIPLec8vjZ8RIITJqF18mx4A== - dependencies: - "@docusaurus/logger" "2.1.0" - "@svgr/webpack" "^6.2.1" - file-loader "^6.2.0" - fs-extra "^10.1.0" - github-slugger "^1.4.0" - globby "^11.1.0" - gray-matter "^4.0.3" - js-yaml "^4.1.0" - lodash "^4.17.21" - micromatch "^4.0.5" - resolve-pathname "^3.0.0" - shelljs "^0.8.5" - tslib "^2.4.0" - url-loader "^4.1.1" - webpack "^5.73.0" - - "@emotion/is-prop-valid@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" - integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== - dependencies: - "@emotion/memoize" "^0.8.0" - - "@emotion/memoize@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" - integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== - - "@emotion/stylis@^0.8.4": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" - integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== - - "@emotion/unitless@^0.7.4": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== - - "@endiliey/react-ideal-image@^0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@endiliey/react-ideal-image/-/react-ideal-image-0.0.11.tgz#dc3803d04e1409cf88efa4bba0f67667807bdf27" - integrity sha512-QxMjt/Gvur/gLxSoCy7VIyGGGrGmDN+VHcXkN3R2ApoWX0EYUE+hMgPHSW/PV6VVebZ1Nd4t2UnGRBDihu16JQ== - - "@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - - "@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - - "@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - - "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - - "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - - "@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - - "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - - "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.15" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" - integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - - "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - - "@mdx-js/mdx@^1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" - integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== - dependencies: - "@babel/core" "7.12.9" - "@babel/plugin-syntax-jsx" "7.12.1" - "@babel/plugin-syntax-object-rest-spread" "7.8.3" - "@mdx-js/util" "1.6.22" - babel-plugin-apply-mdx-type-prop "1.6.22" - babel-plugin-extract-import-names "1.6.22" - camelcase-css "2.0.1" - detab "2.0.4" - hast-util-raw "6.0.1" - lodash.uniq "4.5.0" - mdast-util-to-hast "10.0.1" - remark-footnotes "2.0.0" - remark-mdx "1.6.22" - remark-parse "8.0.3" - remark-squeeze-paragraphs "4.0.0" - style-to-object "0.3.0" - unified "9.2.0" - unist-builder "2.0.3" - unist-util-visit "2.0.3" - - "@mdx-js/react@^1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" - integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== - - "@mdx-js/util@1.6.22": - version "1.6.22" - resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" - integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== - - "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - - "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - - "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - - "@philpl/buble@^0.19.7": - version "0.19.7" - resolved "https://registry.yarnpkg.com/@philpl/buble/-/buble-0.19.7.tgz#27231e6391393793b64bc1c982fc7b593198b893" - integrity sha512-wKTA2DxAGEW+QffRQvOhRQ0VBiYU2h2p8Yc1oBNlqSKws48/8faxqKNIuub0q4iuyTuLwtB8EkwiKwhlfV1PBA== - dependencies: - acorn "^6.1.1" - acorn-class-fields "^0.2.1" - acorn-dynamic-import "^4.0.0" - acorn-jsx "^5.0.1" - chalk "^2.4.2" - magic-string "^0.25.2" - minimist "^1.2.0" - os-homedir "^1.0.1" - regexpu-core "^4.5.4" - - "@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== - - "@rollup/plugin-babel@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - - "@rollup/plugin-node-resolve@^11.2.1": - version "11.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" - integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - - "@rollup/plugin-replace@^2.4.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - - "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - - "@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - - "@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== - - "@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - - "@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - - "@slorber/static-site-generator-webpack-plugin@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" - integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== - dependencies: - eval "^0.1.8" - p-map "^4.0.0" - webpack-sources "^3.2.2" - - "@surma/rollup-plugin-off-main-thread@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" - integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== - dependencies: - ejs "^3.1.6" - json5 "^2.2.0" - magic-string "^0.25.0" - string.prototype.matchall "^4.0.6" - - "@svgr/babel-plugin-add-jsx-attribute@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz#b9a5d84902be75a05ede92e70b338d28ab63fa74" - integrity sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w== - - "@svgr/babel-plugin-remove-jsx-attribute@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz#4877995452efc997b36777abe1fde9705ef78e8b" - integrity sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ== - - "@svgr/babel-plugin-remove-jsx-empty-expression@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz#2d67a0e92904c9be149a5b22d3a3797ce4d7b514" - integrity sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A== - - "@svgr/babel-plugin-replace-jsx-attribute-value@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz#306f5247139c53af70d1778f2719647c747998ee" - integrity sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA== - - "@svgr/babel-plugin-svg-dynamic-title@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz#6ce26d34cbc93eb81737ef528528907c292e7aa2" - integrity sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA== - - "@svgr/babel-plugin-svg-em-dimensions@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz#5ade2a724b290873c30529d1d8cd23523856287a" - integrity sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw== - - "@svgr/babel-plugin-transform-react-native-svg@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz#d654f509d692c3a09dfb475757a44bd9f6ad7ddf" - integrity sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw== - - "@svgr/babel-plugin-transform-svg-component@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz#21a285dbffdce9567c437ebf0d081bf9210807e6" - integrity sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw== - - "@svgr/babel-preset@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.3.1.tgz#8bd1ead79637d395e9362b01dd37cfd59702e152" - integrity sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^6.3.1" - "@svgr/babel-plugin-remove-jsx-attribute" "^6.3.1" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.3.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.3.1" - "@svgr/babel-plugin-svg-dynamic-title" "^6.3.1" - "@svgr/babel-plugin-svg-em-dimensions" "^6.3.1" - "@svgr/babel-plugin-transform-react-native-svg" "^6.3.1" - "@svgr/babel-plugin-transform-svg-component" "^6.3.1" - - "@svgr/core@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.3.1.tgz#752adf49d8d5473b15d76ca741961de093f715bd" - integrity sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA== - dependencies: - "@svgr/plugin-jsx" "^6.3.1" - camelcase "^6.2.0" - cosmiconfig "^7.0.1" - - "@svgr/hast-util-to-babel-ast@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz#59614e24d2a4a28010e02089213b3448d905769d" - integrity sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ== - dependencies: - "@babel/types" "^7.18.4" - entities "^4.3.0" - - "@svgr/plugin-jsx@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz#de7b2de824296b836d6b874d498377896e367f50" - integrity sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw== - dependencies: - "@babel/core" "^7.18.5" - "@svgr/babel-preset" "^6.3.1" - "@svgr/hast-util-to-babel-ast" "^6.3.1" - svg-parser "^2.0.4" - - "@svgr/plugin-svgo@^6.3.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz#3c1ff2efaed10e5c5d35a6cae7bacaedc18b5d4a" - integrity sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw== - dependencies: - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - svgo "^2.8.0" - - "@svgr/webpack@^6.2.1": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.3.1.tgz#001d03236ebb03bf47c0a4b92d5423e05095ebe6" - integrity sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A== - dependencies: - "@babel/core" "^7.18.5" - "@babel/plugin-transform-react-constant-elements" "^7.17.12" - "@babel/preset-env" "^7.18.2" - "@babel/preset-react" "^7.17.12" - "@babel/preset-typescript" "^7.17.12" - "@svgr/core" "^6.3.1" - "@svgr/plugin-jsx" "^6.3.1" - "@svgr/plugin-svgo" "^6.3.1" - - "@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - - "@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - - "@tsconfig/docusaurus@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@tsconfig/docusaurus/-/docusaurus-1.0.6.tgz#7305a7fa590decc0d5968500234e95fd68788978" - integrity sha512-1QxDaP54hpzM6bq9E+yFEo4F9WbWHhsDe4vktZXF/iDlc9FqGr9qlg+3X/nuKQXx8QxHV7ue8NXFazzajsxFBA== - - "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - - "@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== - dependencies: - "@types/node" "*" - - "@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - - "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== - dependencies: - "@types/node" "*" - - "@types/debug@^4.0.0": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== - dependencies: - "@types/ms" "*" - - "@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - - "@types/eslint@*": - version "8.4.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.6.tgz#7976f054c1bccfcf514bff0564c0c41df5c08207" - integrity sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - - "@types/estree@*": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - - "@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - - "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - - "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.31" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" - integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - - "@types/express@*", "@types/express@^4.17.13": - version "4.17.14" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" - integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - - "@types/hast@^2.0.0": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" - integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== - dependencies: - "@types/unist" "*" - - "@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - - "@types/hoist-non-react-statics@*": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - - "@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - - "@types/http-proxy@^1.17.8": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" - integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== - dependencies: - "@types/node" "*" - - "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - - "@types/katex@^0.11.0": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.11.1.tgz#34de04477dcf79e2ef6c8d23b41a3d81f9ebeaf5" - integrity sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg== - - "@types/mdast@^3.0.0", "@types/mdast@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" - integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== - dependencies: - "@types/unist" "*" - - "@types/mdurl@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" - integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== - - "@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== - - "@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== - - "@types/node@*": - version "18.7.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.21.tgz#63ee6688070e456325b6748dc492a7b948593871" - integrity sha512-rLFzK5bhM0YPyCoTC8bolBjMk7bwnZ8qeZUBslBfjZQou2ssJdWslx9CZ8DGM+Dx7QXQiiTVZ/6QO6kwtHkZCA== - - "@types/node@^17.0.5": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - - "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - - "@types/parse5@^5.0.0": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" - integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== - - "@types/prop-types@*", "@types/prop-types@^15.0.0": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - - "@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - - "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== - - "@types/react-router-config@*", "@types/react-router-config@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" - integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - - "@types/react-router-dom@*": - version "5.3.3" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - - "@types/react-router@*": - version "5.1.19" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.19.tgz#9b404246fba7f91474d7008a3d48c17b6e075ad6" - integrity sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - - "@types/react@*": - version "18.0.21" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.21.tgz#b8209e9626bb00a34c76f55482697edd2b43cc67" - integrity sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - - "@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - - "@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - - "@types/sax@^1.2.1": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" - integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== - dependencies: - "@types/node" "*" - - "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - - "@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== - dependencies: - "@types/express" "*" - - "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" - integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== - dependencies: - "@types/mime" "*" - "@types/node" "*" - - "@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== - dependencies: - "@types/node" "*" - - "@types/styled-components@^5.1.25": - version "5.1.26" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af" - integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw== - dependencies: - "@types/hoist-non-react-statics" "*" - "@types/react" "*" - csstype "^3.0.2" - - "@types/trusted-types@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" - integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== - - "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== - - "@types/ws@^8.5.1": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - - "@typescript-eslint/scope-manager@5.38.0": - version "5.38.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz#8f0927024b6b24e28671352c93b393a810ab4553" - integrity sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA== - dependencies: - "@typescript-eslint/types" "5.38.0" - "@typescript-eslint/visitor-keys" "5.38.0" - - "@typescript-eslint/types@5.38.0": - version "5.38.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.38.0.tgz#8cd15825e4874354e31800dcac321d07548b8a5f" - integrity sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA== - - "@typescript-eslint/typescript-estree@5.38.0": - version "5.38.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz#89f86b2279815c6fb7f57d68cf9b813f0dc25d98" - integrity sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg== - dependencies: - "@typescript-eslint/types" "5.38.0" - "@typescript-eslint/visitor-keys" "5.38.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - - "@typescript-eslint/utils@^5.30.5": - version "5.38.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.38.0.tgz#5b31f4896471818153790700eb02ac869a1543f4" - integrity sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.38.0" - "@typescript-eslint/types" "5.38.0" - "@typescript-eslint/typescript-estree" "5.38.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - - "@typescript-eslint/visitor-keys@5.38.0": - version "5.38.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz#60591ca3bf78aa12b25002c0993d067c00887e34" - integrity sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w== - dependencies: - "@typescript-eslint/types" "5.38.0" - eslint-visitor-keys "^3.3.0" - - "@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - - "@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - - "@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - - "@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - - "@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - - "@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - - "@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - - "@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - - "@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - - "@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - - "@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - - "@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - - "@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - - "@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - - "@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - - "@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - - "@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - - acorn-class-fields@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.2.1.tgz#748058bceeb0ef25164bbc671993984083f5a085" - integrity sha512-US/kqTe0H8M4LN9izoL+eykVAitE68YMuYZ3sHn3i1fjniqR7oQ3SPvuMK/VT1kjOQHrx5Q88b90TtOKgAv2hQ== - - acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - - acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - - acorn-jsx@^5.0.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - - acorn-walk@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - - acorn@^6.1.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - - acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - - address@^1.0.1, address@^1.1.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.1.tgz#25bb61095b7522d65b357baa11bc05492d4c8acd" - integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA== - - aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - - ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - - ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - - ajv-keywords@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - - ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - - ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - - algoliasearch-helper@^3.10.0: - version "3.11.1" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz#d83ab7f1a2a374440686ef7a144b3c288b01188a" - integrity sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw== - dependencies: - "@algolia/events" "^4.0.1" - - algoliasearch@^4.0.0, algoliasearch@^4.13.1: - version "4.14.2" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c" - integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg== - dependencies: - "@algolia/cache-browser-local-storage" "4.14.2" - "@algolia/cache-common" "4.14.2" - "@algolia/cache-in-memory" "4.14.2" - "@algolia/client-account" "4.14.2" - "@algolia/client-analytics" "4.14.2" - "@algolia/client-common" "4.14.2" - "@algolia/client-personalization" "4.14.2" - "@algolia/client-search" "4.14.2" - "@algolia/logger-common" "4.14.2" - "@algolia/logger-console" "4.14.2" - "@algolia/requester-browser-xhr" "4.14.2" - "@algolia/requester-common" "4.14.2" - "@algolia/requester-node-http" "4.14.2" - "@algolia/transporter" "4.14.2" - - ansi-align@^3.0.0, ansi-align@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - - ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - - ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - - ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - - ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - - ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - - ansi-styles@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.1.tgz#63cd61c72283a71cb30bd881dbb60adada74bc70" - integrity sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg== - - antd@^4.20.5: - version "4.23.2" - resolved "https://registry.yarnpkg.com/antd/-/antd-4.23.2.tgz#6bbd2d4bfb066b501fa606cab0df3bf1e758298e" - integrity sha512-GGOaIUxPg8wl8lGcCJ2U/1Eg5mt0hNb554a0y4mTJa1ijPRCNM8XjUcio4lTMM7M9/fLm9ttKtyxHg4n+JX26A== - dependencies: - "@ant-design/colors" "^6.0.0" - "@ant-design/icons" "^4.7.0" - "@ant-design/react-slick" "~0.29.1" - "@babel/runtime" "^7.18.3" - "@ctrl/tinycolor" "^3.4.0" - classnames "^2.2.6" - copy-to-clipboard "^3.2.0" - lodash "^4.17.21" - memoize-one "^6.0.0" - moment "^2.29.2" - rc-cascader "~3.7.0" - rc-checkbox "~2.3.0" - rc-collapse "~3.3.0" - rc-dialog "~8.9.0" - rc-drawer "~5.1.0" - rc-dropdown "~4.0.0" - rc-field-form "~1.27.0" - rc-image "~5.7.0" - rc-input "~0.1.2" - rc-input-number "~7.3.5" - rc-mentions "~1.9.1" - rc-menu "~9.6.3" - rc-motion "^2.6.1" - rc-notification "~4.6.0" - rc-pagination "~3.1.17" - rc-picker "~2.6.10" - rc-progress "~3.3.2" - rc-rate "~2.9.0" - rc-resize-observer "^1.2.0" - rc-segmented "~2.1.0" - rc-select "~14.1.13" - rc-slider "~10.0.0" - rc-steps "~4.1.0" - rc-switch "~3.2.0" - rc-table "~7.26.0" - rc-tabs "~12.1.0-alpha.1" - rc-textarea "~0.3.0" - rc-tooltip "~5.2.0" - rc-tree "~5.7.0" - rc-tree-select "~5.5.0" - rc-trigger "^5.2.10" - rc-upload "~4.3.0" - rc-util "^5.22.5" - scroll-into-view-if-needed "^2.2.25" - - anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - - arg@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - - argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - - argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - - array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - - array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - - array-tree-filter@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" - integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== - - array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - - asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - - assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== - dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" - - async-validator@^4.1.0: - version "4.2.5" - resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" - integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== - - async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - - at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - - autoprefixer@^10.3.7, autoprefixer@^10.4.7: - version "10.4.12" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.12.tgz#183f30bf0b0722af54ee5ef257f7d4320bb33129" - integrity sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q== - dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001407" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - - available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - - axios@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" - integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== - dependencies: - follow-redirects "^1.14.7" - - babel-loader@^8.2.5: - version "8.2.5" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" - integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^2.0.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - - babel-plugin-apply-mdx-type-prop@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" - integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== - dependencies: - "@babel/helper-plugin-utils" "7.10.4" - "@mdx-js/util" "1.6.22" - - babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - - babel-plugin-extract-import-names@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" - integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== - dependencies: - "@babel/helper-plugin-utils" "7.10.4" - - babel-plugin-import@^1.13.5: - version "1.13.5" - resolved "https://registry.yarnpkg.com/babel-plugin-import/-/babel-plugin-import-1.13.5.tgz#42eed1c5afd9a35ee1b1f8fe922b07c44077d753" - integrity sha512-IkqnoV+ov1hdJVofly9pXRJmeDm9EtROfrc5i6eII0Hix2xMs5FEm8FG3ExMvazbnZBbgHIt6qdO8And6lCloQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - - babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" - - babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" - - babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - - "babel-plugin-styled-components@>= 1.12.0", babel-plugin-styled-components@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086" - integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-module-imports" "^7.16.0" - babel-plugin-syntax-jsx "^6.18.0" - lodash "^4.17.11" - picomatch "^2.3.0" - - babel-plugin-syntax-jsx@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== - - bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - - bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - - balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - - base16@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== - - base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - - batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - - big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - - binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - - bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - - body-parser@1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - - bonjour-service@^1.0.11: - version "1.0.14" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.14.tgz#c346f5bc84e87802d08f8d5a60b93f758e514ee7" - integrity sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - - boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - - boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - - boxen@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" - integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== - dependencies: - ansi-align "^3.0.1" - camelcase "^6.2.0" - chalk "^4.1.2" - cli-boxes "^3.0.0" - string-width "^5.0.1" - type-fest "^2.5.0" - widest-line "^4.0.1" - wrap-ansi "^8.0.1" - - brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - - brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - - braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - - browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.3, browserslist@^4.21.3, browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - - buble@0.19.6: - version "0.19.6" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" - integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== - dependencies: - chalk "^2.4.1" - magic-string "^0.25.1" - minimist "^1.2.0" - os-homedir "^1.0.1" - regexpu-core "^4.2.0" - vlq "^1.0.0" - - buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - - buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - - builtin-modules@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - - bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - - bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - - cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - - call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - - callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - - camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - - camelcase-css@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - - camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - - camelize@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" - integrity sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg== - - caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - - caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001407: - version "1.0.30001412" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001412.tgz#30f67d55a865da43e0aeec003f073ea8764d5d7c" - integrity sha512-+TeEIee1gS5bYOiuf+PS/kp2mrXic37Hl66VY6EAfxasIk5fELTktK2oOezYed12H8w7jt3s512PpulQidPjwA== - - ccount@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" - integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== - - ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - - chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - - chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - - character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - - character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - - character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - - character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - - character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - - character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - - charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - - cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - - cheerio@^1.0.0-rc.12: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - - chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - - chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - - chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - - ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - - classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== - - clean-css@^5.2.2, clean-css@^5.3.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.1.tgz#d0610b0b90d125196a2894d35366f734e5d7aa32" - integrity sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg== - dependencies: - source-map "~0.6.0" - - clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - - cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - - cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== - - cli-table3@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - - clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - - clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - - clsx@^1.1.1, clsx@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - - collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== - - color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - - color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - - color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - - color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - - color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - - color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - - colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - - colorette@^2.0.10: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - - combine-promises@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" - integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== - - comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== - - comma-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" - integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== - - commander@*: - version "9.4.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" - integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== - - commander@^2.19.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - - commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - - commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - - commander@^8.0.0, commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - - common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - - commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - - component-props@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/component-props/-/component-props-1.1.1.tgz#f9b7df9b9927b6e6d97c9bd272aa867670f34944" - integrity sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q== - - component-xor@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/component-xor/-/component-xor-0.0.4.tgz#c55d83ccc1b94cd5089a4e93fa7891c7263e59aa" - integrity sha512-ZIt6sla8gfo+AFVRZoZOertcnD5LJaY2T9CKE2j13NJxQt/mUafD69Bl7/Y4AnpI2LGjiXH7cOfJDx/n2G9edA== - - compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - - compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - - compute-scroll-into-view@^1.0.17: - version "1.0.17" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" - integrity sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg== - - concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - - configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - - connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - - consola@^2.15.3: - version "2.15.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== - - "consolidated-events@^1.1.0 || ^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91" - integrity sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ== - - content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== - - content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - - content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - - convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - - cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - - cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - - copy-anything@^2.0.1: - version "2.0.6" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" - integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== - dependencies: - is-what "^3.14.1" - - copy-text-to-clipboard@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" - integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== - - copy-to-clipboard@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.2.tgz#5b263ec2366224b100181dded7ce0579b340c107" - integrity sha512-Vme1Z6RUDzrb6xAI7EZlVZ5uvOk2F//GaxKUxajDqm9LhOVM1inxNAD2vy+UZDYsd0uyA9s7b3/FVZPSxqrCfg== - dependencies: - toggle-selection "^1.0.6" - - copy-webpack-plugin@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - - core-js-compat@^3.25.1: - version "3.25.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.25.3.tgz#d6a442a03f4eade4555d4e640e6a06151dd95d38" - integrity sha512-xVtYpJQ5grszDHEUU9O7XbjjcZ0ccX3LgQsyqSvTnjX97ZqEgn9F5srmrwwwMtbKzDllyFPL+O+2OFMl1lU4TQ== - dependencies: - browserslist "^4.21.4" - - core-js-pure@^3.25.1: - version "3.25.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.3.tgz#66ac5bfa5754b47fdfd14f3841c5ed21c46db608" - integrity sha512-T/7qvgv70MEvRkZ8p6BasLZmOVYKzOaWNBEHAU8FmveCJkl4nko2quqPQOmy6AJIp5MBanhz9no3A94NoRb0XA== - - core-js@^2.4.1: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - - core-js@^3.23.3: - version "3.25.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.25.3.tgz#cbc2be50b5ddfa7981837bd8c41639f27b166593" - integrity sha512-y1hvKXmPHvm5B7w4ln1S4uc9eV/O5+iFExSRUimnvIph11uaizFR8LFMdONN8hG3P2pipUfX4Y/fR8rAEtcHcQ== - - core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - - cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - - cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - - cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - - cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - - crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - - crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - - css-color-keywords@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" - integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== - - css-declaration-sorter@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" - integrity sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w== - - css-loader@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e" - integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.7" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.3.5" - - css-minimizer-webpack-plugin@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.1.0.tgz#2ab9f7d8148c48f5d498604025e6e62cf9528855" - integrity sha512-Zd+yz4nta4GXi3pMqF6skO8kjzuCUbr62z8SLMGZZtxWxTGTLopOiabPGNDEyjHCRhnhdA1EfHmqLa2Oekjtng== - dependencies: - cssnano "^5.1.8" - jest-worker "^27.5.1" - postcss "^8.4.13" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - source-map "^0.6.1" - - css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - - css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - - css-selector-parser@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" - integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== - - css-to-react-native@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" - integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^4.0.2" - - css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - - css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - - cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - - cssnano-preset-advanced@^5.3.8: - version "5.3.8" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz#027b1d05ef896d908178c483f0ec4190cb50ef9a" - integrity sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg== - dependencies: - autoprefixer "^10.3.7" - cssnano-preset-default "^5.2.12" - postcss-discard-unused "^5.1.0" - postcss-merge-idents "^5.1.1" - postcss-reduce-idents "^5.2.0" - postcss-zindex "^5.1.0" - - cssnano-preset-default@^5.2.12: - version "5.2.12" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz#ebe6596ec7030e62c3eb2b3c09f533c0644a9a97" - integrity sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew== - dependencies: - css-declaration-sorter "^6.3.0" - cssnano-utils "^3.1.0" - postcss-calc "^8.2.3" - postcss-colormin "^5.3.0" - postcss-convert-values "^5.1.2" - postcss-discard-comments "^5.1.2" - postcss-discard-duplicates "^5.1.0" - postcss-discard-empty "^5.1.1" - postcss-discard-overridden "^5.1.0" - postcss-merge-longhand "^5.1.6" - postcss-merge-rules "^5.1.2" - postcss-minify-font-values "^5.1.0" - postcss-minify-gradients "^5.1.1" - postcss-minify-params "^5.1.3" - postcss-minify-selectors "^5.2.1" - postcss-normalize-charset "^5.1.0" - postcss-normalize-display-values "^5.1.0" - postcss-normalize-positions "^5.1.1" - postcss-normalize-repeat-style "^5.1.1" - postcss-normalize-string "^5.1.0" - postcss-normalize-timing-functions "^5.1.0" - postcss-normalize-unicode "^5.1.0" - postcss-normalize-url "^5.1.0" - postcss-normalize-whitespace "^5.1.1" - postcss-ordered-values "^5.1.3" - postcss-reduce-initial "^5.1.0" - postcss-reduce-transforms "^5.1.0" - postcss-svgo "^5.1.0" - postcss-unique-selectors "^5.1.1" - - cssnano-utils@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" - integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== - - cssnano@^5.1.12, cssnano@^5.1.8: - version "5.1.13" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.13.tgz#83d0926e72955332dc4802a7070296e6258efc0a" - integrity sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ== - dependencies: - cssnano-preset-default "^5.2.12" - lilconfig "^2.0.3" - yaml "^1.10.2" - - csso@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - - csstype@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" - integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== - - date-fns@2.x: - version "2.29.3" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== - - dayjs@1.x: - version "1.11.5" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93" - integrity sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA== - - debug@2.6.9, debug@^2.6.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - - debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - - debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - - decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== - dependencies: - character-entities "^2.0.0" - - decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - - decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - - deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - - deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - - default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - - defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - - define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - - define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - - del@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - - depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - - depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - - dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - - destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - - detab@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" - integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== - dependencies: - repeat-string "^1.5.4" - - detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - - detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - - detect-port-alt@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - - detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== - dependencies: - address "^1.0.1" - debug "4" - - diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - - dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - - dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - - dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - - docusaurus-plugin-less@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/docusaurus-plugin-less/-/docusaurus-plugin-less-2.0.2.tgz#63bf04a5539a3b8ddc38bf527b51eb135b60f528" - integrity sha512-ez6WSSvGS8HoJslYHeG5SflyShWvHFXeTTHXPBd3H1T3zgq9wp6wD7scXm+rXyyfhFhP5VNiIqhYB78z4OLjwg== - - dom-align@^1.7.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.3.tgz#a36d02531dae0eefa2abb0c4db6595250526f103" - integrity sha512-Gj9hZN3a07cbR6zviMUBOMPdWxYhbMI+x+WS0NAIu2zFZmbK8ys9R79g+iG9qLnlCwpFoaB+fKy8Pdv470GsPA== - - dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - - dom-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-iterator/-/dom-iterator-1.0.0.tgz#9c09899846ec41c2d257adc4d6015e4759ef05ad" - integrity sha512-7dsMOQI07EMU98gQM8NSB3GsAiIeBYIPKpnxR3c9xOvdvBjChAcOM0iJ222I3p5xyiZO9e5oggkNaCusuTdYig== - dependencies: - component-props "1.1.1" - component-xor "0.0.4" - - dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - - dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - - domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - - domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - - domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - - domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - - domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" - - dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - - dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - - duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - - duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - - eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - - ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - - ejs@^3.1.6: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== - dependencies: - jake "^10.8.5" - - electron-to-chromium@^1.4.251: - version "1.4.262" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.262.tgz#25715dfbae4c2e0640517cba184715241ecd8e63" - integrity sha512-Ckn5haqmGh/xS8IbcgK3dnwAVnhDyo/WQnklWn6yaMucYTq7NNxwlGE8ElzEOnonzRLzUCo2Ot3vUb2GYUF2Hw== - - emailjs@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/emailjs/-/emailjs-4.0.1.tgz#963533d07bf41b90bc5e7651b99464bd01129dfd" - integrity sha512-rTN/LDvlqwU79E367ovB7FIziImzimhQcZiGmC20VcDPbf0mv3l9c3aavtMcEFaFBsycjGB5aMIhz4ZbKNeLWw== - - emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - - emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - - emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - - emoticon@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" - integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== - - encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - - end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - - enhanced-resolve@^5.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" - integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - - entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - - entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== - - errno@^0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - - error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - - es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5, es-abstract@^1.20.0: - version "1.20.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.3.tgz#90b143ff7aedc8b3d189bcfac7f1e3e3f81e9da1" - integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.6" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - - es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - - es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - - es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== - - escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - - escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - - escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - - escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - - escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - - eslint-scope@5.1.1, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - - eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - - eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - - eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - - esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - - esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - - estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - - estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - - estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - - esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - - eta@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.3.tgz#2982d08adfbef39f9fa50e2fbd42d7337e7338b1" - integrity sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg== - - etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - - eval@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" - integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== - dependencies: - "@types/node" "*" - require-like ">= 0.1.1" - - eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - - events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - - execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - - expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - - express@^4.17.3: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - - extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - - extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - - fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - - fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - - fast-url-parser@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" - - fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - - faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - - fbemitter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" - integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== - dependencies: - fbjs "^3.0.0" - - fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - - fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== - dependencies: - cross-fetch "^3.1.5" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.30" - - feed@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" - integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== - dependencies: - xml-js "^1.6.11" - - file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - - filelist@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - - filesize@^8.0.6: - version "8.0.7" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" - integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== - - fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - - finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - - find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - - find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - - find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - - find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - - flux@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" - integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== - dependencies: - fbemitter "^3.0.0" - fbjs "^3.0.1" - - follow-redirects@^1.0.0, follow-redirects@^1.14.7: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - - for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - - fork-ts-checker-webpack-plugin@^6.5.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" - integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - - forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - - fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - - fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - - fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - - fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - - fs-extra@^9.0.0, fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - - fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== - - fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - - fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - - function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - - function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - - functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - - gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - - get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - - get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - - get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - - get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - - get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - - get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - - github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - - github-slugger@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.4.0.tgz#206eb96cdb22ee56fdc53a28d5a302338463444e" - integrity sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ== - - glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - - glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - - glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - - glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - - global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - - global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - - global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - - globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - - globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - - globby@^13.1.1: - version "13.1.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" - integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - - got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - - gray-matter@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - - gsap@^3.10.4: - version "3.11.1" - resolved "https://registry.yarnpkg.com/gsap/-/gsap-3.11.1.tgz#2d99acf9c9ad02f3b6668bfab7567d31f217a91e" - integrity sha512-UKuJ0UPhntFHMwT6URFQ4cTQv88xc7Kd9Dhxt7qX9IPhC+d+/a5wKW5E5Vn33hZ53nBI1JfApcEbzKgXkcuPZw== - - gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - - handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - - has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - - has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - - has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - - has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - - has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - - has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - - has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - - has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - - hast-to-hyperscript@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" - integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== - dependencies: - "@types/unist" "^2.0.3" - comma-separated-tokens "^1.0.0" - property-information "^5.3.0" - space-separated-tokens "^1.0.0" - style-to-object "^0.3.0" - unist-util-is "^4.0.0" - web-namespaces "^1.0.0" - - hast-util-from-parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" - integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== - dependencies: - "@types/parse5" "^5.0.0" - hastscript "^6.0.0" - property-information "^5.0.0" - vfile "^4.0.0" - vfile-location "^3.2.0" - web-namespaces "^1.0.0" - - hast-util-is-element@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" - integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== - - hast-util-is-element@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz#fc0b0dc7cef3895e839b8d66979d57b0338c68f3" - integrity sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA== - dependencies: - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.0" - - hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== - - hast-util-raw@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" - integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== - dependencies: - "@types/hast" "^2.0.0" - hast-util-from-parse5 "^6.0.0" - hast-util-to-parse5 "^6.0.0" - html-void-elements "^1.0.0" - parse5 "^6.0.0" - unist-util-position "^3.0.0" - vfile "^4.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" - - hast-util-sanitize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-4.0.0.tgz#71a02ca2e50d04b852a5500846418070ca364f60" - integrity sha512-pw56+69jq+QSr/coADNvWTmBPDy+XsmwaF5KnUys4/wM1jt/fZdl7GPxhXXXYdXnz3Gj3qMkbUCH2uKjvX0MgQ== - dependencies: - "@types/hast" "^2.0.0" - - hast-util-to-html@^8.0.0: - version "8.0.3" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz#4e37580872e143ea9ce0dba87918b19e4ea997e3" - integrity sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A== - dependencies: - "@types/hast" "^2.0.0" - ccount "^2.0.0" - comma-separated-tokens "^2.0.0" - hast-util-is-element "^2.0.0" - hast-util-whitespace "^2.0.0" - html-void-elements "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - stringify-entities "^4.0.2" - unist-util-is "^5.0.0" - - hast-util-to-parse5@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" - integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== - dependencies: - hast-to-hyperscript "^9.0.0" - property-information "^5.0.0" - web-namespaces "^1.0.0" - xtend "^4.0.0" - zwitch "^1.0.0" - - hast-util-to-text@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz#04f2e065642a0edb08341976084aa217624a0f8b" - integrity sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ== - dependencies: - hast-util-is-element "^1.0.0" - repeat-string "^1.0.0" - unist-util-find-after "^3.0.0" - - hast-util-to-text@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-3.1.1.tgz#b7699a75f7a61af6e0befb67660cd78460d96dc6" - integrity sha512-7S3mOBxACy8syL45hCn3J7rHqYaXkxRfsX6LXEU5Shz4nt4GxdjtMUtG+T6G/ZLUHd7kslFAf14kAN71bz30xA== - dependencies: - "@types/hast" "^2.0.0" - hast-util-is-element "^2.0.0" - unist-util-find-after "^4.0.0" - - hast-util-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz#4fc1086467cc1ef5ba20673cb6b03cec3a970f1c" - integrity sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg== - - hastscript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" - integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== - dependencies: - "@types/hast" "^2.0.0" - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - - he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - - history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - - hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - - hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - - html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== - - html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - - html-tags@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== - - html-void-elements@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" - integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== - - html-void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" - integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== - - html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - - htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - - htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - domutils "^3.0.1" - entities "^4.3.0" - - http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - - http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - - http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - - http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - - http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - - http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - - http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - - human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - - iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - - iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - - icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - - idb@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.0.tgz#2cc886be57738419e57f9aab58f647e5e2160270" - integrity sha512-Wsk07aAxDsntgYJY4h0knZJuTxM73eQ4reRAO+Z1liOh8eMCJ/MoDS8fCui1vGT9mnjtl1sOu3I2i/W1swPYZg== - - ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - - ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - - image-size@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" - integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== - dependencies: - queue "6.0.2" - - image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== - - immer@^9.0.7: - version "9.0.15" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" - integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== - - import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - - import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== - - imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - - indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - - infima@0.2.0-alpha.42: - version "0.2.0-alpha.42" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.42.tgz#f6e86a655ad40877c6b4d11b2ede681eb5470aa5" - integrity sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww== - - inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - - inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - - inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - - ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - - ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - - inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - - internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - - interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - - invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - - ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - - ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== - - is-alphabetical@1.0.4, is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - - is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - - is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - - is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - - is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - - is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - - is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - - is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - - is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - - is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - - is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - - is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - - is-core-module@^2.9.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" - integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== - dependencies: - has "^1.0.3" - - is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - - is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - - is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - - is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - - is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - - is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - - is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - - is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - - is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - - is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - - is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - - is-nan@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - - is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - - is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - - is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - - is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - - is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - - is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - - is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - - is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - - is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - - is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - - is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - - is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - - is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - - is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - - is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - - is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - - is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - - is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - - is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - - is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" - integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - - is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - - is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - - is-what@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" - integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== - - is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== - - is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== - - is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - - is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - - isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - - isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - - isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - - isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - - jake@^10.8.5: - version "10.8.5" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" - - jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - - jest-worker@^27.4.5, jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - - joi@^17.6.0: - version "17.6.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.1.tgz#e77422f277091711599634ac39a409e599d7bdaa" - integrity sha512-Hl7/iBklIX345OCM1TiFSCZRVaAOLDGlWCp0Df2vWYgBgjkezaR7Kvm3joBciBHQjZj5sxXs859r6eqsRSlG8w== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.0" - "@sideway/pinpoint" "^2.0.0" - - js-md5@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2" - integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ== - - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - - js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - - js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - - jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - - jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - - json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - - json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - - json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - - json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - - json-schema@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - - json2mq@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" - integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== - dependencies: - string-convert "^0.2.0" - - json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - - jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - - jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - - katex@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.12.0.tgz#2fb1c665dbd2b043edcf8a1f5c555f46beaa0cb9" - integrity sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg== - dependencies: - commander "^2.19.0" - - katex@^0.13.0: - version "0.13.24" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.13.24.tgz#fe55455eb455698cb24b911a353d16a3c855d905" - integrity sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w== - dependencies: - commander "^8.0.0" - - katex@^0.15.6: - version "0.15.6" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.15.6.tgz#c4e2f6ced2ac4de1ef6f737fe7c67d3026baa0e5" - integrity sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA== - dependencies: - commander "^8.0.0" - - keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - - kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - - kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - - kleur@^4.0.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - - klona@^2.0.4, klona@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" - integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== - - latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - - less-loader@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-11.0.0.tgz#a31b2bc5cdfb62f1c7de9b2d01cd944c22b1a024" - integrity sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw== - dependencies: - klona "^2.0.4" - - less-vars-to-js@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/less-vars-to-js/-/less-vars-to-js-1.3.0.tgz#c322cf43a3c8fc3fab655da3e51a14c1499ab571" - integrity sha512-xeiLLn/IMCGtdyCkYQnW8UuzoW2oYMCKg9boZRaGI58fLz5r90bNJDlqGzmVt/1Uqk75/DxIVtQSNCMkE5fRZQ== - dependencies: - strip-json-comments "^2.0.1" - - less@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/less/-/less-4.1.3.tgz#175be9ddcbf9b250173e0a00b4d6920a5b770246" - integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== - dependencies: - copy-anything "^2.0.1" - parse-node-version "^1.0.1" - tslib "^2.3.0" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - make-dir "^2.1.0" - mime "^1.4.1" - needle "^3.1.0" - source-map "~0.6.0" - - leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - - libpag@^4.0.5-release.7: - version "4.1.8" - resolved "https://registry.yarnpkg.com/libpag/-/libpag-4.1.8.tgz#dc3a624e95bb4b768c62e59d34b150971ef8b4fd" - integrity sha512-MglehAuEWWmYzelb+/wnV3F9y5QjCZDaMd8ykPV34EASs4SFNNCT3kn9vRBWr1MYNqo3Iy13Fw4c2W+5kR/+3g== - - lilconfig@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== - - lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - - loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - - loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - - loader-utils@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.0.tgz#bcecc51a7898bee7473d4bc6b845b23af8304d4f" - integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== - - locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - - locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - - locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - - lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== - - lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - - lodash.flow@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== - - lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - - lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - - lodash.uniq@4.5.0, lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - - lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - - longest-streak@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d" - integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg== - - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - - lottie-web@^5.9.4: - version "5.9.6" - resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.9.6.tgz#62ae68563355d3e04aa75d53dec3dd4bea0e57c9" - integrity sha512-JFs7KsHwflugH5qIXBpB4905yC1Sub2MZWtl/elvO/QC6qj1ApqbUZJyjzJseJUtVpgiDaXQLjBlIJGS7UUUXA== - - lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - - lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - - lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - - lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - - magic-string@^0.25.0, magic-string@^0.25.1, magic-string@^0.25.2, magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - - make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - - make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - - markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== - - md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - - mdast-squeeze-paragraphs@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" - integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== - dependencies: - unist-util-remove "^2.0.0" - - mdast-util-definition-list@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/mdast-util-definition-list/-/mdast-util-definition-list-1.2.1.tgz#90a47d294e48e5aa3c82314979325070a2196681" - integrity sha512-0NvEWM5suUmvyIR58z+MjDgGruu9HsV5k8sKoWlbYgROFnwTs6dcCWmzOcVeUN9nJ/jxUFvb1iDZNuNFLzD9VQ== - dependencies: - "@types/mdast" "^3.0.10" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-hast "^12.0.0" - mdast-util-to-markdown "^1.2.1" - micromark-extension-definition-list "^1.2.0" - unist-builder "^3.0.0" - - mdast-util-definitions@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" - integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== - dependencies: - unist-util-visit "^2.0.0" - - mdast-util-definitions@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz#2c1d684b28e53f84938bb06317944bee8efa79db" - integrity sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - unist-util-visit "^4.0.0" - - mdast-util-from-markdown@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz#84df2924ccc6c995dec1e2368b2b208ad0a76268" - integrity sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - decode-named-character-reference "^1.0.0" - mdast-util-to-string "^3.1.0" - micromark "^3.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-decode-string "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-stringify-position "^3.0.0" - uvu "^0.5.0" - - mdast-util-math@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-math/-/mdast-util-math-2.0.1.tgz#141b8e7e43731d2a7423c5eb8c0335c05d257ad2" - integrity sha512-ZZtjyRwobsiVg4bY0Q5CzAZztpbjRIA7ZlMMb0PNkwTXOnJTUoHvzBhVG95LIuek5Mlj1l2P+jBvWviqW7G+0A== - dependencies: - "@types/mdast" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-to-markdown "^1.3.0" - - mdast-util-to-hast@10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" - integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - mdast-util-definitions "^4.0.0" - mdurl "^1.0.0" - unist-builder "^2.0.0" - unist-util-generated "^1.0.0" - unist-util-position "^3.0.0" - unist-util-visit "^2.0.0" - - mdast-util-to-hast@^12.0.0, mdast-util-to-hast@^12.1.0: - version "12.2.2" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.2.2.tgz#2bd8cf985a67c90c181eadcfdd8d31b8798ed9a1" - integrity sha512-lVkUttV9wqmdXFtEBXKcepvU/zfwbhjbkM5rxrquLW55dS1DfOrnAXCk5mg1be1sfY/WfMmayGy1NsbK1GLCYQ== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - "@types/mdurl" "^1.0.0" - mdast-util-definitions "^5.0.0" - mdurl "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - trim-lines "^3.0.0" - unist-builder "^3.0.0" - unist-util-generated "^2.0.0" - unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" - - mdast-util-to-markdown@^1.2.1, mdast-util-to-markdown@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz#38b6cdc8dc417de642a469c4fc2abdf8c931bd1e" - integrity sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - longest-streak "^3.0.0" - mdast-util-to-string "^3.0.0" - micromark-util-decode-string "^1.0.0" - unist-util-visit "^4.0.0" - zwitch "^2.0.0" - - mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== - - mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" - integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== - - mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - - mdurl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== - - media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - - memfs@^3.1.2, memfs@^3.4.3: - version "3.4.7" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" - integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== - dependencies: - fs-monkey "^1.0.3" - - memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== - - merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - - merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - - merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - - methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - - micromark-core-commonmark@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" - integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-factory-destination "^1.0.0" - micromark-factory-label "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-factory-title "^1.0.0" - micromark-factory-whitespace "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-html-tag-name "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - - micromark-extension-definition-list@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-extension-definition-list/-/micromark-extension-definition-list-1.2.0.tgz#2fc0e9e94d944ad657f662e560f452abaf84afa0" - integrity sha512-L9mPgcd228CYctVrJsnBDXZlaYX/U5B/7KVAZMQlwqq038fuEyaaRWzhuBpM9YQQdNiyHvW9aiWVJRsn6SIg0A== - dependencies: - assert "^2.0.0" - micromark-core-commonmark "^1.0.1" - micromark-factory-space "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - - micromark-extension-math@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-math/-/micromark-extension-math-2.0.2.tgz#bb7d28b907b17f1813dd3d0df2a6df6bb1a4d0e1" - integrity sha512-cFv2B/E4pFPBBFuGgLHkkNiFAIQv08iDgPH2HCuR2z3AUgMLecES5Cq7AVtwOtZeRrbA80QgMUk8VVW0Z+D2FA== - dependencies: - "@types/katex" "^0.11.0" - katex "^0.13.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - - micromark-factory-destination@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" - integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - - micromark-factory-label@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137" - integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - - micromark-factory-space@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" - integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - - micromark-factory-title@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f" - integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - - micromark-factory-whitespace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c" - integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - - micromark-util-character@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" - integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - - micromark-util-chunked@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06" - integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g== - dependencies: - micromark-util-symbol "^1.0.0" - - micromark-util-classify-character@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20" - integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - - micromark-util-combine-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5" - integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-types "^1.0.0" - - micromark-util-decode-numeric-character-reference@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946" - integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== - dependencies: - micromark-util-symbol "^1.0.0" - - micromark-util-decode-string@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02" - integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-symbol "^1.0.0" - - micromark-util-encode@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383" - integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA== - - micromark-util-html-tag-name@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497" - integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA== - - micromark-util-normalize-identifier@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828" - integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== - dependencies: - micromark-util-symbol "^1.0.0" - - micromark-util-resolve-all@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88" - integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw== - dependencies: - micromark-util-types "^1.0.0" - - micromark-util-sanitize-uri@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz#27dc875397cd15102274c6c6da5585d34d4f12b2" - integrity sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-symbol "^1.0.0" - - micromark-util-subtokenize@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105" - integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - - micromark-util-symbol@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e" - integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== - - micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20" - integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== - - micromark@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.0.10.tgz#1eac156f0399d42736458a14b0ca2d86190b457c" - integrity sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - micromark-core-commonmark "^1.0.1" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - - micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - - mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - - mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== - - mime-types@2.1.18: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== - dependencies: - mime-db "~1.33.0" - - mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - - mime@1.6.0, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - - mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - - mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - - mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - - mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" - - mini-css-extract-plugin@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" - integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== - dependencies: - schema-utils "^4.0.0" - - minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - - minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - - minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - - minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== - dependencies: - brace-expansion "^2.0.1" - - minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - - mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - - mockjs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06" - integrity sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ== - dependencies: - commander "*" - - moment@^2.24.0, moment@^2.29.2: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - - mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - - mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - - ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - - ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - - ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - - multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - - nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - - napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - - needle@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-3.1.0.tgz#3bf5cd090c28eb15644181ab6699e027bd6c53c9" - integrity sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw== - dependencies: - debug "^3.2.6" - iconv-lite "^0.6.3" - sax "^1.2.4" - - negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - - neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - - no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - - node-abi@^3.3.0: - version "3.24.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.24.0.tgz#b9d03393a49f2c7e147d0c99f180e680c27c1599" - integrity sha512-YPG3Co0luSu6GwOBsmIdGW6Wx0NyNDLg/hriIyDllVsNwnI6UeqaWShxC3lbH4LtEQUgoLP3XR1ndXiDAWvmRw== - dependencies: - semver "^7.3.5" - - node-addon-api@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501" - integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA== - - node-emoji@^1.10.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - - node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - - node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - - node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - - normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - - normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - - normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - - normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - - not@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" - integrity sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA== - - npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - - nprogress@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== - - nth-check@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - - nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - - object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - - object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - - object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - - object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - - object.assign@^4.1.0, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - - obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - - on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - - on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - - once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - - onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - - open@^8.0.9, open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - - opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - - os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== - - p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - - p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - - p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - - p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - - p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - - p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - - p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - - p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - - p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - - package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - - param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - - parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - - parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - - parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - - parse-node-version@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - - parse-numeric-range@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" - integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== - - parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - - parse5@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - - parse5@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" - integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== - dependencies: - entities "^4.4.0" - - parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - - pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - - path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - - path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - - path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - - path-is-inside@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - - path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - - path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - - path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - - path-to-regexp@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" - integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== - - path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - - path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - - picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.0, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - - pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - - pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - - pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - - postcss-calc@^8.2.3: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" - integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== - dependencies: - postcss-selector-parser "^6.0.9" - postcss-value-parser "^4.2.0" - - postcss-colormin@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.0.tgz#3cee9e5ca62b2c27e84fce63affc0cfb5901956a" - integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - - postcss-convert-values@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" - integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== - dependencies: - browserslist "^4.20.3" - postcss-value-parser "^4.2.0" - - postcss-discard-comments@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" - integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== - - postcss-discard-duplicates@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" - integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== - - postcss-discard-empty@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" - integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== - - postcss-discard-overridden@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" - integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== - - postcss-discard-unused@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" - integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== - dependencies: - postcss-selector-parser "^6.0.5" - - postcss-loader@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.1.tgz#4c883cc0a1b2bfe2074377b7a74c1cd805684395" - integrity sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.7" - - postcss-merge-idents@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" - integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - - postcss-merge-longhand@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" - integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^5.1.0" - - postcss-merge-rules@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" - integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - cssnano-utils "^3.1.0" - postcss-selector-parser "^6.0.5" - - postcss-minify-font-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" - integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-minify-gradients@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" - integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== - dependencies: - colord "^2.9.1" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - - postcss-minify-params@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" - integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== - dependencies: - browserslist "^4.16.6" - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - - postcss-minify-selectors@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" - integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== - dependencies: - postcss-selector-parser "^6.0.5" - - postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - - postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - - postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - - postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - - postcss-normalize-charset@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" - integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== - - postcss-normalize-display-values@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" - integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-normalize-positions@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" - integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-normalize-repeat-style@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" - integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-normalize-string@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" - integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-normalize-timing-functions@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" - integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-normalize-unicode@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz#3d23aede35e160089a285e27bf715de11dc9db75" - integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== - dependencies: - browserslist "^4.16.6" - postcss-value-parser "^4.2.0" - - postcss-normalize-url@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" - integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== - dependencies: - normalize-url "^6.0.1" - postcss-value-parser "^4.2.0" - - postcss-normalize-whitespace@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" - integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-ordered-values@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" - integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== - dependencies: - cssnano-utils "^3.1.0" - postcss-value-parser "^4.2.0" - - postcss-reduce-idents@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" - integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-reduce-initial@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz#fc31659ea6e85c492fb2a7b545370c215822c5d6" - integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== - dependencies: - browserslist "^4.16.6" - caniuse-api "^3.0.0" - - postcss-reduce-transforms@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" - integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== - dependencies: - postcss-value-parser "^4.2.0" - - postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - - postcss-sort-media-queries@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz#f48a77d6ce379e86676fc3f140cf1b10a06f6051" - integrity sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg== - dependencies: - sort-css-media-queries "2.1.0" - - postcss-svgo@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" - integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^2.7.0" - - postcss-unique-selectors@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" - integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== - dependencies: - postcss-selector-parser "^6.0.5" - - postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - - postcss-zindex@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" - integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== - - postcss@^8.3.11, postcss@^8.4.13, postcss@^8.4.14, postcss@^8.4.7: - version "8.4.16" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c" - integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - - prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - - prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - - pretty-bytes@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - - pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - - pretty-time@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" - integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== - - prism-react-renderer@^1.0.1, prism-react-renderer@^1.3.1, prism-react-renderer@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" - integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== - - prismjs@^1.28.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== - - process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - - promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - - prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - - prop-types@^15.0.0, prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - - property-information@^5.0.0, property-information@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - - property-information@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22" - integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== - - proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - - prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - - pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - - punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - - punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - - pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - - pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== - - qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - - queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - - queue@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== - dependencies: - inherits "~2.0.3" - - ramda@^0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" - integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== - - randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - - range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== - - range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - - raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - - rc-align@^4.0.0: - version "4.0.12" - resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.12.tgz#065b5c68a1cc92a00800c9239320d9fdf5f16207" - integrity sha512-3DuwSJp8iC/dgHzwreOQl52soj40LchlfUHtgACOUtwGuoFIOVh6n/sCpfqCU8kO5+iz6qR0YKvjgB8iPdE3aQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - dom-align "^1.7.0" - lodash "^4.17.21" - rc-util "^5.3.0" - resize-observer-polyfill "^1.5.1" - - rc-cascader@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.7.0.tgz#98134df578ce1cca22be8fb4319b04df4f3dca36" - integrity sha512-SFtGpwmYN7RaWEAGTS4Rkc62ZV/qmQGg/tajr/7mfIkleuu8ro9Hlk6J+aA0x1YS4zlaZBtTcSaXM01QMiEV/A== - dependencies: - "@babel/runtime" "^7.12.5" - array-tree-filter "^2.1.0" - classnames "^2.3.1" - rc-select "~14.1.0" - rc-tree "~5.7.0" - rc-util "^5.6.1" - - rc-checkbox@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.3.2.tgz#f91b3678c7edb2baa8121c9483c664fa6f0aefc1" - integrity sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - - rc-collapse@~3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.3.1.tgz#fc66d4c9cfeaf41e932b2de6da2d454874aee55a" - integrity sha512-cOJfcSe3R8vocrF8T+PgaHDrgeA1tX+lwfhwSj60NX9QVRidsILIbRNDLD6nAzmcvVC5PWiIRiR4S1OobxdhCg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.3.4" - rc-util "^5.2.1" - shallowequal "^1.1.0" - - rc-dialog@~8.9.0: - version "8.9.0" - resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-8.9.0.tgz#04dc39522f0321ed2e06018d4a7e02a4c32bd3ea" - integrity sha512-Cp0tbJnrvPchJfnwIvOMWmJ4yjX3HWFatO6oBFD1jx8QkgsQCR0p8nUWAKdd3seLJhEC39/v56kZaEjwp9muoQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-motion "^2.3.0" - rc-util "^5.21.0" - - rc-drawer@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-5.1.0.tgz#c1b8a46e5c064ba46a16233fbcfb1ccec6a73c10" - integrity sha512-pU3Tsn99pxGdYowXehzZbdDVE+4lDXSGb7p8vA9mSmr569oc2Izh4Zw5vLKSe/Xxn2p5MSNbLVqD4tz+pK6SOw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-motion "^2.6.1" - rc-util "^5.21.2" - - rc-dropdown@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-4.0.1.tgz#f65d9d3d89750241057db59d5a75e43cd4576b68" - integrity sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g== - dependencies: - "@babel/runtime" "^7.18.3" - classnames "^2.2.6" - rc-trigger "^5.3.1" - rc-util "^5.17.0" - - rc-field-form@~1.27.0: - version "1.27.1" - resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.27.1.tgz#11d61ccb43679e71fdbbff0d821326202554df84" - integrity sha512-RShegnwFu6TH8tl2olCxn+B4Wyh5EiQH8c/7wucbkLNyue05YiH5gomUAg1vbZjp71yFKwegClctsEG5CNBWAA== - dependencies: - "@babel/runtime" "^7.18.0" - async-validator "^4.1.0" - rc-util "^5.8.0" - - rc-image@~5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-5.7.1.tgz#678dc014845954c30237808c00c7b12e5f2a0b07" - integrity sha512-QyMfdhoUfb5W14plqXSisaYwpdstcLYnB0MjX5ccIK2rydQM9sDPuekQWu500DDGR2dBaIF5vx9XbWkNFK17Fg== - dependencies: - "@babel/runtime" "^7.11.2" - classnames "^2.2.6" - rc-dialog "~8.9.0" - rc-util "^5.0.6" - - rc-input-number@~7.3.5: - version "7.3.9" - resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-7.3.9.tgz#bc6560376ea595e3bf8fbd3137711cbc158800b5" - integrity sha512-u0+miS+SATdb6DtssYei2JJ1WuZME+nXaG6XGtR8maNyW5uGDytfDu60OTWLQEb0Anv/AcCzehldV8CKmKyQfA== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-util "^5.23.0" - - rc-input@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-0.1.2.tgz#7d6a0858a5f1fd89f78020cf6f13d672778481b1" - integrity sha512-ZPmwcFspgfYpUfbSx3KnLk9gImBcLOrlQCr4oTJ4jBoIXgJLTfm26yelzRgBJewhkvD8uJbgX0sQ/yOzuOHnJg== - dependencies: - "@babel/runtime" "^7.11.1" - classnames "^2.2.1" - rc-util "^5.18.1" - - rc-mentions@~1.9.1: - version "1.9.2" - resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-1.9.2.tgz#f264ebc4ec734dad9edc8e078b65ab3586d94a7b" - integrity sha512-uxb/lzNnEGmvraKWNGE6KXMVXvt8RQv9XW8R0Dqi3hYsyPiAZeHRCHQKdLARuk5YBhFhZ6ga55D/8XuY367g3g== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-menu "~9.6.0" - rc-textarea "^0.3.0" - rc-trigger "^5.0.4" - rc-util "^5.22.5" - - rc-menu@~9.6.0, rc-menu@~9.6.3: - version "9.6.4" - resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.6.4.tgz#033e7b8848c17a09a81b68b8d4c3fa457605f4f6" - integrity sha512-6DiNAjxjVIPLZXHffXxxcyE15d4isRL7iQ1ru4MqYDH2Cqc5bW96wZOdMydFtGLyDdnmEQ9jVvdCE9yliGvzkw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.4.3" - rc-overflow "^1.2.0" - rc-trigger "^5.1.2" - rc-util "^5.12.0" - shallowequal "^1.1.0" - - rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.6.2.tgz#3d31f97e41fb8e4f91a4a4189b6a98ac63342869" - integrity sha512-4w1FaX3dtV749P8GwfS4fYnFG4Rb9pxvCYPc/b2fw1cmlHJWNNgOFIz7ysiD+eOrzJSvnLJWlNQQncpNMXwwpg== - dependencies: - "@babel/runtime" "^7.11.1" - classnames "^2.2.1" - rc-util "^5.21.0" - - rc-notification@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-4.6.0.tgz#4e76fc2d0568f03cc93ac18c9e20763ebe29fa46" - integrity sha512-xF3MKgIoynzjQAO4lqsoraiFo3UXNYlBfpHs0VWvwF+4pimen9/H1DYLN2mfRWhHovW6gRpla73m2nmyIqAMZQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.2.0" - rc-util "^5.20.1" - - rc-overflow@^1.0.0, rc-overflow@^1.2.0: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc-overflow/-/rc-overflow-1.2.8.tgz#40f140fabc244118543e627cdd1ef750d9481a88" - integrity sha512-QJ0UItckWPQ37ZL1dMEBAdY1dhfTXFL9k6oTTcyydVwoUNMnMqCGqnRNA98axSr/OeDKqR6DVFyi8eA5RQI/uQ== - dependencies: - "@babel/runtime" "^7.11.1" - classnames "^2.2.1" - rc-resize-observer "^1.0.0" - rc-util "^5.19.2" - - rc-pagination@~3.1.17: - version "3.1.17" - resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-3.1.17.tgz#91e690aa894806e344cea88ea4a16d244194a1bd" - integrity sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - - rc-picker@~2.6.10: - version "2.6.10" - resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-2.6.10.tgz#8d0a473c079388bdb2d7358a2a54c7d5095893b4" - integrity sha512-9wYtw0DFWs9FO92Qh2D76P0iojUr8ZhLOtScUeOit6ks/F+TBLrOC1uze3IOu+u9gbDAjmosNWLKbBzx/Yuv2w== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - date-fns "2.x" - dayjs "1.x" - moment "^2.24.0" - rc-trigger "^5.0.4" - rc-util "^5.4.0" - shallowequal "^1.1.0" - - rc-progress@~3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-3.3.3.tgz#eb9bffbacab1534f2542f9f6861ce772254362b1" - integrity sha512-MDVNVHzGanYtRy2KKraEaWeZLri2ZHWIRyaE1a9MQ2MuJ09m+Wxj5cfcaoaR6z5iRpHpA59YeUxAlpML8N4PJw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-util "^5.16.1" - - rc-rate@~2.9.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.9.2.tgz#4a58965d1ecf91896ebae01d458b59056df0b4ea" - integrity sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-util "^5.0.1" - - rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-1.2.0.tgz#9f46052f81cdf03498be35144cb7c53fd282c4c7" - integrity sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - rc-util "^5.15.0" - resize-observer-polyfill "^1.5.1" - - rc-segmented@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/rc-segmented/-/rc-segmented-2.1.0.tgz#0e0afe646c1a0e44a0e18785f518c42633ec8efc" - integrity sha512-hUlonro+pYoZcwrH6Vm56B2ftLfQh046hrwif/VwLIw1j3zGt52p5mREBwmeVzXnSwgnagpOpfafspzs1asjGw== - dependencies: - "@babel/runtime" "^7.11.1" - classnames "^2.2.1" - rc-motion "^2.4.4" - rc-util "^5.17.0" - - rc-select@~14.1.0, rc-select@~14.1.13: - version "14.1.13" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.1.13.tgz#7eb53d00be82fb8e5050de3094e72edcf27ce6f6" - integrity sha512-WMEsC3gTwA1dbzWOdVIXDmWyidYNLq68AwvvUlRROw790uGUly0/vmqDozXrIr0QvN/A3CEULx12o+WtLCAefg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.0.1" - rc-overflow "^1.0.0" - rc-trigger "^5.0.4" - rc-util "^5.16.1" - rc-virtual-list "^3.2.0" - - rc-slider@~10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.0.1.tgz#7058c68ff1e1aa4e7c3536e5e10128bdbccb87f9" - integrity sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-util "^5.18.1" - shallowequal "^1.1.0" - - rc-steps@~4.1.0: - version "4.1.4" - resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-4.1.4.tgz#0ba82db202d59ca52d0693dc9880dd145b19dc23" - integrity sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w== - dependencies: - "@babel/runtime" "^7.10.2" - classnames "^2.2.3" - rc-util "^5.0.1" - - rc-switch@~3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-3.2.2.tgz#d001f77f12664d52595b4f6fb425dd9e66fba8e8" - integrity sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - rc-util "^5.0.1" - - rc-table@~7.26.0: - version "7.26.0" - resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.26.0.tgz#9d517e7fa512e7571fdcc453eb1bf19edfac6fbc" - integrity sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-resize-observer "^1.1.0" - rc-util "^5.22.5" - shallowequal "^1.1.0" - - rc-tabs@~12.1.0-alpha.1: - version "12.1.0-alpha.1" - resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-12.1.0-alpha.1.tgz#00f45b9dffa9bc6aff8ce2aff4a1a0764caada54" - integrity sha512-M+B88WEnGSuE+mR54fpgPbZLAakzxa/H6FmEetLBl5WG4I3AcwSk9amuIPC/tu0KXBl+H6Bg5ZwrrEUOBUvgzg== - dependencies: - "@babel/runtime" "^7.11.2" - classnames "2.x" - rc-dropdown "~4.0.0" - rc-menu "~9.6.0" - rc-motion "^2.6.2" - rc-resize-observer "^1.0.0" - rc-util "^5.5.0" - - rc-textarea@^0.3.0, rc-textarea@~0.3.0: - version "0.3.7" - resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-0.3.7.tgz#987142891efdedb774883c07e2f51b318fde5a11" - integrity sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - rc-resize-observer "^1.0.0" - rc-util "^5.7.0" - shallowequal "^1.1.0" - - rc-tooltip@~5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.2.2.tgz#e5cafa8ecebf78108936a0bcb93c150fa81ac93b" - integrity sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg== - dependencies: - "@babel/runtime" "^7.11.2" - classnames "^2.3.1" - rc-trigger "^5.0.0" - - rc-tree-select@~5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.5.0.tgz#96d935ec994a0f6b0fecc4c18f22f472fe8530a3" - integrity sha512-XS0Jvw4OjFz/Xvb2byEkBWv55JFKFz0HVvTBa/cPOHJaQh/3EaYwymEMnCCvGEzS1+5CfDVwMtA8j/v4rt1DHw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-select "~14.1.0" - rc-tree "~5.7.0" - rc-util "^5.16.1" - - rc-tree@~5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.7.0.tgz#d0e316eeeac2ba4a1c36b2b2201d84884f1c76a1" - integrity sha512-F+Ewkv/UcutshnVBMISP+lPdHDlcsL+YH/MQDVWbk+QdkfID7vXiwrHMEZn31+2Rbbm21z/HPceGS8PXGMmnQg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.0.1" - rc-util "^5.16.1" - rc-virtual-list "^3.4.8" - - rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10, rc-trigger@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.3.1.tgz#acafadf3eaf384e7f466c303bfa0f34c8137d7b8" - integrity sha512-5gaFbDkYSefZ14j2AdzucXzlWgU2ri5uEjkHvsf1ynRhdJbKxNOnw4PBZ9+FVULNGFiDzzlVF8RJnR9P/xrnKQ== - dependencies: - "@babel/runtime" "^7.18.3" - classnames "^2.2.6" - rc-align "^4.0.0" - rc-motion "^2.0.0" - rc-util "^5.19.2" - - rc-upload@~4.3.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-4.3.4.tgz#83ff7d3867631c37adbfd72ea3d1fd7e97ca84af" - integrity sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ== - dependencies: - "@babel/runtime" "^7.18.3" - classnames "^2.2.5" - rc-util "^5.2.0" - - rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.12.0, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.21.2, rc-util@^5.22.5, rc-util@^5.23.0, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4: - version "5.24.4" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.24.4.tgz#a4126f01358c86f17c1bf380a1d83d6c9155ae65" - integrity sha512-2a4RQnycV9eV7lVZPEJ7QwJRPlZNc06J7CwcwZo4vIHr3PfUqtYgl1EkUV9ETAc6VRRi8XZOMFhYG63whlIC9Q== - dependencies: - "@babel/runtime" "^7.18.3" - react-is "^16.12.0" - shallowequal "^1.1.0" - - rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.8: - version "3.4.8" - resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.4.8.tgz#c24c10c6940546b7e2a5e9809402c6716adfd26c" - integrity sha512-qSN+Rv4i/E7RCTvTMr1uZo7f3crJJg/5DekoCagydo9zsXrxj07zsFSxqizqW+ldGA16lwa8So/bIbV9Ofjddg== - dependencies: - classnames "^2.2.6" - rc-resize-observer "^1.0.0" - rc-util "^5.15.0" - - rc@1.2.8, rc@^1.2.7, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - - react-base16-styling@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== - dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" - - react-dev-utils@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" - integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== - dependencies: - "@babel/code-frame" "^7.16.0" - address "^1.1.2" - browserslist "^4.18.1" - chalk "^4.1.2" - cross-spawn "^7.0.3" - detect-port-alt "^1.1.6" - escape-string-regexp "^4.0.0" - filesize "^8.0.6" - find-up "^5.0.0" - fork-ts-checker-webpack-plugin "^6.5.0" - global-modules "^2.0.0" - globby "^11.0.4" - gzip-size "^6.0.0" - immer "^9.0.7" - is-root "^2.1.0" - loader-utils "^3.2.0" - open "^8.4.0" - pkg-up "^3.1.0" - prompts "^2.4.2" - react-error-overlay "^6.0.11" - recursive-readdir "^2.2.2" - shell-quote "^1.7.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - - react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - - react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== - - react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== - - react-helmet-async@*, react-helmet-async@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" - integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== - dependencies: - "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" - - react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - - "react-is@^17.0.1 || ^18.0.0", react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - - react-json-view@^1.21.3: - version "1.21.3" - resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" - integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== - dependencies: - flux "^4.0.1" - react-base16-styling "^0.6.0" - react-lifecycles-compat "^3.0.4" - react-textarea-autosize "^8.3.2" - - react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - - react-live@2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/react-live/-/react-live-2.2.3.tgz#260f99194213799f0005e473e7a4154c699d6a7c" - integrity sha512-tpKruvfytNETuzO3o1mrQUj180GVrq35IE8F5gH1NJVPt4szYCx83/dOSCOyjgRhhc3gQvl0pQ3k/CjOjwJkKQ== - dependencies: - buble "0.19.6" - core-js "^2.4.1" - dom-iterator "^1.0.0" - prism-react-renderer "^1.0.1" - prop-types "^15.5.8" - react-simple-code-editor "^0.10.0" - unescape "^1.0.1" - - react-loadable-ssr-addon-v5-slorber@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" - integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== - dependencies: - "@babel/runtime" "^7.10.3" - - react-markdown@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.3.tgz#e8aba0d2f5a1b2124d476ee1fff9448a2f57e4b3" - integrity sha512-We36SfqaKoVNpN1QqsZwWSv/OZt5J15LNgTLWynwAN5b265hrQrsjMtlRNwUvS+YyR3yDM8HpTNc4pK9H/Gc0A== - dependencies: - "@types/hast" "^2.0.0" - "@types/prop-types" "^15.0.0" - "@types/unist" "^2.0.0" - comma-separated-tokens "^2.0.0" - hast-util-whitespace "^2.0.0" - prop-types "^15.0.0" - property-information "^6.0.0" - react-is "^18.0.0" - remark-parse "^10.0.0" - remark-rehype "^10.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^0.3.0" - unified "^10.0.0" - unist-util-visit "^4.0.0" - vfile "^5.0.0" - - react-router-config@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" - integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== - dependencies: - "@babel/runtime" "^7.1.2" - - react-router-dom@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199" - integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.3" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - - react-router@5.3.3, react-router@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288" - integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - - react-simple-code-editor@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz#73e7ac550a928069715482aeb33ccba36efe2373" - integrity sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA== - - react-textarea-autosize@^8.3.2: - version "8.3.4" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" - integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== - dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.3.0" - use-latest "^1.2.1" - - react-waypoint@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/react-waypoint/-/react-waypoint-10.3.0.tgz#fcc60e86c6c9ad2174fa58d066dc6ae54e3df71d" - integrity sha512-iF1y2c1BsoXuEGz08NoahaLFIGI9gTUAAOKip96HUmylRT6DUtpgoBPjk/Y8dfcFVmfVDvUzWjNXpZyKTOV0SQ== - dependencies: - "@babel/runtime" "^7.12.5" - consolidated-events "^1.1.0 || ^2.0.0" - prop-types "^15.0.0" - react-is "^17.0.1 || ^18.0.0" - - react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - - readable-stream@^2.0.1: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - - readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - - readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - - reading-time@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" - integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== - - rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - - recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== - dependencies: - minimatch "3.0.4" - - regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== - dependencies: - regenerate "^1.4.2" - - regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== - dependencies: - regenerate "^1.4.2" - - regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - - regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - - regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - - regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - - regexpu-core@^4.2.0, regexpu-core@^4.5.4: - version "4.8.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - - regexpu-core@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.1.tgz#a69c26f324c1e962e9ffd0b88b055caba8089139" - integrity sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsgen "^0.7.1" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - - registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== - dependencies: - rc "1.2.8" - - registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - - regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - - regjsgen@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" - integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== - - regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== - dependencies: - jsesc "~0.5.0" - - regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - - rehype-katex@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rehype-katex/-/rehype-katex-4.0.0.tgz#ce11a5db0bff014350e7a9cfd30147d314b14330" - integrity sha512-0mgBqYugQyIW0eUl6RDOZ28Cat2YzrnWGaYgKCMQnJw6ClmKgLqXBnkDAPGh2mwxvkkKwQOUMUpSLpA5rt7rzA== - dependencies: - "@types/katex" "^0.11.0" - hast-util-to-text "^2.0.0" - katex "^0.12.0" - rehype-parse "^7.0.0" - unified "^9.0.0" - unist-util-visit "^2.0.0" - - rehype-parse@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-7.0.1.tgz#58900f6702b56767814afc2a9efa2d42b1c90c57" - integrity sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw== - dependencies: - hast-util-from-parse5 "^6.0.0" - parse5 "^6.0.0" - - rehype-stringify@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-9.0.3.tgz#70e3bd6d4d29e7acf36b802deed350305d2c3c17" - integrity sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw== - dependencies: - "@types/hast" "^2.0.0" - hast-util-to-html "^8.0.0" - unified "^10.0.0" - - relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - - remark-emoji@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" - integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== - dependencies: - emoticon "^3.2.0" - node-emoji "^1.10.0" - unist-util-visit "^2.0.3" - - remark-footnotes@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" - integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== - - remark-html@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-15.0.1.tgz#199cc78656d857834de0304c4b54a773f3272078" - integrity sha512-7ta5UPRqj8nP0GhGMYUAghZ/DRno7dgq7alcW90A7+9pgJsXzGJlFgwF8HOP1b1tMgT3WwbeANN+CaTimMfyNQ== - dependencies: - "@types/mdast" "^3.0.0" - hast-util-sanitize "^4.0.0" - hast-util-to-html "^8.0.0" - mdast-util-to-hast "^12.0.0" - unified "^10.0.0" - - remark-math@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-3.0.1.tgz#85a02a15b15cad34b89a27244d4887b3a95185bb" - integrity sha512-epT77R/HK0x7NqrWHdSV75uNLwn8g9qTyMqCRCDujL0vj/6T6+yhdrR7mjELWtkse+Fw02kijAaBuVcHBor1+Q== - - remark-mdx@1.6.22: - version "1.6.22" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" - integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== - dependencies: - "@babel/core" "7.12.9" - "@babel/helper-plugin-utils" "7.10.4" - "@babel/plugin-proposal-object-rest-spread" "7.12.1" - "@babel/plugin-syntax-jsx" "7.12.1" - "@mdx-js/util" "1.6.22" - is-alphabetical "1.0.4" - remark-parse "8.0.3" - unified "9.2.0" - - remark-parse@8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" - integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== - dependencies: - ccount "^1.0.0" - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^2.0.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^2.0.0" - vfile-location "^3.0.0" - xtend "^4.0.1" - - remark-parse@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775" - integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - unified "^10.0.0" - - remark-rehype@^10.0.0, remark-rehype@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" - integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-to-hast "^12.1.0" - unified "^10.0.0" - - remark-squeeze-paragraphs@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" - integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== - dependencies: - mdast-squeeze-paragraphs "^4.0.0" - - renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - - repeat-string@^1.0.0, repeat-string@^1.5.4: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - - require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - - "require-like@>= 0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" - integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== - - requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - - resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - - resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - - resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - - resolve@^1.1.6, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.3.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - - responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - - retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - - reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - - rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - - rollup-plugin-terser@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - - rollup@^2.43.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== - optionalDependencies: - fsevents "~2.3.2" - - rtl-detect@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" - integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== - - rtlcss@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" - integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== - dependencies: - find-up "^5.0.0" - picocolors "^1.0.0" - postcss "^8.3.11" - strip-json-comments "^3.1.1" - - run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - - rxjs@^7.5.4: - version "7.5.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" - integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== - dependencies: - tslib "^2.1.0" - - sade@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - - safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - - safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - - sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - - scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - - schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - - schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - - schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - - schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - - scroll-into-view-if-needed@^2.2.25: - version "2.2.29" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.29.tgz#551791a84b7e2287706511f8c68161e4990ab885" - integrity sha512-hxpAR6AN+Gh53AdAimHM6C8oTN1ppwVZITihix+WqalywBeFcQ6LdQP5ABNl26nX8GTEL7VT+b8lKpdqq65wXg== - dependencies: - compute-scroll-into-view "^1.0.17" - - section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - - select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - - selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - - semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - - semver@^5.4.1, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - - semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - - send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - - serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - - serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - - serve-handler@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.3.tgz#1bf8c5ae138712af55c758477533b9117f6435e8" - integrity sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w== - dependencies: - bytes "3.0.0" - content-disposition "0.5.2" - fast-url-parser "1.1.3" - mime-types "2.1.18" - minimatch "3.0.4" - path-is-inside "1.0.2" - path-to-regexp "2.2.1" - range-parser "1.2.0" - - serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - - serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - - setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - - setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - - setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - - shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - - shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - - sharp@^0.30.7: - version "0.30.7" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c" - integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" - prebuild-install "^7.1.1" - semver "^7.3.7" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - - shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - - shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - - shell-quote@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - - shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - - side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - - signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - - simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - - simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - - simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - - sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" - - sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - - sitemap@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" - integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== - dependencies: - "@types/node" "^17.0.5" - "@types/sax" "^1.2.1" - arg "^5.0.0" - sax "^1.2.4" - - slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - - slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - - sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - - sort-css-media-queries@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" - integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== - - source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - - source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - - source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - - source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - - source-map@^0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - - sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - - space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - - space-separated-tokens@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" - integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== - - spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - - spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - - sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - - stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - - state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== - - statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - - "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - - std-env@^3.0.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.2.1.tgz#00e260ec3901333537125f81282b9296b00d7304" - integrity sha512-D/uYFWkI/31OrnKmXZqGAGK5GbQRPp/BWA1nuITcc6ICblhhuQUPHS5E2GSCVS7Hwhf4ciq8qsATwBUxv+lI6w== - - string-convert@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" - integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== - - string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - - string-width@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - - string.prototype.matchall@^4.0.6: - version "4.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" - side-channel "^1.0.4" - - string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - - string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - - string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - - string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - - stringify-entities@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" - integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - - stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - - strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - - strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - - strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - - strip-comments@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" - integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== - - strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - - strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - - strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - - style-loader@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" - integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== - - style-to-object@0.3.0, style-to-object@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" - integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== - dependencies: - inline-style-parser "0.1.1" - - styled-components@^5.3.5: - version "5.3.5" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.5.tgz#a750a398d01f1ca73af16a241dec3da6deae5ec4" - integrity sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/traverse" "^7.4.5" - "@emotion/is-prop-valid" "^1.1.0" - "@emotion/stylis" "^0.8.4" - "@emotion/unitless" "^0.7.4" - babel-plugin-styled-components ">= 1.12.0" - css-to-react-native "^3.0.0" - hoist-non-react-statics "^3.0.0" - shallowequal "^1.1.0" - supports-color "^5.5.0" - - stylehacks@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" - integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== - dependencies: - browserslist "^4.16.6" - postcss-selector-parser "^6.0.4" - - supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - - supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - - supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - - supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - - svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - - svgo@^2.7.0, svgo@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - - tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - - tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - - tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - - tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - - temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - - tempy@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" - integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== - dependencies: - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - - terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: - version "5.3.6" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" - integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.14" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.0" - terser "^5.14.1" - - terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: - version "5.15.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" - integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - - text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - - thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - - tiny-invariant@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" - integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== - - tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - - to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - - to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - - to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - - toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== - - toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - - totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== - - tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - - tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - - trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - - trim-trailing-lines@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" - integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== - - trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== - - trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== - - trough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" - integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== - - tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - - tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - - tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - - tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - - type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - - type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - - type-fest@^2.5.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - - type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - - typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - - typescript@^4.6.4: - version "4.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.3.tgz#d59344522c4bc464a65a730ac695007fdb66dd88" - integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig== - - ua-parser-js@^0.7.30: - version "0.7.31" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" - integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== - - unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - - unescape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96" - integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ== - dependencies: - extend-shallow "^2.0.1" - - unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== - dependencies: - inherits "^2.0.0" - xtend "^4.0.0" - - unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - - unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - - unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - - unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - - unified@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" - integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - - unified@^10.0.0: - version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" - integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== - dependencies: - "@types/unist" "^2.0.0" - bail "^2.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^5.0.0" - - unified@^9.0.0, unified@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" - integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - - unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - - unist-builder@2.0.3, unist-builder@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" - integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== - - unist-builder@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" - integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== - dependencies: - "@types/unist" "^2.0.0" - - unist-util-find-after@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz#5c65fcebf64d4f8f496db46fa8fd0fbf354b43e6" - integrity sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ== - dependencies: - unist-util-is "^4.0.0" - - unist-util-find-after@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-4.0.0.tgz#1101cebf5fed88ae3c6f3fa676e86fd5772a4f32" - integrity sha512-gfpsxKQde7atVF30n5Gff2fQhAc4/HTOV4CvkXpTg9wRfQhZWdXitpyXHWB6YcYgnsxLx+4gGHeVjCTAAp9sjw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - - unist-util-generated@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" - integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== - - unist-util-generated@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.0.tgz#86fafb77eb6ce9bfa6b663c3f5ad4f8e56a60113" - integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== - - unist-util-is@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" - integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== - - unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - - unist-util-is@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" - integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== - - unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" - integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== - - unist-util-position@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.3.tgz#5290547b014f6222dff95c48d5c3c13a88fadd07" - integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ== - dependencies: - "@types/unist" "^2.0.0" - - unist-util-remove-position@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" - integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== - dependencies: - unist-util-visit "^2.0.0" - - unist-util-remove@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" - integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== - dependencies: - unist-util-is "^4.0.0" - - unist-util-select@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-2.0.2.tgz#cb2774b599695172e7b60a8b5f50793e418f7ea6" - integrity sha512-Yv5Z5ShMxv7Z9Dw175tKvOiRVXV4FrMHG778DSD9Z0jALgb3wAx9DoeInr3200QlYp71rYUXzzJdCb76xKdrCw== - dependencies: - css-selector-parser "^1.1.0" - not "^0.1.0" - nth-check "^1.0.1" - unist-util-is "^3.0.0" - zwitch "^1.0.3" - - unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - - unist-util-stringify-position@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" - integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== - dependencies: - "@types/unist" "^2.0.0" - - unist-util-visit-parents@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" - integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - - unist-util-visit-parents@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz#868f353e6fce6bf8fa875b251b0f4fec3be709bb" - integrity sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - - unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - - unist-util-visit@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.1.tgz#1c4842d70bd3df6cc545276f5164f933390a9aad" - integrity sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" - - universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - - unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - - upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - - update-browserslist-db@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" - integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - - update-notifier@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - - uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - - url-loader@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - - url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - - use-composed-ref@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" - integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== - - use-isomorphic-layout-effect@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - - use-latest@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" - integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== - dependencies: - use-isomorphic-layout-effect "^1.1.1" - - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - - util@^0.12.0: - version "0.12.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - - utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - - utility-types@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" - integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== - - utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - - uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - - uvu@^0.5.0: - version "0.5.6" - resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" - integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== - dependencies: - dequal "^2.0.0" - diff "^5.0.0" - kleur "^4.0.3" - sade "^1.7.3" - - value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - - vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - - vfile-location@^3.0.0, vfile-location@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" - integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== - - vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" - integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" - - vfile-message@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d" - integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - - vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" - integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" - - vfile@^5.0.0: - version "5.3.5" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.5.tgz#ec2e206b1414f561c85b7972bb1eeda8ab47ee61" - integrity sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - - vlq@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" - integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== - - wait-on@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" - integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== - dependencies: - axios "^0.25.0" - joi "^17.6.0" - lodash "^4.17.21" - minimist "^1.2.5" - rxjs "^7.5.4" - - watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - - wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - - web-namespaces@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" - integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== - - webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - - webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - - webpack-bundle-analyzer@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz#bee2ee05f4ba4ed430e4831a319126bb4ed9f5a6" - integrity sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw== - dependencies: - acorn "^8.0.4" - acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^7.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" - opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" - - webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - - webpack-dev-server@^4.9.3: - version "4.11.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" - integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" - - webpack-merge@^5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - - webpack-sources@^3.2.2, webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - - webpack@^5.73.0: - version "5.74.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" - integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - - webpackbar@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" - integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== - dependencies: - chalk "^4.1.0" - consola "^2.15.3" - pretty-time "^1.1.0" - std-env "^3.0.1" - - websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - - websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - - whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - - whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - - which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - - which-typed-array@^1.1.2: - version "1.1.8" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" - integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-abstract "^1.20.0" - for-each "^0.3.3" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.9" - - which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - - which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - - widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - - widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== - dependencies: - string-width "^5.0.1" - - wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - - workbox-background-sync@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" - integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== - dependencies: - idb "^7.0.1" - workbox-core "6.5.4" - - workbox-broadcast-update@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" - integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== - dependencies: - workbox-core "6.5.4" - - workbox-build@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" - integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== - dependencies: - "@apideck/better-ajv-errors" "^0.3.1" - "@babel/core" "^7.11.1" - "@babel/preset-env" "^7.11.0" - "@babel/runtime" "^7.11.2" - "@rollup/plugin-babel" "^5.2.0" - "@rollup/plugin-node-resolve" "^11.2.1" - "@rollup/plugin-replace" "^2.4.1" - "@surma/rollup-plugin-off-main-thread" "^2.2.3" - ajv "^8.6.0" - common-tags "^1.8.0" - fast-json-stable-stringify "^2.1.0" - fs-extra "^9.0.1" - glob "^7.1.6" - lodash "^4.17.20" - pretty-bytes "^5.3.0" - rollup "^2.43.1" - rollup-plugin-terser "^7.0.0" - source-map "^0.8.0-beta.0" - stringify-object "^3.3.0" - strip-comments "^2.0.1" - tempy "^0.6.0" - upath "^1.2.0" - workbox-background-sync "6.5.4" - workbox-broadcast-update "6.5.4" - workbox-cacheable-response "6.5.4" - workbox-core "6.5.4" - workbox-expiration "6.5.4" - workbox-google-analytics "6.5.4" - workbox-navigation-preload "6.5.4" - workbox-precaching "6.5.4" - workbox-range-requests "6.5.4" - workbox-recipes "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - workbox-streams "6.5.4" - workbox-sw "6.5.4" - workbox-window "6.5.4" - - workbox-cacheable-response@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" - integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== - dependencies: - workbox-core "6.5.4" - - workbox-core@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" - integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== - - workbox-expiration@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" - integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== - dependencies: - idb "^7.0.1" - workbox-core "6.5.4" - - workbox-google-analytics@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" - integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== - dependencies: - workbox-background-sync "6.5.4" - workbox-core "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - - workbox-navigation-preload@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" - integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== - dependencies: - workbox-core "6.5.4" - - workbox-precaching@6.5.4, workbox-precaching@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" - integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== - dependencies: - workbox-core "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - - workbox-range-requests@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" - integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== - dependencies: - workbox-core "6.5.4" - - workbox-recipes@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" - integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== - dependencies: - workbox-cacheable-response "6.5.4" - workbox-core "6.5.4" - workbox-expiration "6.5.4" - workbox-precaching "6.5.4" - workbox-routing "6.5.4" - workbox-strategies "6.5.4" - - workbox-routing@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" - integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== - dependencies: - workbox-core "6.5.4" - - workbox-strategies@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" - integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== - dependencies: - workbox-core "6.5.4" - - workbox-streams@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" - integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== - dependencies: - workbox-core "6.5.4" - workbox-routing "6.5.4" - - workbox-sw@6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" - integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== - - workbox-window@6.5.4, workbox-window@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" - integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== - dependencies: - "@types/trusted-types" "^2.0.2" - workbox-core "6.5.4" - - wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - - wrap-ansi@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz#2101e861777fec527d0ea90c57c6b03aac56a5b3" - integrity sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - - wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - - write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - - ws@^7.3.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - - ws@^8.4.2: - version "8.9.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e" - integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== - - xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - - xml-js@^1.6.11: - version "1.6.11" - resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" - integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== - dependencies: - sax "^1.2.4" - - xtend@^4.0.0, xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - - yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - - yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - - yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - - zwitch@^1.0.0, zwitch@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" - integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== - - zwitch@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1" - integrity sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA== diff --git a/website/yarn.lock b/website/yarn.lock new file mode 100644 index 000000000..f4db2c571 --- /dev/null +++ b/website/yarn.lock @@ -0,0 +1,10831 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aldridged/docusaurus-plugin-lunr@^1.0.0-alpha.10": + version "1.0.0-alpha.10" + resolved "https://registry.yarnpkg.com/@aldridged/docusaurus-plugin-lunr/-/docusaurus-plugin-lunr-1.0.0-alpha.10.tgz#756cb72bee00299411fb90897face34861673e49" + integrity sha512-1vcT7snOJ6pQDUuCERqBDlte1lDuT6E0XNUWeCtCzZROLknQbVoGgGWveSKsDJv3DvcgRM7UgJupcif31W0xdQ== + dependencies: + "@docusaurus/types" "^2.0.0-alpha.58" + "@docusaurus/utils" "^2.0.0-alpha.58" + autocomplete.js "^0.37.1" + fs-extra "^9.0.1" + globby "^11.0.1" + lodash "^4.17.15" + lunr "^2.3.8" + remove-markdown "^0.3.0" + striptags "^3.1.1" + urijs "^1.19.2" + +"@algolia/autocomplete-core@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz#85ff36b2673654a393c8c505345eaedd6eaa4f70" + integrity sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-preset-algolia@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz#610ee1d887962f230b987cba2fd6556478000bc3" + integrity sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-shared@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz#78aea1140a50c4d193e1f06a13b7f12c5e2cbeea" + integrity sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg== + +"@algolia/cache-browser-local-storage@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz#4c54a9b1795dcc1cd9f9533144f7df3057984d39" + integrity sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/cache-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.0.tgz#bc3da15548df585b44d76c55e66b0056a2b3f917" + integrity sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ== + +"@algolia/cache-in-memory@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz#eb55a92cb8eb8641903a2b23fd6d05ebdaca2010" + integrity sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/client-account@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.0.tgz#4b13e5a8e50a06be1f3289d9db337096ebc66b73" + integrity sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-analytics@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz#1b36ffbe913b7b4d8900bc15982ca431f47a473c" + integrity sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.0.tgz#67fd898006e3ac359ea3e3ed61abfc26147ffa53" + integrity sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ== + dependencies: + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-personalization@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz#428d9f4762c22856b6062bb54351eb31834db6c1" + integrity sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-search@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.0.tgz#0053c682f5f588e006c20791c27e8bcb0aa5b53c" + integrity sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.0.tgz#0fcea39c9485554edb4cdbfd965c5748b0b837ac" + integrity sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw== + +"@algolia/logger-console@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.0.tgz#8ac56ef4259c4fa3eb9eb6586c7b4b4ed942e8da" + integrity sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg== + dependencies: + "@algolia/logger-common" "4.17.0" + +"@algolia/requester-browser-xhr@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz#f52fdeeac2f3c531f00838920af33a73066a159b" + integrity sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/requester-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.0.tgz#746020d2cbc829213e7cede8eef2182c7a71e32b" + integrity sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg== + +"@algolia/requester-node-http@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz#262276d94c25a4ec2128b1bdfb9471529528d8b9" + integrity sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/transporter@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.0.tgz#6aabdbc20c475d72d83c8e6519f1191f1a51fb37" + integrity sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA== + dependencies: + "@algolia/cache-common" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@ant-design/colors@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" + integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ== + dependencies: + "@ctrl/tinycolor" "^3.4.0" + +"@ant-design/icons-svg@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" + integrity sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw== + +"@ant-design/icons@^4.7.0": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-4.8.0.tgz#3084e2bb494cac3dad6c0392f77c1efc90ee1fa4" + integrity sha512-T89P2jG2vM7OJ0IfGx2+9FC5sQjtTzRSz+mCHTXkFn/ELZc2YpfStmYHmqzq2Jx55J0F7+O6i5/ZKFSVNWCKNg== + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons-svg" "^4.2.1" + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + rc-util "^5.9.4" + +"@ant-design/react-slick@~0.29.1": + version "0.29.2" + resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-0.29.2.tgz#53e6a7920ea3562eebb304c15a7fc2d7e619d29c" + integrity sha512-kgjtKmkGHa19FW21lHnAfyyH9AAoh35pBdcJ53rHmQ3O+cfFHGHnUbj/HFrRNJ5vIts09FKJVAD8RpaC+RaWfA== + dependencies: + "@babel/runtime" "^7.10.4" + classnames "^2.2.5" + json2mq "^0.2.0" + lodash "^4.17.21" + resize-observer-polyfill "^1.5.1" + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.6" + resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz#957d4c28e886a64a8141f7522783be65733ff097" + integrity sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" + integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.11.1", "@babel/core@^7.18.6", "@babel/core@^7.19.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" + integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.4" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.4" + "@babel/types" "^7.21.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== + dependencies: + "@babel/types" "^7.21.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" + integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18" + integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz#40411a8ab134258ad2cf3a3d987ec6aa0723cee5" + integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.3.1" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" + integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== + dependencies: + "@babel/types" "^7.21.0" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + +"@babel/plugin-proposal-async-generator-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.20.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-arrow-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" + integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" + integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e" + integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" + integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== + dependencies: + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" + +"@babel/plugin-transform-modules-systemjs@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-constant-elements@^7.18.12": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" + integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" + integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.21.0" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" + integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== + dependencies: + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" + integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.20.7" + "@babel/plugin-transform-async-to-generator" "^7.20.7" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.20.7" + "@babel/plugin-transform-destructuring" "^7.21.3" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.21.0" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.21.3" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.20.5" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.20.7" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.21.4" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" + integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-typescript" "^7.21.3" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime-corejs3@^7.18.6": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz#6e4939d9d9789ff63e2dc58e88f13a3913a24eba" + integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.3", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.4.5": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" + integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.4" + "@babel/types" "^7.21.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@ctrl/tinycolor@^3.4.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz#53fa5fe9c34faee89469e48f91d51a3766108bc8" + integrity sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ== + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@docsearch/css@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.3.tgz#f9346c9e24602218341f51b8ba91eb9109add434" + integrity sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg== + +"@docsearch/react@^3.1.1": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.3.tgz#907b6936a565f880b4c0892624b4f7a9f132d298" + integrity sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q== + dependencies: + "@algolia/autocomplete-core" "1.7.4" + "@algolia/autocomplete-preset-algolia" "1.7.4" + "@docsearch/css" "3.3.3" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.0.tgz#a12c175cb2e5a7e4582e65876a50813f6168913d" + integrity sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^2.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz#9213586358e0cce517f614af041eb7d184f8add6" + integrity sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/eslint-plugin@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/eslint-plugin/-/eslint-plugin-2.4.0.tgz#8647f8bfce0e276123fdff5845f23744960728dc" + integrity sha512-TjhDLEy/sREFYGM3ARK9VV+88/rwUliKv4jRx8Iox+e6r6YvQ6R4KpmpO3zFbINL4oI94hK7nenCg4D79RYBYQ== + dependencies: + "@typescript-eslint/utils" "^5.30.5" + tslib "^2.4.0" + +"@docusaurus/logger@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.0.tgz#393d91ad9ecdb9a8f80167dd6a34d4b45219b835" + integrity sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/lqip-loader@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/lqip-loader/-/lqip-loader-2.4.0.tgz#ce2dbe32c0c96c2398e716aed9407606e894f96e" + integrity sha512-vO0SMc+pO1wJDXxJVd/wS+snnkI5oESqqSfYiyvRjLS+pMAkcZoiQCV2Om6uvSi42EthOoNeKfYQcAg3zDrOiQ== + dependencies: + "@docusaurus/logger" "2.4.0" + file-loader "^6.2.0" + lodash "^4.17.21" + sharp "^0.30.7" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz#c6310342904af2f203e7df86a9df623f86840f2d" + integrity sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g== + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/module-type-aliases@2.4.0", "@docusaurus/module-type-aliases@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz#6961605d20cd46f86163ed8c2d83d438b02b4028" + integrity sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg== + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-client-redirects@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.4.0.tgz#53117d112ac9cc191deda053af4335e0381b4125" + integrity sha512-HsS+Dc2ZLWhfpjYJ5LIrOB/XfXZcElcC7o1iA4yIVtiFz+LHhwP863fhqbwSJ1c6tNDOYBH3HwbskHrc/PIn7Q== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + eta "^2.0.0" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + +"@docusaurus/plugin-content-blog@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz#50dbfbc7b51f152ae660385fd8b34076713374c3" + integrity sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + cheerio "^1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.4.0", "@docusaurus/plugin-content-docs@^2.0.0-rc.1": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz#36e235adf902325735b873b4f535205884363728" + integrity sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz#6169909a486e1eae0ddffff0b1717ce4332db4d4" + integrity sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz#1ad513fe9bcaf017deccf62df8b8843faeeb7d37" + integrity sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + fs-extra "^10.1.0" + react-json-view "^1.21.3" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz#8062d7a09d366329dfd3ce4e8a619da8624b6cc3" + integrity sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz#a8efda476f971410dfb3aab1cfe1f0f7d269adc5" + integrity sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-tag-manager@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz#9a94324ac496835fc34e233cc60441df4e04dfdd" + integrity sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-ideal-image@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-ideal-image/-/plugin-ideal-image-2.4.0.tgz#5d2b6298a0a92356fcf0c058e952c43912262d70" + integrity sha512-U5sTwOyaqx2qiXuy0NjI0nowfqvgr02CZHV8Hx/U0ByBOLPgNgy2IW8K+tYmsvLQIBhwmsfjNFGPLjYD1eLw8w== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/lqip-loader" "2.4.0" + "@docusaurus/responsive-loader" "^1.7.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@endiliey/react-ideal-image" "^0.0.11" + react-waypoint "^10.3.0" + sharp "^0.30.7" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-pwa@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-pwa/-/plugin-pwa-2.4.0.tgz#f1a356b3dbc0e90410cf8807fd1a212f6c1e23fe" + integrity sha512-urKlFl35YQoIFrSZ5+a0fXaI4KxHHtA9IAsmFbp21HBSwWoD15f0Zy7jSsY6QYj+pECtVPQ3edouI6U8Jlk8vQ== + dependencies: + "@babel/core" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@docusaurus/core" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + babel-loader "^8.2.5" + clsx "^1.2.1" + core-js "^3.23.3" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + workbox-build "^6.5.3" + workbox-precaching "^6.5.3" + workbox-window "^6.5.3" + +"@docusaurus/plugin-sitemap@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz#ba0eb43565039fe011bdd874b5c5d7252b19d709" + integrity sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz#92fdcfab35d8d0ffb8c38bcbf439e4e1cb0566a3" + integrity sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/plugin-debug" "2.4.0" + "@docusaurus/plugin-google-analytics" "2.4.0" + "@docusaurus/plugin-google-gtag" "2.4.0" + "@docusaurus/plugin-google-tag-manager" "2.4.0" + "@docusaurus/plugin-sitemap" "2.4.0" + "@docusaurus/theme-classic" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-search-algolia" "2.4.0" + "@docusaurus/types" "2.4.0" + +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + +"@docusaurus/responsive-loader@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@docusaurus/responsive-loader/-/responsive-loader-1.7.0.tgz#508df2779e04311aa2a38efb67cf743109afd681" + integrity sha512-N0cWuVqTRXRvkBxeMQcy/OF2l7GN8rmni5EzR3HpwR+iU2ckYPnziceojcxvvxQ5NqZg1QfEW0tycQgHp+e+Nw== + dependencies: + loader-utils "^2.0.0" + +"@docusaurus/theme-classic@2.4.0", "@docusaurus/theme-classic@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz#a5404967b00adec3472efca4c3b3f6a5e2021c78" + integrity sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@mdx-js/react" "^1.6.22" + clsx "^1.2.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.43" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.5" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@2.4.0", "@docusaurus/theme-common@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.0.tgz#626096fe9552d240a2115b492c7e12099070cf2d" + integrity sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg== + dependencies: + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.5" + tslib "^2.4.0" + use-sync-external-store "^1.2.0" + utility-types "^3.10.0" + +"@docusaurus/theme-live-codeblock@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-live-codeblock/-/theme-live-codeblock-2.4.0.tgz#9abe9b88d2d7218cc2c5733e99e6cdba4c84621e" + integrity sha512-rg+HDWNUvcA0+8DLDJ+4TP5dv5zEgwgrmQmu4hq/sTMbTL1hUBrLCfvSRbX1NQ5zOw+jPhPi740eXwe9XIkmEQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@philpl/buble" "^0.19.7" + clsx "^1.2.1" + fs-extra "^10.1.0" + react-live "2.2.3" + tslib "^2.4.0" + +"@docusaurus/theme-search-algolia@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz#07d297d50c44446d6bc5a37be39afb8f014084e1" + integrity sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.1" + eta "^2.0.0" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@2.4.0", "@docusaurus/theme-translations@^2.0.0-rc.1": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz#62dacb7997322f4c5a828b3ab66177ec6769eb33" + integrity sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@2.4.0", "@docusaurus/types@^2.0.0-alpha.58": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.0.tgz#f94f89a0253778b617c5d40ac6f16b17ec55ce41" + integrity sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.4.0", "@docusaurus/utils-common@^2.0.0-rc.1", "@docusaurus/utils-common@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.0.tgz#eb2913871860ed32e73858b4c7787dd820c5558d" + integrity sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.4.0", "@docusaurus/utils-validation@^2.0.0-rc.1": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz#1ed92bfab5da321c4a4d99cad28a15627091aa90" + integrity sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w== + dependencies: + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@2.4.0", "@docusaurus/utils@^2.0.0-alpha.58", "@docusaurus/utils@^2.0.0-rc.1", "@docusaurus/utils@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.0.tgz#fdf0c3545819e48bb57eafc5057495fd4d50e900" + integrity sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg== + dependencies: + "@docusaurus/logger" "2.4.0" + "@svgr/webpack" "^6.2.1" + escape-string-regexp "^4.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@easyops-cn/autocomplete.js@^0.38.1": + version "0.38.1" + resolved "https://registry.yarnpkg.com/@easyops-cn/autocomplete.js/-/autocomplete.js-0.38.1.tgz#46dff5795a9a032fa9b9250fdf63ca6c61c07629" + integrity sha512-drg76jS6syilOUmVNkyo1c7ZEBPcPuK+aJA7AksM5ZIIbV57DMHCywiCr+uHyv8BE5jUTU98j/H7gVrkHrWW3Q== + dependencies: + cssesc "^3.0.0" + immediate "^3.2.3" + +"@easyops-cn/docusaurus-search-local@^0.32.0": + version "0.32.1" + resolved "https://registry.yarnpkg.com/@easyops-cn/docusaurus-search-local/-/docusaurus-search-local-0.32.1.tgz#1149d2a49592dc58c9a7517ab62a3e4ae23575da" + integrity sha512-UAOk+u2uUUdmrL/Pz9AlKp7swQdc+hFMf5jCGYwkRt5rDGcq0lndr+GKYC4EORa4SfEUhcBCO/Ixf+2KuVSlKA== + dependencies: + "@docusaurus/plugin-content-docs" "^2.0.0-rc.1" + "@docusaurus/theme-translations" "^2.0.0-rc.1" + "@docusaurus/utils" "^2.0.0-rc.1" + "@docusaurus/utils-common" "^2.0.0-rc.1" + "@docusaurus/utils-validation" "^2.0.0-rc.1" + "@easyops-cn/autocomplete.js" "^0.38.1" + "@node-rs/jieba" "^1.6.0" + cheerio "^1.0.0-rc.3" + clsx "^1.1.1" + debug "^4.2.0" + fs-extra "^10.0.0" + klaw-sync "^6.0.0" + lunr "^2.3.9" + lunr-languages "^1.4.0" + mark.js "^8.11.1" + tslib "^2.4.0" + +"@emotion/is-prop-valid@^1.1.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== + dependencies: + "@emotion/memoize" "^0.8.0" + +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@endiliey/react-ideal-image@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@endiliey/react-ideal-image/-/react-ideal-image-0.0.11.tgz#dc3803d04e1409cf88efa4bba0f67667807bdf27" + integrity sha512-QxMjt/Gvur/gLxSoCy7VIyGGGrGmDN+VHcXkN3R2ApoWX0EYUE+hMgPHSW/PV6VVebZ1Nd4t2UnGRBDihu16JQ== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" + integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@node-rs/jieba-android-arm-eabi@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.6.2.tgz#e34836593a7d5144fc625c924d6957d888ac298e" + integrity sha512-DWRjc+RmSsiALdS7Ay1dI/Qh86M9tP20UKNeKKHKQLeVCl8isupUVLFxBdSLqmarPBJImh6nI67TTRpPfcOYMg== + +"@node-rs/jieba-android-arm64@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.6.2.tgz#727935efd7bbaccdc9d9454e61cb693fcd0b1c00" + integrity sha512-3T6+mG9ZR28eu1qe3Sh2DTR/eZVIaAQaaR5C2UHTsJfxVZSeGcd1ogoLgBom9iU3QDIa0kJCliH+GHiOmqr1xw== + +"@node-rs/jieba-darwin-arm64@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.6.2.tgz#184cb496d407c7cac45659c5b7c1494698c6abdc" + integrity sha512-CvYmRSYebd4gpBYzmLivB17M4faNAe3o3BQ1E3MvjmlEu/J43XD59rOTdSkbe5ZykstC4i/xhaXKWRG2gcaOig== + +"@node-rs/jieba-darwin-x64@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.6.2.tgz#1aa3ef1b290d5ebf63dd7cd5401ed55134356132" + integrity sha512-YcI9nNnYrNMhh2onnWnEkNdByYj0JbqPD4yF4GCmF4SsFRcEUEEnJrFE42FZoWzhDhUrE3hSU0uBjL+8iggr9w== + +"@node-rs/jieba-freebsd-x64@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.6.2.tgz#12ba9046f913d6b839e90e5c5d7ac209e330f46d" + integrity sha512-iaH/F6JWEkE1DCeC0MEsglBuHbRj03Rj/PMAMhLZBruQyVJaQU7WHVFEt+eN+FbR0cPLUhvj4oltPF2nGlVYFQ== + +"@node-rs/jieba-linux-arm-gnueabihf@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.6.2.tgz#0d6f1882798ff99e3b196f1f92676a47074bedc6" + integrity sha512-T2V1KZ7Xhorm3xVG4k52xw0pH8Q4UevAey4mEdA6NDwlCnScqqENfzgMpt8Egv5xpBExte8tebB1+LLACD6Khg== + +"@node-rs/jieba-linux-arm64-gnu@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.6.2.tgz#ebe31ad3b5cbc3d0800ac40a589798ce0d1f554f" + integrity sha512-sZcAa/MGy6LTlEIU6uON9uY/AorQLbWVEEZ3g4W8FHAyqtdEeOByNNZG84qZzjXlWZbsjKRETArpGH2QBaXeWQ== + +"@node-rs/jieba-linux-arm64-musl@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.6.2.tgz#8a7b613c6c8f673f5258c1e9a710a808942689d3" + integrity sha512-k+T34g1Pwr5sfpOSyjaCa9Mp4JCZ2XbP4pzrRsbc6ri7Y1tf9QzFR/fXgG5H24qRdLhzuXOJqdnJ6xVHTVUU9Q== + +"@node-rs/jieba-linux-x64-gnu@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.6.2.tgz#d12c7ef648f21357642f7c517e2859e669feaf3f" + integrity sha512-jcbrneEACIhZkVs3VOwhDWn7X8q18kfUugF3hhxW9ZzymuEMTUvcBFRWR18hk/WoHA5/MbcStr3ufteI+Wy5aw== + +"@node-rs/jieba-linux-x64-musl@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.6.2.tgz#a8a0106977785be1eb7b6afc5246024df5cffcf1" + integrity sha512-DbvAGsU+LNIiC7cK7uHsbM6ptwb0MMe4DSfYYhxJgt7GqDeWoDEd/fIGFO6GAgBLzFUpjAQgP6PBhCl55X2Avg== + +"@node-rs/jieba-win32-arm64-msvc@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.6.2.tgz#2997afa0e340ee2ffabf4c47d3a878d073e62ce6" + integrity sha512-I62/aVCCKxuTmCagvjyfj4rCbUaJTEjVModv2iWDw9lzt8UJtPd8C4XDe112r5I5AfkTfAHNZBe4k0zcE2NeuQ== + +"@node-rs/jieba-win32-ia32-msvc@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.6.2.tgz#a0c3a31f310ecc410dc94b8dd5c2f7cc6825e544" + integrity sha512-MizaOJGcYxHgeiGj/dEap+E0LZNuCxejh2NSjY5QMDMPOv8O7I0PdXSgdnOPypDTQE0dnO99r+TI2EUB0TDHxw== + +"@node-rs/jieba-win32-x64-msvc@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.6.2.tgz#3ee5d52014821c6dc41da8e4d9dc00a9e08dd070" + integrity sha512-d2W0IoxJ176jODE8wF6nNxfddYEaCtQ1xckJjIve/xHwUiBElnt81A41wZnfeyGx3pUaWMo4132s9EYJlN0Umg== + +"@node-rs/jieba@^1.6.0": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@node-rs/jieba/-/jieba-1.6.2.tgz#64e1a5482b01e72a03ee4a395c71de0702133c70" + integrity sha512-1GA3RqfGgjemgMoh2wajdiApYEGZ7mjzsqIqEjHv7rHuIpSJSEgV+Jt81popd0DK0HLPNShVV3T3fSmTgv20Zw== + optionalDependencies: + "@node-rs/jieba-android-arm-eabi" "1.6.2" + "@node-rs/jieba-android-arm64" "1.6.2" + "@node-rs/jieba-darwin-arm64" "1.6.2" + "@node-rs/jieba-darwin-x64" "1.6.2" + "@node-rs/jieba-freebsd-x64" "1.6.2" + "@node-rs/jieba-linux-arm-gnueabihf" "1.6.2" + "@node-rs/jieba-linux-arm64-gnu" "1.6.2" + "@node-rs/jieba-linux-arm64-musl" "1.6.2" + "@node-rs/jieba-linux-x64-gnu" "1.6.2" + "@node-rs/jieba-linux-x64-musl" "1.6.2" + "@node-rs/jieba-win32-arm64-msvc" "1.6.2" + "@node-rs/jieba-win32-ia32-msvc" "1.6.2" + "@node-rs/jieba-win32-x64-msvc" "1.6.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@philpl/buble@^0.19.7": + version "0.19.7" + resolved "https://registry.yarnpkg.com/@philpl/buble/-/buble-0.19.7.tgz#27231e6391393793b64bc1c982fc7b593198b893" + integrity sha512-wKTA2DxAGEW+QffRQvOhRQ0VBiYU2h2p8Yc1oBNlqSKws48/8faxqKNIuub0q4iuyTuLwtB8EkwiKwhlfV1PBA== + dependencies: + acorn "^6.1.1" + acorn-class-fields "^0.2.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.0.1" + chalk "^2.4.2" + magic-string "^0.25.2" + minimist "^1.2.0" + os-homedir "^1.0.1" + regexpu-core "^4.5.4" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@rc-component/portal@^1.0.0-6", "@rc-component/portal@^1.0.0-8", "@rc-component/portal@^1.0.2": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@rc-component/portal/-/portal-1.1.1.tgz#1a30ffe51c240b54360cba8e8bfc5d1f559325c4" + integrity sha512-m8w3dFXX0H6UkJ4wtfrSwhe2/6M08uz24HHrF8pWfAXPwA9hwCuTE5per/C86KwNLouRpwFGcr7LfpHaa1F38g== + dependencies: + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + rc-util "^5.24.4" + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + dependencies: + eval "^0.1.8" + p-map "^4.0.0" + webpack-sources "^3.2.2" + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" + integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== + +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" + integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== + +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" + integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" + integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== + +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" + integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== + +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" + integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== + +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" + integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== + +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" + integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== + +"@svgr/babel-preset@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" + integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" + integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" + integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== + dependencies: + "@babel/types" "^7.20.0" + entities "^4.4.0" + +"@svgr/plugin-jsx@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" + integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" + integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.8.0" + +"@svgr/webpack@^6.2.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" + integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@tsconfig/docusaurus@^1.0.5": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz#a3ee3c8109b3fec091e3d61a61834e563aeee3c3" + integrity sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/debug@^4.0.0": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" + integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/hoist-non-react-statics@*": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.10" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" + integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/katex@^0.11.0": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.11.1.tgz#34de04477dcf79e2ef6c8d23b41a3d81f9ebeaf5" + integrity sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg== + +"@types/katex@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.16.0.tgz#0e640df3647fe237212be863e1f5111eb9754f93" + integrity sha512-hz+S3nV6Mym5xPbT9fnO8dDhBFQguMYpY0Ipxv06JMi1ORgnEM4M1ymWDUhUNer3ElLmT583opRo4RzxKmh9jw== + +"@types/mdast@^3.0.0", "@types/mdast@^3.0.10": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" + integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== + dependencies: + "@types/unist" "*" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + +"@types/node@*": + version "18.15.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.12.tgz#833756634e78c829e1254db006468dadbb0c696b" + integrity sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/parse5@^6.0.0": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-6.0.3.tgz#705bb349e789efa06f43f128cef51240753424cb" + integrity sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g== + +"@types/prop-types@*", "@types/prop-types@^15.0.0": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.7.tgz#36207a3fe08b271abee62b26993ee932d13cbb02" + integrity sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "^5.1.0" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*", "@types/react-router@^5.1.0": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "18.0.37" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.37.tgz#7a784e2a8b8f83abb04dc6b9ed9c9b4c0aee9be7" + integrity sha512-4yaZZtkRN3ZIQD3KSEwkfcik8s0SWV+82dlJot1AbGYHCzJkWP3ENBY6wYeDRmKZ6HkrgoGAmR2HqdwYGp6OEw== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/styled-components@^5.1.25": + version "5.1.26" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af" + integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" + +"@types/trusted-types@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" + integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/scope-manager@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz#86501d7a17885710b6716a23be2e93fc54a4fe8c" + integrity sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ== + dependencies: + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" + +"@typescript-eslint/types@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" + integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== + +"@typescript-eslint/typescript-estree@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" + integrity sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg== + dependencies: + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/visitor-keys" "5.59.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@^5.30.5": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.0.tgz#063d066b3bc4850c18872649ed0da9ee72d833d5" + integrity sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.0" + "@typescript-eslint/types" "5.59.0" + "@typescript-eslint/typescript-estree" "5.59.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" + integrity sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA== + dependencies: + "@typescript-eslint/types" "5.59.0" + eslint-visitor-keys "^3.3.0" + +"@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.5.tgz#6e818036b94548c1fb53b754b5cae3c9b208281c" + integrity sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + +"@webassemblyjs/floating-point-hex-parser@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz#e85dfdb01cad16b812ff166b96806c050555f1b4" + integrity sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ== + +"@webassemblyjs/helper-api-error@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz#1e82fa7958c681ddcf4eabef756ce09d49d442d1" + integrity sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA== + +"@webassemblyjs/helper-buffer@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz#91381652ea95bb38bbfd270702351c0c89d69fba" + integrity sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg== + +"@webassemblyjs/helper-numbers@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz#23380c910d56764957292839006fecbe05e135a9" + integrity sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.5" + "@webassemblyjs/helper-api-error" "1.11.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz#e258a25251bc69a52ef817da3001863cc1c24b9f" + integrity sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA== + +"@webassemblyjs/helper-wasm-section@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz#966e855a6fae04d5570ad4ec87fbcf29b42ba78e" + integrity sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-buffer" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/wasm-gen" "1.11.5" + +"@webassemblyjs/ieee754@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz#b2db1b33ce9c91e34236194c2b5cba9b25ca9d60" + integrity sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.5.tgz#482e44d26b6b949edf042a8525a66c649e38935a" + integrity sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.5.tgz#83bef94856e399f3740e8df9f63bc47a987eae1a" + integrity sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz#93ee10a08037657e21c70de31c47fdad6b522b2d" + integrity sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-buffer" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/helper-wasm-section" "1.11.5" + "@webassemblyjs/wasm-gen" "1.11.5" + "@webassemblyjs/wasm-opt" "1.11.5" + "@webassemblyjs/wasm-parser" "1.11.5" + "@webassemblyjs/wast-printer" "1.11.5" + +"@webassemblyjs/wasm-gen@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz#ceb1c82b40bf0cf67a492c53381916756ef7f0b1" + integrity sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/ieee754" "1.11.5" + "@webassemblyjs/leb128" "1.11.5" + "@webassemblyjs/utf8" "1.11.5" + +"@webassemblyjs/wasm-opt@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz#b52bac29681fa62487e16d3bb7f0633d5e62ca0a" + integrity sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-buffer" "1.11.5" + "@webassemblyjs/wasm-gen" "1.11.5" + "@webassemblyjs/wasm-parser" "1.11.5" + +"@webassemblyjs/wasm-parser@1.11.5", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz#7ba0697ca74c860ea13e3ba226b29617046982e2" + integrity sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@webassemblyjs/helper-api-error" "1.11.5" + "@webassemblyjs/helper-wasm-bytecode" "1.11.5" + "@webassemblyjs/ieee754" "1.11.5" + "@webassemblyjs/leb128" "1.11.5" + "@webassemblyjs/utf8" "1.11.5" + +"@webassemblyjs/wast-printer@1.11.5": + version "1.11.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz#7a5e9689043f3eca82d544d7be7a8e6373a6fa98" + integrity sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA== + dependencies: + "@webassemblyjs/ast" "1.11.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-class-fields@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.2.1.tgz#748058bceeb0ef25164bbc671993984083f5a085" + integrity sha512-US/kqTe0H8M4LN9izoL+eykVAitE68YMuYZ3sHn3i1fjniqR7oQ3SPvuMK/VT1kjOQHrx5Q88b90TtOKgAv2hQ== + +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-jsx@^5.0.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^6.1.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +address@^1.0.1, address@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +algoliasearch-helper@^3.10.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz#0fe39d49b0290e4aa5e1fe733bd24d857d258e94" + integrity sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.0.0, algoliasearch@^4.13.1: + version "4.17.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.0.tgz#46ed58b2b99509d041f11cd1ea83623edf84355f" + integrity sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA== + dependencies: + "@algolia/cache-browser-local-storage" "4.17.0" + "@algolia/cache-common" "4.17.0" + "@algolia/cache-in-memory" "4.17.0" + "@algolia/client-account" "4.17.0" + "@algolia/client-analytics" "4.17.0" + "@algolia/client-common" "4.17.0" + "@algolia/client-personalization" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/logger-console" "4.17.0" + "@algolia/requester-browser-xhr" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/requester-node-http" "4.17.0" + "@algolia/transporter" "4.17.0" + +ansi-align@^3.0.0, ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +antd@^4.20.5: + version "4.24.9" + resolved "https://registry.yarnpkg.com/antd/-/antd-4.24.9.tgz#2f1d24c327d16c722116dfa9406cdf649907c87e" + integrity sha512-VPgjzGk9o8UZESlaIGLI8Vei7Dudlrd7bopWm+Adw7uevRejtBMAatnQUNo8hACjuGYIW7AYLU6wYe1dorBX0Q== + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons" "^4.7.0" + "@ant-design/react-slick" "~0.29.1" + "@babel/runtime" "^7.18.3" + "@ctrl/tinycolor" "^3.4.0" + classnames "^2.2.6" + copy-to-clipboard "^3.2.0" + lodash "^4.17.21" + moment "^2.29.2" + rc-cascader "~3.7.0" + rc-checkbox "~3.0.0" + rc-collapse "~3.4.2" + rc-dialog "~9.0.2" + rc-drawer "~6.1.0" + rc-dropdown "~4.0.0" + rc-field-form "~1.27.0" + rc-image "~5.13.0" + rc-input "~0.1.4" + rc-input-number "~7.3.9" + rc-mentions "~1.13.1" + rc-menu "~9.8.0" + rc-motion "^2.6.1" + rc-notification "~4.6.0" + rc-pagination "~3.2.0" + rc-picker "~2.7.0" + rc-progress "~3.4.1" + rc-rate "~2.9.0" + rc-resize-observer "^1.2.0" + rc-segmented "~2.1.0" + rc-select "~14.1.17" + rc-slider "~10.0.0" + rc-steps "~5.0.0-alpha.2" + rc-switch "~3.2.0" + rc-table "~7.26.0" + rc-tabs "~12.5.6" + rc-textarea "~0.4.5" + rc-tooltip "~5.2.0" + rc-tree "~5.7.0" + rc-tree-select "~5.5.0" + rc-trigger "^5.2.10" + rc-upload "~4.3.0" + rc-util "^5.22.5" + scroll-into-view-if-needed "^2.2.25" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" + integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + dependencies: + es6-object-assign "^1.1.0" + is-nan "^1.2.1" + object-is "^1.0.1" + util "^0.12.0" + +async-validator@^4.1.0: + version "4.2.5" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autocomplete.js@^0.37.1: + version "0.37.1" + resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.37.1.tgz#a29a048d827e7d2bf8f7df8b831766e5cc97df01" + integrity sha512-PgSe9fHYhZEsm/9jggbjtVsGXJkPLvd+9mC7gZJ662vVL5CRWEtm/mIrrzCx0MrNxHVwxD5d00UOn6NsmL2LUQ== + dependencies: + immediate "^3.2.3" + +autoprefixer@^10.4.12, autoprefixer@^10.4.7: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +babel-loader@^8.2.5: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-import@^1.13.5: + version "1.13.6" + resolved "https://registry.yarnpkg.com/babel-plugin-import/-/babel-plugin-import-1.13.6.tgz#4ff2aa3b9759e6a4458ce59890da3684fe3dda9d" + integrity sha512-N7FYnGh0DFsvDRkAPsvFq/metVfVD7P2h1rokOPpEH4cZbdRHCW+2jbXt0nnuqowkm/xhh2ww1anIdEpfYa7ZA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +"babel-plugin-styled-components@>= 1.12.0", babel-plugin-styled-components@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.1.tgz#cd977cc0ff8410d5cbfdd142e42576e9c8794b87" + integrity sha512-c8lJlszObVQPguHkI+akXv8+Jgb9Ccujx0EetL7oIvwU100LxO6XAGe45qry37wUL40a5U9f23SYrivro2XKhA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.21" + picomatch "^2.3.0" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== + dependencies: + ansi-align "^3.0.1" + camelcase "^6.2.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buble@0.19.6: + version "0.19.6" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3" + integrity sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg== + dependencies: + chalk "^2.4.1" + magic-string "^0.25.1" + minimist "^1.2.0" + os-homedir "^1.0.1" + regexpu-core "^4.2.0" + vlq "^1.0.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +camelize@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001480" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz#9bbd35ee44c2480a1e3a3b9f4496f5066817164a" + integrity sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ== + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.3: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + +clean-css@^5.2.2, clean-css@^5.3.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-table3@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1, clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@*: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.19.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.0.0, commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +complex.js@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.1.1.tgz#0675dac8e464ec431fb2ab7d30f41d889fb25c31" + integrity sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg== + +component-props@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/component-props/-/component-props-1.1.1.tgz#f9b7df9b9927b6e6d97c9bd272aa867670f34944" + integrity sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q== + +component-xor@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/component-xor/-/component-xor-0.0.4.tgz#c55d83ccc1b94cd5089a4e93fa7891c7263e59aa" + integrity sha512-ZIt6sla8gfo+AFVRZoZOertcnD5LJaY2T9CKE2j13NJxQt/mUafD69Bl7/Y4AnpI2LGjiXH7cOfJDx/n2G9edA== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +compute-scroll-into-view@^1.0.20: + version "1.0.20" + resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" + integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +"consolidated-events@^1.1.0 || ^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/consolidated-events/-/consolidated-events-2.0.2.tgz#da8d8f8c2b232831413d9e190dc11669c79f4a91" + integrity sha512-2/uRVMdRypf5z/TW/ncD/66l75P5hH2vM/GR8Jf8HLc2xnfJtmina6F6du8+v4Z2vTrMo7jC+W1tmEEuuELgkQ== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +copy-anything@^2.0.1: + version "2.0.6" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== + dependencies: + is-what "^3.14.1" + +copy-text-to-clipboard@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz#6bf40deef0a51ac6858efb0d76ded2c6d6a15059" + integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== + +copy-to-clipboard@^3.2.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.25.1: + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.1.tgz#961541e22db9c27fc48bfc13a3cafa8734171dfe" + integrity sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw== + dependencies: + browserslist "^4.21.5" + +core-js-pure@^3.25.1: + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.1.tgz#7d93dc89e7d47b8ef05d7e79f507b0e99ea77eec" + integrity sha512-nXBEVpmUnNRhz83cHd9JRQC52cTMcuXAmR56+9dSMpRdpeA4I1PX6yjmhd71Eyc/wXNsdBdUDIj1QTIeZpU5Tg== + +core-js@^2.4.1: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.23.3: + version "3.30.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.1.tgz#fc9c5adcc541d8e9fa3e381179433cbf795628ba" + integrity sha512-ZNS5nbiSwDTq4hFosEDqm65izl2CWmLz0hARJMyNQBgkUZMIF51cQiMvIQKA6hvuaeWxQDP3hEedM1JZIgTldQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig-typescript-loader@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" + integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cosmiconfig@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + +css-declaration-sorter@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== + +css-loader@^6.7.1: + version "6.7.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" + integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.19" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + +css-minimizer-webpack-plugin@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz#79f6199eb5adf1ff7ba57f105e3752d15211eb35" + integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== + dependencies: + cssnano "^5.1.8" + jest-worker "^29.1.2" + postcss "^8.4.17" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-selector-parser@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + +css-to-react-native@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.3.8: + version "5.3.10" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz#25558a1fbf3a871fb6429ce71e41be7f5aca6eef" + integrity sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ== + dependencies: + autoprefixer "^10.4.12" + cssnano-preset-default "^5.2.14" + postcss-discard-unused "^5.1.0" + postcss-merge-idents "^5.1.1" + postcss-reduce-idents "^5.2.0" + postcss-zindex "^5.1.0" + +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.1.12, cssnano@^5.1.8: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + dependencies: + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +date-fns@2.x: + version "2.29.3" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" + integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== + +dayjs@1.x: + version "1.11.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-libc@^2.0.0, detect-libc@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + dependencies: + address "^1.0.1" + debug "4" + +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.6.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" + integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +docusaurus-plugin-less@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/docusaurus-plugin-less/-/docusaurus-plugin-less-2.0.2.tgz#63bf04a5539a3b8ddc38bf527b51eb135b60f528" + integrity sha512-ez6WSSvGS8HoJslYHeG5SflyShWvHFXeTTHXPBd3H1T3zgq9wp6wD7scXm+rXyyfhFhP5VNiIqhYB78z4OLjwg== + +dom-align@^1.7.0: + version "1.12.4" + resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511" + integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dom-iterator/-/dom-iterator-1.0.0.tgz#9c09899846ec41c2d257adc4d6015e4759ef05ad" + integrity sha512-7dsMOQI07EMU98gQM8NSB3GsAiIeBYIPKpnxR3c9xOvdvBjChAcOM0iJ222I3p5xyiZO9e5oggkNaCusuTdYig== + dependencies: + component-props "1.1.1" + component-xor "0.0.4" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.6: + version "3.1.9" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" + integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.284: + version "1.4.368" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz#75901f97d3e23da2e66feb1e61fbb8e70ac96430" + integrity sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw== + +emailjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/emailjs/-/emailjs-4.0.1.tgz#963533d07bf41b90bc5e7651b99464bd01129dfd" + integrity sha512-rTN/LDvlqwU79E367ovB7FIziImzimhQcZiGmC20VcDPbf0mv3l9c3aavtMcEFaFBsycjGB5aMIhz4ZbKNeLWw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.13.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz#26d1ecc448c02de997133217b5c1053f34a0a275" + integrity sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +errno@^0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-module-lexer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" + integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-object-assign@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-latex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1" + integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^3.3.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.0.1.tgz#199e675359cb6e19d38f29e1f405e1ba0e79a6df" + integrity sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572" + integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@^1.0.0, follow-redirects@^1.14.7: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" + integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0, fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +github-slugger@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" + integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gsap@^3.10.4: + version "3.11.5" + resolved "https://registry.yarnpkg.com/gsap/-/gsap-3.11.5.tgz#97ef65091f43868be387803f9db277e8cd5bd041" + integrity sha512-Q89nKCLgoX5xUjznh9LcaIUkz54k1voNucT1Rpf9SJNFIQznBwFqt5qUUQbeVInFyN/n18OUJkpeI6CNEDt74w== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz#aecfef73e3ceafdfa4550716443e4eb7b02e22b0" + integrity sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + hastscript "^7.0.0" + property-information "^6.0.0" + vfile "^5.0.0" + vfile-location "^4.0.0" + web-namespaces "^2.0.0" + +hast-util-is-element@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + +hast-util-is-element@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz#cd3279cfefb70da6d45496068f020742256fc471" + integrity sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-parse-selector@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz#25ab00ae9e75cbc62cf7a901f68a247eade659e2" + integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-raw@^7.0.0: + version "7.2.3" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.3.tgz#dcb5b22a22073436dbdc4aa09660a644f4991d99" + integrity sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg== + dependencies: + "@types/hast" "^2.0.0" + "@types/parse5" "^6.0.0" + hast-util-from-parse5 "^7.0.0" + hast-util-to-parse5 "^7.0.0" + html-void-elements "^2.0.0" + parse5 "^6.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-sanitize@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-4.1.0.tgz#d90f8521f5083547095c5c63a7e03150303e0286" + integrity sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw== + dependencies: + "@types/hast" "^2.0.0" + +hast-util-to-html@^8.0.0: + version "8.0.4" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz#0269ef33fa3f6599b260a8dc94f733b8e39e41fc" + integrity sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-raw "^7.0.0" + hast-util-whitespace "^2.0.0" + html-void-elements "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz#c49391bf8f151973e0c9adcd116b561e8daf29f3" + integrity sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + web-namespaces "^2.0.0" + zwitch "^2.0.0" + +hast-util-to-text@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-2.0.1.tgz#04f2e065642a0edb08341976084aa217624a0f8b" + integrity sha512-8nsgCARfs6VkwH2jJU9b8LNTuR4700na+0h3PqCaEk4MAnMDeu5P0tP8mjk9LLNGxIeQRLbiDbZVw6rku+pYsQ== + dependencies: + hast-util-is-element "^1.0.0" + repeat-string "^1.0.0" + unist-util-find-after "^3.0.0" + +hast-util-to-text@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz#ecf30c47141f41e91a5d32d0b1e1859fd2ac04f2" + integrity sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw== + dependencies: + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + hast-util-is-element "^2.0.0" + unist-util-find-after "^4.0.0" + +hast-util-whitespace@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" + integrity sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng== + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +hastscript@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.2.0.tgz#0eafb7afb153d047077fa2a833dc9b7ec604d10b" + integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-parse-selector "^3.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" + integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== + +html-webpack-plugin@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz#826838e31b427f5f7f30971f8d8fa2422dfa6763" + integrity sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +idb@^7.0.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" + integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +image-size@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== + +immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +immer@^9.0.7: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.43: + version "0.2.0-alpha.43" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0" + integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +internal-slot@^1.0.3, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.11.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" + integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-nan@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +javascript-natural-sort@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== + +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.1.2: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + dependencies: + "@types/node" "*" + jest-util "^29.5.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@^17.6.0: + version "17.9.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.1.tgz#74899b9fa3646904afa984a11df648eca66c9018" + integrity sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +js-md5@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2" + integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/json2mq/-/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== + dependencies: + string-convert "^0.2.0" + +json5@^2.1.2, json5@^2.2.0, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +katex@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.12.0.tgz#2fb1c665dbd2b043edcf8a1f5c555f46beaa0cb9" + integrity sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg== + dependencies: + commander "^2.19.0" + +katex@^0.15.6: + version "0.15.6" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.15.6.tgz#c4e2f6ced2ac4de1ef6f737fe7c67d3026baa0e5" + integrity sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA== + dependencies: + commander "^8.0.0" + +katex@^0.16.0: + version "0.16.6" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.16.6.tgz#cf06c11bdda435b5ae5cb06efa080f4a4fcadf23" + integrity sha512-XVB7X8jEogjJ+OY+a9JdE+VOk9i7znela0HP6WaDbpB4sUh8ghrG0Ccluu2MA2tcJbFAViBC9aVXus2UvkEr8A== + dependencies: + commander "^8.3.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +klona@^2.0.4, klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + +less-loader@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-11.1.0.tgz#a452384259bdf8e4f6d5fdcc39543609e6313f82" + integrity sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug== + dependencies: + klona "^2.0.4" + +less-vars-to-js@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/less-vars-to-js/-/less-vars-to-js-1.3.0.tgz#c322cf43a3c8fc3fab655da3e51a14c1499ab571" + integrity sha512-xeiLLn/IMCGtdyCkYQnW8UuzoW2oYMCKg9boZRaGI58fLz5r90bNJDlqGzmVt/1Uqk75/DxIVtQSNCMkE5fRZQ== + dependencies: + strip-json-comments "^2.0.1" + +less@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/less/-/less-4.1.3.tgz#175be9ddcbf9b250173e0a00b4d6920a5b770246" + integrity sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA== + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^2.3.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^3.1.0" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +libpag@^4.0.5-release.7: + version "4.2.59" + resolved "https://registry.yarnpkg.com/libpag/-/libpag-4.2.59.tgz#7d5783c09a45d7cb64c789a1a784b4aea7e50462" + integrity sha512-2EOFpabMq4lDRKxsO7NpbnYDrZKQN7d/3IN+RJcF1rUdUtjjfbkT+nKZqM2o98M4Tz0CN9vp8qLLk/6phUvyQw== + +lilconfig@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +longest-streak@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" + integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lottie-web@^5.9.4: + version "5.11.0" + resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.11.0.tgz#04bb9fd6cdfbb10e586985dd666de6c727619d95" + integrity sha512-9vSt0AtdOH98GKDXwD5LPfFg9Pcmxt5+1BllAbudKM5iqPxpJnJUfuGaP45OyudDrESCOBgsjnntVUTygBNlzw== + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lunr-languages@^1.4.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/lunr-languages/-/lunr-languages-1.10.0.tgz#2afe9fff47b435d9bc74bd372fb923dbf8ee1990" + integrity sha512-BBjKKcwrieJlzwwc9M5H/MRXGJ2qyOSDx/NXYiwkuKjiLOOoouh0WsDzeqcLoUWcX31y7i8sb8IgsZKObdUCkw== + +lunr@^2.3.8, lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== + +magic-string@^0.25.0, magic-string@^0.25.1, magic-string@^0.25.2, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +mark.js@^8.11.1: + version "8.11.1" + resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" + integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +mathjs@^11.2.1: + version "11.8.0" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-11.8.0.tgz#b02e66461ec068fadf1e90c221121704dc14d8f5" + integrity sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg== + dependencies: + "@babel/runtime" "^7.21.0" + complex.js "^2.1.1" + decimal.js "^10.4.3" + escape-latex "^1.2.0" + fraction.js "^4.2.0" + javascript-natural-sort "^0.7.1" + seedrandom "^3.0.5" + tiny-emitter "^2.1.0" + typed-function "^4.1.0" + +md5@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definition-list@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mdast-util-definition-list/-/mdast-util-definition-list-1.4.0.tgz#0922ff882e2d23553aa8cf0d1014fc253ea83ac3" + integrity sha512-TvmS87sSv3fu1qqlsxmYYVn2dq3UzE87Ln/Ihtbp3kiEKrM/HS+gLw2TOBwzJU8Cc4DDN+YRvjHdOmoWCBQIAA== + dependencies: + "@types/mdast" "^3.0.10" + mdast-util-from-markdown "^1.0.0" + mdast-util-to-hast "^12.0.0" + mdast-util-to-markdown "^1.5.0" + micromark-extension-definition-list "^1.4.0" + unist-builder "^3.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-definitions@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7" + integrity sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +mdast-util-from-markdown@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.0.tgz#0214124154f26154a2b3f9d401155509be45e894" + integrity sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-math@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-math/-/mdast-util-math-2.0.2.tgz#19a06a81f31643f48cc805e7c31edb7ce739242c" + integrity sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ== + dependencies: + "@types/mdast" "^3.0.0" + longest-streak "^3.0.0" + mdast-util-to-markdown "^1.3.0" + +mdast-util-phrasing@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz#c7c21d0d435d7fb90956038f02e8702781f95463" + integrity sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg== + dependencies: + "@types/mdast" "^3.0.0" + unist-util-is "^5.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-hast@^12.0.0, mdast-util-to-hast@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz#045d2825fb04374e59970f5b3f279b5700f6fb49" + integrity sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-definitions "^5.0.0" + micromark-util-sanitize-uri "^1.1.0" + trim-lines "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + +mdast-util-to-markdown@^1.3.0, mdast-util-to-markdown@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz#c13343cb3fc98621911d33b5cd42e7d0731171c6" + integrity sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + longest-streak "^3.0.0" + mdast-util-phrasing "^3.0.0" + mdast-util-to-string "^3.0.0" + micromark-util-decode-string "^1.0.0" + unist-util-visit "^4.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" + integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== + dependencies: + "@types/mdast" "^3.0.0" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.5.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.0.tgz#9da86405fca0a539addafd37dbd452344fd1c0bd" + integrity sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromark-core-commonmark@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" + integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-extension-definition-list@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/micromark-extension-definition-list/-/micromark-extension-definition-list-1.4.0.tgz#f8b6dab4012f4a6be1514def17006089018cd982" + integrity sha512-/44vOeStNsBOlRkpRPa5GGlGbTdbYGC1AzrJqbz46IqbprUxf+DgnRxHs+8qBUF7d8D8yFanA3ghtUVoIPPTjw== + dependencies: + assert "^2.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + ts-dedent "^2.2.0" + +micromark-extension-math@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/micromark-extension-math/-/micromark-extension-math-2.1.0.tgz#15ec67f8a3d6de64428d6eb456b0b00a77402f3b" + integrity sha512-WH+fJkveMvM3ZN+deb/jT3UW623x8xO9ycfJNDC+UQXX+V72RO6hT9KqxA7c8XFwozAFJ7tufOeG+x/CVSXHUw== + dependencies: + "@types/katex" "^0.16.0" + katex "^0.16.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-destination@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" + integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137" + integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" + integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f" + integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-whitespace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c" + integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" + integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06" + integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20" + integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5" + integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946" + integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02" + integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383" + integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA== + +micromark-util-html-tag-name@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497" + integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA== + +micromark-util-normalize-identifier@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828" + integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88" + integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0, micromark-util-sanitize-uri@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz#f12e07a85106b902645e0364feb07cf253a85aee" + integrity sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105" + integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e" + integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20" + integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== + +micromark@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.1.0.tgz#eeba0fe0ac1c9aaef675157b52c166f125e89f62" + integrity sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mini-css-extract-plugin@^2.6.1: + version "2.7.5" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" + integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mockjs@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06" + integrity sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ== + dependencies: + commander "*" + +moment@^2.24.0, moment@^2.29.2, moment@^2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +needle@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44" + integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.6.3" + sax "^1.2.4" + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-abi@^3.3.0: + version "3.40.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.40.0.tgz#51d8ed44534f70ff1357dfbc3a89717b1ceac1b4" + integrity sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA== + dependencies: + semver "^7.3.5" + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^2.0.0, nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-discard-unused@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" + integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-loader@^7.0.0: + version "7.2.4" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.2.4.tgz#2884f4ca172de633b2cf1f93dc852968f0632ba9" + integrity sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w== + dependencies: + cosmiconfig "^8.1.3" + cosmiconfig-typescript-loader "^4.3.0" + klona "^2.0.6" + semver "^7.3.8" + +postcss-merge-idents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" + integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-idents@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" + integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz#f48a77d6ce379e86676fc3f140cf1b10a06f6051" + integrity sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg== + dependencies: + sort-css-media-queries "2.1.0" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" + integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== + +postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.19: + version "8.4.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.0.1, prism-react-renderer@^1.3.1, prism-react-renderer@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== + +prismjs@^1.28.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.0.0, prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +property-information@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d" + integrity sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +ramda@^0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" + integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc-align@^4.0.0: + version "4.0.15" + resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.15.tgz#2bbd665cf85dfd0b0244c5a752b07565e9098577" + integrity sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + dom-align "^1.7.0" + rc-util "^5.26.0" + resize-observer-polyfill "^1.5.1" + +rc-cascader@~3.7.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.7.2.tgz#447f2725add7953dee205d1cf59f58a8317bf5f7" + integrity sha512-5nPEM76eMyikd0NFiy1gjwiB9m+bOzjY6Lnd5bVC6Ar3XLlOpOnlCcV3oBFWLN3f7B18tAGpaAVlT2uyEDCv9w== + dependencies: + "@babel/runtime" "^7.12.5" + array-tree-filter "^2.1.0" + classnames "^2.3.1" + rc-select "~14.1.0" + rc-tree "~5.7.0" + rc-util "^5.6.1" + +rc-checkbox@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-3.0.0.tgz#6b426d16c7d2ed9fee219a1dfb14d2c504a45300" + integrity sha512-tOEs1+wWDUei7DuP2EsJCZfam5vxMjKTCGcZdXVgsiOcNszc41Esycbo31P0/jFwUAPmd5oPYFWkcnFUCTLZxA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.3.2" + rc-util "^5.25.2" + +rc-collapse@~3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.4.2.tgz#1310be7ad4cd0dcfc622c45f6c3b5ffdee403ad7" + integrity sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.3.4" + rc-util "^5.2.1" + shallowequal "^1.1.0" + +rc-dialog@~9.0.0, rc-dialog@~9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-9.0.2.tgz#aadfebdeba145f256c1fac9b9f509f893cdbb5b8" + integrity sha512-s3U+24xWUuB6Bn2Lk/Qt6rufy+uT+QvWkiFhNBcO9APLxcFFczWamaq7x9h8SCuhfc1nHcW4y8NbMsnAjNnWyg== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.0.0-8" + classnames "^2.2.6" + rc-motion "^2.3.0" + rc-util "^5.21.0" + +rc-drawer@~6.1.0: + version "6.1.5" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-6.1.5.tgz#c4137b944c16b7c179d0dba6f06ebe54f9311ec8" + integrity sha512-MDRomQXFi+tvDuwsRAddJ2Oy2ayLCZ29weMzp3rJFO9UNEVLEVV7nuyx5lEgNJIdM//tE6wWQV95cTUiMVqD6w== + dependencies: + "@babel/runtime" "^7.10.1" + "@rc-component/portal" "^1.0.0-6" + classnames "^2.2.6" + rc-motion "^2.6.1" + rc-util "^5.21.2" + +rc-dropdown@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/rc-dropdown/-/rc-dropdown-4.0.1.tgz#f65d9d3d89750241057db59d5a75e43cd4576b68" + integrity sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g== + dependencies: + "@babel/runtime" "^7.18.3" + classnames "^2.2.6" + rc-trigger "^5.3.1" + rc-util "^5.17.0" + +rc-field-form@~1.27.0: + version "1.27.4" + resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.27.4.tgz#53600714af5b28c226c70d34867a8c52ccd64d44" + integrity sha512-PQColQnZimGKArnOh8V2907+VzDCXcqtFvHgevDLtqWc/P7YASb/FqntSmdS8q3VND5SHX3Y1vgMIzY22/f/0Q== + dependencies: + "@babel/runtime" "^7.18.0" + async-validator "^4.1.0" + rc-util "^5.8.0" + +rc-image@~5.13.0: + version "5.13.0" + resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-5.13.0.tgz#1ed9b852a40b5eff34786ba7d2f0e9d26eeab874" + integrity sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg== + dependencies: + "@babel/runtime" "^7.11.2" + "@rc-component/portal" "^1.0.2" + classnames "^2.2.6" + rc-dialog "~9.0.0" + rc-motion "^2.6.2" + rc-util "^5.0.6" + +rc-input-number@~7.3.9: + version "7.3.11" + resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-7.3.11.tgz#c7089705a220e1a59ba974fabf89693e00dd2442" + integrity sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.23.0" + +rc-input@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-0.1.4.tgz#45cb4ba209ae6cc835a2acb8629d4f8f0cb347e0" + integrity sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.18.1" + +rc-mentions@~1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-1.13.1.tgz#c884b70e1505a197f1b32a7c6b39090db6992a72" + integrity sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-menu "~9.8.0" + rc-textarea "^0.4.0" + rc-trigger "^5.0.4" + rc-util "^5.22.5" + +rc-menu@~9.8.0: + version "9.8.4" + resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.8.4.tgz#58bf19d471e3c74ff4bcfdb0f02a3826ebe2553b" + integrity sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.4.3" + rc-overflow "^1.2.8" + rc-trigger "^5.1.2" + rc-util "^5.27.0" + +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.7.3.tgz#126155bb3e687174fb3b92fddade2835c963b04d" + integrity sha512-2xUvo8yGHdOHeQbdI8BtBsCIrWKchEmFEIskf0nmHtJsou+meLd/JE+vnvSX2JxcBrJtXY2LuBpxAOxrbY/wMQ== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.21.0" + +rc-notification@~4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-4.6.1.tgz#068e8674f4bd7926a447eca512915d4b41b15c91" + integrity sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.2.0" + rc-util "^5.20.1" + +rc-overflow@^1.0.0, rc-overflow@^1.2.8: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rc-overflow/-/rc-overflow-1.3.0.tgz#964f7db14aab611c3047788d3b8ee472732fee09" + integrity sha512-p2Qt4SWPTHAYl4oAao1THy669Fm5q8pYBDBHRaFOekCvcdcrgIx0ByXQMEkyPm8wUDX4BK6aARWecvCRc/7CTA== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.19.2" + +rc-pagination@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-3.2.0.tgz#4f2fdba9fdac0f48e5c9fb1141973818138af7e1" + integrity sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + +rc-picker@~2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-2.7.0.tgz#3c19881da27a0c5ee4c7e7504e21b552bd43a94c" + integrity sha512-oZH6FZ3j4iuBxHB4NvQ6ABRsS2If/Kpty1YFFsji7/aej6ruGmfM7WnJWQ88AoPfpJ++ya5z+nVEA8yCRYGKyw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + date-fns "2.x" + dayjs "1.x" + moment "^2.24.0" + rc-trigger "^5.0.4" + rc-util "^5.4.0" + shallowequal "^1.1.0" + +rc-progress@~3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/rc-progress/-/rc-progress-3.4.1.tgz#a9ffe099e88a4fc03afb09d8603162bf0760d743" + integrity sha512-eAFDHXlk8aWpoXl0llrenPMt9qKHQXphxcVsnKs0FHC6eCSk1ebJtyaVjJUzKe0233ogiLDeEFK1Uihz3s67hw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-util "^5.16.1" + +rc-rate@~2.9.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.9.2.tgz#4a58965d1ecf91896ebae01d458b59056df0b4ea" + integrity sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.0.1" + +rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz#b61b9f27048001243617b81f95e53d7d7d7a6a3d" + integrity sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg== + dependencies: + "@babel/runtime" "^7.20.7" + classnames "^2.2.1" + rc-util "^5.27.0" + resize-observer-polyfill "^1.5.1" + +rc-segmented@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/rc-segmented/-/rc-segmented-2.1.2.tgz#14c9077a1dae9c2ccb2ef5fbc5662c1c48c7ce8e" + integrity sha512-qGo1bCr83ESXpXVOCXjFe1QJlCAQXyi9KCiy8eX3rIMYlTeJr/ftySIaTnYsitL18SvWf5ZEHsfqIWoX0EMfFQ== + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-motion "^2.4.4" + rc-util "^5.17.0" + +rc-select@~14.1.0, rc-select@~14.1.17: + version "14.1.17" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.1.17.tgz#e623eabeaa0dd117d5a63354e6ddaaa118abc5ee" + integrity sha512-6qQhMqtoUkkboRqXKKFRR5Nu1mrnw2mC1uxIBIczg7aiJ94qCZBg4Ww8OLT9f4xdyCgbFSGh6r3yB9EBsjoHGA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-overflow "^1.0.0" + rc-trigger "^5.0.4" + rc-util "^5.16.1" + rc-virtual-list "^3.2.0" + +rc-slider@~10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.0.1.tgz#7058c68ff1e1aa4e7c3536e5e10128bdbccb87f9" + integrity sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.18.1" + shallowequal "^1.1.0" + +rc-steps@~5.0.0-alpha.2: + version "5.0.0" + resolved "https://registry.yarnpkg.com/rc-steps/-/rc-steps-5.0.0.tgz#2e2403f2dd69eb3966d65f461f7e3a8ee1ef69fe" + integrity sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw== + dependencies: + "@babel/runtime" "^7.16.7" + classnames "^2.2.3" + rc-util "^5.16.1" + +rc-switch@~3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/rc-switch/-/rc-switch-3.2.2.tgz#d001f77f12664d52595b4f6fb425dd9e66fba8e8" + integrity sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-util "^5.0.1" + +rc-table@~7.26.0: + version "7.26.0" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.26.0.tgz#9d517e7fa512e7571fdcc453eb1bf19edfac6fbc" + integrity sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-resize-observer "^1.1.0" + rc-util "^5.22.5" + shallowequal "^1.1.0" + +rc-tabs@~12.5.6: + version "12.5.10" + resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-12.5.10.tgz#0e41c723fac66c4f0bcad3271429fff6653b0721" + integrity sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ== + dependencies: + "@babel/runtime" "^7.11.2" + classnames "2.x" + rc-dropdown "~4.0.0" + rc-menu "~9.8.0" + rc-motion "^2.6.2" + rc-resize-observer "^1.0.0" + rc-util "^5.16.0" + +rc-textarea@^0.4.0, rc-textarea@~0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-0.4.7.tgz#627f662d46f99e0059d1c1ebc8db40c65339fe90" + integrity sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.24.4" + shallowequal "^1.1.0" + +rc-tooltip@~5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-5.2.2.tgz#e5cafa8ecebf78108936a0bcb93c150fa81ac93b" + integrity sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg== + dependencies: + "@babel/runtime" "^7.11.2" + classnames "^2.3.1" + rc-trigger "^5.0.0" + +rc-tree-select@~5.5.0: + version "5.5.5" + resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.5.5.tgz#d28b3b45da1e820cd21762ba0ee93c19429bb369" + integrity sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-select "~14.1.0" + rc-tree "~5.7.0" + rc-util "^5.16.1" + +rc-tree@~5.7.0: + version "5.7.3" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.7.3.tgz#5da576ba87039486d59092eb4490831690b8b3b5" + integrity sha512-Oql2S9+ZmT+mfTp5SNo1XM0QvkENjc0mPRFsHWRFSPuKird0OYMZZKmLznUJ+0aGDeFFWN42wiUZJtMFhrLgLw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-util "^5.16.1" + rc-virtual-list "^3.4.8" + +rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10, rc-trigger@^5.3.1: + version "5.3.4" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.3.4.tgz#6b4b26e32825677c837d1eb4d7085035eecf9a61" + integrity sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw== + dependencies: + "@babel/runtime" "^7.18.3" + classnames "^2.2.6" + rc-align "^4.0.0" + rc-motion "^2.0.0" + rc-util "^5.19.2" + +rc-upload@~4.3.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-4.3.4.tgz#83ff7d3867631c37adbfd72ea3d1fd7e97ca84af" + integrity sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ== + dependencies: + "@babel/runtime" "^7.18.3" + classnames "^2.2.5" + rc-util "^5.2.0" + +rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.15.0, rc-util@^5.16.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.19.2, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.21.2, rc-util@^5.22.5, rc-util@^5.23.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.26.0, rc-util@^5.27.0, rc-util@^5.4.0, rc-util@^5.6.1, rc-util@^5.8.0, rc-util@^5.9.4: + version "5.30.0" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.30.0.tgz#76ae9019ff72a5b519ce51465cd77b2e451207e3" + integrity sha512-uaWpF/CZGyXuhQG71MWxkU+0bWkPEgqZUxEv251Cu7p3kpHDNm5+Ygu/U8ux0a/zbfGW8PsKcJL0XVBOMrlIZg== + dependencies: + "@babel/runtime" "^7.18.3" + react-is "^16.12.0" + +rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.8: + version "3.4.13" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.4.13.tgz#20acc934b263abcf7b7c161f50ef82281b2f7e8d" + integrity sha512-cPOVDmcNM7rH6ANotanMDilW/55XnFPw0Jh/GQYtrzZSy3AmWvCnqVNyNC/pgg3lfVmX2994dlzAhuUrd4jG7w== + dependencies: + "@babel/runtime" "^7.20.0" + classnames "^2.2.6" + rc-resize-observer "^1.0.0" + rc-util "^5.15.0" + +rc@1.2.8, rc@^1.2.7, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.1.tgz#53933d9e14f364281d6cba24bfed7a4afb808b5f" + integrity sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg== + +react-helmet-async@*, react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-intersection-observer@^9.4.0: + version "9.4.3" + resolved "https://registry.yarnpkg.com/react-intersection-observer/-/react-intersection-observer-9.4.3.tgz#ec84ce0c25cad548075130ea045ac5c7adf908f3" + integrity sha512-WNRqMQvKpupr6MzecAQI0Pj0+JQong307knLP4g/nBex7kYfIaZsPpXaIhKHR+oV8z+goUbH9e10j6lGRnTzlQ== + +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +"react-is@^17.0.1 || ^18.0.0", react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-live@2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-live/-/react-live-2.2.3.tgz#260f99194213799f0005e473e7a4154c699d6a7c" + integrity sha512-tpKruvfytNETuzO3o1mrQUj180GVrq35IE8F5gH1NJVPt4szYCx83/dOSCOyjgRhhc3gQvl0pQ3k/CjOjwJkKQ== + dependencies: + buble "0.19.6" + core-js "^2.4.1" + dom-iterator "^1.0.0" + prism-react-renderer "^1.0.1" + prop-types "^15.5.8" + react-simple-code-editor "^0.10.0" + unescape "^1.0.1" + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-markdown@^8.0.3: + version "8.0.7" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.7.tgz#c8dbd1b9ba5f1c5e7e5f2a44de465a3caafdf89b" + integrity sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.4.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.4" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.4, react-router@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-simple-code-editor@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.10.0.tgz#73e7ac550a928069715482aeb33ccba36efe2373" + integrity sha512-bL5W5mAxSW6+cLwqqVWY47Silqgy2DKDTR4hDBrLrUqC5BXc29YVx17l2IZk5v36VcDEq1Bszu2oHm1qBwKqBA== + +react-textarea-autosize@^8.3.2: + version "8.4.1" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335" + integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q== + dependencies: + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react-waypoint@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/react-waypoint/-/react-waypoint-10.3.0.tgz#fcc60e86c6c9ad2174fa58d066dc6ae54e3df71d" + integrity sha512-iF1y2c1BsoXuEGz08NoahaLFIGI9gTUAAOKip96HUmylRT6DUtpgoBPjk/Y8dfcFVmfVDvUzWjNXpZyKTOV0SQ== + dependencies: + "@babel/runtime" "^7.12.5" + consolidated-events "^1.1.0 || ^2.0.0" + prop-types "^15.0.0" + react-is "^17.0.1 || ^18.0.0" + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.4.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + functions-have-names "^1.2.3" + +regexpu-core@^4.2.0, regexpu-core@^4.5.4: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +registry-auth-token@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== + dependencies: + rc "1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +rehype-katex@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/rehype-katex/-/rehype-katex-4.0.0.tgz#ce11a5db0bff014350e7a9cfd30147d314b14330" + integrity sha512-0mgBqYugQyIW0eUl6RDOZ28Cat2YzrnWGaYgKCMQnJw6ClmKgLqXBnkDAPGh2mwxvkkKwQOUMUpSLpA5rt7rzA== + dependencies: + "@types/katex" "^0.11.0" + hast-util-to-text "^2.0.0" + katex "^0.12.0" + rehype-parse "^7.0.0" + unified "^9.0.0" + unist-util-visit "^2.0.0" + +rehype-parse@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-7.0.1.tgz#58900f6702b56767814afc2a9efa2d42b1c90c57" + integrity sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw== + dependencies: + hast-util-from-parse5 "^6.0.0" + parse5 "^6.0.0" + +rehype-stringify@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/rehype-stringify/-/rehype-stringify-9.0.3.tgz#70e3bd6d4d29e7acf36b802deed350305d2c3c17" + integrity sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw== + dependencies: + "@types/hast" "^2.0.0" + hast-util-to-html "^8.0.0" + unified "^10.0.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-html@^15.0.1: + version "15.0.2" + resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-15.0.2.tgz#44ff77c876f037658b406662b5ce15e26ed34d80" + integrity sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw== + dependencies: + "@types/mdast" "^3.0.0" + hast-util-sanitize "^4.0.0" + hast-util-to-html "^8.0.0" + mdast-util-to-hast "^12.0.0" + unified "^10.0.0" + +remark-math@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-3.0.1.tgz#85a02a15b15cad34b89a27244d4887b3a95185bb" + integrity sha512-epT77R/HK0x7NqrWHdSV75uNLwn8g9qTyMqCRCDujL0vj/6T6+yhdrR7mjELWtkse+Fw02kijAaBuVcHBor1+Q== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-parse@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775" + integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" + +remark-rehype@^10.0.0, remark-rehype@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +remove-markdown@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.3.0.tgz#5e4b667493a93579728f3d52ecc1db9ca505dc98" + integrity sha512-5392eIuy1mhjM74739VunOlsOYKjsH82rQcTBlJ1bkICVC3dQ3ksQzTHh4jGHQFnM+1xzLzcFOMH+BofqXhroQ== + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.0.0, repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.3.2: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup@^2.43.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + +rtl-detect@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" + integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== + dependencies: + find-up "^5.0.0" + picocolors "^1.0.0" + postcss "^8.3.11" + strip-json-comments "^3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.5.4: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" + integrity sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.1.tgz#eb2d042df8b01f4b5c276a2dfd41ba0faab72e8d" + integrity sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +scroll-into-view-if-needed@^2.2.25: + version "2.2.31" + resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" + integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== + dependencies: + compute-scroll-into-view "^1.0.20" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@^5.4.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.5" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375" + integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.1.2" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +sharp@^0.30.7: + version "0.30.7" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c" + integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig== + dependencies: + color "^4.2.3" + detect-libc "^2.0.1" + node-addon-api "^5.0.0" + prebuild-install "^7.1.1" + semver "^7.3.7" + simple-get "^4.0.1" + tar-fs "^2.1.1" + tunnel-agent "^0.6.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-css-media-queries@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" + integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" + integrity sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA== + +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.6: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.3" + side-channel "^1.0.4" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.3.tgz#cfabd7039d22ad30f3cc435b0ca2c1574fc88ef8" + integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +striptags@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/striptags/-/striptags-3.2.0.tgz#cc74a137db2de8b0b9a370006334161f7dd67052" + integrity sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw== + +style-loader@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.2.tgz#eaebca714d9e462c19aa1e3599057bc363924899" + integrity sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw== + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +style-to-object@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.1.tgz#53cf856f7cf7f172d72939d9679556469ba5de37" + integrity sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw== + dependencies: + inline-style-parser "0.1.1" + +styled-components@^5.3.5: + version "5.3.9" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.9.tgz#641af2a8bb89904de708c71b439caa9633e8f0ba" + integrity sha512-Aj3kb13B75DQBo2oRwRa/APdB5rSmwUfN5exyarpX+x/tlM/rwZA2vVk2vQgVSP6WKaZJHWwiFrzgHt+CLtB4A== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^1.1.0" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^2.7.0, svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar-fs@^2.0.0, tar-fs@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.6.0.tgz#65e2c35abc06f1124a97f387b08303442bde59f3" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: + version "5.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" + integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.5" + +terser@^5.0.0, terser@^5.10.0, terser@^5.16.5: + version "5.17.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.17.1.tgz#948f10830454761e2eeedc6debe45c532c83fd69" + integrity sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tiny-invariant@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +trough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" + integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + +ts-dedent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typed-function@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-4.1.0.tgz#da4bdd8a6d19a89e22732f75e4a410860aaf9712" + integrity sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.6.4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +ua-parser-js@^0.7.30: + version "0.7.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" + integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unescape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96" + integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ== + dependencies: + extend-shallow "^2.0.1" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0, unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^10.0.0: + version "10.1.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + +unified@^9.0.0, unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-builder@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.1.tgz#258b89dcadd3c973656b2327b347863556907f58" + integrity sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-find-after@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-3.0.0.tgz#5c65fcebf64d4f8f496db46fa8fd0fbf354b43e6" + integrity sha512-ojlBqfsBftYXExNu3+hHLfJQ/X1jYY/9vdm4yZWjIbf0VuWF6CRufci1ZyoD/wV2TYMKxXUoNuoqwy+CkgzAiQ== + dependencies: + unist-util-is "^4.0.0" + +unist-util-find-after@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz#80c69c92b0504033638ce11973f4135f2c822e2d" + integrity sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-generated@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" + integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-is@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" + integrity sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-position@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.4.tgz#93f6d8c7d6b373d9b825844645877c127455f037" + integrity sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-select@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-4.0.3.tgz#861b403e273d9f677685dd9edefc663dbe1bf517" + integrity sha512-1074+K9VyR3NyUz3lgNtHKm7ln+jSZXtLJM4E22uVuoFn88a/Go2pX8dusrt/W+KWH1ncn8jcd8uCQuvXb/fXA== + dependencies: + "@types/unist" "^2.0.0" + css-selector-parser "^1.0.0" + nth-check "^2.0.0" + zwitch "^2.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-stringify-position@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit-parents@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz#b4520811b0ca34285633785045df7a8d6776cfeb" + integrity sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +unist-util-visit@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz#125a42d1eb876283715a3cb5cceaa531828c72e2" + integrity sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.1.1" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urijs@^1.19.2: + version "1.19.11" + resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.11.tgz#204b0d6b605ae80bea54bea39280cdb7c9f923cc" + integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.0: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-location@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-4.1.0.tgz#69df82fb9ef0a38d0d02b90dd84620e120050dd0" + integrity sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw== + dependencies: + "@types/unist" "^2.0.0" + vfile "^5.0.0" + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile-message@^3.0.0: + version "3.1.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" + integrity sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vfile@^5.0.0: + version "5.3.7" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" + integrity sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + +vlq@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" + integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== + +wait-on@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" + integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== + dependencies: + axios "^0.25.0" + joi "^17.6.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^7.5.4" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-bundle-analyzer@^4.5.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" + integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== + dependencies: + "@discoveryjs/json-ext" "0.5.7" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.3: + version "4.13.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz#9feb740b8b56b886260bae1360286818a221bae8" + integrity sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.2, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.73.0: + version "5.80.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.80.0.tgz#3e660b4ab572be38c5e954bdaae7e2bf76010fdc" + integrity sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.13.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.2" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +workbox-background-sync@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz#3141afba3cc8aa2ae14c24d0f6811374ba8ff6a9" + integrity sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g== + dependencies: + idb "^7.0.1" + workbox-core "6.5.4" + +workbox-broadcast-update@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz#8441cff5417cd41f384ba7633ca960a7ffe40f66" + integrity sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw== + dependencies: + workbox-core "6.5.4" + +workbox-build@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.4.tgz#7d06d31eb28a878817e1c991c05c5b93409f0389" + integrity sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.5.4" + workbox-broadcast-update "6.5.4" + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-google-analytics "6.5.4" + workbox-navigation-preload "6.5.4" + workbox-precaching "6.5.4" + workbox-range-requests "6.5.4" + workbox-recipes "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + workbox-streams "6.5.4" + workbox-sw "6.5.4" + workbox-window "6.5.4" + +workbox-cacheable-response@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz#a5c6ec0c6e2b6f037379198d4ef07d098f7cf137" + integrity sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug== + dependencies: + workbox-core "6.5.4" + +workbox-core@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.4.tgz#df48bf44cd58bb1d1726c49b883fb1dffa24c9ba" + integrity sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q== + +workbox-expiration@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.4.tgz#501056f81e87e1d296c76570bb483ce5e29b4539" + integrity sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ== + dependencies: + idb "^7.0.1" + workbox-core "6.5.4" + +workbox-google-analytics@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz#c74327f80dfa4c1954cbba93cd7ea640fe7ece7d" + integrity sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg== + dependencies: + workbox-background-sync "6.5.4" + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-navigation-preload@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz#ede56dd5f6fc9e860a7e45b2c1a8f87c1c793212" + integrity sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng== + dependencies: + workbox-core "6.5.4" + +workbox-precaching@6.5.4, workbox-precaching@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.4.tgz#740e3561df92c6726ab5f7471e6aac89582cab72" + integrity sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-range-requests@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz#86b3d482e090433dab38d36ae031b2bb0bd74399" + integrity sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg== + dependencies: + workbox-core "6.5.4" + +workbox-recipes@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.4.tgz#cca809ee63b98b158b2702dcfb741b5cc3e24acb" + integrity sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA== + dependencies: + workbox-cacheable-response "6.5.4" + workbox-core "6.5.4" + workbox-expiration "6.5.4" + workbox-precaching "6.5.4" + workbox-routing "6.5.4" + workbox-strategies "6.5.4" + +workbox-routing@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.4.tgz#6a7fbbd23f4ac801038d9a0298bc907ee26fe3da" + integrity sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg== + dependencies: + workbox-core "6.5.4" + +workbox-strategies@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.4.tgz#4edda035b3c010fc7f6152918370699334cd204d" + integrity sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw== + dependencies: + workbox-core "6.5.4" + +workbox-streams@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.4.tgz#1cb3c168a6101df7b5269d0353c19e36668d7d69" + integrity sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg== + dependencies: + workbox-core "6.5.4" + workbox-routing "6.5.4" + +workbox-sw@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.4.tgz#d93e9c67924dd153a61367a4656ff4d2ae2ed736" + integrity sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA== + +workbox-window@6.5.4, workbox-window@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.4.tgz#d991bc0a94dff3c2dbb6b84558cff155ca878e91" + integrity sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.5.4" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== + +zwitch@^2.0.0, zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..fb57ccd13 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + +

!cO8 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 diff --git a/README.md b/README.md index fbe1aa02a..31cc625d5 100644 --- a/README.md +++ b/README.md @@ -19,20 +19,20 @@ - [What is StoneDB](#what-is-stonedb) -- [Contribution](#contribution) - [Getting Started](#getting-started) - [Supported Platform](#supported-platform) + - [Build StoneDB from Source Code in a Docker Container](#build-stonedb-from-source-code-in-a-docker-container) - [Build StoneDB from the Source Code](#build-stonedb-from-the-source-code) - [On Ubuntu 20.04](#on-ubuntu-2004) - [On CentOS 7.X](#on-centos-7x) - [On RedHat 7.X](#on-redhat-7x) - - [Build StoneDB from Source Code in a Docker Container](#build-stonedb-from-source-code-in-a-docker-container) - [Configure StoneDB](#configure-stonedb) - [Initialize the Database](#initialize-the-database) - [Start the Database Instance](#start-the-database-instance) - [Create a StoneDB Table](#create-a-stonedb-table) - [Switch from MySQL to StoneDB in Production](#switch-from-mysql-to-stonedb-in-production) - [Documentation](#documentation) +- [Contribution](#contribution) - [Discussion](#discussion) - [Join StoneDB Wechat Group](#join-stonedb-wechat-group) - [Code of Conduct](#code-of-conduct) @@ -55,10 +55,6 @@ StoneDB is a MySQL-compatible high-performance hybrid transaction/analytical pro For more information about StoneDB, see [stonedb.io](https://stonedb.io/). -# Contribution - -StoneDB welcomes all kinds of contributions, such as contributing code to the code base, sharing your experience on how to use StoneDB, and providing insights in the community on the Forums, or contributing to projects that make StoneDB a better project. For more specifics, see the [contributing guide](https://github.com/stoneatom/stonedb/blob/stonedb-5.7-dev/CONTRIBUTING.md) for more specifics. - # Getting Started The Getting Started part provides information about StoneDB supported platforms, installation (including creating your first table), and migrating from the running MySQL databases to StoneDB. @@ -83,6 +79,12 @@ The following packages we verify our builds with: - RocksDB 6.12.6 - Boost 1.66 +## Build StoneDB from Source Code in a Docker Container + +For more information, see [Compile StoneDB in a Docker Container](https://stonedb.io/docs/developer-guide/compiling-methods/compile-using-docker). + +Of course, you can also quickly install and deploy StoneDB directly from [Dockershub](https://hub.docker.com/r/stoneatom/stonedb) in just two minutes. See our [documentation](https://stonedb.io/docs/getting-started/quick-deploy-in-docker) for details. + ## Build StoneDB from the Source Code ### On Ubuntu 20.04 @@ -95,9 +97,6 @@ For more information, see [Compile StoneDB on CentOS 7.x](https://stonedb.io/doc ### On RedHat 7.X For more information, see [Compile StoneDB on RedHat 7.x](https://stonedb.io/docs/developer-guide/compiling-methods/compile-using-redhat7/compile-using-redhat7-for-57/). -## Build StoneDB from Source Code in a Docker Container - -For more information, see [Compile StoneDB in a Docker Container](https://stonedb.io/docs/developer-guide/compiling-methods/compile-using-docker). ## Configure StoneDB After StoneDB is installed, you need to configure at least the following parameters in the **my.cnf** file: @@ -174,6 +173,10 @@ Online migration tools to move data between storage engines are not currently de Documentation can be found online at [https://stonedb.io](https://stonedb.io/docs/about-stonedb/intro). The documentation provides you with StoneDB basics, extensive examples of using StoneDB, as well as other information that you may need during your usage of StoneDB. +# Contribution + +StoneDB welcomes all kinds of contributions, such as contributing code to the code base, sharing your experience on how to use StoneDB, and providing insights in the community on the Forums, or contributing to projects that make StoneDB a better project. For more specifics, see the [contributing guide](https://github.com/stoneatom/stonedb/blob/stonedb-5.7-dev/CONTRIBUTING.md) for more specifics. + # Discussion The [GitHub Discussions](https://github.com/stoneatom/stonedb/discussions) is the home for most discussions and communications about the StoneDB project. We welcome your participation. Every single opinion or suggestion of yours is welcomed and valued. We anticipate StoneDB to be an open and influential project. diff --git a/README_zh-hans.md b/README_zh-hans.md index b66eae76b..f3826dc3c 100644 --- a/README_zh-hans.md +++ b/README_zh-hans.md @@ -22,11 +22,11 @@ - [贡献指南](#贡献指南) - [快速开始](#快速开始) - [支持平台](#支持平台) + - [在 Docker 容器中通过源码编译 StoneDB](#在-docker-容器中通过源码编译-stonedb) - [通过源码编译 StoneDB](#通过源码编译-stonedb) - [Ubuntu 20.04 下编译 StoneDB](#ubuntu-2004-下编译-stonedb) - [CentOS 7.x 下编译 StoneDB](#centos-7x-下编译-stonedb) - [RedHat 7.x 下编译 StoneDB](#redhat-7x-下编译-stonedb) - - [在 Docker 容器中通过源码编译 StoneDB](#在-docker-容器中通过源码编译-stonedb) - [配置 StoneDB](#配置-stonedb) - [初始化数据库](#初始化数据库) - [启动数据库实例](#启动数据库实例) @@ -84,6 +84,12 @@ StoneDB 社区欢迎各种各样的贡献,如为代码库贡献代码,分享 - RocksDB 6.12.6 - Boost 1.66 +## 在 Docker 容器中通过源码编译 StoneDB + +更多信息,可以查看 [Compile StoneDB in a Docker Container](https://stonedb.io/zh/docs/developer-guide/compiling-methods/compile-using-docker)。 + +当然,您也可以直接通过 [Dockershub](https://hub.docker.com/r/stoneatom/stonedb) 来快速安装部署 StoneDB,只要两分钟,详情可以看[官网文档](https://stonedb.io/zh/docs/getting-started/quick-deploy-in-docker)。 + ## 通过源码编译 StoneDB ### Ubuntu 20.04 下编译 StoneDB @@ -97,9 +103,6 @@ StoneDB 社区欢迎各种各样的贡献,如为代码库贡献代码,分享 ### RedHat 7.x 下编译 StoneDB 更多信息,可以查看 [Compile StoneDB on RHEL 7](https://stonedb.io/zh/docs/developer-guide/compiling-methods/compile-using-redhat7/compile-using-redhat7-for-57)。 -## 在 Docker 容器中通过源码编译 StoneDB - -更多信息,可以查看 [Compile StoneDB in a Docker Container](https://stonedb.io/zh/docs/developer-guide/compiling-methods/compile-using-docker)。 ## 配置 StoneDB diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..45337d73b --- /dev/null +++ b/codecov.yml @@ -0,0 +1,3 @@ +ignore: +- "include/boost_1_66_0" +- "extra" \ No newline at end of file diff --git a/include/mysqld_error.h b/include/mysqld_error.h index 7451e3970..41a0ab13a 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -4,7 +4,7 @@ #define MYSQLD_ERROR_INCLUDED static const int errmsg_section_start[] = { 1000, 3000 }; -static const int errmsg_section_size[] = { 889, 234 }; +static const int errmsg_section_size[] = { 889, 244 }; #define ER_HASHCHK 1000 #define ER_NISAMCHK 1001 diff --git a/mysql-test/r/mysql_config_editor.result b/mysql-test/r/mysql_config_editor.result index a0cd95d9e..e91b52752 100644 --- a/mysql-test/r/mysql_config_editor.result +++ b/mysql-test/r/mysql_config_editor.result @@ -100,7 +100,7 @@ user = test_user4 ############################################## # Tests for mysql_config_editor's help command ############################################## -Copyright (c) 2021, 2022 StoneAtom Group Holding Limited +Copyright (c) 2021-Right Now, StoneAtom Group Holding Limited MySQL Configuration Utility. -?, --help Display this help and exit. -v, --verbose Write more information. diff --git a/mysql-test/suite/innodb/include/innodb_testlist b/mysql-test/suite/innodb/include/innodb_testlist index fd8bdd865..ac3d26641 100644 --- a/mysql-test/suite/innodb/include/innodb_testlist +++ b/mysql-test/suite/innodb/include/innodb_testlist @@ -1,80 +1,55 @@ -innodb.check_sector_size innodb.innodb_bug53674 -innodb.innodb -innodb.innodb_misc1 innodb.innodb_ctype_ldml +innodb.innodb_misc1 +innodb.check_sector_size innodb.innodb-autoinc-44030 +innodb.innodb innodb.innodb_autoinc_lock_mode_zero innodb.update_time +innodb.table_encryption innodb.events-merge-tmp-path innodb.file_format_defaults innodb.innodb_bug39438 +innodb.innodb-autoinc +innodb.table_encrypt_2 innodb.blob_redo -innodb.innodb-index +innodb.innodb_buffer_pool_load_now innodb.innodb-autoinc-56228 innodb.innodb_bug30919 +innodb.innodb-index innodb.innodb_bug42101-nonzero +innodb.innodb_stats_flag_global_off +innodb.innodb_stats_flag_global_on innodb.create_isl_with_direct -innodb.innodb_mysql_rbk +innodb.innodb_bug60049 innodb.innodb_timeout_rollback -innodb.innodb-consistent innodb.alter_table_stage_progress -innodb.innodb_bug47167 -innodb.innodb_file_format -innodb.alter_page_size -innodb.alter_rename_existing -innodb.alter_row_format -innodb.alter_table_redundant -innodb.check_ibd_filesize_16k -innodb.checksum -innodb.create-index -innodb.create_tablespace_partition +innodb.innodb-consistent +innodb.innodb_mysql_rbk +innodb.innodb_buffer_pool_load innodb.deadlock_detect innodb.default_row_format +innodb.innodb_bug47167 +innodb.innodb_file_format +innodb.add_foreign_key +innodb.default_row_format_16k innodb.default_row_format_compatibility -innodb.default_row_format_tablespace -innodb.deprecate_part_in_shared_ts -innodb.dropdb -innodb.foreign_key -innodb.import -innodb.import_tablespace_schema_missmatch -innodb.import_update_stats -innodb.index-online-norebuild -innodb.index_length -innodb.index_tree_operation +innodb.innodb-semi-consistent innodb.innodb-alter-autoinc innodb.innodb-alter-nullable +innodb.default_row_format_tablespace innodb.innodb-alter-wl6554 innodb.innodb-analyze innodb.innodb-autoinc-18274 innodb.innodb-autoinc-optimize +innodb.deprecate_part_in_shared_ts +innodb.dropdb innodb.innodb-bug-14068765 innodb.innodb-bug-14084530 +innodb.innodb_lock_wait_timeout_1 +innodb.innodb-lock innodb.innodb-bug12552164 innodb.innodb-bug14219515 -innodb.innodb-import-partition -innodb.innodb-index_ucs2 -innodb.innodb-isolation -innodb.innodb-large-prefix -innodb.innodb-lock -innodb.innodb-timeout -innodb.innodb-truncate -innodb.innodb-ucs2 -innodb.innodb-update-insert -innodb.innodb-wl5522-1 -innodb.innodb_buffer_pool_dump_pct -innodb.innodb_bug11789106 -innodb.innodb_bug11933790 -innodb.innodb_bug12429573 -innodb.innodb_bug12661768 -innodb.innodb_bug14169459 -innodb.innodb_bug21704 -innodb.innodb_bug34053 -innodb.innodb_bug34300 -innodb.innodb_bug35220 -innodb.innodb_bug38231 -innodb.innodb_bug40360 -innodb.innodb_bug40565 innodb.innodb_bug41904 innodb.innodb_bug42101 innodb.innodb_bug42419 @@ -86,8 +61,14 @@ innodb.innodb_bug46000 innodb.innodb_bug46676 innodb.innodb_bug47621 innodb.innodb_bug47622 +innodb.table_encrypt_5 innodb.innodb_bug47777 innodb.innodb_bug48024 +innodb.innodb_i_s_innodb_trx +innodb.innodb_information_schema_buffer +innodb.innodb_io_pf +innodb.innodb_multi_update +innodb.innodb_notembedded innodb.innodb_bug49164 innodb.innodb_bug51378 innodb.innodb_bug51920 @@ -95,30 +76,18 @@ innodb.innodb_bug52199 innodb.innodb_bug53046 innodb.innodb_bug53592 innodb.innodb_bug54044 +innodb.innodb-wl6045-1 +innodb.innodb-import-partition +innodb.file_format_upgrade_16k +innodb.innodb-index_ucs2 innodb.innodb_bug56143 innodb.innodb_bug56716 +innodb.alter_missing_tablespace innodb.innodb_bug57252 +innodb.alter_page_size innodb.innodb_bug57255 -innodb.innodb_bug57904 -innodb.innodb_bug59307 -innodb.innodb_bug59410 -innodb.innodb_bug59733 -innodb.innodb_bug60229 -innodb.innodb_bulk_create_index_small -innodb.innodb_i_s_innodb_locks -innodb.innodb_i_s_innodb_trx -innodb.innodb_information_schema_buffer -innodb.innodb_io_pf -innodb.innodb_multi_update -innodb.innodb_notembedded -innodb.innodb_prefix_index_check -innodb.innodb_rename_index -innodb.innodb_stats -innodb.innodb_stats_auto_recalc_ddl -innodb.innodb_stats_auto_recalc_lots -innodb.innodb_stats_auto_recalc_on_nonexistent -innodb.innodb_stats_create_on_corrupted -innodb.innodb_stats_create_table +innodb.alter_rename_existing +innodb.alter_row_format innodb.innodb_stats_drop_locked innodb.innodb_stats_external_pages innodb.innodb_stats_fetch @@ -127,32 +96,666 @@ innodb.innodb_stats_fetch_nonexistent innodb.innodb_stats_rename_table innodb.innodb_stats_rename_table_if_exists innodb.innodb_stats_sample_pages -innodb.innodb_sys_var_valgrind -innodb.innodb_tablespace -innodb.innodb_tablespace_zip -innodb.innodb_trx_weight -innodb.innodb_wl6469_1 +innodb.innodb_bug57904 +innodb.innodb_bug59307 +innodb.innodb_bug59410 +innodb.innodb_prefix_index_check +innodb.innodb-isolation +innodb.innodb-multiple-tablespaces +innodb.innodb-large-prefix innodb.innodb_wl6470 +innodb.foreign_key +innodb.alter_table_redundant +innodb.innodb_stats +innodb.innodb-timeout +innodb.innodb-truncate +innodb.innodb-ucs2 +innodb.innodb_bug59641 +innodb.innodb-update-insert +innodb.innodb_bug59733 +innodb.innodb_bug60229 +innodb.innodb_bulk_create_index_small +innodb.help_verbose +innodb.innodb_bug-13628249 +innodb.innodb_bug11789106 +innodb.import +innodb.import_tablespace_schema_missmatch +innodb.import_update_stats +innodb.index-online-norebuild +innodb.innodb_bug11933790 +innodb.innodb_stats_auto_recalc +innodb.innodb_stats_auto_recalc_ddl +innodb.innodb_bug12429573 +innodb.innodb_bug12661768 +innodb.innodb_bug14169459 +innodb.innodb-wl5522-1 +innodb.innodb_bug21704 +innodb.innodb_bug34053 +innodb.innodb_bug34300 +innodb.innodb_bug35220 +innodb.innodb_bug38231 +innodb.innodb_bug40360 +innodb.innodb_bug40565 +innodb.innodb_wl6560_1 innodb.innodb_wl6915 innodb.innodb_wl8114 +innodb.check_ibd_filesize_16k +innodb.index_length +innodb.index_tree_operation +innodb.innodb_stats_auto_recalc_lots +innodb.innodb_stats_auto_recalc_on_nonexistent +innodb.innodb_stats_create_on_corrupted +innodb.innodb_stats_create_table +innodb.checksum +innodb.create-index innodb.iodku -innodb.log_file_size_checkpoint -innodb.monitor -innodb.monitor_restart -innodb.partition-blob -innodb.partition -innodb.readahead -innodb.stored_fk -innodb.strict_mode +innodb.innodb_prefix_index_restart_server innodb.tablespace_per_table innodb.tablespace_per_table_not_windows +innodb.innodb_rename_index innodb.timestamp innodb.tmpdir +innodb.monitor_restart +innodb.partition-blob +innodb.innodb-wl5522 +innodb.log_file_size_checkpoint +innodb.partition-upgrade +innodb.create_tablespace innodb.trx_id_future innodb.undo -innodb.virtual_basic -innodb.virtual_blob +innodb.partition +innodb.innodb_stats_table_flag_auto_recalc innodb.virtual_fk +innodb.readahead innodb.virtual_index innodb.virtual_stats +innodb.innodb_force_recovery +innodb.innodb_i_s_innodb_locks +innodb.readonly +innodb.missing_tablespaces +innodb.monitor +innodb.virtual_fk_restart +innodb.xa_recovery +innodb.create_tablespace_partition +innodb.create_tablespace_16k +innodb.create_tablespace_replication +innodb.innodb-import-partition-rpl +innodb.innodb_bulk_create_index_replication +innodb.rename_table +innodb.stored_fk +innodb.strict_mode +innodb.innodb_buffer_pool_dump_pct +innodb.innodb_sys_var_valgrind +innodb.innodb_tablespace +innodb.innodb_tablespace_zip +innodb.innodb_trx_weight +innodb.innodb_wl6469_1 +innodb.create_tablespace_notembedded +innodb.innodb_stats_table_flag_sample_pages +innodb.virtual_blob +innodb.innodb-wl5980-discard +innodb.update_time_wl6658 +innodb.innodb-wl6445 +innodb.innodb-wl6045-linux +innodb.virtual_basic +innodb.table_encrypt_kill +innodb.table_encrypt_3 +main.plugin_load_option +main.plugin_load +main.plugin_auth_user_lock +main.bug46261 +main.multi_plugin_load +main.plugin_not_embedded +main.plugin_auth_qa_2 +main.multi_plugin_load_add2 +main.multi_plugin_load_add +main.plugin_auth_qa +main.plugin_auth_expire +main.plugin_auth_qa_3 +main.enable_cleartext_plugin +main.plugin_auth_qa_1 +main.locking_service +main.version_token +main.test_security_context +main.udf_services +main.udf_skip_grants +main.ctype_filesystem +main.session_tracker +main.signal_demo3 +main.wl6301_3 +main.bug33509 +main.fulltext_plugin +main.validate_password_plugin_check_user +main.lock_tables_lost_commit +main.sp-fib +main.version_token_bug21280801 +main.version_token_errors +main.udf +main.ipv4_as_ipv6 +main.validate_password_plugin +main.wl6301_2_not_windows +main.sp-lock +main.sp-prelocking +main.subselect_notembedded +main.mix2_myisam +main.ctype_utf16_def +main.lowercase_utf8 +main.ctype_ucs2_def +main.bug47671 +main.date_formats +main.grant_alter_user_qa +main.myisam-blob +main.ctype_ldml +main.disabled_storage_engines +main.no_engine_substitution +main.ctype_utf8mb4 +main.ctype_gb18030_binlog +main.plugin_auth_sha256_server_default_tls +main.wl6443_deprecation +main.temp_table +main.disconnect_on_expired_password_off +main.ps_3innodb +main.myisam_explain_non_select_none +main.innodb_ignore_builtin +main.ctype_utf8 +main.xa_gtid +main.type_timestamp +main.log_state_bug33693 +main.ctype_utf8mb4_innodb +main.type_timestamp_explicit +main.implicit_commit +main.mysqldump-max +main.init_connect +main.innodb_disabled +main.no_binlog_gtid_next_begin_caused_trx +main.partition_innodb_semi_consistent +main.mysqldump_gtid_state +main.strict +main.no_binlog_gtid_next_partially_failed_stmts +main.init_file +main.log_timestamps +main.bug46760 +main.wl6661 +main.unsafe_binlog_innodb +main.bug17076131 +main.events_restart +main.events_logs_tests +main.innodb_mysql_lock +main.rollback +main.concurrent_innodb_unsafelog +main.plugin_auth_sha256 +main.plugin_auth_sha256_2 +main.plugin_auth_sha256_server_default +main.func_encrypt +main.skip_log_bin +main.innodb_mrr +main.variables-notembedded +main.check +main.partition_not_blackhole +main.ps +main.ssl_8k_key +main.log_tables +main.concurrent_innodb_safelog +main.lowercase_mixed_tmpdir +main.lowercase_table_qcache +main.server_offline_6 +main.innodb_deadlock +main.lowercase_view +main.lowercase_table_grant +main.variables +main.merge_mmap +main.mysql_not_windows +main.relay_log_index_variables +main.bug12969156 +main.innodb_mrr_cost +main.csv +main.cache_innodb +main.bug58669 +main.deprecate_eof +main.ps_2myisam +main.select_for_update +main.myisam_recover +main.ps_4heap +main.relay_log_variables +main.disabled_replication +main.grant3 +main.skip_grants +main.flush2 +main.mysqldump-no-binlog +main.table_open_cache_functionality +main.ps_5merge +main.query_cache_disabled +main.mysql_ssl +main.archive_no_symlink +main.skip_name_resolve +main.skip_grants_flush +main.ssl-sha512 +main.ssl_ca +main.ssl_crl_clients_valid +main.ssl_crl_clients +main.count_distinct2 +main.multi_update_tiny_hash +main.func_misc +main.grant_cache +main.mysql_client_test_qcache +main.partition_cache +main.query_cache_size_functionality +main.query_cache_28249 +main.ssl_crl +main.long_tmpdir +main.innodb_mrr_cost_icp +main.temp_pool +main.ssl_crl_crlpath +main.grant_user_lock_qa +main.ssl_cipher +main.order_fill_sortbuf +main.ssl_verify_identity +main.handler_myisam +main.partition_not_windows +main.no-threads +main.sysdate_is_now +main.query_cache_notembedded +main.func_aes_cfb128 +main.ctype_create +main.func_aes_cfb8 +main.ctype_errors +main.func_isnull +main.query_cache_ps_no_prot +main.func_op +main.ctype_filename +main.func_aes_misc +main.innodb_mrr_icp +main.func_aes_ofb +main.query_cache_with_views +main.func_rollback +main.func_sapdb +main.transaction_isolation +main.transaction_read_only +main.func_analyse +main.func_set +main.trans_read_only +main.func_str_no_ps +main.func_system +main.func_bitwise_ops +main.change_user +main.func_timestamp +main.session_tracker_trx_state +main.mysql_batch_mode +main.func_crypt +main.mysql_comments +main.func_date_add +main.func_weight_string +main.func_des_encrypt +main.ctype_gb18030 +main.func_digest +main.func_encrypt_ucs2 +main.func_equal +main.func_found_rows +main.comment_column2 +main.comment_index +main.comment_table +main.comments +main.ctype_gb18030_encoding_cn +main.commit +main.mysqladmin +main.fulltext2 +main.ctype_utf32 +main.compare +main.condition_filter +main.fulltext3 +main.func_gconcat +main.ctype_gb18030_encoding_utf8 +main.func_group_innodb +main.func_group_innodb_16k +main.ctype_utf32_uca +main.function_defaults +main.func_if +main.ctype_gb18030_ligatures +main.gcc296 +main.mysqldumpslow +main.mysqlimport +main.get_diagnostics +main.gis-rt-precise +main.innodb_mrr_none +main.not_embedded_server +main.1st +main.ctype_utf8mb4_heap +main.locale +main.alias +main.fulltext_distinct +main.events_scheduling +main.group_min_max_innodb +main.almost_full +main.index_merge_intersect_dml +main.gtids_anonymous_trxs_violations +main.events_trans +main.analyze +main.events_trans_notembedded +main.mysqladmin_shutdown +main.ansi +main.lock +main.ctype_gb2312 +main.ctype_utf8mb4_myisam +main.mysqlbinlog_base64_flag +main.insert_select +main.archive_bitfield +main.index_merge_update +main.mysqlbinlog_hexdump +main.archive_gis +main.archive_symlink +main.ctype_utf8mb4_uca +main.mysql_cp932 +main.information_schema_db +main.mysql_protocols +main.mysql_ssl_default +main.mysql_tzinfo_to_sql +main.query_cache_type_functionality +main.bigint +main.information_schema_inno +main.information_schema_parameters +main.information_schema_routines +main.binary +main.ctype_gbk +main.insert_update +main.mysql_tzinfo_to_sql_sys +main.binary_to_hex +main.blackhole +main.ctype_hebrew +main.bool +main.ctype_latin2 +main.mysqlcheck +main.mysqld--defaults-file +main.ctype_latin2_ch +main.no_binlog_gtid_next_single_stmt_trx_rollback +main.ctype_many +main.no_binlog_gtid_next_temporary_table +main.handler_innodb +main.odbc +main.heap_auto_increment +main.ctype_mb +main.heap_btree +main.ctype_tis620 +main.heap_hash +main.help +main.help_verbose +main.mysqlpump_basic +main.olap +main.connect +main.mysqlpump_bugs +main.openssl_1 +main.installdb-bad-cipher +main.is_deprecation +main.opt_costmodel +main.join_crash +main.fulltext_update +main.host_cache_size_functionality +main.opt_costmodel_downgrade +main.opt_costmodel_pfs +main.mysqlpump_concurrency +main.join_file_handler +main.log_errchk +main.mysqlpump_extended +main.examined_rows +main.consistent_snapshot +main.execution_constants +main.key +main.constraints +main.key_diff +main.create_not_windows +main.key_primary +main.csv_alter_table +main.mysqlpump_partial_bkp +main.csv_not_null +main.ctype_ascii +main.keywords +main.log_tables_upgrade +main.grant_alter_user +main.lowercase_fs_off +main.lowercase_table5 +main.loaddata +main.loaddata_autocom_innodb +main.ignore_strict +main.ctype_big5 +main.explain_json_none +main.mysqldump-binary +main.file_contents +main.mysqldump-compat +main.implicit_char_to_num_conversion +main.mysqldump_bug29998457 +main.import_schema_mismatch +main.ctype_uca +main.datadir_permission +main.sort_buffer_size_functionality +main.filesort_merge +main.filesort_pack +main.loadxml +main.parser_not_embedded +main.parser_precedence +main.opt_hint_timeout +main.opt_hints_lowercase +main.initialize_gtid +main.opt_hints_pfs +main.mysqlshow +main.user_limits +main.index_merge_insert-and-replace +main.innodb_icp +main.partition_index_myisam +main.deadlock_innodb +main.ctype_binary +main.default +main.grant_explain_non_select +main.delete_all_rows +main.order_by_limit +main.deprecated_features +main.ctype_collate +main.outfile_loaddata +main.dirty_close +main.overflow +main.parser_stack +main.disconnect_on_expired_password_default +main.ctype_cp1250_ch +main.packet +main.innodb_icp_all +main.drop +main.partition_mgm_err2 +main.empty_table +main.partition_myisam +main.endspace +main.events_grant +main.events_microsec +main.opt_costmodel_restart +main.partition_utf8 +main.perror +main.plugin_auth_sha256_tls +main.ps_10nestset +main.opt_costmodel_tables +main.ps_11bugs +main.flush +main.merge +main.merge_innodb +main.innodb_icp_none +main.innodb_log_file_size_functionality +main.multi_update_innodb +main.innodb_pk_extension_off +main.flush_block_commit +main.partition_order +main.func_aes +main.func_aes_cfb1 +main.innodb_pk_extension_on +main.ps_grant +main.ps_not_windows +main.partition_datatype +main.partition_innodb +main.ps_w_max_indexes_64 +main.partition_innodb_plugin +main.read_only +main.read_only_innodb +main.bootstrap +main.rename +main.renamedb +main.bug12427262 +main.rewrite_general_log +main.bulk_replace +main.partition +main.rewrite_slow_log +main.cast +main.ctype_cp1251 +main.partition_archive +main.partition_blackhole +main.ctype_cp932 +main.mysql-bug41486 +main.ps_1general +main.partition_bug18198 +main.round +main.server_offline_3 +main.server_offline_4 +main.rowid_order_innodb +main.ps_ddl1 +main.rpl_multi_source_mysqldump_slave +main.schema +main.server_offline_1 +main.server_offline_5 +main.server_offline_2 +main.sp-destruct +main.partition_innodb_tablespace +main.ctype_ucs +main.sp-dynamic +main.partition_column +main.partition_list +main.partition_column_prune +main.parser_bug21114_innodb +main.partition_csv +main.sp-ucs2 +main.ctype_utf16 +main.sp-error +main.sp-no-code +main.sp-vars +main.mysql-bug45236 +main.sp-security +main.ctype_utf16_uca +main.charset +main.sp-threads +main.ctype_utf16le +main.subquery_sj_innodb_none_bka_nixbnl +main.partition_pruning +main.timezone2 +main.sum_distinct +main.sp_gis +main.system_mysql_db_refs +main.sql_mode_default +main.partition_range +main.partition_rename_longfilename +main.partition_symlink +main.partition_truncate +main.truncate +main.type_binary +main.timezone4 +main.type_bit_innodb +main.opt_costmodel_warnings +main.check_auto_permission +main.symlink +main.client_xml +main.type_decimal +main.comment_column +main.subquery_sj_innodb_none +main.synchronization +main.type_temporal_upgrade +main.partition_locking_4 +main.sp_stress_case +main.type_enum +main.system_mysql_db +main.type_nchar +main.view_alias +main.subquery_sj_innodb_none_bka +main.mysqlslap +main.no_binlog +main.wl6219-csv +main.no_binlog_gtid_empty_statement +main.no_binlog_gtid_next_partially_failed_stmts_anonymous +main.type_time +main.type_uint +main.wl6219-memory +main.wl6219-merge +main.partition_mgm +main.xml +main.subselect_gis +main.type_year +main.partition_mgm_err +main.type_newdecimal +main.wl6219-upgrade +main.wl6978 +main.type_set +main.partition_deprecation +main.sp_validation +main.table_definition_cache_functionality +main.sql_mode +main.ssl_and_innodb +main.status2 +main.status_bug17954 +main.strict_autoinc_2innodb +main.user_if_exists +main.timezone_grant +main.wait_timeout +main.partition_error +main.warnings_engine_disabled +main.trigger-compat +main.wl5928 +main.server_uuid +main.show_processlist_state +main.events_and_binlog +main.show_profile +main.show_variables +main.xa +main.flush_block_commit_notembedded +main.utility_warnings +main.trigger-trans +main.shutdown +main.create_select_tmp +main.ctype_cp932_binlog_row +main.ctype_gbk_binlog +main.signal +main.mysql_binary_mode +main.signal_demo1 +main.signal_demo2 +main.signal_sqlmode +main.partition_exchange +main.innodb_mysql_lock2 +main.partition_innodb_stmt +main.tablelock +main.temporal_literal +main.sp-big +main.sp-bugs +main.mysqlbinlog_mixed_or_statment +main.mysqldump_restore +main.strict_autoinc_1myisam +main.strict_autoinc_3heap +main.partition_binlog +main.partition_binlog_stmt +main.user_lock +main.partition_explicit_prune +main.variables_community +main.sp_trans_log +main.archive +main.partition_grant +main.auth_rpl +main.sp_trans +main.commit_1innodb +main.trigger_wl3253 +main.partition_hash +main.partition_index_innodb +main.mysqlbinlog_raw_mode +main.wl3836 +main.timezone +main.myisam_row_rpl +main.xa_deadlock_binlog +main.rpl_connect_attr +main.bug12368203 +main.rpl_mysqldump_slave +main.myisam-system +main.mix2_myisam_ucs2 +main.mysql_upgrade_with_session_user +main.mysql_upgrade_ssl +main.mysql_upgrade_slave_master_info +main.lock_multi_bug38691 +main.lock_multi_bug38499 diff --git a/mysql-test/suite/tianmu/r/alter_table1.result b/mysql-test/suite/tianmu/r/alter_table1.result index 8694cec97..5d2b1a3b4 100644 --- a/mysql-test/suite/tianmu/r/alter_table1.result +++ b/mysql-test/suite/tianmu/r/alter_table1.result @@ -9,7 +9,7 @@ CREATE TABLE st1 name VARCHAR(25), deptId INT(11), salary FLOAT -); +) engine=tianmu; alter table st1 add column test varchar(4); alter table st1 add column test1 varchar(4) after test; alter table st1 add column test3 varchar(4); @@ -36,7 +36,7 @@ CREATE TABLE st2 name VARCHAR(25), deptId INT(11), salary FLOAT -); +) engine=tianmu; insert into st2 values(3,'haha1',45,4.5); insert into st2 values(1,'haha2',12,1.2); insert into st2 values(4,'haha3',31,3.2); @@ -68,7 +68,7 @@ name VARCHAR(25), deptId INT(11), salary FLOAT, PRIMARY KEY(id) -); +) engine=tianmu; ALTER TABLE st3 RENAME to st4 ; ALTER TABLE st4 RENAME as st3 ; ALTER TABLE st3 RENAME to st4 ; @@ -87,7 +87,7 @@ name VARCHAR(25), deptId INT(11), salary FLOAT, PRIMARY KEY(id) -); +) engine=tianmu; alter table st5 modify name varchar(20); alter table st5 modify column name varchar(24); alter table st5 modify column name varchar(15) after salary; @@ -98,7 +98,7 @@ name VARCHAR(25), deptId INT(11), salary FLOAT, PRIMARY KEY(id) -); +) engine=tianmu; alter table st6 rename to st7,add name1 varchar(10); desc st7; Field Type Null Key Default Extra @@ -138,4 +138,9 @@ salary float YES NULL name varchar(20) YES NULL name2 varchar(10) YES NULL name3 varchar(10) YES NULL +DROP TABLE st8; +DROP TABLE st5; +DROP TABLE st4; +DROP TABLE st2; +DROP TABLE st1; drop database alter_table1_test; diff --git a/mysql-test/suite/tianmu/r/bigint_unsigned.result b/mysql-test/suite/tianmu/r/bigint_unsigned.result new file mode 100644 index 000000000..b54e4cd0a --- /dev/null +++ b/mysql-test/suite/tianmu/r/bigint_unsigned.result @@ -0,0 +1,359 @@ +# +# Test bigint unsigned +# +DROP DATABASE IF EXISTS bigint_unsigned_test; +CREATE DATABASE bigint_unsigned_test; +USE bigint_unsigned_test; +select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296; +0 256 00000000000000065536 2147483647 -2147483648 2147483648 4294967296 +0 256 65536 2147483647 -2147483648 2147483648 4294967296 +select 9223372036854775807,-009223372036854775808; +9223372036854775807 -009223372036854775808 +9223372036854775807 -9223372036854775808 +select +9999999999999999999,-9999999999999999999; +9999999999999999999 -9999999999999999999 +9999999999999999999 -9999999999999999999 +select cast(9223372036854775808 as unsigned)+1; +cast(9223372036854775808 as unsigned)+1 +9223372036854775809 +select 9223372036854775808+1; +9223372036854775808+1 +9223372036854775809 +select -(0-3),round(-(0-3)), round(9999999999999999999); +-(0-3) round(-(0-3)) round(9999999999999999999) +3 3 9999999999999999999 +select 1,11,101,1001,10001,100001,1000001,10000001,100000001,1000000001,10000000001,100000000001,1000000000001,10000000000001,100000000000001,1000000000000001,10000000000000001,100000000000000001,1000000000000000001,10000000000000000001; +1 11 101 1001 10001 100001 1000001 10000001 100000001 1000000001 10000000001 100000000001 1000000000001 10000000000001 100000000000001 1000000000000001 10000000000000001 100000000000000001 1000000000000000001 10000000000000000001 +1 11 101 1001 10001 100001 1000001 10000001 100000001 1000000001 10000000001 100000000001 1000000000001 10000000000001 100000000000001 1000000000000001 10000000000000001 100000000000000001 1000000000000000001 10000000000000000001 +select -1,-11,-101,-1001,-10001,-100001,-1000001,-10000001,-100000001,-1000000001,-10000000001,-100000000001,-1000000000001,-10000000000001,-100000000000001,-1000000000000001,-10000000000000001,-100000000000000001,-1000000000000000001,-10000000000000000001; +-1 -11 -101 -1001 -10001 -100001 -1000001 -10000001 -100000001 -1000000001 -10000000001 -100000000001 -1000000000001 -10000000000001 -100000000000001 -1000000000000001 -10000000000000001 -100000000000000001 -1000000000000000001 -10000000000000000001 +-1 -11 -101 -1001 -10001 -100001 -1000001 -10000001 -100000001 -1000000001 -10000000001 -100000000001 -1000000000001 -10000000000001 -100000000000001 -1000000000000001 -10000000000000001 -100000000000000001 -1000000000000000001 -10000000000000000001 +select conv(1,10,16),conv((1<<2)-1,10,16),conv((1<<10)-2,10,16),conv((1<<16)-3,10,16),conv((1<<25)-4,10,16),conv((1<<31)-5,10,16),conv((1<<36)-6,10,16),conv((1<<47)-7,10,16),conv((1<<48)-8,10,16),conv((1<<55)-9,10,16),conv((1<<56)-10,10,16),conv((1<<63)-11,10,16); +conv(1,10,16) conv((1<<2)-1,10,16) conv((1<<10)-2,10,16) conv((1<<16)-3,10,16) conv((1<<25)-4,10,16) conv((1<<31)-5,10,16) conv((1<<36)-6,10,16) conv((1<<47)-7,10,16) conv((1<<48)-8,10,16) conv((1<<55)-9,10,16) conv((1<<56)-10,10,16) conv((1<<63)-11,10,16) +1 3 3FE FFFD 1FFFFFC 7FFFFFFB FFFFFFFFA 7FFFFFFFFFF9 FFFFFFFFFFF8 7FFFFFFFFFFFF7 FFFFFFFFFFFFF6 7FFFFFFFFFFFFFF5 +create table t1 (a bigint unsigned not null, primary key(a)); +insert into t1 values (9223372036854775807), (0xFFFFFFFFFFFFFF), (9223372036854775806), (9223372036854775805); +select * from t1 order by 1; +a +72057594037927935 +9223372036854775805 +9223372036854775806 +9223372036854775807 +select * from t1 where a=9223372036854775807; +a +9223372036854775807 +select * from t1 where a='9223372036854775807'; +a +9223372036854775807 +delete from t1 where a=9223372036854775807; +select * from t1 order by 1; +a +72057594037927935 +9223372036854775805 +9223372036854775806 +drop table t1; +create table t1 ( a int not null default 1, big bigint ); +insert into t1 (big) values (-1),(12345678901234567),(9223372036854775807),(9223372036854775805); +select * from t1; +a big +1 -1 +1 12345678901234567 +1 9223372036854775807 +1 9223372036854775805 +select min(big),max(big),max(big)-1 from t1; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +select min(big),max(big),max(big)-1 from t1 group by a; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +alter table t1 modify big bigint unsigned not null; +ERROR 22003: Out of range value for column 'big' at row 1 +select min(big),max(big),max(big)-1 from t1; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +select min(big),max(big),max(big)-1 from t1 group by a; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +insert into t1 (big) values (9223372036854775807); +select * from t1; +a big +1 -1 +1 12345678901234567 +1 9223372036854775807 +1 9223372036854775805 +1 9223372036854775807 +select min(big),max(big),max(big)-1 from t1; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +select min(big),max(big),max(big)-1 from t1 group by a; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +select min(big),max(big),max(big)-1 from t1; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +select min(big),max(big),max(big)-1 from t1 group by a; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +alter table t1 modify big bigint not null; +select * from t1; +a big +1 -1 +1 12345678901234567 +1 9223372036854775807 +1 9223372036854775805 +1 9223372036854775807 +select min(big),max(big),max(big)-1 from t1; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +select min(big),max(big),max(big)-1 from t1 group by a; +min(big) max(big) max(big)-1 +-1 9223372036854775807 9223372036854775806 +drop table t1; +create table t1 (id bigint auto_increment primary key, a int) auto_increment=9999999999; +insert into t1 values (null,1); +select * from t1; +id a +9999999999 1 +select * from t1 limit 9999999999; +id a +9999999999 1 +drop table t1; +CREATE TABLE t1 (quantity decimal(18,0)); +insert into t1 values (100000000000000); +insert into t1 values (10000000000000.0); +insert into t1 values ('10000000000000'); +select * from t1; +quantity +100000000000000 +10000000000000 +10000000000000 +drop table t1; +SELECT '0x8000000000000001'+0; +'0x8000000000000001'+0 +0 +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: '0x8000000000000001' +create table t1 ( +value64 bigint unsigned not null, +value32 integer not null, +primary key(value64, value32) +); +create table t2 ( +value64 bigint unsigned not null, +value32 integer not null, +primary key(value64, value32) +); +insert into t1 values(9223372036854775806, 1); +insert into t1 values(9223372036854775807, 2); +insert into t2 values(9223372036854775806, 3); +insert into t2 values(9223372036854775807, 4); +select * from t1; +value64 value32 +9223372036854775806 1 +9223372036854775807 2 +select * from t2; +value64 value32 +9223372036854775806 3 +9223372036854775807 4 +select * from t1, t2 where t1.value64=9223372036854775806 and t2.value64=9223372036854775806; +value64 value32 value64 value32 +9223372036854775806 1 9223372036854775806 3 +select * from t1, t2 where t1.value64=9223372036854775806 and t2.value64=t1.value64; +value64 value32 value64 value32 +9223372036854775806 1 9223372036854775806 3 +select * from t1, t2 where t1.value64= 9223372036854775807 and t2.value64=9223372036854775807; +value64 value32 value64 value32 +9223372036854775807 2 9223372036854775807 4 +select * from t1, t2 where t1.value64= 9223372036854775807 and t2.value64=t1.value64; +value64 value32 value64 value32 +9223372036854775807 2 9223372036854775807 4 +drop table t1, t2; +create table t1 (sint64 bigint not null); +insert into t1 values (-9223372036854775806); +select * from t1; +sint64 +-9223372036854775806 +drop table t1; +create table t1 (a char(100), b varchar(100), c text, d blob); +insert into t1 values( +18446744073709551615,18446744073709551615, +18446744073709551615, 18446744073709551615 +); +insert into t1 values (-1 | 0,-1 | 0,-1 | 0 ,-1 | 0); +select * from t1; +a b c d +18446744073709551615 18446744073709551615 18446744073709551615 18446744073709551615 +18446744073709551615 18446744073709551615 18446744073709551615 18446744073709551615 +drop table t1; +create table t1 (quantity decimal(2) unsigned); +insert into t1 values (50), (0), (1); +select * from t1; +quantity +50 +0 +1 +drop table t1; +select cast(9223372036854775807 as unsigned) mod 50 as result; +result +7 +create table t1 (c1 bigint unsigned); +insert into t1 values (9223372036854775807); +select c1 mod 50 as result from t1; +result +7 +drop table t1; +select cast(19999999999999999999 as signed); +cast(19999999999999999999 as signed) +9223372036854775807 +Warnings: +Warning 1292 Truncated incorrect DECIMAL value: '19999999999999999999' +select cast(-19999999999999999999 as signed); +cast(-19999999999999999999 as signed) +-9223372036854775808 +Warnings: +Warning 1292 Truncated incorrect DECIMAL value: '-19999999999999999999' +select -9223372036854775808; +-9223372036854775808 +-9223372036854775808 +select -(9223372036854775808); +-(9223372036854775808) +-9223372036854775808 +select -((9223372036854775808)); +-((9223372036854775808)) +-9223372036854775808 +select -(-(9223372036854775808)); +-(-(9223372036854775808)) +9223372036854775808 +select --9223372036854775808, ---9223372036854775808, ----9223372036854775808; +--9223372036854775808 ---9223372036854775808 ----9223372036854775808 +9223372036854775808 -9223372036854775808 9223372036854775808 +select -(-9223372036854775808), -(-(-9223372036854775808)); +-(-9223372036854775808) -(-(-9223372036854775808)) +9223372036854775808 -9223372036854775808 +CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY, +a BIGINT(20) UNSIGNED, +b VARCHAR(20)); +INSERT INTO t1 (a) VALUES +(0), +(CAST(0x7FFFFFFFFFFFFFF AS UNSIGNED)), +(CAST(0x800000000000000 AS UNSIGNED)), +(CAST(0xFFFFFFFFFFFFFFF AS UNSIGNED)); +UPDATE t1 SET b = a; +select * from t1; +id a b +1 0 0 +2 576460752303423487 576460752303423487 +3 576460752303423488 576460752303423488 +4 1152921504606846975 1152921504606846975 +DROP TABLE t1; +CREATE TABLE t_bigint(id BIGINT); +INSERT INTO t_bigint VALUES (1), (2); +SELECT id, id >= 1.1 FROM t_bigint; +id id >= 1.1 +1 0 +2 1 +SELECT id, 1.1 <= id FROM t_bigint; +id 1.1 <= id +1 0 +2 1 +SELECT id, id = 1.1 FROM t_bigint; +id id = 1.1 +1 0 +2 0 +SELECT id, 1.1 = id FROM t_bigint; +id 1.1 = id +1 0 +2 0 +SELECT * from t_bigint WHERE id = 1.1; +id +SELECT * from t_bigint WHERE id = 1.1e0; +id +SELECT * from t_bigint WHERE id IN (1.1, 2.2); +id +SELECT * from t_bigint WHERE id IN (1.1e0, 2.2e0); +id +SELECT * from t_bigint WHERE id BETWEEN 1.1 AND 1.9; +id +SELECT * from t_bigint WHERE id BETWEEN 1.1e0 AND 1.9e0; +id +DROP TABLE t_bigint; +CREATE TABLE t1 (a BIGINT); +INSERT INTO t1 VALUES (1); +SELECT * FROM t1 WHERE coalesce(a) BETWEEN 0 and 0.9; +a +SELECT * FROM t1 WHERE coalesce(a)=0.9; +a +SELECT * FROM t1 WHERE coalesce(a) in (0.8,0.9); +a +SELECT * FROM t1 WHERE a BETWEEN 0 AND 0.9; +a +SELECT * FROM t1 WHERE a=0.9; +a +SELECT * FROM t1 WHERE a IN (0.8,0.9); +a +DROP TABLE t1; +create table t (id bigint unsigned, b int); +insert into t values(7223372036854775807,1); +insert into t values(7223372036854775806,2); +insert into t values(9223372036854775805,3); +select count(*) from t +where id>=7223372036854775806 and id <=9223372036854775807; +count(*) +3 +select count(*) from t +where id between 7223372036854775806 and 9223372036854775807; +count(*) +3 +alter table t add primary key (id); +select count(*) from t +where id>=7223372036854775806 and id <=9223372036854775807; +count(*) +3 +select count(*) from t +where id between 7223372036854775806 and 9223372036854775807; +count(*) +3 +drop table t; +SELECT (184467440737095 BETWEEN 0 AND 18446744073709551500); +(184467440737095 BETWEEN 0 AND 18446744073709551500) +1 +SELECT 184467440737095 >= 0; +184467440737095 >= 0 +1 +SELECT 0 <= 18446744073709551500; +0 <= 18446744073709551500 +1 +SELECT CAST(100 AS UNSIGNED) BETWEEN 1 AND -1; +CAST(100 AS UNSIGNED) BETWEEN 1 AND -1 +0 +SELECT CAST(100 AS UNSIGNED) NOT BETWEEN 1 AND -1; +CAST(100 AS UNSIGNED) NOT BETWEEN 1 AND -1 +1 +SELECT CAST(0 AS UNSIGNED) BETWEEN 0 AND -1; +CAST(0 AS UNSIGNED) BETWEEN 0 AND -1 +0 +SELECT CAST(0 AS UNSIGNED) NOT BETWEEN 0 AND -1; +CAST(0 AS UNSIGNED) NOT BETWEEN 0 AND -1 +1 +select -9223372036854775808 mod 9223372036854775810 as result; +result +-9223372036854775808 +select bin(convert(-9223372036854775808 using ucs2)); +bin(convert(-9223372036854775808 using ucs2)) +1000000000000000000000000000000000000000000000000000000000000000 +SELECT ( 9223372036854775808 BETWEEN 9223372036854775808 AND 9223372036854775808 ); +( 9223372036854775808 BETWEEN 9223372036854775808 AND 9223372036854775808 ) +1 +SELECT ( 9223372036854775807 BETWEEN 9223372036854775808 AND 1 ); +( 9223372036854775807 BETWEEN 9223372036854775808 AND 1 ) +0 +SELECT ( -1 BETWEEN 9223372036854775808 AND 1 ); +( -1 BETWEEN 9223372036854775808 AND 1 ) +1 +SELECT ( 0 BETWEEN 9223372036854775808 AND 1 ); +( 0 BETWEEN 9223372036854775808 AND 1 ) +1 +SELECT ( 1 BETWEEN 9223372036854775808 AND 1 ); +( 1 BETWEEN 9223372036854775808 AND 1 ) +1 +drop DATABASE bigint_unsigned_test; diff --git a/mysql-test/suite/tianmu/r/case_when.result b/mysql-test/suite/tianmu/r/case_when.result new file mode 100644 index 000000000..fa99084b6 --- /dev/null +++ b/mysql-test/suite/tianmu/r/case_when.result @@ -0,0 +1,192 @@ +# +# test case when +# +DROP DATABASE IF EXISTS case_when_test; +CREATE DATABASE case_when_test; +USE case_when_test; +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +select CASE "b" when "a" then 1 when "b" then 2 END; +CASE "b" when "a" then 1 when "b" then 2 END +2 +select CASE "c" when "a" then 1 when "b" then 2 END; +CASE "c" when "a" then 1 when "b" then 2 END +NULL +select CASE "c" when "a" then 1 when "b" then 2 ELSE 3 END; +CASE "c" when "a" then 1 when "b" then 2 ELSE 3 END +3 +select CASE BINARY "b" when "a" then 1 when "B" then 2 WHEN "b" then "ok" END; +CASE BINARY "b" when "a" then 1 when "B" then 2 WHEN "b" then "ok" END +ok +select CASE "b" when "a" then 1 when binary "B" then 2 WHEN "b" then "ok" END; +CASE "b" when "a" then 1 when binary "B" then 2 WHEN "b" then "ok" END +ok +select CASE concat("a","b") when concat("ab","") then "a" when "b" then "b" end; +CASE concat("a","b") when concat("ab","") then "a" when "b" then "b" end +a +select CASE when 1=0 then "true" else "false" END; +CASE when 1=0 then "true" else "false" END +false +select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END; +CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END +one +select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END; +CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END +two +select (CASE "two" when "one" then "1" WHEN "two" then "2" END) | 0; +(CASE "two" when "one" then "1" WHEN "two" then "2" END) | 0 +2 +select (CASE "two" when "one" then 1.00 WHEN "two" then 2.00 END) +0.0; +(CASE "two" when "one" then 1.00 WHEN "two" then 2.00 END) +0.0 +2.00 +select case 1/0 when "a" then "true" else "false" END; +case 1/0 when "a" then "true" else "false" END +false +select case 1/0 when "a" then "true" END; +case 1/0 when "a" then "true" END +NULL +select (case 1/0 when "a" then "true" END) | 0; +(case 1/0 when "a" then "true" END) | 0 +NULL +select (case 1/0 when "a" then "true" END) + 0.0; +(case 1/0 when "a" then "true" END) + 0.0 +NULL +select case when 1>0 then "TRUE" else "FALSE" END; +case when 1>0 then "TRUE" else "FALSE" END +TRUE +select case when 1<0 then "TRUE" else "FALSE" END; +case when 1<0 then "TRUE" else "FALSE" END +FALSE +create table t1 (a int); +insert into t1 values(1),(2),(3),(4); +select case a when 1 then 2 when 2 then 3 else 0 end as fcase, count(*) from t1 group by fcase order by fcase; +fcase count(*) +0 2 +2 1 +3 1 +select case a when 1 then "one" when 2 then "two" else "nothing" end as fcase, count(*) from t1 group by fcase order by fcase; +fcase count(*) +nothing 2 +one 1 +two 1 +drop table t1; +create table t1 (row int not null, col int not null, val varchar(255) not null); +insert into t1 values (1,1,'orange'),(1,2,'large'),(2,1,'yellow'),(2,2,'medium'),(3,1,'green'),(3,2,'small'); +select max(case col when 1 then val else null end) as color from t1 group by row; +color +orange +yellow +green +drop table t1; +SET NAMES latin1; +CREATE TABLE t1 SELECT +CASE WHEN 1 THEN _latin1'a' COLLATE latin1_danish_ci ELSE _latin1'a' END AS c1, +CASE WHEN 1 THEN _latin1'a' ELSE _latin1'a' COLLATE latin1_danish_ci END AS c2, +CASE WHEN 1 THEN 'a' ELSE 1 END AS c3, +CASE WHEN 1 THEN 1 ELSE 'a' END AS c4, +CASE WHEN 1 THEN 'a' ELSE 1.0 END AS c5, +CASE WHEN 1 THEN 1.0 ELSE 'a' END AS c6, +CASE WHEN 1 THEN 1 ELSE 1.0 END AS c7, +CASE WHEN 1 THEN 1.0 ELSE 1 END AS c8, +CASE WHEN 1 THEN 1.0 END AS c9, +CASE WHEN 1 THEN 0.1e1 else 0.1 END AS c10, +CASE WHEN 1 THEN 0.1e1 else 1 END AS c11, +CASE WHEN 1 THEN 0.1e1 else '1' END AS c12 +; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` varchar(1) CHARACTER SET latin1 COLLATE latin1_danish_ci NOT NULL DEFAULT '', + `c2` varchar(1) CHARACTER SET latin1 COLLATE latin1_danish_ci NOT NULL DEFAULT '', + `c3` varchar(1) NOT NULL DEFAULT '', + `c4` varchar(1) NOT NULL DEFAULT '', + `c5` varchar(4) NOT NULL DEFAULT '', + `c6` varchar(4) NOT NULL DEFAULT '', + `c7` decimal(2,1) NOT NULL DEFAULT '0.0', + `c8` decimal(2,1) NOT NULL DEFAULT '0.0', + `c9` decimal(2,1) DEFAULT NULL, + `c10` double NOT NULL DEFAULT '0', + `c11` double NOT NULL DEFAULT '0', + `c12` varchar(5) NOT NULL DEFAULT '' +) ENGINE=TIANMU DEFAULT CHARSET=latin1 +DROP TABLE t1; +SELECT CASE +WHEN 1 +THEN _latin1'a' COLLATE latin1_danish_ci +ELSE _latin1'a' COLLATE latin1_swedish_ci +END; +ERROR HY000: Illegal mix of collations (latin1_danish_ci,EXPLICIT) and (latin1_swedish_ci,EXPLICIT) for operation 'case' +SELECT CASE _latin1'a' COLLATE latin1_general_ci +WHEN _latin1'a' COLLATE latin1_danish_ci THEN 1 +WHEN _latin1'a' COLLATE latin1_swedish_ci THEN 2 +END; +ERROR HY000: Illegal mix of collations (latin1_general_ci,EXPLICIT), (latin1_danish_ci,EXPLICIT), (latin1_swedish_ci,EXPLICIT) for operation 'case' +SELECT +CASE _latin1'a' COLLATE latin1_general_ci WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' COLLATE latin1_bin WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_swedish_ci THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_bin THEN '1' ELSE 2 END; +CASE _latin1'a' COLLATE latin1_general_ci WHEN _latin1'A' THEN '1' ELSE 2 END CASE _latin1'a' COLLATE latin1_bin WHEN _latin1'A' THEN '1' ELSE 2 END CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_swedish_ci THEN '1' ELSE 2 END CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_bin THEN '1' ELSE 2 END +1 2 1 2 +CREATE TABLE t1 SELECT IFNULL('a' COLLATE latin1_swedish_ci, 'b' COLLATE latin1_bin); +ERROR HY000: Illegal mix of collations (latin1_swedish_ci,EXPLICIT) and (latin1_bin,EXPLICIT) for operation 'ifnull' +SELECT 'case+union+test' +UNION +SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; +case+union+test +case+union+test +nobug +SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; +CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END +nobug +SELECT 'case+union+test' +UNION +SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END; +case+union+test +case+union+test +nobug +create table t1(a float, b int default 3); +insert into t1 (a) values (2), (11), (8); +select min(a), min(case when 1=1 then a else NULL end), +min(case when 1!=1 then NULL else a end) +from t1 where b=3 group by b; +min(a) min(case when 1=1 then a else NULL end) min(case when 1!=1 then NULL else a end) +2 2 2 +drop table t1; +CREATE TABLE t1 (EMPNUM INT); +INSERT INTO t1 VALUES (0), (2); +CREATE TABLE t2 (EMPNUM DECIMAL (4, 2)); +INSERT INTO t2 VALUES (0.0), (9.0); +SELECT COALESCE(t2.EMPNUM,t1.EMPNUM) AS CEMPNUM, +t1.EMPNUM AS EMPMUM1, t2.EMPNUM AS EMPNUM2 +FROM t1 LEFT JOIN t2 ON t1.EMPNUM=t2.EMPNUM; +CEMPNUM EMPMUM1 EMPNUM2 +0.00 0 0.00 +2.00 2 NULL +SELECT IFNULL(t2.EMPNUM,t1.EMPNUM) AS CEMPNUM, +t1.EMPNUM AS EMPMUM1, t2.EMPNUM AS EMPNUM2 +FROM t1 LEFT JOIN t2 ON t1.EMPNUM=t2.EMPNUM; +CEMPNUM EMPMUM1 EMPNUM2 +0.00 0 0.00 +2.00 2 NULL +DROP TABLE t1,t2; +create table t1 (a int, b bigint unsigned); +create table t2 (c int); +insert into t1 (a, b) values (1,457279462277), (2,1819694241997), +(3,1114190595086); +insert into t2 (c) values (1), (2), (3); +select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1 +join t2 on t1.a=t2.c order by d; +a d +1 457279462277 +3 1114190595086 +2 1819694241997 +select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1 +join t2 on t1.a=t2.c where b=1114190595086 order by d; +a d +3 1114190595086 +drop table t1, t2; +CREATE TABLE t1(a YEAR); +SELECT 1 FROM t1 WHERE a=1 AND CASE 1 WHEN a THEN 1 ELSE 1 END; +1 +DROP TABLE t1; +drop database case_when_test; diff --git a/mysql-test/suite/tianmu/r/create_tmp.result b/mysql-test/suite/tianmu/r/create_tmp.result new file mode 100644 index 000000000..b5b65a112 --- /dev/null +++ b/mysql-test/suite/tianmu/r/create_tmp.result @@ -0,0 +1,133 @@ +# +# Test create temporary +# +DROP DATABASE IF EXISTS create_tmp_test; +CREATE DATABASE create_tmp_test; +USE create_tmp_test; +CREATE TEMPORARY TABLE st ( +id INT(11), +name VARCHAR(255) +); +INSERT INTO st (id, name) VALUES (1, 'John'); +INSERT INTO st (id, name) VALUES (2, 'Jane'); +SELECT * FROM st; +id name +1 John +2 Jane +UPDATE st SET name = 'Johnny' WHERE id = 1; +SELECT * FROM st; +id name +1 Johnny +2 Jane +DELETE FROM st WHERE id = 2; +SELECT * FROM st; +id name +1 Johnny +CREATE TEMPORARY TABLE st1 ( +id INT(11), +name VARCHAR(255) +); +CREATE TEMPORARY TABLE st2 ( +id INT(11), +city VARCHAR(255) +); +INSERT INTO st1 (id, name) VALUES (1, 'John'); +INSERT INTO st1 (id, name) VALUES (2, 'Jane'); +INSERT INTO st2 (id, city) VALUES (1, 'London'); +INSERT INTO st2 (id, city) VALUES (2, 'New York'); +SELECT st1.name, st2.city +FROM st1 INNER JOIN st2 ON st1.id=st2.id; +name city +John London +Jane New York +create table t2 (id int(11) auto_increment primary key, score int(11), name varchar(32)) ; +insert into t2 (score, name) values (98, 'Bob'); +select * from t2 where score > 90; +id score name +1 98 Bob +create temporary table t3 like t2 ; +insert into t3 (score, name) values (88, 'Charlie'); +select * from t3; +id score name +1 88 Charlie +create table t5 ( +id int(11) unsigned auto_increment primary key, +col1 varchar(32), +col2 datetime, +col3 time +) ; +insert into t5 (col1, col2, col3) values ('aaa', '2022-01-17 15:22:00', '12:00:00'); +insert into t5 (col1, col2, col3) values ('bbb', '2022-01-18 10:10:10', '20:00:00'); +insert into t5 (col1, col2, col3) values ('ccc', '2022-01-19 15:45:32', '18:45:00'); +select * from t5 where col1 = 'aaa'; +id col1 col2 col3 +1 aaa 2022-01-17 15:22:00 12:00:00 +create temporary table temp_t6 like t5 ; +insert into temp_t6 (col1, col2, col3) select col1, col2, col3 from t5 where col1 between 'aaa' and 'bbb'; +select * from temp_t6 order by col2 desc; +id col1 col2 col3 +2 bbb 2022-01-18 10:10:10 20:00:00 +1 aaa 2022-01-17 15:22:00 12:00:00 +drop temporary table if exists temp_t7; +Warnings: +Note 1051 Unknown table 'create_tmp_test.temp_t7' +create temporary table temp_t7( +id int(11)unsigned auto_increment primary key, +col1 varchar(32) +); +insert into temp_t7(col1)values('apple'),('banana'),('orange'),('watermelon'),('grapefruit'); +select * from temp_t7 order by id desc; +id col1 +5 grapefruit +4 watermelon +3 orange +2 banana +1 apple +create temporary table temp_t8(id int(11) unsigned auto_increment primary key, col1 varchar(32), col2 datetime, status char(1)) ; +insert into temp_t8(col1,col2,status)values('aaa','2022-02-19 09:21:40','Y'),('bbb','2022-02-20 14:15:23','N'),('ccc','2022-02-21 22:30:10','Y'),('ddd','2022-02-22 08:50:20','N'),('eee','2022-02-23 10:35:59','Y'); +select * from temp_t8; +id col1 col2 status +1 aaa 2022-02-19 09:21:40 Y +2 bbb 2022-02-20 14:15:23 N +3 ccc 2022-02-21 22:30:10 Y +4 ddd 2022-02-22 08:50:20 N +5 eee 2022-02-23 10:35:59 Y +create temporary table temp_t9(id int(11) unsigned auto_increment primary key, col3 varchar(32), col4 int(11),price decimal(8,2)); +insert into temp_t9(col3, col4, price) values('code11', 10, 523.2),('code22', 20 , 2480),('code33', 30, 89.99),('code44', 40, 5200.55); +select * from temp_t9; +id col3 col4 price +1 code11 10 523.20 +2 code22 20 2480.00 +3 code33 30 89.99 +4 code44 40 5200.55 +CREATE TEMPORARY TABLE temp_t10 SELECT * FROM temp_t9 LIMIT 3; +select * from temp_t10; +id col3 col4 price +1 code11 10 523.20 +2 code22 20 2480.00 +3 code33 30 89.99 +drop table if exists t1,t2,t3; +Warnings: +Note 1051 Unknown table 'create_tmp_test.t1' +CREATE TEMPORARY TABLE t1 (c1 DECIMAL(10,2)); +INSERT INTO t1 VALUES (10.00), (-24.53), (5936.28); +CREATE TEMPORARY TABLE t2 (c1 DECIMAL(38,10)); +INSERT INTO t2 VALUES (1.23), (-2.78), (99.99); +CREATE TEMPORARY TABLE t3 (c1 DECIMAL(12,5), c2 DECIMAL(20,8)); +INSERT INTO t3 VALUES (123.45678, 450.04510000), (-234.54628, 2434.87654865); +SELECT *, LENGTH(c1) FROM t1; +c1 LENGTH(c1) +10.00 5 +-24.53 6 +5936.28 7 +SELECT *, LENGTH(c1) FROM t2; +c1 LENGTH(c1) +1.2300000000 12 +-2.7800000000 13 +99.9900000000 13 +SELECT *, LENGTH(c1), LENGTH(c2) FROM t3; +c1 c2 LENGTH(c1) LENGTH(c2) +123.45678 450.04510000 9 12 +-234.54628 2434.87654865 10 13 +DROP TEMPORARY TABLE t1, t2, t3; +DROP DATABASE create_tmp_test; diff --git a/mysql-test/suite/tianmu/r/date_formats.result b/mysql-test/suite/tianmu/r/date_formats.result new file mode 100644 index 000000000..8898424f1 --- /dev/null +++ b/mysql-test/suite/tianmu/r/date_formats.result @@ -0,0 +1,420 @@ +# +# Test of date format functions +# +DROP DATABASE IF EXISTS date_formats_test; +CREATE DATABASE date_formats_test; +USE date_formats_test; +select str_to_date(concat('15-01-2001',' 2:59:58.999'), +concat('%d-%m-%Y',' ','%H:%i:%s.%f')); +str_to_date(concat('15-01-2001',' 2:59:58.999'), +concat('%d-%m-%Y',' ','%H:%i:%s.%f')) +2001-01-15 02:59:58.999000 +select STR_TO_DATE('2004.12.12 22.30.61','%Y.%m.%d %T'); +STR_TO_DATE('2004.12.12 22.30.61','%Y.%m.%d %T') +NULL +Warnings: +Warning 1411 Incorrect time value: '22.30.61' for function str_to_date +Warning 1411 Incorrect datetime value: '2004.12.12 22.30.61' for function str_to_date +SET sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. +create table t1 (date char(30), format char(30) not null); +insert into t1 values +('2003-01-02 10:11:12', '%Y-%m-%d %H:%i:%S'), +('03-01-02 8:11:2.123456', '%y-%m-%d %H:%i:%S.%#'), +#bug1495('0003-01-02 8:11:2.123456', '%Y-%m-%d %H:%i:%S.%#'), +('03-01-02 8:11:2.123456', '%Y-%m-%d %H:%i:%S.%#'), +('2003-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p'), +#bug1495('2003-01-02 01:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f%p'), +#bug1495('2003-01-02 02:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f %p'), +#bug1495('2003-01-02 12:11:12.12345 am', '%Y-%m-%d %h:%i:%S.%f%p'), +('2003-01-02 11:11:12Pm', '%Y-%m-%d %h:%i:%S%p'), +('10:20:10', '%H:%i:%s'), +('10:20:10', '%h:%i:%s.%f'), +('10:20:10', '%T'), +('10:20:10AM', '%h:%i:%s%p'), +('10:20:10AM', '%r'), +#bug1495('10:20:10.44AM', '%h:%i:%s.%f%p'), +('15-01-2001 12:59:58', '%d-%m-%Y %H:%i:%S'), +('15 September 2001', '%d %M %Y'), +('15 SEPTEMB 2001', '%d %M %Y'), +('15 MAY 2001', '%d %b %Y'), +('15th May 2001', '%D %b %Y'), +('Sunday 15 MAY 2001', '%W %d %b %Y'), +('Sund 15 MAY 2001', '%W %d %b %Y'), +('Tuesday 00 2002', '%W %U %Y'), +('Thursday 53 1998', '%W %u %Y'), +('Sunday 01 2001', '%W %v %x'), +('Tuesday 52 2001', '%W %V %X'), +('060 2004', '%j %Y'), +('4 53 1998', '%w %u %Y'), +('15-01-2001', '%d-%m-%Y %H:%i:%S'), +('15-01-20', '%d-%m-%y'), +('15-2001-1', '%d-%Y-%c'); +select date,format,str_to_date(date, format) as str_to_date from t1; +date format str_to_date +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12.000000 +10:20:10 %H:%i:%s 0000-00-00 10:20:10.000000 +10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10.000000 +10:20:10 %T 0000-00-00 10:20:10.000000 +10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10.000000 +10:20:10AM %r 0000-00-00 10:20:10.000000 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58.000000 +15 September 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 MAY 2001 %d %b %Y 2001-05-15 00:00:00.000000 +15th May 2001 %D %b %Y 2001-05-15 00:00:00.000000 +Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00.000000 +Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00.000000 +Sunday 01 2001 %W %v %x 2001-01-07 00:00:00.000000 +Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00.000000 +060 2004 %j %Y 2004-02-29 00:00:00.000000 +4 53 1998 %w %u %Y 1998-12-31 00:00:00.000000 +15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00.000000 +15-01-20 %d-%m-%y 2020-01-15 00:00:00.000000 +15-2001-1 %d-%Y-%c 2001-01-15 00:00:00.000000 +select date,format,concat('',str_to_date(date, format)) as con from t1; +date format con +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02.000000 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12.000000 +10:20:10 %H:%i:%s 0000-00-00 10:20:10.000000 +10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10.000000 +10:20:10 %T 0000-00-00 10:20:10.000000 +10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10.000000 +10:20:10AM %r 0000-00-00 10:20:10.000000 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58.000000 +15 September 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00.000000 +15 MAY 2001 %d %b %Y 2001-05-15 00:00:00.000000 +15th May 2001 %D %b %Y 2001-05-15 00:00:00.000000 +Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00.000000 +Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00.000000 +Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00.000000 +Sunday 01 2001 %W %v %x 2001-01-07 00:00:00.000000 +Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00.000000 +060 2004 %j %Y 2004-02-29 00:00:00.000000 +4 53 1998 %w %u %Y 1998-12-31 00:00:00.000000 +15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00.000000 +15-01-20 %d-%m-%y 2020-01-15 00:00:00.000000 +15-2001-1 %d-%Y-%c 2001-01-15 00:00:00.000000 +select date,format,cast(str_to_date(date, format) as datetime) as datetime from t1; +date format datetime +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 10:11:12 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 08:11:02 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 23:11:12 +10:20:10 %H:%i:%s 0000-00-00 10:20:10 +10:20:10 %h:%i:%s.%f 0000-00-00 10:20:10 +10:20:10 %T 0000-00-00 10:20:10 +10:20:10AM %h:%i:%s%p 0000-00-00 10:20:10 +10:20:10AM %r 0000-00-00 10:20:10 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 12:59:58 +15 September 2001 %d %M %Y 2001-09-15 00:00:00 +15 SEPTEMB 2001 %d %M %Y 2001-09-15 00:00:00 +15 MAY 2001 %d %b %Y 2001-05-15 00:00:00 +15th May 2001 %D %b %Y 2001-05-15 00:00:00 +Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00 +Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 00:00:00 +Tuesday 00 2002 %W %U %Y 2002-01-01 00:00:00 +Thursday 53 1998 %W %u %Y 1998-12-31 00:00:00 +Sunday 01 2001 %W %v %x 2001-01-07 00:00:00 +Tuesday 52 2001 %W %V %X 2002-01-01 00:00:00 +060 2004 %j %Y 2004-02-29 00:00:00 +4 53 1998 %w %u %Y 1998-12-31 00:00:00 +15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 00:00:00 +15-01-20 %d-%m-%y 2020-01-15 00:00:00 +15-2001-1 %d-%Y-%c 2001-01-15 00:00:00 +select date,format,DATE(str_to_date(date, format)) as date2 from t1; +date format date2 +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 2003-01-02 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 2003-01-02 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 2003-01-02 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 2003-01-02 +10:20:10 %H:%i:%s 0000-00-00 +10:20:10 %h:%i:%s.%f 0000-00-00 +10:20:10 %T 0000-00-00 +10:20:10AM %h:%i:%s%p 0000-00-00 +10:20:10AM %r 0000-00-00 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 2001-01-15 +15 September 2001 %d %M %Y 2001-09-15 +15 SEPTEMB 2001 %d %M %Y 2001-09-15 +15 MAY 2001 %d %b %Y 2001-05-15 +15th May 2001 %D %b %Y 2001-05-15 +Sunday 15 MAY 2001 %W %d %b %Y 2001-05-15 +Sund 15 MAY 2001 %W %d %b %Y 2001-05-15 +Tuesday 00 2002 %W %U %Y 2002-01-01 +Thursday 53 1998 %W %u %Y 1998-12-31 +Sunday 01 2001 %W %v %x 2001-01-07 +Tuesday 52 2001 %W %V %X 2002-01-01 +060 2004 %j %Y 2004-02-29 +4 53 1998 %w %u %Y 1998-12-31 +15-01-2001 %d-%m-%Y %H:%i:%S 2001-01-15 +15-01-20 %d-%m-%y 2020-01-15 +15-2001-1 %d-%Y-%c 2001-01-15 +select date,format,TIME(str_to_date(date, format)) as time from t1; +date format time +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 10:11:12.000000 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 08:11:02.000000 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 08:11:02.000000 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 22:11:12.000000 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12.000000 +10:20:10 %H:%i:%s 10:20:10.000000 +10:20:10 %h:%i:%s.%f 10:20:10.000000 +10:20:10 %T 10:20:10.000000 +10:20:10AM %h:%i:%s%p 10:20:10.000000 +10:20:10AM %r 10:20:10.000000 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58.000000 +15 September 2001 %d %M %Y 00:00:00.000000 +15 SEPTEMB 2001 %d %M %Y 00:00:00.000000 +15 MAY 2001 %d %b %Y 00:00:00.000000 +15th May 2001 %D %b %Y 00:00:00.000000 +Sunday 15 MAY 2001 %W %d %b %Y 00:00:00.000000 +Sund 15 MAY 2001 %W %d %b %Y 00:00:00.000000 +Tuesday 00 2002 %W %U %Y 00:00:00.000000 +Thursday 53 1998 %W %u %Y 00:00:00.000000 +Sunday 01 2001 %W %v %x 00:00:00.000000 +Tuesday 52 2001 %W %V %X 00:00:00.000000 +060 2004 %j %Y 00:00:00.000000 +4 53 1998 %w %u %Y 00:00:00.000000 +15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00.000000 +15-01-20 %d-%m-%y 00:00:00.000000 +15-2001-1 %d-%Y-%c 00:00:00.000000 +select date,format,concat(TIME(str_to_date(date, format))) as time2 from t1; +date format time2 +2003-01-02 10:11:12 %Y-%m-%d %H:%i:%S 10:11:12.000000 +03-01-02 8:11:2.123456 %y-%m-%d %H:%i:%S.%# 08:11:02.000000 +03-01-02 8:11:2.123456 %Y-%m-%d %H:%i:%S.%# 08:11:02.000000 +2003-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 22:11:12.000000 +2003-01-02 11:11:12Pm %Y-%m-%d %h:%i:%S%p 23:11:12.000000 +10:20:10 %H:%i:%s 10:20:10.000000 +10:20:10 %h:%i:%s.%f 10:20:10.000000 +10:20:10 %T 10:20:10.000000 +10:20:10AM %h:%i:%s%p 10:20:10.000000 +10:20:10AM %r 10:20:10.000000 +15-01-2001 12:59:58 %d-%m-%Y %H:%i:%S 12:59:58.000000 +15 September 2001 %d %M %Y 00:00:00.000000 +15 SEPTEMB 2001 %d %M %Y 00:00:00.000000 +15 MAY 2001 %d %b %Y 00:00:00.000000 +15th May 2001 %D %b %Y 00:00:00.000000 +Sunday 15 MAY 2001 %W %d %b %Y 00:00:00.000000 +Sund 15 MAY 2001 %W %d %b %Y 00:00:00.000000 +Tuesday 00 2002 %W %U %Y 00:00:00.000000 +Thursday 53 1998 %W %u %Y 00:00:00.000000 +Sunday 01 2001 %W %v %x 00:00:00.000000 +Tuesday 52 2001 %W %V %X 00:00:00.000000 +060 2004 %j %Y 00:00:00.000000 +4 53 1998 %w %u %Y 00:00:00.000000 +15-01-2001 %d-%m-%Y %H:%i:%S 00:00:00.000000 +15-01-20 %d-%m-%y 00:00:00.000000 +15-2001-1 %d-%Y-%c 00:00:00.000000 +select concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d')); +concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d')) +2003-01-02 08:11:02.123456 +truncate table t1; +insert into t1 values +('2003-01-02 10:11:12 PM', '%Y-%m-%d %H:%i:%S %p'), +('2003-01-02 10:11:12.123456', '%Y-%m-%d %h:%i:%S %p'), +('2003-01-02 10:11:12AM', '%Y-%m-%d %h:%i:%S.%f %p'), +('2003-01-02 10:11:12AN', '%Y-%m-%d %h:%i:%S%p'), +('2003-01-02 10:11:12 PM', '%y-%m-%d %H:%i:%S %p'), +('10:20:10AM', '%H:%i:%s%p'), +('15 Septembei 2001', '%d %M %Y'), +('15 Ju 2001', '%d %M %Y'), +('Sund 15 MA', '%W %d %b %Y'), +('Thursdai 12 1998', '%W %u %Y'), +('Sunday 01 2001', '%W %v %X'), +('Tuesday 52 2001', '%W %V %x'), +('Tuesday 52 2001', '%W %V %Y'), +('Tuesday 52 2001', '%W %u %x'), +('7 53 1998', '%w %u %Y'), +(NULL, get_format(DATE,'USA')); +select date,format,str_to_date(date, format) as str_to_date from t1; +date format str_to_date +2003-01-02 10:11:12 PM %Y-%m-%d %H:%i:%S %p NULL +2003-01-02 10:11:12.123456 %Y-%m-%d %h:%i:%S %p NULL +2003-01-02 10:11:12AM %Y-%m-%d %h:%i:%S.%f %p NULL +2003-01-02 10:11:12AN %Y-%m-%d %h:%i:%S%p NULL +2003-01-02 10:11:12 PM %y-%m-%d %H:%i:%S %p NULL +10:20:10AM %H:%i:%s%p NULL +15 Septembei 2001 %d %M %Y NULL +15 Ju 2001 %d %M %Y NULL +Sund 15 MA %W %d %b %Y NULL +Thursdai 12 1998 %W %u %Y NULL +Sunday 01 2001 %W %v %X NULL +Tuesday 52 2001 %W %V %x NULL +Tuesday 52 2001 %W %V %Y NULL +Tuesday 52 2001 %W %u %x NULL +7 53 1998 %w %u %Y NULL +NULL %m.%d.%Y NULL +Warnings: +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Warning 1411 Incorrect datetime value: '10:20:10AM' for function str_to_date +Warning 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_date +Warning 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_date +Warning 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_date +Warning 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Warning 1411 Incorrect datetime value: '7 53 1998' for function str_to_date +select date,format,concat(str_to_date(date, format),'') as con from t1; +date format con +2003-01-02 10:11:12 PM %Y-%m-%d %H:%i:%S %p NULL +2003-01-02 10:11:12.123456 %Y-%m-%d %h:%i:%S %p NULL +2003-01-02 10:11:12AM %Y-%m-%d %h:%i:%S.%f %p NULL +2003-01-02 10:11:12AN %Y-%m-%d %h:%i:%S%p NULL +2003-01-02 10:11:12 PM %y-%m-%d %H:%i:%S %p NULL +10:20:10AM %H:%i:%s%p NULL +15 Septembei 2001 %d %M %Y NULL +15 Ju 2001 %d %M %Y NULL +Sund 15 MA %W %d %b %Y NULL +Thursdai 12 1998 %W %u %Y NULL +Sunday 01 2001 %W %v %X NULL +Tuesday 52 2001 %W %V %x NULL +Tuesday 52 2001 %W %V %Y NULL +Tuesday 52 2001 %W %u %x NULL +7 53 1998 %w %u %Y NULL +NULL %m.%d.%Y NULL +Warnings: +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12.123456' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AM' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12AN' for function str_to_date +Warning 1411 Incorrect datetime value: '2003-01-02 10:11:12 PM' for function str_to_date +Warning 1411 Incorrect datetime value: '10:20:10AM' for function str_to_date +Warning 1411 Incorrect datetime value: '15 Septembei 2001' for function str_to_date +Warning 1411 Incorrect datetime value: '15 Ju 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Sund 15 MA' for function str_to_date +Warning 1411 Incorrect datetime value: 'Thursdai 12 1998' for function str_to_date +Warning 1411 Incorrect datetime value: 'Sunday 01 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Warning 1411 Incorrect datetime value: 'Tuesday 52 2001' for function str_to_date +Warning 1411 Incorrect datetime value: '7 53 1998' for function str_to_date +truncate table t1; +insert into t1 values +('10:20:10AM', '%h:%i:%s'), +('2003-01-02 10:11:12', '%Y-%m-%d %h:%i:%S'), +('03-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p'); +select date,format,str_to_date(date, format) as str_to_date from t1; +date format str_to_date +10:20:10AM %h:%i:%s 0000-00-00 10:20:10.000000 +2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 +Warnings: +Warning 1292 Truncated incorrect datetime value: '10:20:10AM' +select date,format,concat(str_to_date(date, format),'') as con from t1; +date format con +10:20:10AM %h:%i:%s 0000-00-00 10:20:10.000000 +2003-01-02 10:11:12 %Y-%m-%d %h:%i:%S 2003-01-02 10:11:12.000000 +03-01-02 10:11:12 PM %Y-%m-%d %h:%i:%S %p 2003-01-02 22:11:12.000000 +Warnings: +Warning 1292 Truncated incorrect datetime value: '10:20:10AM' +drop table t1; +create table t1 (d date); +insert into t1 values ('2004-07-14'),('2005-07-14'); +select date_format(d,"%d") from t1 order by 1; +date_format(d,"%d") +14 +14 +drop table t1; +select str_to_date("2003-....01ABCD-02 10:11:12.0012", "%Y-%.%m%@-%d %H:%i:%S.%f") as a; +a +2003-01-02 10:11:12.001200 +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f") as f1, +str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S") as f2, +str_to_date("2003-01-02", "%Y-%m-%d") as f3, +str_to_date("02 10:11:12", "%d %H:%i:%S.%f") as f4, +str_to_date("02 10:11:12", "%d %H:%i:%S") as f5, +str_to_date("02 10", "%d %f") as f6; +f1 f2 f3 f4 f5 f6 +2003-01-02 10:11:12.001200 2003-01-02 10:11:12 2003-01-02 58:11:12.000000 58:11:12 48:00:00.100000 +Warnings: +Warning 1292 Truncated incorrect datetime value: '2003-01-02 10:11:12.0012' +select str_to_date("2003-01-02 10:11:12.0012ABCD", "%Y-%m-%d %H:%i:%S.%f") as f1, +addtime("-01:01:01.01 GGG", "-23:59:59.1") as f2, +microsecond("1997-12-31 23:59:59.01XXXX") as f3; +f1 f2 f3 +2003-01-02 10:11:12.001200 -25:01:00.110000 10000 +Warnings: +Warning 1292 Truncated incorrect datetime value: '2003-01-02 10:11:12.0012ABCD' +Warning 1292 Truncated incorrect time value: '-01:01:01.01 GGG' +Warning 1292 Truncated incorrect time value: '1997-12-31 23:59:59.01XXXX' +select str_to_date("2003-04-05 g", "%Y-%m-%d") as f1, +str_to_date("2003-04-05 10:11:12.101010234567", "%Y-%m-%d %H:%i:%S.%f") as f2; +f1 f2 +2003-04-05 2003-04-05 10:11:12.101010 +Warnings: +Warning 1292 Truncated incorrect date value: '2003-04-05 g' +Warning 1292 Truncated incorrect datetime value: '2003-04-05 10:11:12.101010234567' +create table t1 (f1 datetime); +insert into t1 (f1) values ("2005-01-01"); +insert into t1 (f1) values ("2005-02-01"); +select date_format(f1, "%m") as d1, date_format(f1, "%M") as d2 from t1 order by date_format(f1, "%M"); +d1 d2 +02 February +01 January +drop table t1; +CREATE TABLE t1 (a varchar(10), PRIMARY KEY (a)); +CREATE TABLE t2 (a varchar(10), b date, PRIMARY KEY(a,b)); +CREATE TABLE t3 (a varchar(10), b TIME, PRIMARY KEY(a,b)); +INSERT INTO t1 VALUES ('test1'); +INSERT INTO t2 VALUES +('test1','2016-12-13'),('test1','2016-12-14'),('test1','2016-12-15'); +INSERT INTO t3 VALUES +('test1','11:13:14'), ('test1','12:13:14'), ('test1','10:13:14'); +SELECT * +FROM t1 LEFT JOIN t2 +ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; +a a b +test1 test1 2016-12-13 +SELECT * +FROM t1 LEFT JOIN t2 IGNORE INDEX(PRIMARY) +ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; +a a b +test1 test1 2016-12-13 +SELECT b, b = '20161213', +CASE b WHEN '20161213' then 'found' ELSE 'not found' END FROM t2; +b b = '20161213' CASE b WHEN '20161213' then 'found' ELSE 'not found' END +2016-12-13 1 found +2016-12-14 0 not found +2016-12-15 0 not found +SELECT b, b IN ('20161213'), b in ('20161213', 0) FROM t2; +b b IN ('20161213') b in ('20161213', 0) +2016-12-13 1 1 +2016-12-14 0 0 +2016-12-15 0 0 +SELECT b, b = '121314', +CASE b WHEN '121314' then 'found' ELSE 'not found' END FROM t3 order by 1; +b b = '121314' CASE b WHEN '121314' then 'found' ELSE 'not found' END +10:13:14 0 not found +11:13:14 0 not found +12:13:14 1 found +SELECT b, b in ('121314'), b in ('121314', 0) FROM t3 order by 1; +b b in ('121314') b in ('121314', 0) +10:13:14 0 0 +11:13:14 0 0 +12:13:14 1 1 +drop database date_formats_test; diff --git a/mysql-test/suite/tianmu/r/double_float.result b/mysql-test/suite/tianmu/r/double_float.result index 875beb8c2..8eb3d57c7 100644 --- a/mysql-test/suite/tianmu/r/double_float.result +++ b/mysql-test/suite/tianmu/r/double_float.result @@ -9,11 +9,13 @@ SET default_storage_engine=tianmu; SELECT @@default_storage_engine; @@default_storage_engine TIANMU -set autocommit=0; CREATE TABLE test1 (dkey int); INSERT INTO test1 VALUES (1), (2), (3); SELECT test1.dkey FROM test1 ORDER BY test1.dkey; dkey +1 +2 +3 CREATE TABLE qatabledouble (col DOUBLE) ; CREATE TABLE qatablefloat (col float) ; INSERT INTO qatabledouble VALUES (-2.225073858507201E-307); @@ -23,23 +25,50 @@ INSERT INTO qatabledouble VALUES (1.993777023789432E+21); INSERT INTO qatabledouble VALUES (1.797693134862315E+38); INSERT INTO qatabledouble VALUES (-19937770237894323221); INSERT INTO qatabledouble VALUES (17976931348623158); -SELECT * FROM qatabledouble; +SELECT * FROM qatabledouble order by col; col +-1.9937770237894324e19 +-1.807302187774382e-127 +-2.225073858507201e-307 +0 +1.7976931348623158e16 +1.993777023789432e21 +1.797693134862315e38 INSERT INTO qatabledouble VALUES (null); INSERT INTO qatabledouble VALUES (null); INSERT INTO qatabledouble VALUES (null); -SELECT * FROM qatabledouble; +SELECT * FROM qatabledouble order by col; col +NULL +NULL +NULL +-1.9937770237894324e19 +-1.807302187774382e-127 +-2.225073858507201e-307 +0 +1.7976931348623158e16 +1.993777023789432e21 +1.797693134862315e38 INSERT INTO qatablefloat VALUES (null); INSERT INTO qatablefloat VALUES (null); INSERT INTO qatablefloat VALUES (null); -SELECT * FROM qatablefloat; +SELECT * FROM qatablefloat order by col; col +NULL +NULL +NULL DELETE FROM qatabledouble WHERE col IS NULL; -SELECT * FROM qatabledouble; +SELECT * FROM qatabledouble order by col; col +-1.9937770237894324e19 +-1.807302187774382e-127 +-2.225073858507201e-307 +0 +1.7976931348623158e16 +1.993777023789432e21 +1.797693134862315e38 delete FROM qatablefloat WHERE col IS NULL; -SELECT * FROM qatablefloat; +SELECT * FROM qatablefloat order by col; col CREATE TABLE qatabledouble_v2 (col1 DOUBLE, col2 DOUBLE, col3 DOUBLE) ; INSERT INTO qatabledouble_v2 VALUES (-0.50, -0.50, -0.50); @@ -67,8 +96,33 @@ INSERT INTO qatabledouble_v2 VALUES (0.0,0.0,0.0); INSERT INTO qatabledouble_v2 VALUES (.50,.50,.50); INSERT INTO qatabledouble_v2 VALUES (.49,.49,.49); INSERT INTO qatabledouble_v2 VALUES (.0,.0,.0); -SELECT * FROM qatabledouble_v2; +SELECT * FROM qatabledouble_v2 order by col1; col1 col2 col3 +-8 -8 -8 +-0.5 -0.5 -0.5 +-0.5 -0.5 -0.5 +-0.5 -0.5 -0.5 +-0.49 -0.49 -0.49 +-0.49 -0.49 -0.49 +-0.49 -0.49 -0.49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.5 0.5 0.5 +0.5 0.5 0.5 +0.5 0.5 0.5 +0.5 0.5 0.5 +0.5 0.5 0.5 +8 8 8 +8 8 8 CREATE TABLE qatablefloat_v3 (col1 float, col2 float, col3 float) ; INSERT INTO qatablefloat_v3 VALUES (-0.50, -0.50, -0.50); INSERT INTO qatablefloat_v3 VALUES (-0.49, -0.49, -0.49); @@ -95,6 +149,31 @@ INSERT INTO qatablefloat_v3 VALUES (0.0,0.0,0.0); INSERT INTO qatablefloat_v3 VALUES (.50,.50,.50); INSERT INTO qatablefloat_v3 VALUES (.49,.49,.49); INSERT INTO qatablefloat_v3 VALUES (.0,.0,.0); -SELECT * FROM qatablefloat_v3; +SELECT * FROM qatablefloat_v3 order by col1; col1 col2 col3 +-8 -8 -8 +-0.5 -0.5 -0.5 +-0.5 -0.5 -0.5 +-0.5 -0.5 -0.5 +-0.49 -0.49 -0.49 +-0.49 -0.49 -0.49 +-0.49 -0.49 -0.49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.49 0.49 0.49 +0.5 0.5 0.5 +0.5 0.5 0.5 +0.5 0.5 0.5 +0.5 0.5 0.5 +0.5 0.5 0.5 +8 8 8 +8 8 8 DROP DATABASE `double_float`; diff --git a/mysql-test/suite/tianmu/r/drop_index.result b/mysql-test/suite/tianmu/r/drop_index.result index ced3ddefc..8be386d0f 100644 --- a/mysql-test/suite/tianmu/r/drop_index.result +++ b/mysql-test/suite/tianmu/r/drop_index.result @@ -24,9 +24,7 @@ UNIQUE KEY `idx_uk` (`copy_id`), KEY `idx_firstname` (`first_name`), FULLTEXT KEY `idx_lastname` (`last_name`) ) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; -set session sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; -Warnings: -Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. +set session tianmu_no_key_error=OFF; drop index idx_id on t1; ERROR HY000: Tianmu engine does not support unique index. drop index idx_name on t2; diff --git a/mysql-test/suite/tianmu/r/drop_restric.result b/mysql-test/suite/tianmu/r/drop_restric.result new file mode 100644 index 000000000..fd4c1aafd --- /dev/null +++ b/mysql-test/suite/tianmu/r/drop_restric.result @@ -0,0 +1,25 @@ +# +# DROP TABLE RESTRICT +# The RESTRICT clause limits the table to being dropped in the front end only. +# This could be useful when the table has been dropped on one user module, +# and needs to be synced to others. +# +DROP DATABASE IF EXISTS drop_restric_test; +CREATE DATABASE drop_restric_test; +USE drop_restric_test; +CREATE TABLE t1 (id INT, name CHAR(25)); +INSERT INTO t1 VALUES (1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five'); +SELECT * FROM t1 ORDER BY id; +id name +1 one +2 two +3 three +4 four +5 five +SELECT COUNT(*) FROM t1; +COUNT(*) +5 +DROP TABLE IF EXISTS t1 RESTRICT; +DROP TABLE t1; +ERROR 42S02: Unknown table 'drop_restric_test.t1' +DROP DATABASE IF EXISTS drop_restric_test; diff --git a/mysql-test/suite/tianmu/r/empty_string_not_null.result b/mysql-test/suite/tianmu/r/empty_string_not_null.result new file mode 100644 index 000000000..8730baf66 --- /dev/null +++ b/mysql-test/suite/tianmu/r/empty_string_not_null.result @@ -0,0 +1,80 @@ +# +# tests updates that sets invalid range when we set value at max boundary that is less than max. +# +DROP DATABASE IF EXISTS empty_string_not_null; +CREATE DATABASE empty_string_not_null; +USE empty_string_not_null; +CREATE TABLE t(s text); +INSERT INTO t(s) VALUES (''), (NULL); +SELECT COUNT(*) FROM t WHERE s IS NULL; +COUNT(*) +1 +SELECT COUNT(*) FROM t WHERE s IS NOT NULL; +COUNT(*) +1 +SELECT * FROM t; +s + +NULL +DROP TABLE t; +CREATE TABLE t(s text); +INSERT INTO t(s) VALUES (''); +INSERT INTO t(s) VALUES (NULL); +SELECT * FROM t; +s + +NULL +SELECT COUNT(*) FROM t WHERE s IS NULL; +COUNT(*) +1 +DROP TABLE t; +CREATE TABLE t(s text) ; +INSERT INTO t(s) VALUES ('_CpNuLl_'),(''), (NULL); +SELECT * FROM t; +s +_CpNuLl_ + +NULL +SELECT COUNT(*) FROM t WHERE s IS NULL; +COUNT(*) +1 +DROP TABLE t; +CREATE TABLE t(c6 CHAR(6)) ; +INSERT INTO t(c6) VALUES ('a'), ('b'), ('c'); +SELECT 2, COUNT(*) FROM t WHERE (c6 <= 'b' OR c6 <= ''); +2 COUNT(*) +2 2 +SELECT 2, COUNT(*) FROM t WHERE (c6 <= 'b'); +2 COUNT(*) +2 2 +SELECT 0, COUNT(*) FROM t WHERE (c6 <= ''); +0 COUNT(*) +0 0 +SELECT 0, COUNT(*) FROM t WHERE (c6 <= ' '); +0 COUNT(*) +0 0 +SELECT 2, COUNT(*) FROM t WHERE (c6 <= 'b' OR c6 <= ' '); +2 COUNT(*) +2 2 +SELECT 0, COUNT(*) FROM t WHERE (c6 < ''); +0 COUNT(*) +0 0 +SELECT 0, COUNT(*) FROM t WHERE (c6 < ' '); +0 COUNT(*) +0 0 +DROP TABLE IF EXISTS t; +CREATE TABLE t(a CHAR(10)); +INSERT INTO t(a) VALUES (''), (NULL), (' '), (' a '); +SELECT LTRIM(a) FROM t; +LTRIM(a) + +NULL + +a +SELECT RTRIM(a) FROM t; +RTRIM(a) + +NULL + + a +DROP DATABASE empty_string_not_null; diff --git a/mysql-test/suite/tianmu/r/escape.result b/mysql-test/suite/tianmu/r/escape.result index 8d7aeb4f1..5fce58bf3 100644 --- a/mysql-test/suite/tianmu/r/escape.result +++ b/mysql-test/suite/tianmu/r/escape.result @@ -62,6 +62,9 @@ id name uid SELECT * FROM st1 WHERE NAME LIKE "a%a" ESCAPE "a" ; id name uid 4 %a world +SELECT * FROM st1 WHERE NAME LIKE "a%a_" ESCAPE "a"; +id name uid +5 %_ world drop table st1; CREATE TABLE `st1` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, @@ -91,6 +94,9 @@ id name uid select * from st1 where name like 'hello12_'; id name uid 3 hello123 world +select * from st1 where name like '/_hello' escape '/'; +id name uid +4 _hello world create table st2(id int ,column_2 varchar(10),column_3 varchar(10)); insert into st2 values(1,'_a\\\\','111111'); insert into st2 values(2,'12%','%12%'); @@ -118,4 +124,12 @@ id column_2 column_3 1 _a\\ 111111 3 a_a a% 4 _a\ _12% +select * from st2 where column_2 like '%?_a\\%'; +id column_2 column_3 +select * from st2 where column_2 like '%\_a\\%'; +id column_2 column_3 +select * from st2 where column_2 like '%?_a?\%'; +id column_2 column_3 +select * from st2 where column_2 like '%\_a\\%'; +id column_2 column_3 DROP DATABASE escape_test; diff --git a/mysql-test/suite/tianmu/r/hash_join.result b/mysql-test/suite/tianmu/r/hash_join.result new file mode 100644 index 000000000..a0d8c9e74 --- /dev/null +++ b/mysql-test/suite/tianmu/r/hash_join.result @@ -0,0 +1,100 @@ +DROP DATABASE IF EXISTS hash_join_test; +CREATE DATABASE hash_join_test; +USE hash_join_test; +CREATE TABLE `test1` ( +`id` varchar(64) NOT NULL COMMENT 'ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; +CREATE TABLE `test2` ( +`user_id` varchar(32) NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; +CREATE TABLE `test3` ( +`id` varchar(32) NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; +CREATE TABLE `test4` ( +`id` varchar(32) NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; +insert test1 values('aaa'); +insert test1 values('bbb'); +insert test1 values('ccc'); +insert test1 values('eee'); +insert test2 values('aaa'); +insert test2 values('bbb'); +insert test2 values('ccc'); +insert test2 values('fff'); +insert test3 values('aaa'); +insert test3 values('bbb'); +insert test3 values('ccc'); +insert test3 values('ddd'); +insert test4 values('aaa'); +insert test4 values('bbb'); +insert test4 values('ccc'); +insert test4 values('hhh'); +insert test4 values('ggg'); +select test1.id,test2.user_id from test2,test1 where test2.user_id = test1.id ; +id user_id +aaa aaa +bbb bbb +ccc ccc +select test1.id,test2.user_id,test3.id from test2,test1,test3 where test2.user_id = test1.id and test2.user_id = test3.id; +id user_id id +aaa aaa aaa +bbb bbb bbb +ccc ccc ccc +select test1.id,test2.user_id,test3.id,test4.id from test2,test1,test3,test4 where test2.user_id = test1.id and test2.user_id = test3.id and test3.id = test4.id; +id user_id id id +aaa aaa aaa aaa +bbb bbb bbb bbb +ccc ccc ccc ccc +CREATE TABLE `t1` ( +`id` int NOT NULL COMMENT 'ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; +CREATE TABLE `t2` ( +`user_id` int NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; +CREATE TABLE `t3` ( +`id` int NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; +CREATE TABLE `t4` ( +`id` int NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; +insert t1 values(101); +insert t1 values(103); +insert t1 values(103); +insert t1 values(201); +insert t2 values(101); +insert t2 values(102); +insert t2 values(103); +insert t2 values(202); +insert t3 values(101); +insert t3 values(102); +insert t3 values(103); +insert t3 values(203); +insert t4 values(101); +insert t4 values(102); +insert t4 values(103); +insert t4 values(204); +insert t4 values(205); +select t1.id,t2.user_id from t2,t1 where t2.user_id = t1.id ; +id user_id +101 101 +103 103 +103 103 +select t1.id,t2.user_id,t3.id from t2,t1,t3 where t2.user_id = t1.id and t2.user_id = t3.id; +id user_id id +101 101 101 +103 103 103 +103 103 103 +select t1.id,t2.user_id,t3.id,t4.id from t2,t1,t3,t4 where t2.user_id = t1.id and t2.user_id = t3.id and t3.id = t4.id; +id user_id id id +101 101 101 101 +103 103 103 103 +103 103 103 103 +drop table test1; +drop table test2; +drop table test3; +drop table test4; +drop table t1; +drop table t2; +drop table t3; +drop table t4; +DROP DATABASE hash_join_test; diff --git a/mysql-test/suite/tianmu/r/in_withpk.result b/mysql-test/suite/tianmu/r/in_withpk.result new file mode 100644 index 000000000..3fff29264 --- /dev/null +++ b/mysql-test/suite/tianmu/r/in_withpk.result @@ -0,0 +1,182 @@ +# +# Test in subquery with pk +# +DROP DATABASE IF EXISTS in_withpk_test; +CREATE DATABASE in_withpk_test; +USE in_withpk_test; +create table t0 (a int); +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1 ( +a int, +b int, +primary key(a) +) ; +insert into t1 values (1,1),(3,3),(2,2); +create table t2 ( +a int, +b int +) ; +insert into t2 select a, a/2 from t0; +select * from t1 order by 1; +a b +1 1 +2 2 +3 3 +select * from t2; +a b +0 0 +1 1 +2 1 +3 2 +4 2 +5 3 +6 3 +7 4 +8 4 +9 5 +select * from t2 where b in (select a from t1); +a b +1 1 +2 1 +3 2 +4 2 +5 3 +6 3 +create table t3 ( +a int, +b int, +pk1 char(50), pk2 char(50), pk3 char(50), +primary key(pk1, pk2, pk3) +) ; +insert into t3 select a,a, a,a,a from t0; +select * from t3 where b in (select a from t1); +a b pk1 pk2 pk3 +1 1 1 1 1 +2 2 2 2 2 +3 3 3 3 3 +drop table t3; +create table t3 ( +a int, +b int, +pk1 char(100), pk2 char(100), +primary key(pk1, pk2) +) ; +insert into t3 select +A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a +from t0 A, t0 B where B.a <5; +select * from t3 where b in (select a from t0); +a b pk1 pk2 +0 0 0 0 +1 1 1 1 +2 2 2 2 +3 3 3 3 +4 4 4 4 +5 5 5 5 +6 6 6 6 +7 7 7 7 +8 8 8 8 +9 9 9 9 +select * from t3 where b in (select A.a+B.a from t0 A, t0 B where B.a<5) order by a,b; +a b pk1 pk2 +0 0 0 0 +1 1 1 1 +2 2 2 2 +3 3 3 3 +4 4 4 4 +5 5 5 5 +6 6 6 6 +7 7 7 7 +8 8 8 8 +9 9 9 9 +10 10 10 10 +11 11 11 11 +12 12 12 12 +13 13 13 13 +select * from t1 where a in (select b from t2) order by a; +a b +1 1 +2 2 +3 3 +drop table t0, t1, t2, t3; +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t2 (a char(50), b char(50), c char(50), primary key (a,b,c)) ; +insert into t2 select concat(a, repeat('X',48)),repeat('B',50),repeat('B',50) from t1; +insert into t2 select concat(a, repeat('Y',48)),repeat('B',50),repeat('B',50) from t1; +alter table t2 add filler1 int; +insert into t1 select A.a + 2*(B.a + 2*C.a) from t1 A, t1 B, t1 C; +select * from t2 where filler1 in ( select a from t1); +a b c filler1 +drop table t1, t2; +create table t1 (c6 timestamp); +create table t2 (c2 double); +insert into t2 values(12.4); +select 1 from t2 where c2 = any (select log10(null) from t1 where c6 4567890123456789; +q1 q2 +123 456 +4567890123456789 123 +4567890123456789 -4567890123456789 +9223372036854775807 9223372036854775806 +-9223372036854775806 -9223372036854775805 +SELECT * FROM int8_tbl WHERE q2 > 4567890123456789; +q1 q2 +9223372036854775807 9223372036854775806 +SELECT * FROM int8_tbl WHERE q2 >= 4567890123456789; +q1 q2 +123 4567890123456789 +4567890123456789 4567890123456789 +9223372036854775807 9223372036854775806 +SELECT * FROM int8_tbl WHERE q2 = 456; +q1 q2 +123 456 +SELECT * FROM int8_tbl WHERE q2 <> 456; +q1 q2 +123 4567890123456789 +4567890123456789 123 +4567890123456789 4567890123456789 +4567890123456789 -4567890123456789 +9223372036854775807 9223372036854775806 +-9223372036854775806 -9223372036854775805 +SELECT * FROM int8_tbl WHERE q2 > 456; +q1 q2 +123 4567890123456789 +4567890123456789 4567890123456789 +9223372036854775807 9223372036854775806 +SELECT * FROM int8_tbl WHERE q2 >= 456; +q1 q2 +123 456 +123 4567890123456789 +4567890123456789 4567890123456789 +9223372036854775807 9223372036854775806 +SELECT * FROM int8_tbl WHERE 123 = q1; +q1 q2 +123 456 +123 4567890123456789 +SELECT * FROM int8_tbl WHERE 123 <> q1; +q1 q2 +4567890123456789 123 +4567890123456789 4567890123456789 +4567890123456789 -4567890123456789 +9223372036854775807 9223372036854775806 +-9223372036854775806 -9223372036854775805 +SELECT * FROM int8_tbl WHERE 123 < q1; +q1 q2 +4567890123456789 123 +4567890123456789 4567890123456789 +4567890123456789 -4567890123456789 +9223372036854775807 9223372036854775806 +SELECT * FROM int8_tbl WHERE 123 <= q1; +q1 q2 +123 456 +123 4567890123456789 +4567890123456789 123 +4567890123456789 4567890123456789 +4567890123456789 -4567890123456789 +9223372036854775807 9223372036854775806 +drop DATABASE integer_range_test; diff --git a/mysql-test/suite/tianmu/r/issue1065.result b/mysql-test/suite/tianmu/r/issue1065.result index a0cf60ed7..714cf5da0 100644 --- a/mysql-test/suite/tianmu/r/issue1065.result +++ b/mysql-test/suite/tianmu/r/issue1065.result @@ -1,7 +1,8 @@ DROP DATABASE IF EXISTS issue1065_test; CREATE DATABASE issue1065_test; USE issue1065_test; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; drop table if exists t_test; CREATE TABLE t_test( id INT NOT NULL AUTO_INCREMENT, @@ -38,7 +39,8 @@ insert INTO t_test(first_name,last_name,sex,score,copy_id) VALUES (firstname,las END WHILE; END // drop PROCEDURE add_user; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; @@ -65,7 +67,8 @@ insert INTO t_test(first_name,last_name,sex,score,copy_id) VALUES (firstname,las END WHILE; END // drop PROCEDURE add_user; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; @@ -102,7 +105,8 @@ score INT NOT NULL, copy_id INT NOT NULL, PRIMARY KEY (`id`) ) engine=innodb; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; @@ -129,7 +133,8 @@ insert INTO t_test(first_name,last_name,sex,score,copy_id) VALUES (firstname,las END WHILE; END // drop PROCEDURE add_user; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; create PROCEDURE add_user(in num INT) BEGIN DECLARE rowid INT DEFAULT 0; diff --git a/mysql-test/suite/tianmu/r/issue1079_366.result b/mysql-test/suite/tianmu/r/issue1079_366.result new file mode 100644 index 000000000..30622d652 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1079_366.result @@ -0,0 +1,57 @@ +DROP DATABASE IF EXISTS issue1079_test; +CREATE DATABASE issue1079_test; +USE issue1079_test; +create table t(fi int, fv varchar(30), fdt datetime)engine=tianmu; +insert into t values(1,'VAR-1',current_timestamp); +insert into t values(2,'VAR-2',current_timestamp); +insert into t values(3,'VAR-3',current_timestamp); +insert into t values(4,'VAR-4',current_timestamp); +insert into t values(5,'VAR-5',current_timestamp); +insert into t values(6,'VAR-6',current_timestamp); +insert into t values(7,'VAR-7',current_timestamp); +insert into t values(8,'VAR-8',current_timestamp); +insert into t values(9,'VAR-9',current_timestamp); +insert into t values(10,'VAR-10',current_timestamp); +select count(*) c from t; +c +10 +insert into t select fi+10,concat('VAR-',fi+10),current_timestamp from t; +insert into t select fi+20,concat('VAR-',fi+20),current_timestamp from t; +insert into t select fi+40,concat('VAR-',fi+40),current_timestamp from t; +insert into t select fi+80,concat('VAR-',fi+80),current_timestamp from t; +select count(*) c from t; +c +160 +insert into t select fi+160,concat('VAR-',fi+160),current_timestamp from t; +insert into t select fi+320,concat('VAR-',fi+320),current_timestamp from t; +insert into t select fi+640,concat('VAR-',fi+640),current_timestamp from t; +select count(*) c from t; +c +1280 +insert into t select fi+1280,concat('VAR-',fi+1280),current_timestamp from t; +insert into t select fi+2560,concat('VAR-',fi+2560),current_timestamp from t; +insert into t select fi+5120,concat('VAR-',fi+5120),current_timestamp from t; +select count(*) c from t; +c +10240 +insert into t select fi+10240,concat('VAR-',fi+10240),current_timestamp from t; +insert into t select fi+20480,concat('VAR-',fi+20480),current_timestamp from t; +select count(*) c from t; +c +40960 +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `fi` int(11) DEFAULT NULL, + `fv` varchar(30) DEFAULT NULL, + `fdt` datetime DEFAULT NULL +) ENGINE=TIANMU DEFAULT CHARSET=latin1 +alter table t modify column fv varchar(60); +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `fi` int(11) DEFAULT NULL, + `fv` varchar(60) DEFAULT NULL, + `fdt` datetime DEFAULT NULL +) ENGINE=TIANMU DEFAULT CHARSET=latin1 +DROP DATABASE issue1079_test; diff --git a/mysql-test/suite/tianmu/r/issue1090.result b/mysql-test/suite/tianmu/r/issue1090.result index b527d1dce..ff693e48a 100644 --- a/mysql-test/suite/tianmu/r/issue1090.result +++ b/mysql-test/suite/tianmu/r/issue1090.result @@ -2,11 +2,11 @@ set global default_storage_engine=innodb; include/master-slave.inc [connection master] # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # [on slave] include/sync_slave_sql_with_master.inc -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue1090(c1 int,c2 varchar(255)); show create table t_issue1090; @@ -19,7 +19,7 @@ t_issue1090 CREATE TABLE `t_issue1090` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -44,7 +44,7 @@ t_issue1090 CREATE TABLE `t_issue1090` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -61,10 +61,10 @@ t_issue1090 CREATE TABLE `t_issue1090` ( drop table t_issue1090; include/sync_slave_sql_with_master.inc # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # [on slave] -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue1090_2(c1 int,c2 varchar(255)); show create table t_issue1090_2; @@ -75,14 +75,6 @@ t_issue1090_2 CREATE TABLE `t_issue1090_2` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_2; Table Create Table t_issue1090_2 CREATE TABLE `t_issue1090_2` ( @@ -100,14 +92,6 @@ t_issue1090_2 CREATE TABLE `t_issue1090_2` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_2; Table Create Table t_issue1090_2 CREATE TABLE `t_issue1090_2` ( @@ -119,10 +103,10 @@ t_issue1090_2 CREATE TABLE `t_issue1090_2` ( drop table t_issue1090_2; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # [on slave] -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue1090_3(c1 int,c2 varchar(255)); show create table t_issue1090_3; @@ -133,14 +117,6 @@ t_issue1090_3 CREATE TABLE `t_issue1090_3` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_3; Table Create Table t_issue1090_3 CREATE TABLE `t_issue1090_3` ( @@ -158,14 +134,6 @@ t_issue1090_3 CREATE TABLE `t_issue1090_3` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_3; Table Create Table t_issue1090_3 CREATE TABLE `t_issue1090_3` ( @@ -177,10 +145,10 @@ t_issue1090_3 CREATE TABLE `t_issue1090_3` ( drop table t_issue1090_3; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +# tianmu_mandatory=ON # [on slave] -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue1090_4(c1 int,c2 varchar(255)); show create table t_issue1090_4; @@ -191,14 +159,6 @@ t_issue1090_4 CREATE TABLE `t_issue1090_4` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_4; Table Create Table t_issue1090_4 CREATE TABLE `t_issue1090_4` ( @@ -214,14 +174,6 @@ t_issue1090_4 CREATE TABLE `t_issue1090_4` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 [on slave] include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU -show global variables like '%_engine'; -Variable_name Value -default_storage_engine TIANMU -default_tmp_storage_engine InnoDB -internal_tmp_disk_storage_engine InnoDB show create table t_issue1090_4; Table Create Table t_issue1090_4 CREATE TABLE `t_issue1090_4` ( diff --git a/mysql-test/suite/tianmu/r/issue1111.result b/mysql-test/suite/tianmu/r/issue1111.result index eea46d34f..dc5a4fe44 100644 --- a/mysql-test/suite/tianmu/r/issue1111.result +++ b/mysql-test/suite/tianmu/r/issue1111.result @@ -29,6 +29,13 @@ id name 1 lllll [on slave] include/sync_slave_sql_with_master.inc +show create table ttt; +Table Create Table +ttt CREATE TABLE `ttt` ( + `id` int(11) NOT NULL, + `name` varchar(64) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TIANMU DEFAULT CHARSET=latin1 select * from ttt where id in(1,3,2) order by id desc; id name 3 lllll diff --git a/mysql-test/suite/tianmu/r/issue1131.result b/mysql-test/suite/tianmu/r/issue1131.result index a4af69e29..ae6d729b1 100644 --- a/mysql-test/suite/tianmu/r/issue1131.result +++ b/mysql-test/suite/tianmu/r/issue1131.result @@ -1,9 +1,9 @@ use test; drop table IF EXISTS tmp_table; # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; Table Create Table @@ -11,9 +11,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -40,9 +37,9 @@ tmp_table CREATE TEMPORARY TABLE `tmp_table` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table tmp_table; # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; Table Create Table @@ -50,9 +47,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=TIANMU DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU show variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -79,9 +73,9 @@ tmp_table CREATE TEMPORARY TABLE `tmp_table` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table tmp_table; # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # set default_storage_engine=innodb; -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; set default_storage_engine=innodb; create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; @@ -90,9 +84,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=TIANMU DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU show variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -119,10 +110,10 @@ tmp_table CREATE TEMPORARY TABLE `tmp_table` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table tmp_table; # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # [on slave] -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; Table Create Table @@ -130,9 +121,6 @@ t_issue1131 CREATE TABLE `t_issue1131` ( `c1` int(11) DEFAULT NULL, `c2` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -show variables like 'sql_mode'; -Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show variables like '%_engine'; Variable_name Value default_storage_engine InnoDB diff --git a/mysql-test/suite/tianmu/r/issue1173.result b/mysql-test/suite/tianmu/r/issue1173.result new file mode 100644 index 000000000..42d7bc979 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1173.result @@ -0,0 +1,20 @@ +DROP DATABASE IF EXISTS issue1173; +CREATE DATABASE issue1173; +USE issue1173; +CREATE TABLE t1 (a TIME(1) NOT NULL); +INSERT INTO t1 VALUES ('00:00:02.9'); +SELECT a, a & a, a | a, a^0, a<<1, a<<0, a>>1, bit_count(a) FROM t1; +a a & a a | a a^0 a<<1 a<<0 a>>1 bit_count(a) +00:00:02.9 3 3 3 6 3 1 2 +CREATE TABLE t2 (a DATETIME(1) NOT NULL); +INSERT INTO t2 VALUES ('2001-01-01 00:00:02.9'); +INSERT INTO t2 VALUES ('2001-01-01 23:59:59.9'); +INSERT INTO t2 VALUES ('9999-12-31 23:59:59.9'); +SELECT a, a & a, a | a, a^0, a<<1, a<<0, a>>1, bit_count(a) FROM t2; +a a & a a | a a^0 a<<1 a<<0 a>>1 bit_count(a) +2001-01-01 00:00:02.9 20010101000003 20010101000003 20010101000003 40020202000006 20010101000003 10005050500001 24 +2001-01-01 23:59:59.9 20010102000000 20010102000000 20010102000000 40020204000000 20010102000000 10005051000000 18 +9999-12-31 23:59:59.9 99991231000000 99991231000000 99991231000000 199982462000000 99991231000000 49995615500000 24 +DROP TABLE t1; +DROP TABLE t2; +DROP DATABASE issue1173; diff --git a/mysql-test/suite/tianmu/r/issue1174.result b/mysql-test/suite/tianmu/r/issue1174.result index c1c2a5ea2..c0ea38c66 100644 --- a/mysql-test/suite/tianmu/r/issue1174.result +++ b/mysql-test/suite/tianmu/r/issue1174.result @@ -31,6 +31,13 @@ id name 0 lllll [on slave] include/sync_slave_sql_with_master.inc +show create table ttt; +Table Create Table +ttt CREATE TABLE `ttt` ( + `id` int(11) NOT NULL, + `name` varchar(64) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TIANMU DEFAULT CHARSET=latin1 select * from ttt where id in(1,3,2,0) order by id desc; id name 3 lllll diff --git a/mysql-test/suite/tianmu/r/issue1175.result b/mysql-test/suite/tianmu/r/issue1175.result new file mode 100644 index 000000000..58716a335 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1175.result @@ -0,0 +1,67 @@ +DROP DATABASE IF EXISTS issue1175_test; +# Creating test database issue1175_test +CREATE DATABASE issue1175_test; +USE issue1175_test; +# Create test table with tianmu engine +CREATE TABLE t1 ( +id INT AUTO_INCREMENT PRIMARY KEY, +t TIME, +d DATE, +dt DATETIME, +ts TIMESTAMP +) ENGINE=TIANMU; +# Insert data into test table +INSERT INTO t1 (t, d, dt, ts) VALUES +('00:00:00', '2000-01-01', '2000-01-01 00:00:00', '2000-01-01 00:00:00'), +('-838:59:59', '2001-02-28', '2001-02-28 00:00:00', '2001-02-28 00:00:00'), +('838:59:59', '2002-03-31', '2002-03-31 23:59:59', '2002-03-31 23:59:59'), +('-100:00:00', '2010-12-31', '2010-12-31 12:34:56', '2010-12-31 12:34:56'), +('200:00:00', '2011-11-30', '2011-11-30 18:00:00', '2011-11-30 18:00:00'), +('-400:00:00', '2012-02-29', '2012-02-29 01:23:45', '2012-02-29 01:23:45'), +('720:00:00', '2020-10-31', '2020-10-31 14:00:00', '2020-10-31 14:00:00'), +('05:30:15', '1985-04-12', '1985-04-12 05:30:15.123', '1985-04-12 05:30:15.123'), +('-23:45:01', '1995-08-24', '1995-08-24 15:45:30.987', '1995-08-24 15:45:30.987'), +('67:15:45', '2005-06-15', '2005-06-15 10:59:59.001', '2005-06-15 10:59:59.001'), +('-115:00:00', '2007-12-25', '2007-12-25 23:30:45.500', '2007-12-25 23:30:45.500'), +('350:30:15', '2015-09-05', '2015-09-05 12:00:00.999', '2015-09-05 12:00:00.999'), +('-500:45:30', '2017-03-01', '2017-03-01 01:23:45.250', '2017-03-01 01:23:45.250'), +('600:15:00', '2021-05-01', '2021-05-01 17:30:00.123', '2021-05-01 17:30:00.123'), +('12:34:56', '1970-01-01', '1970-01-01 12:34:56', '1970-01-01 12:34:56'), +('-300:00:00.123', '1980-06-30', '1980-06-30 18:30:45.123', '1980-06-30 18:30:45.123'), +('450:00:00', '1990-03-15', '1990-03-15 11:59:59.999', '1990-03-15 11:59:59.999'), +('-600:00:00.9', '1999-09-09', '1999-09-09 06:45:00.250', '1999-09-09 06:45:00.250'), +('-09:00:00', '2005-02-28', '2005-02-28 15:00:00.123', '2005-02-28 15:00:00.123'), +('-123:45:00', '2008-08-08', '2008-08-08 20:15:30.987', '2008-08-08 20:15:30.987'), +('99:00:00', '2013-07-07', '2013-07-07 17:30:45.500', '2013-07-07 17:30:45.500'), +('-220:00:00', '2016-04-30', '2016-04-30 02:00:00.999', '2016-04-30 02:00:00.999'), +('580:00:00', '2019-12-31', '2019-12-31 01:23:45.250', '2019-12-31 01:23:45.250'), +('-750:00:00', '2021-08-31', '2021-08-31 09:45:00.123', '2021-08-31 09:45:00.123'); +# Select all data from test table +SELECT * FROM t1 ORDER BY id; +id t d dt ts +1 00:00:00 2000-01-01 2000-01-01 00:00:00 2000-01-01 00:00:00 +2 -838:59:59 2001-02-28 2001-02-28 00:00:00 2001-02-28 00:00:00 +3 838:59:59 2002-03-31 2002-03-31 23:59:59 2002-03-31 23:59:59 +4 -100:00:00 2010-12-31 2010-12-31 12:34:56 2010-12-31 12:34:56 +5 200:00:00 2011-11-30 2011-11-30 18:00:00 2011-11-30 18:00:00 +6 -400:00:00 2012-02-29 2012-02-29 01:23:45 2012-02-29 01:23:45 +7 720:00:00 2020-10-31 2020-10-31 14:00:00 2020-10-31 14:00:00 +8 05:30:15 1985-04-12 1985-04-12 05:30:15 1985-04-12 05:30:15 +9 -23:45:01 1995-08-24 1995-08-24 15:45:31 1995-08-24 15:45:31 +10 67:15:45 2005-06-15 2005-06-15 10:59:59 2005-06-15 10:59:59 +11 -115:00:00 2007-12-25 2007-12-25 23:30:46 2007-12-25 23:30:46 +12 350:30:15 2015-09-05 2015-09-05 12:00:01 2015-09-05 12:00:01 +13 -500:45:30 2017-03-01 2017-03-01 01:23:45 2017-03-01 01:23:45 +14 600:15:00 2021-05-01 2021-05-01 17:30:00 2021-05-01 17:30:00 +15 12:34:56 1970-01-01 1970-01-01 12:34:56 1970-01-01 12:34:56 +16 -300:00:00 1980-06-30 1980-06-30 18:30:45 1980-06-30 18:30:45 +17 450:00:00 1990-03-15 1990-03-15 12:00:00 1990-03-15 12:00:00 +18 -600:00:01 1999-09-09 1999-09-09 06:45:00 1999-09-09 06:45:00 +19 -09:00:00 2005-02-28 2005-02-28 15:00:00 2005-02-28 15:00:00 +20 -123:45:00 2008-08-08 2008-08-08 20:15:31 2008-08-08 20:15:31 +21 99:00:00 2013-07-07 2013-07-07 17:30:46 2013-07-07 17:30:46 +22 -220:00:00 2016-04-30 2016-04-30 02:00:01 2016-04-30 02:00:01 +23 580:00:00 2019-12-31 2019-12-31 01:23:45 2019-12-31 01:23:45 +24 -750:00:00 2021-08-31 2021-08-31 09:45:00 2021-08-31 09:45:00 +# Dropping test database issue1175_test +DROP DATABASE issue1175_test; diff --git a/mysql-test/suite/tianmu/r/issue1325.result b/mysql-test/suite/tianmu/r/issue1325.result index 2a50d785c..548697b67 100644 --- a/mysql-test/suite/tianmu/r/issue1325.result +++ b/mysql-test/suite/tianmu/r/issue1325.result @@ -5,21 +5,6 @@ include/sync_slave_sql_with_master.inc # on master: CREATE DATABASE issue1325_test; USE issue1325_test; -include/sync_slave_sql_with_master.inc -# on slave: -USE issue1325_test; -show databases; -Database -information_schema -cache -issue1325_test -mtr -mysql -performance_schema -sys -sys_tianmu -test -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; # # Secondary INDEX # @@ -39,14 +24,14 @@ ttt CREATE TABLE `ttt` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1 include/sync_slave_sql_with_master.inc # on slave: -# on master: +USE issue1325_test; show create table ttt; Table Create Table ttt CREATE TABLE `ttt` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 +) ENGINE=TIANMU DEFAULT CHARSET=latin1 # # UNIQUE INDEX # @@ -149,15 +134,4 @@ student_score CREATE TABLE `student_score` ( DROP DATABASE issue1325_test; include/sync_slave_sql_with_master.inc # on slave: -show databases; -Database -information_schema -cache -mtr -mysql -performance_schema -sys -sys_tianmu -test -tianmu_data stop slave; diff --git a/mysql-test/suite/tianmu/r/issue1402.result b/mysql-test/suite/tianmu/r/issue1402.result new file mode 100644 index 000000000..8f0489e83 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1402.result @@ -0,0 +1,53 @@ +DROP DATABASE IF EXISTS issue1402_test; +CREATE DATABASE issue1402_test; +USE issue1402_test; +CREATE TABLE t1 (id INT, d DECIMAL(10,4)) ENGINE=tianmu; +INSERT INTO t1 VALUES (1, 1.2345), (2, 2.3456), (3, 3.4567); +SELECT COUNT(*), SUM(d), AVG(d), MIN(d), MAX(d) FROM t1; +COUNT(*) SUM(d) AVG(d) MIN(d) MAX(d) +3 7.0368 2.34560000 1.2345 3.4567 +SELECT id, SUM(d) FROM t1 GROUP BY id; +id SUM(d) +1 1.2345 +2 2.3456 +3 3.4567 +SELECT * FROM t1 ORDER BY d DESC; +id d +3 3.4567 +2 2.3456 +1 1.2345 +SELECT * FROM t1 WHERE d > (SELECT AVG(d) FROM t1); +id d +3 3.4567 +SELECT id, SUM(d) FROM t1 WHERE d > (SELECT AVG(d) FROM t1) GROUP BY id; +id SUM(d) +3 3.4567 +SELECT * FROM t1 WHERE d > (SELECT AVG(d) FROM t1) ORDER BY d DESC; +id d +3 3.4567 +SELECT id, SUM(d) FROM t1 WHERE d > (SELECT AVG(d) FROM t1) GROUP BY id ORDER BY SUM(d) DESC; +id SUM(d) +3 3.4567 +SELECT t1.id, t1.d, t2.d FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id; +id d d +2 2.3456 2.3456 +3 3.4567 3.4567 +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id; +id SUM(t1.d) SUM(t2.d) +2 2.3456 2.3456 +3 3.4567 3.4567 +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id ORDER BY SUM(t1.d) DESC; +id SUM(t1.d) SUM(t2.d) +3 3.4567 3.4567 +2 2.3456 2.3456 +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id ORDER BY SUM(t1.d) DESC LIMIT 1; +id SUM(t1.d) SUM(t2.d) +3 3.4567 3.4567 +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id ORDER BY SUM(t1.d) DESC LIMIT 1 OFFSET 1; +id SUM(t1.d) SUM(t2.d) +2 2.3456 2.3456 +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id HAVING SUM(t1.d) > 3 ORDER BY SUM(t1.d) DESC LIMIT 1 OFFSET 1; +id SUM(t1.d) SUM(t2.d) +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id WHERE t1.id > 1 GROUP BY t1.id HAVING SUM(t1.d) > 3 ORDER BY SUM(t1.d) DESC LIMIT 1 OFFSET 1; +id SUM(t1.d) SUM(t2.d) +drop database issue1402_test; diff --git a/mysql-test/suite/tianmu/r/issue1464.result b/mysql-test/suite/tianmu/r/issue1464.result new file mode 100644 index 000000000..0ab99006a --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1464.result @@ -0,0 +1,51 @@ +include/master-slave.inc +[connection master] +# on master: +DROP DATABASE IF EXISTS issue1464_test; +CREATE DATABASE issue1464_test; +USE issue1464_test; +include/sync_slave_sql_with_master.inc +# on slave: +USE issue1464_test; +# on master: +create table ttt(id varchar(64) primary key,name varchar(10))engine=innodb; +insert into ttt values('0000352b6b4f4011bd18da7176e22c03','AAA'); +insert into ttt values('000246c51ca745f893a705f1699e9b2a','BBB'); +insert into ttt values('00049c87d9c64c498e004f6b08f1dd38','CCC'); +delete from ttt where id='0000352b6b4f4011bd18da7176e22c03'; +select * from ttt order by id; +id name +000246c51ca745f893a705f1699e9b2a BBB +00049c87d9c64c498e004f6b08f1dd38 CCC +include/sync_slave_sql_with_master.inc +# on slave: +show create table ttt; +Table Create Table +ttt CREATE TABLE `ttt` ( + `id` varchar(64) NOT NULL, + `name` varchar(10) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TIANMU DEFAULT CHARSET=latin1 +select * from ttt order by id; +id name +000246c51ca745f893a705f1699e9b2a BBB +00049c87d9c64c498e004f6b08f1dd38 CCC +# on master: +insert into ttt values('0000352b6b4f4011bd18da7176e22c03','AAA'); +update ttt set name='name_' where id='000246c51ca745f893a705f1699e9b2a'; +select * from ttt order by id; +id name +0000352b6b4f4011bd18da7176e22c03 AAA +000246c51ca745f893a705f1699e9b2a name_ +00049c87d9c64c498e004f6b08f1dd38 CCC +include/sync_slave_sql_with_master.inc +# on slave: +select * from ttt order by id; +id name +0000352b6b4f4011bd18da7176e22c03 AAA +000246c51ca745f893a705f1699e9b2a name_ +00049c87d9c64c498e004f6b08f1dd38 CCC +# on master: +DROP DATABASE issue1464_test; +include/sync_slave_sql_with_master.inc +stop slave; diff --git a/mysql-test/suite/tianmu/r/issue1510.result b/mysql-test/suite/tianmu/r/issue1510.result new file mode 100644 index 000000000..3d1701add --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1510.result @@ -0,0 +1,18 @@ +DROP DATABASE IF EXISTS issue1510_test; +CREATE DATABASE issue1510_test; +USE issue1510_test; +create table ttt(id int primary key,name varchar(10)); +begin; +insert into ttt values(1,'AAA'); +commit; +select * from ttt; +id name +1 AAA +drop table ttt; +create table ttt(id int primary key,name varchar(10)); +insert into ttt values(1,'AAA'); +select * from ttt; +id name +1 AAA +drop table ttt; +DROP DATABASE issue1510_test; diff --git a/mysql-test/suite/tianmu/r/issue1523.result b/mysql-test/suite/tianmu/r/issue1523.result new file mode 100644 index 000000000..589365345 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1523.result @@ -0,0 +1,156 @@ +include/master-slave.inc +[connection master] +# on master: +DROP DATABASE IF EXISTS issue1523_test; +CREATE DATABASE issue1523_test; +USE issue1523_test; +include/sync_slave_sql_with_master.inc +# on slave: +USE issue1523_test; +# on master: +CREATE TABLE t1 ( +`id` int(10) NOT NULL AUTO_INCREMENT, +`dev_code` varchar(20) NOT NULL, +`port` smallint(2) DEFAULT '0', +`server_ip` varchar(20) DEFAULT NULL, +`work_status` int(1) DEFAULT '2', +`port_link_car` int(1) NOT NULL DEFAULT '0', +`last_order_sn` varchar(42) DEFAULT NULL, +`last_charge_type` smallint(1) DEFAULT NULL, +`last_charge_mode` int(2) DEFAULT '0', +`last_status` smallint(1) DEFAULT NULL, +`last_soc` int(3) DEFAULT NULL, +`last_car_no` varchar(42) DEFAULT NULL, +`last_vin` varchar(45) DEFAULT NULL, +`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, +`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, +PRIMARY KEY (`id`), +UNIQUE KEY `portindex` (`dev_code`,`port`), +KEY `dev_code` (`dev_code`) +) ENGINE=INNODB; +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(1,'3301081000000019',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(2,'3301081000000020',0,'172.16.171.219',3,1,1,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(3,'3301081000000021',0,'172.16.171.219',4,2,2,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +insert into t1 values +(4,'3301081000000022',1,'172.16.171.219',2,1,'2023040314582504221842260',5,0,5,100,'JJY3786','LKLA6G1M4HA727506','2018-08-20 13:46:42','2023-04-02 22:10:30'); +insert into t1 values +(5,'3301081000000023',1,'172.16.171.219',2,1,'2023040314582504221842261',6,0,6,101,'JJY3787','LKLA6G1M4HA727506','2018-08-20 13:46:42','2023-04-02 22:10:30'); +insert into t1 values +(6,'3301081000000024',1,'172.16.171.219',2,1,'2023040314582504221842262',7,0,7,102,'JJY3788','LKLA6G1M4HA727506','2018-08-20 13:46:42','2023-04-02 22:10:30'); +update t1 set last_car_no='JJY3786' where id=1; +update t1 set last_car_no=NULL where id=1; +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(7,'3301081000000025',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +select last_car_no from t1 where id=1; +last_car_no +NULL +select count(*) from t1; +count(*) +7 +include/sync_slave_sql_with_master.inc +# on slave: +select last_car_no from t1 where id=1; +last_car_no +NULL +select count(*) from t1; +count(*) +7 +# on master: +update t1 set last_car_no='JJY3786' where id=1; +update t1 set last_car_no=NULL where id=1; +update t1 set last_car_no='JJY3786' where id=1; +update t1 set last_car_no=NULL where id=1; +update t1 set last_car_no='JJY3786' where id=1; +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(8,'3301081000000026',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +select last_car_no from t1 where id=1; +last_car_no +JJY3786 +select count(*) from t1; +count(*) +8 +include/sync_slave_sql_with_master.inc +# on slave: +select last_car_no from t1 where id=1; +last_car_no +JJY3786 +select count(*) from t1; +count(*) +8 +# on master: +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(9,'3301081000000027',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +delete from t1 where id=9; +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(9,'3301081000000027',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +select last_car_no from t1 where id=9; +last_car_no +NULL +select count(*) from t1; +count(*) +9 +include/sync_slave_sql_with_master.inc +# on slave: +select last_car_no from t1 where id=9; +last_car_no +NULL +select count(*) from t1; +count(*) +9 +# on master: +update t1 set last_car_no=NULL where id=1; +delete from t1 where id =1; +select last_car_no from t1 where id=1; +last_car_no +select count(*) from t1; +count(*) +8 +include/sync_slave_sql_with_master.inc +# on slave: +select last_car_no from t1 where id=1; +last_car_no +select count(*) from t1; +count(*) +8 +# on master: +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(10,'3301081000000028',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +update t1 set last_car_no='JJY3786' where id=10; +select last_car_no from t1 where id=10; +last_car_no +JJY3786 +select count(*) from t1; +count(*) +9 +include/sync_slave_sql_with_master.inc +# on slave: +select last_car_no from t1 where id=10; +last_car_no +JJY3786 +select count(*) from t1; +count(*) +9 +# on master: +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(11,'3301081000000029',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +update t1 set last_car_no='JJY3786' where id=11; +delete from t1 where id =11; +select last_car_no from t1 where id=11; +last_car_no +select count(*) from t1; +count(*) +9 +include/sync_slave_sql_with_master.inc +# on slave: +select last_car_no from t1 where id=11; +last_car_no +select count(*) from t1; +count(*) +9 +# on master: +DROP DATABASE issue1523_test; +include/sync_slave_sql_with_master.inc +stop slave; diff --git a/mysql-test/suite/tianmu/r/issue1564.result b/mysql-test/suite/tianmu/r/issue1564.result new file mode 100644 index 000000000..c84516222 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1564.result @@ -0,0 +1,99 @@ +DROP DATABASE IF EXISTS issue1564; +create database issue1564; +use issue1564; +create table t(a bigint not null); +insert into t values(-222222), (-22), (-15),(-16),(0), (11), (12), (9223372036854775807); +select * from t; +a +-222222 +-22 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a = 18446744073709551601; +a +select * from t where a != 18446744073709551601; +a +-222222 +-22 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a = -22; +a +-22 +select * from t where a != -22; +a +-222222 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a in(-16, -15, -11); +a +-15 +-16 +select * from t where a > 18446744073709551599; +a +select * from t where a >= 18446744073709551599; +a +select * from t where a < 18446744073709551599; +a +-222222 +-22 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a <= 18446744073709551599; +a +-222222 +-22 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a between -22 and 18446744073709551599; +a +-22 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a between -22 and 9223372036854775807; +a +-22 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a between -222222 and 9223372036854775807; +a +-222222 +-22 +-15 +-16 +0 +11 +12 +9223372036854775807 +select * from t where a between 9223372036854775807 and -22; +a +drop table t; +drop database issue1564; diff --git a/mysql-test/suite/tianmu/r/issue1599.result b/mysql-test/suite/tianmu/r/issue1599.result new file mode 100644 index 000000000..737e25465 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1599.result @@ -0,0 +1,81 @@ +CREATE DATABASE IF NOT EXISTS test_db_1599; +USE test_db_1599; +create table ttt(c1 int,c2 int); +insert into ttt values(327266,1),(327267,1),(327268,1),(327269,1),(327270,1); +select c1 from ttt union select 'aaa' c1 from (select c2 from ttt where c1 IN (327265)) x; +c1 +327266 +327267 +327268 +327269 +327270 +select c1 from ttt union all select 'aaa' c1 from (select c2 from ttt where c1 IN (327265)) x; +c1 +327266 +327267 +327268 +327269 +327270 +select c1 from ttt union select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; +c1 +327266 +327267 +327268 +327269 +327270 +select c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; +c1 +327266 +327267 +327268 +327269 +327270 +select 111 c1 from ttt union select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; +c1 +111 +select 111 c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; +c1 +111 +111 +111 +111 +111 +drop table ttt; +create table ttt(c1 decimal(18,0),c2 decimal(18,0)); +insert into ttt values(3000000000027266,1),(3000000000027267,1),(3000000000027268,1),(3000000000027269,1),(3000000000027270,1); +select c1 from ttt union select 'aaa' c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; +c1 +3000000000027266 +3000000000027267 +3000000000027268 +3000000000027269 +3000000000027270 +select c1 from ttt union select 111 c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; +c1 +3000000000027266 +3000000000027267 +3000000000027268 +3000000000027269 +3000000000027270 +select 'aaa' c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; +c1 +aaa +aaa +aaa +aaa +aaa +select 111 c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; +c1 +111 +111 +111 +111 +111 +select c1 from ttt union all select 'aaa' c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; +c1 +3000000000027266 +3000000000027267 +3000000000027268 +3000000000027269 +3000000000027270 +drop database test_db_1599; diff --git a/mysql-test/suite/tianmu/r/issue1616.result b/mysql-test/suite/tianmu/r/issue1616.result new file mode 100644 index 000000000..a6d09cb49 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1616.result @@ -0,0 +1,61 @@ +DROP DATABASE IF EXISTS issue1616_test; +CREATE DATABASE issue1616_test; +USE issue1616_test; +CREATE TABLE T1 (id int(11) NOT NULL auto_increment, parent_id int(11) DEFAULT '0' NOT NULL, level tinyint(4) +DEFAULT '0' NOT NULL, PRIMARY KEY (id)) engine=tianmu; +INSERT INTO T1 VALUES (3,1,1),(4,1,1); +INSERT INTO T1 VALUES (3,1,1),(4,1,1); +ERROR 23000: Duplicate entry '3' for key 'PRIMARY' +SELECT * FROM T1; +id parent_id level +3 1 1 +4 1 1 +UPDATE IGNORE T1 SET id=id+1; +SELECT * FROM T1; +id parent_id level +3 1 1 +5 1 1 +UPDATE T1 SET id =10; +ERROR 23000: Duplicate entry '10' for key 'PRIMARY' +SELECT * FROM T1; +id parent_id level +3 1 1 +5 1 1 +UPDATE T1 SET ID=5 WHERE ID=3; +ERROR 23000: Duplicate entry '5' for key 'PRIMARY' +SELECT * FROM T1; +id parent_id level +3 1 1 +5 1 1 +DROP TABLE T1; +CREATE TABLE T2 (dt datetime, val int, primary key(dt)) ENGINE =tianmu; +INSERT INTO T2 VALUES ('2017-11-05 20:29:36',1), ('2027-11-05 20:29:36', 2); +UPDATE T2 SET dt ='2027-11-05 20:29:36' WHERE val =1; +ERROR 23000: Duplicate entry '2027-11-05 20:29:36' for key 'PRIMARY' +SELECT * FROM T2; +dt val +2017-11-05 20:29:36 1 +2027-11-05 20:29:36 2 +DROP TABLE T2; +CREATE TABLE T3 (id int(11) NOT NULL auto_increment, parent_id int(11) DEFAULT '0' NOT NULL, level tinyint(4) +DEFAULT '0' NOT NULL, PRIMARY KEY (id, parent_id)) engine=tianmu; +INSERT INTO T3 VALUES (3,1,1),(4,1,1); +INSERT INTO T3 VALUES (3,1,1),(4,1,1); +ERROR 23000: Duplicate entry '3-1' for key 'PRIMARY' +UPDATE IGNORE T3 SET id=id+1; +SELECT * FROM T3; +id parent_id level +4 1 1 +5 1 1 +DROP TABLE T3; +CREATE TABLE T4 (id int(11) NOT NULL auto_increment, parent_id int(11) DEFAULT '0' NOT NULL, level tinyint(4) +DEFAULT '0' NOT NULL, PRIMARY KEY (id)) engine=innodb; +INSERT INTO T4 VALUES (3,1,1),(4,1,1); +UPDATE T4 SET id =10; +ERROR 23000: Duplicate entry '10' for key 'PRIMARY' +SELECT * FROM T4; +id parent_id level +3 1 1 +4 1 1 +DROP TABLE T4; +DROP DATABASE issue1616_test; diff --git a/mysql-test/suite/tianmu/r/issue1637.result b/mysql-test/suite/tianmu/r/issue1637.result new file mode 100644 index 000000000..049f409e1 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1637.result @@ -0,0 +1,12 @@ +DROP DATABASE IF EXISTS issue1637_test; +CREATE DATABASE issue1637_test; +USE issue1637_test; +create table ttt(id int primary key,name varchar(10)); +insert into ttt values(1,'aaa'); +insert into ttt values(2,'bbb'); +insert ignore into ttt values(2,'ccc'); +select * from ttt; +id name +1 aaa +2 bbb +DROP DATABASE issue1637_test; diff --git a/mysql-test/suite/tianmu/r/issue1662.result b/mysql-test/suite/tianmu/r/issue1662.result new file mode 100644 index 000000000..cbf0980c8 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1662.result @@ -0,0 +1,52 @@ +# Create test database +CREATE DATABASE IF NOT EXISTS test_db_1662; +USE test_db_1662; +# Create test table with tianmu engine +CREATE TABLE IF NOT EXISTS test_table ( +id INT, +value INT, +PRIMARY KEY (id) +) ENGINE=tianmu; +# Insert data into test table +INSERT INTO test_table (id, value) VALUES +(1, 10), +(2, 20), +(3, 10), +(4, 30), +(5, 20); +# Select data from test table with user-defined variable +SELECT +id, +value, +@my_var := IF(value = @prev_value, @my_var, @my_var + 1) AS group_id, +@prev_value := value +FROM +test_table, +(SELECT @my_var := 0, @prev_value := NULL) AS init +ORDER BY +value, +id; +id value group_id @prev_value := value +1 10 2 10 +3 10 2 10 +2 20 4 20 +5 20 4 20 +4 30 6 30 +SELECT +id, +value, +@my_var := IF(id = @prev_value, @my_var, @my_var + 1) AS group_id, +@prev_value := value +FROM +test_table, +(SELECT @my_var := 0, @prev_value := NULL) AS init +ORDER BY +value, +id; +id value group_id @prev_value := value +1 10 2 10 +3 10 4 10 +2 20 6 20 +5 20 8 20 +4 30 10 30 +DROP DATABASE test_db_1662; diff --git a/mysql-test/suite/tianmu/r/issue1696.result b/mysql-test/suite/tianmu/r/issue1696.result new file mode 100644 index 000000000..de929cbb8 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1696.result @@ -0,0 +1,87 @@ +# Creating test database test_db_1696 +CREATE DATABASE IF NOT EXISTS test_db_1696; +USE test_db_1696; +CREATE DATABASE IF NOT EXISTS test_database; +USE test_database; +CREATE TABLE IF NOT EXISTS t1 ( +id INT NOT NULL, +value INT NOT NULL +) ENGINE=tianmu; +INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 1), (5, 2), (6, 3); +CREATE TABLE IF NOT EXISTS t2 ( +id INT NOT NULL, +value INT NOT NULL +) ENGINE=tianmu; +INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3), (4, 1), (5, 2), (6, 3); +CREATE TABLE IF NOT EXISTS t3 ( +id INT NOT NULL, +value INT NOT NULL +) ENGINE=tianmu; +INSERT INTO t3 VALUES (1, 1), (2, 2), (3, 3), (4, 1), (5, 2), (6, 3); +SET @counter = 0; +SELECT +*, +IF(@counter != 1, @counter, @counter := @counter + 1) AS counter +FROM +( +SELECT +t1.id AS id1, +t1.value AS value1, +t2.id AS id2, +t2.value AS value2, +t3.id AS id3, +t3.value AS value3 +FROM +t1 +JOIN t2 ON t1.value = t2.value +JOIN t3 ON t2.value = t3.value +) AS derived_table; +id1 value1 id2 value2 id3 value3 counter +1 1 1 1 1 1 0 +4 1 1 1 1 1 0 +1 1 1 1 4 1 0 +4 1 1 1 4 1 0 +2 2 2 2 2 2 0 +5 2 2 2 2 2 0 +2 2 2 2 5 2 0 +5 2 2 2 5 2 0 +3 3 3 3 3 3 0 +6 3 3 3 3 3 0 +3 3 3 3 6 3 0 +6 3 3 3 6 3 0 +1 1 4 1 1 1 0 +4 1 4 1 1 1 0 +1 1 4 1 4 1 0 +4 1 4 1 4 1 0 +2 2 5 2 2 2 0 +5 2 5 2 2 2 0 +2 2 5 2 5 2 0 +5 2 5 2 5 2 0 +3 3 6 3 3 3 0 +6 3 6 3 3 3 0 +3 3 6 3 6 3 0 +6 3 6 3 6 3 0 +DROP TABLE t1, t2, t3; +set @rankno = 1; +create table d(taxis_no int); +insert into d values(1); +insert into d values(1); +insert into d values(1); +SELECT IF(@rankno != d.taxis_no, @rankno := 1, @rankno := @rankno + 1) from d; +IF(@rankno != d.taxis_no, @rankno := 1, @rankno := @rankno + 1) +2 +1 +2 +set @rankno = 1; +drop table d; +create table d(taxis_no int); +insert into d values(1); +insert into d values(2); +insert into d values(3); +SELECT IF(@rankno != d.taxis_no, @rankno := 1, @rankno := @rankno + 1) from d; +IF(@rankno != d.taxis_no, @rankno := 1, @rankno := @rankno + 1) +2 +3 +4 +# Dropping test database test_db_1696 +DROP DATABASE IF EXISTS test_db_1696; diff --git a/mysql-test/suite/tianmu/r/issue1707.result b/mysql-test/suite/tianmu/r/issue1707.result new file mode 100644 index 000000000..b3dc200cd --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1707.result @@ -0,0 +1,34 @@ +CREATE DATABASE IF NOT EXISTS test_db_1707; +USE test_db_1707; +CREATE TABLE tianmu_table ( +id INT NOT NULL, +name VARCHAR(50) NOT NULL, +age INT NOT NULL, +gender VARCHAR(10) NOT NULL, +salary INT NOT NULL, +address VARCHAR(100) NOT NULL +) ENGINE=tianmu; +INSERT INTO tianmu_table +(id, name, age, gender, salary, address) +VALUES +(1, 'John', 25, 'Male', 50000, '123 Main St'), +(2, 'Jane', 30, 'Female', 60000, '456 Elm St'), +(3, 'Bob', 35, 'Male', 70000, '789 Maple St'); +select @age_cutoff := age +from ( +SELECT name, age, gender, salary +FROM ( +SELECT name, age, gender, salary +FROM tianmu_table +WHERE age < 30 +UNION ALL +SELECT name, age, gender, salary +FROM tianmu_table +WHERE age >= 30 +) AS derived_table +WHERE salary > 30 ) H; +@age_cutoff := age +25 +30 +35 +drop database test_db_1707; diff --git a/mysql-test/suite/tianmu/r/issue1784.result b/mysql-test/suite/tianmu/r/issue1784.result new file mode 100644 index 000000000..008f115a4 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1784.result @@ -0,0 +1,144 @@ +DROP DATABASE IF EXISTS issue1784_test; +CREATE DATABASE issue1784_test; +USE issue1784_test; +create table t1 (age int) engine=tianmu; +select * from t1; +age +select age from t1; +age +select age, sum(age) from t1 group by age; +age sum(age) +select age, sum(age) from (select * from t1) ta group by age; +age sum(age) +select case when age is not null then age else 33 end, sum(age) from t1 group by age; +case when age is not null then age else 33 end sum(age) +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; +case when age is not null then age else 33 end sum(age) +insert into t1 values(1); +select * from t1; +age +1 +select age from t1; +age +1 +select age, sum(age) from t1 group by age; +age sum(age) +1 1 +select age, sum(age) from (select * from t1) ta group by age; +age sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from t1 group by age; +case when age is not null then age else 33 end sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; +case when age is not null then age else 33 end sum(age) +1 1 +drop table t1; +create table t1 (age int) engine=innodb; +select * from t1; +age +select age from t1; +age +select age, sum(age) from t1 group by age; +age sum(age) +select age, sum(age) from (select * from t1) ta group by age; +age sum(age) +select case when age is not null then age else 33 end, sum(age) from t1 group by age; +case when age is not null then age else 33 end sum(age) +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; +case when age is not null then age else 33 end sum(age) +insert into t1 values(1); +select * from t1; +age +1 +select age from t1; +age +1 +select age, sum(age) from t1 group by age; +age sum(age) +1 1 +select age, sum(age) from (select * from t1) ta group by age; +age sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from t1 group by age; +case when age is not null then age else 33 end sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; +case when age is not null then age else 33 end sum(age) +1 1 +drop table t1; +SET sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +create table t1 (age int) engine=tianmu; +select * from t1; +age +select age from t1; +age +select age, sum(age) from t1; +age sum(age) +NULL NULL +select age, sum(age) from (select * from t1) ta; +age sum(age) +NULL NULL +select case when age is not null then age else 33 end, sum(age) from t1; +case when age is not null then age else 33 end sum(age) +33 NULL +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; +case when age is not null then age else 33 end sum(age) +33 NULL +insert into t1 values(1); +select * from t1; +age +1 +select age from t1; +age +1 +select age, sum(age) from t1; +age sum(age) +1 1 +select age, sum(age) from (select * from t1) ta; +age sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from t1; +case when age is not null then age else 33 end sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; +case when age is not null then age else 33 end sum(age) +1 1 +drop table t1; +create table t1 (age int) engine=innodb; +select * from t1; +age +select age from t1; +age +select age, sum(age) from t1; +age sum(age) +NULL NULL +select age, sum(age) from (select * from t1) ta; +age sum(age) +NULL NULL +select case when age is not null then age else 33 end, sum(age) from t1; +case when age is not null then age else 33 end sum(age) +33 NULL +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; +case when age is not null then age else 33 end sum(age) +33 NULL +insert into t1 values(1); +select * from t1; +age +1 +select age from t1; +age +1 +select age, sum(age) from t1; +age sum(age) +1 1 +select age, sum(age) from (select * from t1) ta; +age sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from t1; +case when age is not null then age else 33 end sum(age) +1 1 +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; +case when age is not null then age else 33 end sum(age) +1 1 +DROP DATABASE issue1784_test; diff --git a/mysql-test/suite/tianmu/r/issue1808.result b/mysql-test/suite/tianmu/r/issue1808.result new file mode 100644 index 000000000..2cafc1f57 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1808.result @@ -0,0 +1,11 @@ +DROP DATABASE IF EXISTS issue1808_test; +CREATE DATABASE issue1808_test; +USE issue1808_test; +SELECT c1 FROM ttt UNION ALL SELECT 'aaa' c1 FROM (SELECT c2 FROM ttt WHERE c1 IN (3000000000027265)) x ORDER BY c1; +c1 +3000000000027266 +3000000000027267 +3000000000027268 +3000000000027269 +3000000000027270 +DROP DATABASE issue1808_test; diff --git a/mysql-test/suite/tianmu/r/issue1848.result b/mysql-test/suite/tianmu/r/issue1848.result new file mode 100644 index 000000000..d5e61d67d --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1848.result @@ -0,0 +1,3 @@ +SELECT GROUP_CONCAT(t.id) FROM sequence t; +GROUP_CONCAT(t.id) +3000000000010000,3000000000010001,3000000000010002,3000000000010003,3000000000010004,3000000000010005,3000000000010006,3000000000010007,3000000000010008,3000000000010009,3000000000010010 diff --git a/mysql-test/suite/tianmu/r/issue1855.result b/mysql-test/suite/tianmu/r/issue1855.result new file mode 100644 index 000000000..1270e52cc --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1855.result @@ -0,0 +1,26 @@ +SELECT SUM(LENGTH(p_id)) FROM ttt; +SUM(LENGTH(p_id)) +34 +SELECT SUM(LENGTH(p_id)/2) FROM ttt; +SUM(LENGTH(p_id)/2) +17.0000 +SELECT SUM(LENGTH(p_val)) FROM ttt; +SUM(LENGTH(p_val)) +6 +SELECT SUM(LENGTH(p_val)/2) FROM ttt; +SUM(LENGTH(p_val)/2) +3.0000 +Variable_name Value +tianmu_groupby_parallel_degree 0 +tianmu_groupby_parallel_rows_minimum 655360 +Variable_name Value +tianmu_groupby_parallel_degree 4 +tianmu_groupby_parallel_rows_minimum 100 +SUM(LENGTH(p_id)) +158949 +SUM(LENGTH(p_id)/2) +79474.5000 +SUM(LENGTH(p_val)) +38901 +SUM(LENGTH(p_val)/2) +19450.5000 diff --git a/mysql-test/suite/tianmu/r/issue1860.result b/mysql-test/suite/tianmu/r/issue1860.result new file mode 100644 index 000000000..8486c0bed --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1860.result @@ -0,0 +1,55 @@ +DROP DATABASE IF EXISTS issue1860_test; +CREATE DATABASE issue1860_test; +USE issue1860_test; +CREATE TABLE tt(id decimal(18,0), dt datetime) ENGINE =TIANMU; +INSERT INTO tt VALUES(1111.0, '2023-01-01'); +SELECT id FROM tt UNION SELECT 2222 c1 FROM dual; +id +1111 +2222 +INSERT INTO tt VALUES(2222.0, '2023-02-02'); +SELECT id FROM tt UNION SELECT 2222 c1 FROM dual; +id +1111 +2222 +SELECT id FROM tt UNION ALL SELECT 2222 c1 FROM dual; +id +1111 +2222 +2222 +SELECT id FROM tt UNION SELECT 2222 ; +id +1111 +2222 +sELECT id FROM tt UNION ALL SELECT 2222; +id +1111 +2222 +2222 +SELECT id, dt FROM tt UNION SELECT 2222, '2022-01-01'; +id dt +1111 2023-01-01 00:00:00 +2222 2023-02-02 00:00:00 +2222 2022-01-01 +SELECT id, dt FROM tt UNION SELECT 2222, str_to_date('2022-02-03', '%Y-%m-%d'); +id dt +1111 2023-01-01 00:00:00 +2222 2023-02-02 00:00:00 +2222 2022-02-03 00:00:00 +SELECT id, dt FROM tt UNION SELECT 2222, str_to_date('2023-02-02', '%Y-%m-%d'); +id dt +1111 2023-01-01 00:00:00 +2222 2023-02-02 00:00:00 +SELECT dt FROM tt UNION SELECT 2222; +ERROR HY000: wrong types of columns +SELECT dt FROM tt UNION SELECT '2222'; +dt +2023-01-01 00:00:00 +2023-02-02 00:00:00 +2222 +SELECT * FROM tt UNION SELECT 222; +ERROR 21000: The used SELECT statements have a different number of columns +SELECT * FROM tt UNION ALL SELECT 222; +ERROR 21000: The used SELECT statements have a different number of columns +DROP TABLE tt; +DROP DATABASE issue1860_test; diff --git a/mysql-test/suite/tianmu/r/issue1861.result b/mysql-test/suite/tianmu/r/issue1861.result new file mode 100644 index 000000000..eb9d57c40 --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1861.result @@ -0,0 +1,61 @@ +DROP DATABASE IF EXISTS issue1861_test; +CREATE DATABASE issue1861_test; +USE issue1861_test; +CREATE TABLE `c1fg_pool` ( +`ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', +PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; +CREATE TABLE `c1fg_pl_node` ( +`ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', +`POOL_ID` decimal(18,0) NOT NULL DEFAULT '-1', +`COMPANY_ID` decimal(18,0) DEFAULT '-1', +PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; +CREATE TABLE `c1fg_pl_account` ( +`ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', +`NODE_ID` decimal(18,0) NOT NULL DEFAULT '-1', +PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; +CREATE TABLE `c1fg_pl_subsidiary` ( +`ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', +`ACCOUNT_ID` decimal(18,0) NOT NULL DEFAULT '-1', +`FISCAL_DATE` date DEFAULT NULL, +`DR_AMOUNT` decimal(16,2) NOT NULL DEFAULT '0.00' , +PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; +CREATE TABLE `c1md_company` ( +`ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1' , +`SYS_ID` decimal(18,0) NOT NULL DEFAULT '-1' , +PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; +SELECT B.company_id, +'上划日' ud_type, +2 sort_no, +'合计' fiscal_date, +DATE_FORMAT('2023-06-06', '%Y-%m-%d') fiscal_date, +C.pl_amount +FROM c1fg_pool A +INNER JOIN c1fg_pl_node B +ON A.row_id = B.pool_id +LEFT JOIN (SELECT c.node_id, SUM(d.dr_amount) pl_amount +FROM c1fg_pool a, +c1fg_pl_node b, +c1fg_pl_account c, +c1fg_pl_subsidiary d +WHERE a.row_id = b.pool_id +AND b.row_id = c.node_id +AND c.row_id = d.account_id +AND b.company_id IN +(SELECT t1.row_id +FROM c1md_company t1, c1md_company t2 +WHERE t1.sys_id = t2.sys_id) +GROUP BY c.node_id) C +ON B.row_id = C.node_id +ORDER BY B.company_id; +company_id ud_type sort_no fiscal_date fiscal_date pl_amount +DROP TABLE c1md_company; +DROP TABLE c1fg_pl_subsidiary; +DROP TABLE c1fg_pl_account; +DROP TABLE c1fg_pl_node; +DROP TABLE c1fg_pool; +DROP DATABASE issue1861_test; diff --git a/mysql-test/suite/tianmu/r/issue1864.result b/mysql-test/suite/tianmu/r/issue1864.result new file mode 100644 index 000000000..a4095d46b --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1864.result @@ -0,0 +1,32 @@ +DROP DATABASE IF EXISTS issue1864_test; +CREATE DATABASE issue1864_test; +USE issue1864_test; +create table t1(c1 decimal(5,2)) engine=tianmu; +insert into t1 values(111.22); +create table t2(id int) engine=tianmu; +insert into t2 values(11122); +select xxx.x from (select c1 as x from t1 union all select 1 as x from t2) xxx; +x +111.22 +1.00 +select xxx.x from ( select t1.c1 as x from t1 inner join t2 on t1.c1 != t2.id ) xxx; +x +111.22 +CREATE TABLE cs1 (d1 DECIMAL(17), d2 DECIMAL(17,10), d3 DECIMAL(17,17)) engine=tianmu; +INSERT INTO cs1 VALUES (125, 1.25, 0.125); +INSERT INTO cs1 VALUES (-125, -1.25, -0.125); +select * from cs1; +d1 d2 d3 +125 1.2500000000 0.12500000000000000 +-125 -1.2500000000 -0.12500000000000000 +select * from cs1 union select * from cs1; +d1 d2 d3 +125 1.2500000000 0.12500000000000000 +-125 -1.2500000000 -0.12500000000000000 +SELECT d1, d1, d2 FROM cs1 UNION SELECT d2, d3, d3 FROM cs1; +d1 d1 d2 +125.0000000000 -59.46744073709551616 1.25000000000000000 +-125.0000000000 59.46744073709551616 -1.25000000000000000 +1.2500000000 0.12500000000000000 0.12500000000000000 +-1.2500000000 -0.12500000000000000 -0.12500000000000000 +DROP DATABASE issue1864_test; diff --git a/mysql-test/suite/tianmu/r/issue1865.result b/mysql-test/suite/tianmu/r/issue1865.result new file mode 100644 index 000000000..9612b32ae --- /dev/null +++ b/mysql-test/suite/tianmu/r/issue1865.result @@ -0,0 +1,29 @@ +DROP DATABASE IF EXISTS issue1865_test_db; +CREATE DATABASE issue1865_test_db; +USE issue1865_test_db; +create table t1 (a int default 100, b int, c varchar(60))engine=tianmu; +load data infile 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue1865.dat' into table t1 (a, c); +select * from t1; +a b c +NULL NULL 10 +NULL NULL 15 +alter table t1 alter column b drop default; +alter table t1 alter column b set default 10; +load data infile 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue1865.dat' into table t1 (a, c); +select * from t1; +a b c +NULL NULL 10 +NULL NULL 15 +NULL 10 10 +NULL 10 15 +alter table t1 modify c text; +load data infile 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue1865.dat' into table t1 (a, c); +select * from t1; +a b c +NULL NULL 10 +NULL NULL 15 +NULL 10 10 +NULL 10 15 +NULL 10 10 +NULL 10 15 +DROP DATABASE issue1865_test_db; diff --git a/mysql-test/suite/tianmu/r/issue663.result b/mysql-test/suite/tianmu/r/issue663.result index 620b3c789..ad7395cd8 100644 --- a/mysql-test/suite/tianmu/r/issue663.result +++ b/mysql-test/suite/tianmu/r/issue663.result @@ -15,8 +15,8 @@ a b a b 2 12 2 12 explain delete t11.*,t12.* from t11,t12 where t11.a = t12.a; id select_type table partitions type possible_keys key key_len ref rows filtered Extra -1 DELETE t11 NULL ALL NULL NULL NULL NULL 3 100.00 NULL -1 DELETE t12 NULL ALL NULL NULL NULL NULL 3 33.33 Using where +1 DELETE t11 NULL ALL PRIMARY NULL NULL NULL 3 100.00 NULL +1 DELETE t12 NULL ALL PRIMARY NULL NULL NULL 3 33.33 Using where delete t11.*,t12.* from t11,t12 where t11.a = t12.a; select * from t11; a b diff --git a/mysql-test/suite/tianmu/r/issue848.result b/mysql-test/suite/tianmu/r/issue848.result index e37ed1c6d..d5a931288 100644 --- a/mysql-test/suite/tianmu/r/issue848.result +++ b/mysql-test/suite/tianmu/r/issue848.result @@ -1,5 +1,6 @@ -create database test_issue848; -use test_issue848; +DROP DATABASE IF EXISTS issue848_test; +CREATE DATABASE issue848_test; +USE issue848_test; CREATE TABLE `t1` ( `c_char` char(10) DEFAULT NULL COMMENT 'char', `c_varchar` varchar(10) DEFAULT NULL COMMENT 'varchar', @@ -29,7 +30,7 @@ t1 CREATE TABLE `t1` ( `c_varchar` varchar(10) CHARACTER SET gbk DEFAULT NULL COMMENT 'varchar', `c_text` text CHARACTER SET gbk COMMENT 'text' ) ENGINE=TIANMU DEFAULT CHARSET=latin1 -alter table t1 add column ex_column char(30); +ALTER TABLE t1 ADD COLUMN ex_column char(30) AFTER c_text; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -38,15 +39,15 @@ t1 CREATE TABLE `t1` ( `c_text` text CHARACTER SET gbk COMMENT 'text', `ex_column` char(30) DEFAULT NULL ) ENGINE=TIANMU DEFAULT CHARSET=latin1 -ALTER TABLE t1 MODIFY c_char char(10) CHARACTER SET UTF8MB4; -ALTER TABLE t1 MODIFY c_varchar char(10) CHARACTER SET UTF8MB4; -ALTER TABLE t1 MODIFY c_text char(10) CHARACTER SET UTF8MB4; +ALTER TABLE t1 MODIFY c_char char(15) CHARACTER SET UTF8MB4; +ALTER TABLE t1 MODIFY c_varchar char(15) CHARACTER SET UTF8MB4; +ALTER TABLE t1 MODIFY c_text char(15) CHARACTER SET UTF8MB4; show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `c_char` char(10) CHARACTER SET utf8mb4 DEFAULT NULL, - `c_varchar` char(10) CHARACTER SET utf8mb4 DEFAULT NULL, - `c_text` char(10) CHARACTER SET utf8mb4 DEFAULT NULL, + `c_char` char(15) CHARACTER SET utf8mb4 DEFAULT NULL, + `c_varchar` char(15) CHARACTER SET utf8mb4 DEFAULT NULL, + `c_text` char(15) CHARACTER SET utf8mb4 DEFAULT NULL, `ex_column` char(30) DEFAULT NULL ) ENGINE=TIANMU DEFAULT CHARSET=latin1 select hex(c_char),hex(c_varchar),hex(c_text) from t1; @@ -66,5 +67,5 @@ t1 CREATE TABLE `t1` ( `c_text` char(10) CHARACTER SET gbk DEFAULT NULL, `ex_column` char(30) DEFAULT NULL ) ENGINE=TIANMU DEFAULT CHARSET=latin1 -drop table t1; -drop database test_issue848; +DROP TABLE t1; +DROP DATABASE issue848_test; diff --git a/mysql-test/suite/tianmu/r/issue880.result b/mysql-test/suite/tianmu/r/issue880.result index e88a7d6e1..11135464f 100644 --- a/mysql-test/suite/tianmu/r/issue880.result +++ b/mysql-test/suite/tianmu/r/issue880.result @@ -103,9 +103,9 @@ CREATE TABLE `issue880_t3` ( `union_order_flag` smallint(1) DEFAULT '0' COMMENT '是否合成订单0不是,1是; Size[MB]: 0.1; Ratio: 2.12', PRIMARY KEY (`id`) ) ENGINE=TIANMU DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED; -LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t1.txt' INTO TABLE issue880_t1; -LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t3.txt' INTO TABLE issue880_t3; -LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t2.txt' INTO TABLE issue880_t2; +LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t1.txt' INTO TABLE issue880_t1 FIELDS TERMINATED BY ';'; +LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t3.txt' INTO TABLE issue880_t3 FIELDS TERMINATED BY ';'; +LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t2.txt' INTO TABLE issue880_t2 FIELDS TERMINATED BY ';'; select b.create_time AS create_time from (issue880_t3 a join issue880_t1 b) where ((a.id = b.period_pay_id) and (a.pay_status = 2) and diff --git a/mysql-test/suite/tianmu/r/issue956.result b/mysql-test/suite/tianmu/r/issue956.result index c56185b26..a9197679f 100644 --- a/mysql-test/suite/tianmu/r/issue956.result +++ b/mysql-test/suite/tianmu/r/issue956.result @@ -1,13 +1,13 @@ include/master-slave.inc [connection master] # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # default_storage_engine=innodb # [on slave] include/sync_slave_sql_with_master.inc set global default_storage_engine=innodb; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue956(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956; @@ -20,7 +20,7 @@ t_issue956 CREATE TABLE `t_issue956` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -43,7 +43,7 @@ t_issue956 CREATE TABLE `t_issue956` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -59,12 +59,12 @@ t_issue956 CREATE TABLE `t_issue956` ( drop table t_issue956; include/sync_slave_sql_with_master.inc # -# sql_mode='MANDATORY_TIANMU' +# tianmu_mandatory=ON # default_storage_engine=innodb # [on slave] set global default_storage_engine=innodb; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue956_2(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_2; @@ -77,7 +77,7 @@ t_issue956_2 CREATE TABLE `t_issue956_2` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -100,7 +100,7 @@ t_issue956_2 CREATE TABLE `t_issue956_2` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine InnoDB @@ -116,12 +116,12 @@ t_issue956_2 CREATE TABLE `t_issue956_2` ( drop table t_issue956_2; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # default_storage_engine=tianmu # [on slave] set global default_storage_engine=tianmu; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue956_3(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_3; @@ -134,7 +134,7 @@ t_issue956_3 CREATE TABLE `t_issue956_3` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -157,7 +157,7 @@ t_issue956_3 CREATE TABLE `t_issue956_3` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -173,12 +173,12 @@ t_issue956_3 CREATE TABLE `t_issue956_3` ( drop table t_issue956_3; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +# tianmu_mandatory=ON # default_storage_engine=tianmu # [on slave] set global default_storage_engine=tianmu; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; [on master] create table t_issue956_4(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_4; @@ -191,7 +191,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -214,7 +214,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine TIANMU @@ -230,12 +230,12 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( drop table t_issue956_4; include/sync_slave_sql_with_master.inc # -# sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +# tianmu_mandatory=OFF # default_storage_engine=MyISAM # [on slave] set global default_storage_engine=MyISAM; -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; [on master] create table t_issue956_4(c1 int,c2 varchar(255))engine=InnoDB; show create table t_issue956_4; @@ -248,7 +248,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( include/sync_slave_sql_with_master.inc show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine MyISAM @@ -271,7 +271,7 @@ t_issue956_4 CREATE TABLE `t_issue956_4` ( [on slave] show global variables like 'sql_mode'; Variable_name Value -sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION show global variables like '%_engine'; Variable_name Value default_storage_engine MyISAM diff --git a/mysql-test/suite/tianmu/r/left_right_func.result b/mysql-test/suite/tianmu/r/left_right_func.result new file mode 100644 index 000000000..699c44d14 --- /dev/null +++ b/mysql-test/suite/tianmu/r/left_right_func.result @@ -0,0 +1,36 @@ +# +# left and right func test +# +DROP DATABASE IF EXISTS left_right_func_test; +CREATE DATABASE left_right_func_test; +USE left_right_func_test; +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (`time_tk` INT(11) UNSIGNED NOT NULL) DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES +(2013113023), +(1900010100), +(2199123100), +(2199123100), +(2147483646), +(2147483647), +(2147483648); +SELECT LEFT(time_tk,6) AS time_tk_left FROM t1; +time_tk_left +201311 +190001 +219912 +219912 +214748 +214748 +214748 +SELECT RIGHT(time_tk,6) AS time_tk_right FROM t1; +time_tk_right +113023 +010100 +123100 +123100 +483646 +483647 +483648 +DROP TABLE IF EXISTS t1; +DROP DATABASE left_right_func_test; diff --git a/mysql-test/suite/tianmu/r/like_not_like.result b/mysql-test/suite/tianmu/r/like_not_like.result new file mode 100644 index 000000000..0f17bf0e9 --- /dev/null +++ b/mysql-test/suite/tianmu/r/like_not_like.result @@ -0,0 +1,17 @@ +# +# This test tests the (NOT) LIKE test in filters that is added +# to a FilterCommand in primproc. +# This is a very rare situation, yet somehow I managed to trigger it. +# +DROP DATABASE IF EXISTS like_not_like; +CREATE DATABASE like_not_like; +USE like_not_like; +CREATE TABLE tcs(d1 CHAR(6), d2 CHAR(6)); +INSERT INTO tcs(d1, d2) VALUES ('a','a'), ('a', 'b'); +SELECT 'stonedb like', d1, d2 FROM tcs WHERE (d1 LIKE d2); +stonedb like d1 d2 +stonedb like a a +SELECT 'stonedb not like', d1, d2 FROM tcs WHERE (d1 NOT LIKE d2); +stonedb not like d1 d2 +stonedb not like a b +DROP DATABASE like_not_like; diff --git a/mysql-test/suite/tianmu/r/multi_join.result b/mysql-test/suite/tianmu/r/multi_join.result new file mode 100644 index 000000000..9de477a7e --- /dev/null +++ b/mysql-test/suite/tianmu/r/multi_join.result @@ -0,0 +1,29 @@ +# +# right join/left join/inner join /full join +# +DROP DATABASE IF EXISTS multi_join_test; +CREATE DATABASE multi_join_test; +USE multi_join_test; +drop table if exists all_datatype_table; +Warnings: +Note 1051 Unknown table 'multi_join_test.all_datatype_table' +create table all_datatype_table(id int not null,c_intger integer,c_char char(10)); +insert into all_datatype_table values(1,1000,1000); +insert into all_datatype_table values(2,2000,1000); +insert into all_datatype_table values(3,2001,null); +insert into all_datatype_table values(4,2002,'a'); +select count(*) from all_datatype_table t1 right join all_datatype_table t2 on t1.id=t2.id +inner join all_datatype_table t3 on t1.id=t3.id +right join all_datatype_table t4 on t1.id=t4.id +left join all_datatype_table t5 on t1.id=t5.id +inner join all_datatype_table t6 on t1.id=t6.id +left join all_datatype_table t7 on t1.id=t7.id +right join all_datatype_table t8 on t1.id=t8.id +right join all_datatype_table t10 on t1.id=t10.id +right join all_datatype_table t11 on t1.id=t11.id +right join all_datatype_table t13 on t1.id=t13.id +right join all_datatype_table t15 on t1.id=t15.id +right join all_datatype_table t16 on t1.id=t16.id; +count(*) +4 +drop DATABASE multi_join_test; diff --git a/mysql-test/suite/tianmu/r/order_by.result b/mysql-test/suite/tianmu/r/order_by.result new file mode 100644 index 000000000..0ccc367c3 --- /dev/null +++ b/mysql-test/suite/tianmu/r/order_by.result @@ -0,0 +1,58 @@ +DROP DATABASE IF EXISTS order_by; +CREATE DATABASE order_by; +USE order_by; +create table t1 (a int, b int) ; +create table t2 (a int, b int) ; +insert into t1 values (1, 2), (1, 3), (1, 4), (2, 5), (2, 6), (2, 7); +insert into t2 values (1, 2), (1, 2), (1, 4), (2, 5), (2, 6), (2, 8); +select * from t1, t2 where t1.a = t2.a and t2.b = (select max(b) from t2 where t1.a = t2.a) order by t1.a,t1.b,t2.b; +a b a b +1 2 1 4 +1 3 1 4 +1 4 1 4 +2 5 2 8 +2 6 2 8 +2 7 2 8 +select * from t1, t2 where t1.a = t2.a and t2.b < (select max(b) from t2 where t1.a = t2.a) order by t1.a,t1.b,t2.b; +a b a b +1 2 1 2 +1 2 1 2 +1 3 1 2 +1 3 1 2 +1 4 1 2 +1 4 1 2 +2 5 2 5 +2 5 2 6 +2 6 2 5 +2 6 2 6 +2 7 2 5 +2 7 2 6 +select * from t1, t2 where t1.a = t2.a and t2.b > (select max(b) from t2 where t1.a = t2.a) order by t1.a,t1.b,t2.b; +a b a b +select * from t1, t2 where t1.a = t2.a and t1.b = (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b; +a b a b +select * from t1, t2 where t1.a = t2.a and t2.b < (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t1.a,t1.b,t2.b; +a b a b +1 2 1 2 +1 2 1 2 +1 3 1 2 +1 3 1 2 +1 4 1 2 +1 4 1 2 +2 5 2 5 +2 5 2 6 +2 6 2 5 +2 6 2 6 +2 7 2 5 +2 7 2 6 +select * from t1, t2 where t1.a = t2.a and t2.b > (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t1.a,t1.b,t2.b; +a b a b +1 2 1 4 +1 3 1 4 +1 4 1 4 +2 5 2 8 +2 6 2 8 +2 7 2 8 +drop table t1; +drop table t2; +DROP DATABASE order_by; diff --git a/mysql-test/suite/tianmu/r/range.result b/mysql-test/suite/tianmu/r/range.result new file mode 100644 index 000000000..e09a9a5df --- /dev/null +++ b/mysql-test/suite/tianmu/r/range.result @@ -0,0 +1,1154 @@ +# +# Test range +# +DROP DATABASE IF EXISTS range_test; +CREATE DATABASE range_test; +USE range_test; +drop table if exists t1, t2, t3; +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3090 Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release. +CREATE TABLE t1 ( +event_date date DEFAULT '0000-00-00' NOT NULL, +type int(11) DEFAULT '0' NOT NULL, +event_id int(11) DEFAULT '0' NOT NULL, +PRIMARY KEY (event_date,type,event_id) +); +INSERT INTO t1 VALUES ('1999-07-10',100100,24), ('1999-07-11',100100,25), +('1999-07-13',100600,0), ('1999-07-13',100600,4), ('1999-07-13',100600,26), +('1999-07-14',100600,10), ('1999-07-15',100600,16), ('1999-07-15',100800,45), +('1999-07-15',101000,47), ('1999-07-16',100800,46), ('1999-07-20',100600,5), +('1999-07-20',100600,27), ('1999-07-21',100600,11), ('1999-07-22',100600,17), +('1999-07-23',100100,39), ('1999-07-24',100100,39), ('1999-07-24',100500,40), +('1999-07-25',100100,39), ('1999-07-27',100600,1), ('1999-07-27',100600,6), +('1999-07-27',100600,28), ('1999-07-28',100600,12), ('1999-07-29',100500,41), +('1999-07-29',100600,18), ('1999-07-30',100500,41), ('1999-07-31',100500,41), +('1999-08-01',100700,34), ('1999-08-03',100600,7), ('1999-08-03',100600,29), +('1999-08-04',100600,13), ('1999-08-05',100500,42), ('1999-08-05',100600,19), +('1999-08-06',100500,42), ('1999-08-07',100500,42), ('1999-08-08',100500,42), +('1999-08-10',100600,2), ('1999-08-10',100600,9), ('1999-08-10',100600,30), +('1999-08-11',100600,14), ('1999-08-12',100600,20), ('1999-08-17',100500,8), +('1999-08-17',100600,31), ('1999-08-18',100600,15), ('1999-08-19',100600,22), +('1999-08-24',100600,3), ('1999-08-24',100600,32), ('1999-08-27',100500,43), +('1999-08-31',100600,33), ('1999-09-17',100100,37), ('1999-09-18',100100,37), +('1999-09-19',100100,37), ('2000-12-18',100700,38); +select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date; +event_date type event_id +1999-07-10 100100 24 +1999-07-11 100100 25 +1999-07-13 100600 0 +1999-07-13 100600 4 +1999-07-13 100600 26 +1999-07-14 100600 10 +explain select event_date,type,event_id from t1 WHERE type = 100601 and event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date; +id select_type table partitions type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE +Warnings: +Note 1003 /* select#1 */ select `range_test`.`t1`.`event_date` AS `event_date`,`range_test`.`t1`.`type` AS `type`,`range_test`.`t1`.`event_id` AS `event_id` from `range_test`.`t1` where 0 order by `range_test`.`t1`.`event_date` +select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date <= "1999-07-15" AND (type=100600 OR type=100100) or event_date >= "1999-07-01" AND event_date <= "1999-07-15" AND type=100099; +event_date type event_id +1999-07-10 100100 24 +1999-07-11 100100 25 +1999-07-13 100600 0 +1999-07-13 100600 4 +1999-07-13 100600 26 +1999-07-14 100600 10 +1999-07-15 100600 16 +drop table t1; +CREATE TABLE t1 ( +PAPER_ID smallint(6) DEFAULT '0' NOT NULL, +YEAR smallint(6) DEFAULT '0' NOT NULL, +ISSUE smallint(6) DEFAULT '0' NOT NULL, +CLOSED tinyint(4) DEFAULT '0' NOT NULL, +ISS_DATE date DEFAULT '0000-00-00' NOT NULL, +PRIMARY KEY (PAPER_ID,YEAR,ISSUE) +); +INSERT INTO t1 VALUES (3,1999,34,0,'1999-07-12'), (1,1999,111,0,'1999-03-23'), +(1,1999,222,0,'1999-03-23'), (3,1999,33,0,'1999-07-12'), +(3,1999,32,0,'1999-07-12'), (3,1999,31,0,'1999-07-12'), +(3,1999,30,0,'1999-07-12'), (3,1999,29,0,'1999-07-12'), +(3,1999,28,0,'1999-07-12'), (1,1999,40,1,'1999-05-01'), +(1,1999,41,1,'1999-05-01'), (1,1999,42,1,'1999-05-01'), +(1,1999,46,1,'1999-05-01'), (1,1999,47,1,'1999-05-01'), +(1,1999,48,1,'1999-05-01'), (1,1999,49,1,'1999-05-01'), +(1,1999,50,0,'1999-05-01'), (1,1999,51,0,'1999-05-01'), +(1,1999,200,0,'1999-06-28'), (1,1999,52,0,'1999-06-28'), +(1,1999,53,0,'1999-06-28'), (1,1999,54,0,'1999-06-28'), +(1,1999,55,0,'1999-06-28'), (1,1999,56,0,'1999-07-01'), +(1,1999,57,0,'1999-07-01'), (1,1999,58,0,'1999-07-01'), +(1,1999,59,0,'1999-07-01'), (1,1999,60,0,'1999-07-01'), +(3,1999,35,0,'1999-07-12'); +select YEAR,ISSUE from t1 where PAPER_ID=3 and (YEAR>1999 or (YEAR=1999 and ISSUE>28)) order by YEAR,ISSUE; +YEAR ISSUE +1999 29 +1999 30 +1999 31 +1999 32 +1999 33 +1999 34 +1999 35 +drop table t1; +CREATE TABLE t1 ( +id int(11) NOT NULL auto_increment, +parent_id int(11) DEFAULT '0' NOT NULL, +level tinyint(4) DEFAULT '0' NOT NULL, +PRIMARY KEY (id) +); +INSERT INTO t1 VALUES (1,0,0), (3,1,1), (4,1,1), (8,2,2), (9,2,2), (17,3,2), +(22,4,2), (24,4,2), (28,5,2), (29,5,2), (30,5,2), (31,6,2), (32,6,2), (33,6,2), +(203,7,2), (202,7,2), (20,3,2), (157,0,0), (193,5,2), (40,7,2), (2,1,1), +(15,2,2), (6,1,1), (34,6,2), (35,6,2), (16,3,2), (7,1,1), (36,7,2), (18,3,2), +(26,5,2), (27,5,2), (183,4,2), (38,7,2), (25,5,2), (37,7,2), (21,4,2), +(19,3,2), (5,1,1), (179,5,2); +SELECT * FROM t1 WHERE level = 1 AND parent_id = 1 order by id; +id parent_id level +2 1 1 +3 1 1 +4 1 1 +5 1 1 +6 1 1 +7 1 1 +drop table t1; +create table t1( +Satellite varchar(25) not null, +SensorMode varchar(25) not null, +FullImageCornersUpperLeftLongitude double not null, +FullImageCornersUpperRightLongitude double not null, +FullImageCornersUpperRightLatitude double not null, +FullImageCornersLowerRightLatitude double not null); +insert into t1 values("OV-3","PAN1",91,-92,40,50); +insert into t1 values("OV-4","PAN1",91,-92,40,50); +select * from t1 where t1.Satellite = "OV-3" and t1.SensorMode = "PAN1" and t1.FullImageCornersUpperLeftLongitude > -90.000000 and t1.FullImageCornersUpperRightLongitude < -82.000000; +Satellite SensorMode FullImageCornersUpperLeftLongitude FullImageCornersUpperRightLongitude FullImageCornersUpperRightLatitude FullImageCornersLowerRightLatitude +OV-3 PAN1 91 -92 40 50 +drop table t1; +create table t1 ( aString char(100) not null default ""); +insert t1 (aString) values ( "believe in myself" ), ( "believe" ), ("baaa" ), ( "believe in love"); +select * from t1 where aString < "believe in myself" order by aString; +aString +baaa +believe +believe in love +select * from t1 where aString > "believe in love" order by aString; +aString +believe in myself +select * from t1 where aString < "believe in myself" order by aString; +aString +baaa +believe +believe in love +select * from t1 where aString > "believe in love" order by aString; +aString +believe in myself +drop table t1; +create table t1 (id int(10) primary key); +insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9); +select id from t1 where id in (2,5,9) ; +id +2 +5 +9 +select id from t1 where id=2 or id=5 or id=9 ; +id +2 +5 +9 +drop table t1; +create table t1 ( id1 int not null, id2 int not null, idnull int null, c char(20), primary key (id1,id2)); +insert into t1 values (0,1,NULL,"aaa"), (1,1,NULL,"aaa"), (2,1,NULL,"aaa"), +(3,1,NULL,"aaa"), (4,1,NULL,"aaa"), (5,1,NULL,"aaa"), +(6,1,NULL,"aaa"), (7,1,NULL,"aaa"), (8,1,NULL,"aaa"), +(9,1,NULL,"aaa"), (10,1,NULL,"aaa"), (11,1,NULL,"aaa"), +(12,1,NULL,"aaa"), (13,1,NULL,"aaa"), (14,1,NULL,"aaa"), +(15,1,NULL,"aaa"), (16,1,NULL,"aaa"), (17,1,NULL,"aaa"), +(18,1,NULL,"aaa"), (19,1,NULL,"aaa"), (20,1,NULL,"aaa"); +select a.id1, b.idnull from t1 as a, t1 as b where a.id2=1 and a.id1=1 and b.id1=a.idnull order by b.id2 desc limit 1; +id1 idnull +drop table t1; +create table t1 ( +id int not null auto_increment, +name char(1) not null, +uid int not null, +primary key (id)); +create table t2 ( +id int not null auto_increment, +name char(1) not null, +uid int not null, +primary key (id)); +insert into t1(id, uid, name) values(1, 0, ' '); +insert into t1(uid, name) values(0, ' '); +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t2(uid, name) select uid, name from t1; +insert into t2(uid, name) select uid, name from t1; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +delete from t2; +insert into t2(uid, name) values +(1, CHAR(64+1)), +(2, CHAR(64+2)), +(3, CHAR(64+3)), +(4, CHAR(64+4)), +(5, CHAR(64+5)), +(6, CHAR(64+6)), +(7, CHAR(64+7)), +(8, CHAR(64+8)), +(9, CHAR(64+9)), +(10, CHAR(64+10)), +(11, CHAR(64+11)), +(12, CHAR(64+12)), +(13, CHAR(64+13)), +(14, CHAR(64+14)), +(15, CHAR(64+15)), +(16, CHAR(64+16)), +(17, CHAR(64+17)), +(18, CHAR(64+18)), +(19, CHAR(64+19)), +(20, CHAR(64+20)), +(21, CHAR(64+21)), +(22, CHAR(64+22)), +(23, CHAR(64+23)), +(24, CHAR(64+24)), +(25, CHAR(64+25)), +(26, CHAR(64+26)); +insert into t1(uid, name) select uid, name from t2 order by uid; +delete from t1; +delete from t2; +insert into t2(id, uid, name) select id, uid, name from t1; +select count(*) from t1; +count(*) +0 +select count(*) from t2; +count(*) +0 +select * from t1, t2 where t1.uid=t2.uid AND t1.uid > 0; +id name uid id name uid +select * from t1, t2 where t1.uid=t2.uid AND t2.uid > 0; +id name uid id name uid +select * from t1, t2 where t1.uid=t2.uid AND t1.uid != 0; +id name uid id name uid +select * from t1, t2 where t1.uid=t2.uid AND t2.uid != 0; +id name uid id name uid +select * from t1, t2 where t1.uid=t2.uid AND t1.uid > 0 order by t1.id; +id name uid id name uid +select * from t1, t2 where t1.uid=t2.uid AND t1.uid != 0 order by t1.id; +id name uid id name uid +drop table t1,t2; +create table t1 (x bigint unsigned not null); +insert into t1(x) values (0xfffffffffffff0); +insert into t1(x) values (0xfffffffffffff1); +select * from t1; +x +72057594037927920 +72057594037927921 +select count(*) from t1 where x>0; +count(*) +2 +select count(*) from t1 where x=0; +count(*) +0 +select count(*) from t1 where x<0; +count(*) +0 +select count(*) from t1 where x < -16; +count(*) +0 +select count(*) from t1 where x = -16; +count(*) +0 +select count(*) from t1 where x > -16; +count(*) +2 +select count(*) from t1 where x = 18446744073709551601; +count(*) +0 +create table t2 (x bigint not null); +insert into t2(x) values (-16); +insert into t2(x) values (-15); +select * from t2; +x +-16 +-15 +select count(*) from t2 where x>0; +count(*) +0 +select count(*) from t2 where x=0; +count(*) +0 +select count(*) from t2 where x<0; +count(*) +2 +select count(*) from t2 where x < -16; +count(*) +0 +select count(*) from t2 where x = -16; +count(*) +1 +select count(*) from t2 where x > -16; +count(*) +1 +drop table t1,t2; +create table t1 (x bigint unsigned not null primary key) engine=innodb; +insert into t1(x) values (0xfffffffffffff0); +insert into t1(x) values (0xfffffffffffff1); +select * from t1; +x +72057594037927920 +72057594037927921 +select count(*) from t1 where x>0; +count(*) +2 +select count(*) from t1 where x=0; +count(*) +0 +select count(*) from t1 where x<0; +count(*) +0 +select count(*) from t1 where x < -16; +count(*) +0 +select count(*) from t1 where x = -16; +count(*) +0 +select count(*) from t1 where x > -16; +count(*) +2 +select count(*) from t1 where x = 18446744073709551601; +count(*) +0 +drop table t1; +create table t1 (a bigint unsigned); +insert into t1 select 184467440737095515; +insert into t1 select 184467440737095514; +select * from t1 where a <> -1; +a +184467440737095515 +184467440737095514 +select * from t1 where a > -1 or a < -1; +a +184467440737095515 +184467440737095514 +select * from t1 where a > -1; +a +184467440737095515 +184467440737095514 +select * from t1 where a < -1; +a +drop table t1; +set names latin1; +create table t1 (a char(10), b text) character set latin1; +INSERT INTO t1 (a) VALUES +('111'),('222'),('222'),('222'),('222'),('444'),('aaa'),('AAA'),('bbb'); +drop table t1; +CREATE TABLE t1 ( +`CLIENT` char(3) character set latin1 collate latin1_bin NOT NULL default '000', +`ARG1` char(3) character set latin1 collate latin1_bin NOT NULL default '', +`ARG2` char(3) character set latin1 collate latin1_bin NOT NULL default '', +`FUNCTION` varchar(10) character set latin1 collate latin1_bin NOT NULL default '', +`FUNCTINT` int(11) NOT NULL default '0' +) DEFAULT CHARSET=latin1; +INSERT INTO t1 VALUES ('000',' 0',' 0','Text 001',0), ('000',' 0',' 1','Text 002',0), +('000',' 1',' 2','Text 003',0), ('000',' 2',' 3','Text 004',0), +('001',' 3',' 0','Text 017',0); +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 1' OR ARG1 != ' 2'); +count(*) +4 +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 2' OR ARG1 != ' 1'); +count(*) +4 +drop table t1; +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +CREATE TABLE t2 ( +pk1 int(11) NOT NULL, +pk2 int(11) NOT NULL, +pk3 int(11) NOT NULL, +pk4 int(11) NOT NULL, +filler char(82), +PRIMARY KEY (pk1,pk2,pk3,pk4) +) DEFAULT CHARSET=latin1; +insert into t2 select 1, A.a+10*B.a, 432, 44, 'fillerZ' from t1 A, t1 B; +INSERT INTO t2 VALUES (2621, 2635, 0, 0,'filler'), (2621, 2635, 1, 0,'filler'), +(2621, 2635, 10, 0,'filler'), (2621, 2635, 11, 0,'filler'), +(2621, 2635, 14, 0,'filler'), (2621, 2635, 1000015, 0,'filler'); +SELECT * FROM t2 +WHERE ((((pk4 =0) AND (pk1 =2621) AND (pk2 =2635))) +OR ((pk4 =1) AND (((pk1 IN ( 7, 2, 1 ))) OR (pk1 =522)) AND ((pk2 IN ( 0, 2635)))) +) AND (pk3 >=1000000); +pk1 pk2 pk3 pk4 filler +2621 2635 1000015 0 filler +drop table t1, t2; +create table t1(a char(2)); +insert into t1 values ('x'), ('xx'); +select a from t1 where a > 'x'; +a +xx +drop table t1; +create table t1 ( +c1 char(10), c2 char(10), c3 char(10), c4 char(10), +c5 char(10), c6 char(10), c7 char(10), c8 char(10), +c9 char(10), c10 char(10), c11 char(10), c12 char(10), +c13 char(10), c14 char(10), c15 char(10), c16 char(10) +); +insert into t1 (c1) values ('1'),('1'),('1'),('1'); +select * from t1 where +c1 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c2 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c3 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c4 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c5 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c6 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c7 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c8 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c9 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC") +and c10 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", +"abcdefg1", "123456781", "qwertyui1", "asddfg1", +"abcdefg2", "123456782", "qwertyui2", "asddfg2", +"abcdefg3", "123456783", "qwertyui3", "asddfg3", +"abcdefg4", "123456784", "qwertyui4", "asddfg4", +"abcdefg5", "123456785", "qwertyui5", "asddfg5", +"abcdefg6", "123456786", "qwertyui6", "asddfg6", +"abcdefg7", "123456787", "qwertyui7", "asddfg7", +"abcdefg8", "123456788", "qwertyui8", "asddfg8", +"abcdefg9", "123456789", "qwertyui9", "asddfg9", +"abcdefgA", "12345678A", "qwertyuiA", "asddfgA", +"abcdefgB", "12345678B", "qwertyuiB", "asddfgB", +"abcdefgC", "12345678C", "qwertyuiC", "asddfgC"); +c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 +drop table t1; +CREATE TABLE t1 ( +id int(11) NOT NULL auto_increment, +status varchar(20), +PRIMARY KEY (id) +); +INSERT INTO t1 VALUES +(1,'B'), (2,'B'), (3,'B'), (4,'B'), (5,'B'), (6,'B'), +(7,'B'), (8,'B'), (9,'B'), (10,'B'), (11,'B'), (12,'B'), +(13,'B'), (14,'B'), (15,'B'), (16,'B'), (17,'B'), (18,'B'), +(19,'B'), (20,'B'), (21,'B'), (22,'B'), (23,'B'), (24,'B'), +(25,'A'), (26,'A'), (27,'A'), (28,'A'), (29,'A'), (30,'A'), +(31,'A'), (32,'A'), (33,'A'), (34,'A'), (35,'A'), (36,'A'), +(37,'A'), (38,'A'), (39,'A'), (40,'A'), (41,'A'), (42,'A'), +(43,'A'), (44,'A'), (45,'A'), (46,'A'), (47,'A'), (48,'A'), +(49,'A'), (50,'A'), (51,'A'), (52,'A'), (53,'C'), (54,'C'), +(55,'C'), (56,'C'), (57,'C'), (58,'C'), (59,'C'), (60,'C'); +SELECT * FROM t1 WHERE status <> 'A' AND status <> 'B'; +id status +53 C +54 C +55 C +56 C +57 C +58 C +59 C +60 C +SELECT * FROM t1 WHERE status NOT IN ('A','B'); +id status +53 C +54 C +55 C +56 C +57 C +58 C +59 C +60 C +SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B'; +id status +53 C +54 C +55 C +56 C +57 C +58 C +59 C +60 C +SELECT * FROM t1 WHERE status < 'A' OR status > 'B'; +id status +53 C +54 C +55 C +56 C +57 C +58 C +59 C +60 C +DROP TABLE t1; +CREATE TABLE t1 (a int, b int, primary key(a,b)); +INSERT INTO t1 VALUES +(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3),(4,1),(4,2),(4,3); +CREATE VIEW v1 as SELECT a,b FROM t1 WHERE b=3; +SELECT a,b FROM t1 WHERE a < 2 and b=3; +a b +1 3 +SELECT a,b FROM v1 WHERE a < 2 and b=3; +a b +1 3 +DROP VIEW v1; +DROP TABLE t1; +CREATE TABLE t1 (name varchar(15) NOT NULL); +INSERT INTO t1 VALUES ('Betty'), ('Anna'); +SELECT * FROM t1; +name +Betty +Anna +DELETE FROM t1 WHERE name NOT LIKE 'A%a'; +SELECT * FROM t1; +name +Anna +DROP TABLE t1; +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (NULL), (1), (2), (3); +SELECT * FROM t1; +a +NULL +1 +2 +3 +DELETE FROM t1 WHERE NOT(a <=> 2); +SELECT * FROM t1; +a +2 +DROP TABLE t1; +create table t1 (a int, b int, primary key(a,b)); +create view v1 as select a, b from t1; +INSERT INTO `t1` VALUES +(0,0),(1,0),(2,0),(3,0),(4,0),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(11,2),(12,2) +,(13,2),(14,2),(15,3),(16,3),(17,3),(18,3),(19,3); +drop view v1; +drop table t1; +create table t3 (a int); +insert into t3 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t1 (a varchar(10), filler char(200)) charset=binary; +insert into t1 values ('a',''); +insert into t1 values ('a ',''); +insert into t1 values ('a ', ''); +insert into t1 select concat('a', 1000 + A.a + 10 * (B.a + 10 * C.a)), '' + from t3 A, t3 B, t3 C; +create table t2 (a varchar(10), filler char(200)); +insert into t2 select * from t1; +update t1 set a='b' where a<>'a'; +select a, hex(filler) from t1 where a not between 'b' and 'b'; +a hex(filler) +a 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +drop table t1,t2,t3; +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t2 (a int); +insert into t2 select 2*(A.a + 10*(B.a + 10*C.a)) from t1 A, t1 B, t1 C; +set @a="select * from t2 force index (a) where a NOT IN(0"; +select count(*) from (select @a:=concat(@a, ',', a) from t2 ) Z; +count(*) +1000 +set @a=concat(@a, ')'); +insert into t2 values (11),(13),(15); +drop table t1, t2; +CREATE TABLE t1 ( +id int NOT NULL DEFAULT '0', +b int NOT NULL DEFAULT '0', +c int NOT NULL DEFAULT '0'); +INSERT INTO t1(id) VALUES (1), (2), (3), (4), (5), (6), (7), (8); +INSERT INTO t1(b,c) VALUES (3,4), (3,4); +SELECT * FROM t1 WHERE b<=3 AND 3<=c; +id b c +0 3 4 +0 3 4 +SELECT * FROM t1 WHERE 3 BETWEEN b AND c; +id b c +0 3 4 +0 3 4 +SELECT * FROM t1 WHERE 0 < b OR 0 > c; +id b c +0 3 4 +0 3 4 +SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c; +id b c +0 3 4 +0 3 4 +DROP TABLE t1; + +"Comparison of DATE with DATETIME still not using indexes correctly" + +CREATE TABLE t1 ( +id int(11) NOT NULL auto_increment, +dateval date default NULL, +PRIMARY KEY (id) +) AUTO_INCREMENT=173; +INSERT INTO t1 VALUES +(1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'), +(5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'), +(9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11'); +drop table t1; +CREATE TABLE t1 ( +a varchar(32) +) DEFAULT CHARSET=latin1 COLLATE=latin1_bin; +INSERT INTO t1 VALUES +('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A'); +SELECT a FROM t1 WHERE a='b' OR a='B'; +a +B +B +DROP TABLE t1; +CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1)); +INSERT INTO t1 VALUES (127),(254),(0),(1),(255); +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256; +COUNT(*) +5 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0; +COUNT(*) +5 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255; +COUNT(*) +4 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1; +COUNT(*) +0 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1; +COUNT(*) +5 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +DROP TABLE t1; +CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1)); +INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127); +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128; +COUNT(*) +5 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0; +COUNT(*) +5 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127; +COUNT(*) +4 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129; +COUNT(*) +5 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0; +COUNT(*) +5 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128; +COUNT(*) +4 +Warnings: +Warning 1681 'SQL_NO_CACHE' is deprecated and will be removed in a future release. +DROP TABLE t1; +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t2 (a int, b int, filler char(100)); +insert into t2 select A.a + 10 * (B.a + 10 * C.a), 10, 'filler' from t1 A, +t1 B, t1 C where A.a < 5; +insert into t2 select 1000, b, 'filler' from t2; +drop table t1, t2; +CREATE TABLE t1( a INT, b INT); +CREATE TABLE t2( a INT, b INT ); +CREATE TABLE t3( a INT, b INT ); +INSERT INTO t1( a, b ) +VALUES (0, 1), (1, 2), (1, 4), (2, 3), (5, 0), (9, 7); +INSERT INTO t2( a, b ) +VALUES ( 1, 1), ( 2, 1), ( 3, 1), ( 4, 1), ( 5, 1), +( 6, 1), ( 7, 1), ( 8, 1), ( 9, 1), (10, 1), +(11, 1), (12, 1), (13, 1), (14, 1), (15, 1), +(16, 1), (17, 1), (18, 1), (19, 1), (20, 1); +INSERT INTO t2 SELECT a, 2 FROM t2 WHERE b = 1; +INSERT INTO t2 SELECT a, 3 FROM t2 WHERE b = 1; +INSERT INTO t2 SELECT -1, -1 FROM t2; +INSERT INTO t2 SELECT -1, -1 FROM t2; +INSERT INTO t2 SELECT -1, -1 FROM t2; +INSERT INTO t3 +VALUES (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), +(6, 0), (7, 0), (8, 0), (9, 0), (10, 0); +INSERT INTO t3 SELECT * FROM t3 WHERE a = 10; +INSERT INTO t3 SELECT * FROM t3 WHERE a = 10; +SELECT * FROM t1 WHERE +3 <= a AND a < 5 OR +5 < a AND b = 3 OR +3 <= a; +a b +5 0 +9 7 +SELECT * FROM t2 WHERE +5 <= a AND a < 10 AND b = 1 OR +15 <= a AND a < 20 AND b = 3 +OR +1 <= a AND b = 1; +a b +1 1 +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 +8 1 +9 1 +10 1 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 1 +15 3 +16 3 +17 3 +18 3 +19 3 +SELECT * FROM t2 WHERE +5 <= a AND a < 10 AND b = 2 OR +15 <= a AND a < 20 AND b = 3 +OR +1 <= a AND b = 1; +a b +1 1 +2 1 +3 1 +4 1 +5 1 +6 1 +7 1 +8 1 +9 1 +10 1 +11 1 +12 1 +13 1 +14 1 +15 1 +16 1 +17 1 +18 1 +19 1 +20 1 +5 2 +6 2 +7 2 +8 2 +9 2 +15 3 +16 3 +17 3 +18 3 +19 3 +SELECT * FROM t3 WHERE +5 <= a AND a < 10 AND b = 3 OR +a < 5 OR +a < 10; +a b +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +7 0 +8 0 +9 0 +DROP TABLE t1, t2, t3; +# +# Endless 100% CPU loop with STRAIGHT_JOIN +# +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (1), (NULL); +SELECT * FROM t1 WHERE a <> NULL and (a <> NULL or a <= NULL); +a +DROP TABLE t1; +# +# regression of range optimizer and date comparison in 5.1.39! +# +CREATE TABLE t1 ( a DATE ); +CREATE TABLE t2 ( a DATETIME); +# Make optimizer choose range scan +INSERT INTO t1 VALUES ('2009-09-22'), ('2009-09-22'), ('2009-09-22'); +INSERT INTO t1 VALUES ('2009-09-23'), ('2009-09-23'), ('2009-09-23'); +INSERT INTO t2 VALUES ('2009-09-22 12:00:00'), ('2009-09-22 12:00:00'), +('2009-09-22 12:00:00'); +INSERT INTO t2 VALUES ('2009-09-23 12:00:00'), ('2009-09-23 12:00:00'), +('2009-09-23 12:00:00'); +# DATE vs DATE +SELECT * FROM t1 WHERE a >= '2009/09/23'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '20090923'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '2009-9-23'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '2009.09.23'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '2009:09:23'; +a +2009-09-23 +2009-09-23 +2009-09-23 +# DATE vs DATETIME +SELECT * FROM t2 WHERE a >= '2009/09/23'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '20090923'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '2009-9-23'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '2009.09.23'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '2009:09:23'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +# DATETIME vs DATETIME +SELECT * FROM t2 WHERE a >= '2009/09/23 12:00:00'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '20090923120000'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '2009-9-23 12:00:00'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '2009.09.23 12:00:00'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +SELECT * FROM t2 WHERE a >= '2009:09:23 12:00:00'; +a +2009-09-23 12:00:00 +2009-09-23 12:00:00 +2009-09-23 12:00:00 +# DATETIME vs DATE +SELECT * FROM t1 WHERE a >= '2009/09/23 00:00:00'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '20090923000000'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '2009-9-23 00:00:00'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '2009.09.23 00:00:00'; +a +2009-09-23 +2009-09-23 +2009-09-23 +SELECT * FROM t1 WHERE a >= '2009:09:23 00:00:00'; +a +2009-09-23 +2009-09-23 +2009-09-23 +# Test of the new get_date_from_str implementation +# Behavior differs slightly between the trunk and mysql-pe. +# The former may give errors for the truncated values, while the latter +# gives warnings. The purpose of this test is not to interfere, and only +# preserve existing behavior. +SELECT str_to_date('2007-10-00', '%Y-%m-%d') >= '' AND +str_to_date('2007-10-00', '%Y-%m-%d') <= '2007/10/20'; +str_to_date('2007-10-00', '%Y-%m-%d') >= '' AND +str_to_date('2007-10-00', '%Y-%m-%d') <= '2007/10/20' +1 +Warnings: +Warning 1292 Truncated incorrect date value: '' +SELECT str_to_date('2007-20-00', '%Y-%m-%d') >= '2007/10/20' AND +str_to_date('2007-20-00', '%Y-%m-%d') <= ''; +str_to_date('2007-20-00', '%Y-%m-%d') >= '2007/10/20' AND +str_to_date('2007-20-00', '%Y-%m-%d') <= '' +NULL +Warnings: +Warning 1292 Truncated incorrect date value: '' +Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date +Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date +SELECT str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20'; +str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20' +1 +Warnings: +Warning 1292 Truncated incorrect datetime value: '' +SELECT str_to_date('2007-20-00', '%Y-%m-%d') BETWEEN '2007/10/20' AND ''; +str_to_date('2007-20-00', '%Y-%m-%d') BETWEEN '2007/10/20' AND '' +NULL +Warnings: +Warning 1411 Incorrect datetime value: '2007-20-00' for function str_to_date +SELECT str_to_date('', '%Y-%m-%d'); +str_to_date('', '%Y-%m-%d') +0000-00-00 +DROP TABLE t1, t2; +# +# valgrind errors with query using 'Range checked for each +# record' +# +CREATE TABLE t1 ( +a INT, +b CHAR(2), +c INT, +d INT +); +INSERT INTO t1 VALUES ( NULL, 'a', 1, 2 ), ( NULL, 'a', 1, 2 ), +( 1, 'a', 1, 2 ), ( 1, 'a', 1, 2 ); +CREATE TABLE t2 ( +a INT, +c INT, +e INT +); +INSERT INTO t2 VALUES ( 1, 1, NULL ), ( 1, 1, NULL ); +# Should not give Valgrind warnings +SELECT 1 +FROM t1, t2 +WHERE t1.d <> '1' AND t1.b > '1' +AND t1.a = t2.a AND t1.c = t2.c; +1 +1 +1 +1 +1 +DROP TABLE t1, t2; +# +# sql-bench's insert test fails due to wrong result +# +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a)); +INSERT INTO t1 VALUES (0,0), (1,1); +DROP TABLE t1; +# +# 'NOT BETWEEN' evaluation is incorrect +# +CREATE TABLE t1 (c_key INT, c_notkey INT); +INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3); +SELECT * FROM t1 WHERE 2 NOT BETWEEN c_notkey AND c_key; +c_key c_notkey +1 1 +3 3 +DROP TABLE t1; +# +# 'BETWEEN' evaluation is incorrect +# +CREATE TABLE t1(pk INT PRIMARY KEY, i4 INT); +INSERT INTO t1 VALUES (1,10), (2,20), (3,30); +SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 10; +pk i4 +1 10 +SELECT * FROM t1 WHERE 10 BETWEEN i4 AND i4; +pk i4 +1 10 +SELECT * FROM t1 WHERE 10 BETWEEN 10 AND i4; +pk i4 +1 10 +2 20 +3 30 +SELECT * FROM t1 WHERE 10 BETWEEN i4 AND 10; +pk i4 +1 10 +SELECT * FROM t1 WHERE 10 BETWEEN 10 AND 10; +pk i4 +1 10 +2 20 +3 30 +SELECT * FROM t1 WHERE 10 BETWEEN 11 AND 11; +pk i4 +SELECT * FROM t1 WHERE 10 BETWEEN 100 AND 0; +pk i4 +SELECT * FROM t1 WHERE i4 BETWEEN 100 AND 0; +pk i4 +SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 99999999999999999; +pk i4 +1 10 +2 20 +3 30 +SELECT * FROM t1 WHERE i4 BETWEEN 999999999999999 AND 30; +pk i4 +SELECT * FROM t1 WHERE i4 BETWEEN 10 AND '20'; +pk i4 +1 10 +2 20 +SELECT * FROM t1, t1 as t2 WHERE t2.pk BETWEEN t1.i4 AND t1.i4; +pk i4 pk i4 +SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk; +pk i4 pk i4 +DROP TABLE t1; +# +# SELECT RESULTS VARY WITH VERSION AND +# WITH/WITHOUT INDEX RANGE SCAN +# +create table t1 (id int unsigned not null auto_increment primary key); +insert into t1 values (null); +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +create table t2 ( +id int unsigned not null auto_increment, +val decimal(5,3) not null, +primary key (id,val)); +insert into t2 select null,id*0.0009 from t1; +drop database range_test; diff --git a/mysql-test/suite/tianmu/r/ssb_small.result b/mysql-test/suite/tianmu/r/ssb_small.result new file mode 100644 index 000000000..c010f8fb3 --- /dev/null +++ b/mysql-test/suite/tianmu/r/ssb_small.result @@ -0,0 +1,84 @@ +DROP DATABASE IF EXISTS ssb_small_test; +CREATE DATABASE ssb_small_test; +USE ssb_small_test; +create table part ( +p_partkey int, +p_name varchar (55), +p_mfgr char (25), +p_brand char (10), +p_type varchar (25), +p_size int, +p_container char (10), +p_retailprice decimal(12,2), +p_comment varchar (23) +); +create table lineitem ( +l_orderkey int, +l_partkey int, +l_suppkey int, +l_linenumber bigint, +l_quantity decimal(12,2), +l_extendedprice decimal(12,2), +l_discount decimal(12,2), +l_tax decimal(12,2), +l_returnflag char (1), +l_linestatus char (1), +l_shipdate date, +l_commitdate date, +l_receiptdate date, +l_shipinstruct char (25), +l_shipmode char (10), +l_comment varchar (44) +); +INSERT INTO part VALUES +(1, 'goldenrod lavender spring chocolate lace', 'Manufacturer#1', 'Brand#13', 'PROMO BURNISHED COPPER', 7, 'JUMBO PKG', 901.00, 'ly. slyly ironi'), +(2, 'blush thistle blue yellow saddle', 'Manufacturer#1', 'Brand#13', 'LARGE BRUSHED BRASS', 1, 'LG CASE', 902.00, 'lar accounts amo'), +(3, 'spring green yellow purple cornsilk', 'Manufacturer#4', 'Brand#42', 'STANDARD POLISHED BRASS', 21, 'WRAP CASE', 903.00, 'egular deposits hag'), +(4, 'cornflower chocolate smoke green pink', 'Manufacturer#3', 'Brand#34', 'SMALL PLATED BRASS', 14, 'MED DRUM', 904.00, 'p furiously r'), +(5, 'forest brown coral puff cream', 'Manufacturer#3', 'Brand#32', 'STANDARD POLISHED TIN', 15, 'SM PKG', 905.00, 'wake carefully'); +INSERT INTO lineitem VALUES +(1, 156, 4, 1, 17, 17954.55, 0.04, 0.02, 'N', 'O', '1996-03-13', '1996-02-12', '1996-03-22', 'DELIVER IN PERSON', 'TRUCK', 'egular courts above the'), +(1, 68, 9, 2, 36, 34850.16, 0.09, 0.06, 'N', 'O', '1996-04-12', '1996-02-28', '1996-04-20', 'TAKE BACK RETURN', 'MAIL', 'ly final dependencies: slyly bold'), +(1, 64, 5, 3, 8, 7712.48, 0.10, 0.02, 'N', 'O', '1996-01-29', '1996-03-05', '1996-01-31', 'TAKE BACK RETURN', 'REG AIR', 'riously. regular, express dep'), +(1, 3, 6, 4, 28, 25284.00, 0.09, 0.06, 'N', 'O', '1996-04-21', '1996-03-30', '1996-05-16', 'NONE', 'AIR', 'lites. fluffily even de'), +(1, 25, 8, 5, 24, 22200.48, 0.10, 0.04, 'N', 'O', '1996-03-30', '1996-03-14', '1996-04-01', 'NONE', 'FOB', 'pending foxes. slyly re'), +(1, 16, 3, 6, 32, 29312.32, 0.07, 0.02, 'N', 'O', '1996-01-30', '1996-02-07', '1996-02-03', 'DELIVER IN PERSON', 'MAIL', 'arefully slyly ex'), +(2, 107, 2, 1, 38, 38269.80, 0.00, 0.05, 'N', 'O', '1997-01-28', '1997-01-14', '1997-02-02', 'TAKE BACK RETURN', 'RAIL', 'ven requests. deposits breach a'); +select +sum(l_extendedprice* (1 - l_discount)) as revenue +from +lineitem, +part +where +( +p_partkey = l_partkey +and p_brand = 'Brand#23' + and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') +and l_quantity >= 2 and l_quantity <= 2 + 10 +and p_size between 1 and 5 +and l_shipmode in ('AIR', 'AIR REG') +and l_shipinstruct = 'DELIVER IN PERSON' + ) +or +( +p_partkey = l_partkey +and p_brand = 'Brand#24' + and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') +and l_quantity >= 20 and l_quantity <= 20 + 10 +and p_size between 1 and 10 +and l_shipmode in ('AIR', 'AIR REG') +and l_shipinstruct = 'DELIVER IN PERSON' + ) +or +( +p_partkey = l_partkey +and p_brand = 'Brand#44' + and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') +and l_quantity >= 26 and l_quantity <= 26 + 10 +and p_size between 1 and 15 +and l_shipmode in ('AIR', 'AIR REG') +and l_shipinstruct = 'DELIVER IN PERSON' + ); +revenue +NULL +DROP DATABASE ssb_small_test; diff --git a/mysql-test/suite/tianmu/r/std_test.result b/mysql-test/suite/tianmu/r/std_test.result new file mode 100644 index 000000000..c018c65e1 --- /dev/null +++ b/mysql-test/suite/tianmu/r/std_test.result @@ -0,0 +1,193 @@ +# +# std floor VAR_SAMP func test +# +DROP DATABASE IF EXISTS std_test; +CREATE DATABASE std_test; +USE std_test; +create table t1 ( +col_signed tinyint, +col_unsigned tinyint unsigned +); +LOAD DATA LOCAL infile 'MYSQL_TEST_DIR/suite/tianmu/std_data/tinyint_range.tbl' INTO TABLE t1 FIELDS TERMINATED BY '|'; +ALTER TABLE t1 ADD COLUMN col_small_signed SMALLINT; +ALTER TABLE t1 ADD COLUMN col_small_unsigned SMALLINT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_med_signed MEDIUMINT; +ALTER TABLE t1 ADD COLUMN col_med_unsigned MEDIUMINT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_int_signed INT; +ALTER TABLE t1 ADD COLUMN col_int_unsigned INT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_big_signed BIGINT; +ALTER TABLE t1 ADD COLUMN col_big_unsigned BIGINT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_dec_signed DECIMAL(17,0); +ALTER TABLE t1 ADD COLUMN col_dec_unsigned DECIMAL(17,0) UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_float_signed FLOAT; +ALTER TABLE t1 ADD COLUMN col_float_unsigned FLOAT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_double_signed DOUBLE; +ALTER TABLE t1 ADD COLUMN col_double_unsigned DOUBLE UNSIGNED; +UPDATE t1 SET col_small_signed=col_signed + sign(col_signed) * 32000; +UPDATE t1 SET col_small_unsigned=col_unsigned + 65000; +UPDATE t1 SET col_med_signed=col_signed + sign(col_signed) * 8388000; +UPDATE t1 SET col_med_unsigned=col_unsigned + 16776000; +UPDATE t1 SET col_int_signed=col_signed + sign(col_signed) * 2147483000; +UPDATE t1 SET col_int_unsigned=col_unsigned + 4294000000; +UPDATE t1 SET col_big_signed=col_signed + sign(col_signed) * 9223372036854775000; +UPDATE t1 SET col_float_signed=col_signed + 0.637 + sign(col_signed) * 8388000; +UPDATE t1 SET col_float_unsigned=col_unsigned + 0.637 + 16776000; +UPDATE t1 SET col_double_signed=col_signed + 0.637 + sign(col_signed) * 2147483000; +UPDATE t1 SET col_double_unsigned=col_unsigned + 0.637 + 4294000000; +SELECT 'q1', floor(STD(col_signed)) FROM t1; +q1 floor(STD(col_signed)) +q1 73 +SELECT 'q2', floor(STD(col_unsigned)) FROM t1; +q2 floor(STD(col_unsigned)) +q2 73 +SELECT 'q3', floor(STD(col_small_signed)) FROM t1; +q3 floor(STD(col_small_signed)) +q3 32000 +SELECT 'q4', floor(STD(col_small_unsigned)) FROM t1; +q4 floor(STD(col_small_unsigned)) +q4 73 +SELECT 'q5', floor(STD(col_med_signed)) FROM t1; +q5 floor(STD(col_med_signed)) +q5 8371470 +SELECT 'q6', floor(STD(col_med_unsigned)) FROM t1; +q6 floor(STD(col_med_unsigned)) +q6 73 +SELECT 'q7', floor(STD(col_int_signed)) FROM t1; +q7 floor(STD(col_int_signed)) +q7 2143234889 +SELECT 'q8', floor(STD(col_int_unsigned)) FROM t1; +q8 floor(STD(col_int_unsigned)) +q8 73 +SELECT 'q9', floor(STD(col_big_signed)) FROM t1; +q9 floor(STD(col_big_signed)) +q9 9205126264421171000 +SELECT 'q13', floor(STD(col_float_signed)) FROM t1; +q13 floor(STD(col_float_signed)) +q13 8371470 +SELECT 'q14', floor(STD(col_float_unsigned)) FROM t1; +q14 floor(STD(col_float_unsigned)) +q14 73 +SELECT 'q15', floor(STD(col_double_signed)) FROM t1; +q15 floor(STD(col_double_signed)) +q15 2143234889 +SELECT 'q16', floor(STD(col_double_unsigned)) FROM t1; +q16 floor(STD(col_double_unsigned)) +q16 73 +SELECT 'q17', floor(STDDEV_SAMP(col_signed)) FROM t1; +q17 floor(STDDEV_SAMP(col_signed)) +q17 73 +SELECT 'q18', floor(STDDEV_SAMP(col_unsigned)) FROM t1; +q18 floor(STDDEV_SAMP(col_unsigned)) +q18 73 +SELECT 'q19', floor(STDDEV_SAMP(col_small_signed)) FROM t1; +q19 floor(STDDEV_SAMP(col_small_signed)) +q19 32063 +SELECT 'q20', floor(STDDEV_SAMP(col_small_unsigned)) FROM t1; +q20 floor(STDDEV_SAMP(col_small_unsigned)) +q20 73 +SELECT 'q21', floor(STDDEV_SAMP(col_med_signed)) FROM t1; +q21 floor(STDDEV_SAMP(col_med_signed)) +q21 8387998 +SELECT 'q22', floor(STDDEV_SAMP(col_med_unsigned)) FROM t1; +q22 floor(STDDEV_SAMP(col_med_unsigned)) +q22 73 +SELECT 'q23', floor(STDDEV_SAMP(col_int_signed)) FROM t1; +q23 floor(STDDEV_SAMP(col_int_signed)) +q23 2147466354 +SELECT 'q24', floor(STDDEV_SAMP(col_int_unsigned)) FROM t1; +q24 floor(STDDEV_SAMP(col_int_unsigned)) +q24 73 +SELECT 'q25', floor(STDDEV_SAMP(col_big_signed)) FROM t1; +q25 floor(STDDEV_SAMP(col_big_signed)) +q25 9223300272764650000 +SELECT 'q29', floor(STDDEV_SAMP(col_float_signed)) FROM t1; +q29 floor(STDDEV_SAMP(col_float_signed)) +q29 8387998 +SELECT 'q30', floor(STDDEV_SAMP(col_float_unsigned)) FROM t1; +q30 floor(STDDEV_SAMP(col_float_unsigned)) +q30 73 +SELECT 'q31', floor(STDDEV_SAMP(col_double_signed)) FROM t1; +q31 floor(STDDEV_SAMP(col_double_signed)) +q31 2147466354 +SELECT 'q32', floor(STDDEV_SAMP(col_double_unsigned)) FROM t1; +q32 floor(STDDEV_SAMP(col_double_unsigned)) +q32 73 +SELECT 'q33', floor(VAR_POP(col_signed)) FROM t1; +q33 floor(VAR_POP(col_signed)) +q33 5376 +SELECT 'q34', floor(VAR_POP(col_unsigned)) FROM t1; +q34 floor(VAR_POP(col_unsigned)) +q34 5376 +SELECT 'q35', floor(VAR_POP(col_small_signed)) FROM t1; +q35 floor(VAR_POP(col_small_signed)) +q35 1024021882 +SELECT 'q36', floor(VAR_POP(col_small_unsigned)) FROM t1; +q36 floor(VAR_POP(col_small_unsigned)) +q36 5376 +SELECT 'q37', floor(VAR_POP(col_med_signed)) FROM t1; +q37 floor(VAR_POP(col_med_signed)) +q37 70081516547007 +SELECT 'q38', floor(VAR_POP(col_med_unsigned)) FROM t1; +q38 floor(VAR_POP(col_med_unsigned)) +q38 5376 +SELECT 'q39', floor(VAR_POP(col_int_signed)) FROM t1; +q39 floor(VAR_POP(col_int_signed)) +q39 4593455793567980000 +SELECT 'q40', floor(VAR_POP(col_int_unsigned)) FROM t1; +q40 floor(VAR_POP(col_int_unsigned)) +q40 5376 +SELECT 'q41', floor(VAR_POP(col_big_signed)) FROM t1; +q41 floor(VAR_POP(col_big_signed)) +q41 84734349543936470000000000000000000000 +SELECT 'q45', floor(VAR_POP(col_float_signed)) FROM t1; +q45 floor(VAR_POP(col_float_signed)) +q45 70081516546971 +SELECT 'q46', floor(VAR_POP(col_float_unsigned)) FROM t1; +q46 floor(VAR_POP(col_float_unsigned)) +q46 5376 +SELECT 'q47', floor(VAR_POP(col_double_signed)) FROM t1; +q47 floor(VAR_POP(col_double_signed)) +q47 4593455793567980000 +SELECT 'q48', floor(VAR_POP(col_double_unsigned)) FROM t1; +q48 floor(VAR_POP(col_double_unsigned)) +q48 5376 +SELECT 'q49', floor(VAR_SAMP(col_signed)) FROM t1; +q49 floor(VAR_SAMP(col_signed)) +q49 5397 +SELECT 'q50', floor(VAR_SAMP(col_unsigned)) FROM t1; +q50 floor(VAR_SAMP(col_unsigned)) +q50 5397 +SELECT 'q51', floor(VAR_SAMP(col_small_signed)) FROM t1; +q51 floor(VAR_SAMP(col_small_signed)) +q51 1028069399 +SELECT 'q52', floor(VAR_SAMP(col_small_unsigned)) FROM t1; +q52 floor(VAR_SAMP(col_small_unsigned)) +q52 5397 +SELECT 'q53', floor(VAR_SAMP(col_med_signed)) FROM t1; +q53 floor(VAR_SAMP(col_med_signed)) +q53 70358518588695 +SELECT 'q54', floor(VAR_SAMP(col_med_unsigned)) FROM t1; +q54 floor(VAR_SAMP(col_med_unsigned)) +q54 5397 +SELECT 'q55', floor(VAR_SAMP(col_int_signed)) FROM t1; +q55 floor(VAR_SAMP(col_int_signed)) +q55 4611611745321213400 +SELECT 'q56', floor(VAR_SAMP(col_int_unsigned)) FROM t1; +q56 floor(VAR_SAMP(col_int_unsigned)) +q56 5397 +SELECT 'q57', floor(VAR_SAMP(col_big_signed)) FROM t1; +q57 floor(VAR_SAMP(col_big_signed)) +q57 85069267921580480000000000000000000000 +SELECT 'q61', floor(VAR_SAMP(col_float_signed)) FROM t1; +q61 floor(VAR_SAMP(col_float_signed)) +q61 70358518588659 +SELECT 'q62', floor(VAR_SAMP(col_float_unsigned)) FROM t1; +q62 floor(VAR_SAMP(col_float_unsigned)) +q62 5397 +SELECT 'q63', floor(VAR_SAMP(col_double_signed)) FROM t1; +q63 floor(VAR_SAMP(col_double_signed)) +q63 4611611745321213400 +SELECT 'q64', floor(VAR_SAMP(col_double_unsigned)) FROM t1; +q64 floor(VAR_SAMP(col_double_unsigned)) +q64 5397 +DROP DATABASE std_test; diff --git a/mysql-test/suite/tianmu/r/union_case.result b/mysql-test/suite/tianmu/r/union_case.result new file mode 100644 index 000000000..1526d2c5d --- /dev/null +++ b/mysql-test/suite/tianmu/r/union_case.result @@ -0,0 +1,55 @@ +# MCOL-641 Union Test Cases +# Once MCOL-5417 is supported, the errored out queries below should be fixed. +DROP DATABASE IF EXISTS union_case_test; +CREATE DATABASE union_case_test; +USE union_case_test; +SET SQL_MODE='ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +Warnings: +Warning 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. +CREATE TABLE cs1 (d1 DECIMAL(17), d2 DECIMAL(17,10), d3 DECIMAL(17,17)) ; +CREATE TABLE cs2 (d1 DECIMAL(17) UNSIGNED, d2 DECIMAL(17,10) UNSIGNED, d3 DECIMAL(17,17) UNSIGNED) ; +INSERT INTO cs1 VALUES (125, 1.25, 0.125); +INSERT INTO cs1 VALUES (-125, -1.25, -0.125); +INSERT INTO cs1 values (9999999999999998, 9999999.9999999998, 0.9999999999999998); +INSERT INTO cs1 values (99999999999999999, 9999999.9999999999, 0.99999999999999999); +INSERT INTO cs1 values (-9999999999999998, -9999999.9999999998, -0.9999999999999998); +INSERT INTO cs1 values (-99999999999999999, -9999999.9999999999, -0.99999999999999999); +CREATE TABLE cs3 (d1 int, d2 int, d3 int) ; +INSERT INTO cs3 VALUES (12, 16, 56); +INSERT INTO cs3 VALUES (7, 6, 45); +INSERT INTO cs3 VALUES (0, 0, 0); +SELECT d1, d1, d2 FROM cs3 UNION SELECT d2, d3, d3 FROM cs3; +d1 d1 d2 +12 12 16 +7 7 6 +0 0 0 +16 56 56 +6 45 45 +INSERT INTO cs2 VALUES (125, 1.25, 0.125); +INSERT INTO cs2 values (9999999999999998, 9999999.9999999998, 0.9999999999999998); +INSERT INTO cs2 values (99999999999999999, 9999999.9999999999, 0.99999999999999999); +DROP TABLE cs1, cs2; +CREATE TABLE cs1 (d1 DECIMAL(17, 0), d2 DECIMAL(17, 14), d3 DECIMAL(17, 14)) ; +CREATE TABLE cs2 (d1 DECIMAL(17, 0) UNSIGNED, d2 DECIMAL(17, 14) UNSIGNED, d3 DECIMAL(17, 14) UNSIGNED) ; +INSERT INTO cs1 VALUES (12345678901234567, 12.34567890123456, 0.1234567890123456); +Warnings: +Note 1265 Data truncated for column 'd3' at row 1 +INSERT INTO cs1 VALUES (-12345678901234567, -12.34567890123456, -0.1234567890123456); +Warnings: +Note 1265 Data truncated for column 'd3' at row 1 +INSERT INTO cs1 VALUES (99999999999999999, 99.999999999999999, 0.999999999999999); +Warnings: +Note 1265 Data truncated for column 'd2' at row 1 +Note 1265 Data truncated for column 'd3' at row 1 +INSERT INTO cs1 VALUES (-99999999999999999, -99.999999999999999, -0.999999999999999); +Warnings: +Note 1265 Data truncated for column 'd2' at row 1 +Note 1265 Data truncated for column 'd3' at row 1 +INSERT INTO cs2 VALUES (12345678901234567, 12.34567890123456, 0.1234567890123456); +Warnings: +Note 1265 Data truncated for column 'd3' at row 1 +INSERT INTO cs2 VALUES (99999999999999999, 99.999999999999999, 0.999999999999999); +Warnings: +Note 1265 Data truncated for column 'd2' at row 1 +Note 1265 Data truncated for column 'd3' at row 1 +DROP DATABASE union_case_test; diff --git a/mysql-test/suite/tianmu/r/unsigned_support_issue1267.result b/mysql-test/suite/tianmu/r/unsigned_support_issue1267.result index 9f7062c0e..cd921e885 100644 --- a/mysql-test/suite/tianmu/r/unsigned_support_issue1267.result +++ b/mysql-test/suite/tianmu/r/unsigned_support_issue1267.result @@ -425,7 +425,7 @@ ut us um ui 255 65535 16777215 4294967295 select * into outfile "MYSQL_TEST_DIR/suite/tianmu/tmp/unsigned_outfile-test.txt" from load_unsigned; truncate table load_unsigned; -LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/tmp/unsigned_outfile-test.txt' INTO TABLE load_unsigned FIELDS TERMINATED BY ';'; +LOAD DATA LOCAL INFILE 'MYSQL_TEST_DIR/suite/tianmu/tmp/unsigned_outfile-test.txt' INTO TABLE load_unsigned; select * from load_unsigned; ut us um ui 0 0 0 0 diff --git a/mysql-test/suite/tianmu/r/various_join.result b/mysql-test/suite/tianmu/r/various_join.result index a254d9fce..170556d0a 100644 --- a/mysql-test/suite/tianmu/r/various_join.result +++ b/mysql-test/suite/tianmu/r/various_join.result @@ -22,27 +22,27 @@ insert into t6 values (1, 2), (3, 4); insert into t7 values (1, 3); insert into t8 values (1, 3); insert into t9 values (1, 2); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) order by t3.a; a b a b a b 1 3 1 2 1 2 +NULL NULL NULL NULL 2 3 NULL NULL NULL NULL 3 4 NULL NULL NULL NULL 4 5 -NULL NULL NULL NULL 2 3 -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a) order by t4.a; a b a b a b a b -1 3 1 2 1 2 1 3 NULL NULL NULL NULL 3 4 NULL NULL NULL NULL NULL NULL 4 5 NULL NULL NULL NULL NULL NULL 2 3 NULL NULL -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a = 1 or t3.a = 3); +1 3 1 2 1 2 1 3 +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a = 1 or t3.a = 3) order by t3.a; a b a b a b 1 3 1 2 1 2 NULL NULL NULL NULL 3 4 -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a > 1); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a > 1) order by t3.a; a b a b a b +NULL NULL NULL NULL 2 3 NULL NULL NULL NULL 3 4 NULL NULL NULL NULL 4 5 -NULL NULL NULL NULL 2 3 select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t2.a = t3.a) left join t4 on (t3.a = t4.a and t1.b = t4.b) order by t3.a; a b a b a b a b 1 3 1 2 1 2 1 3 @@ -55,24 +55,24 @@ a b a b a b a b 2 3 2 4 2 3 NULL NULL NULL NULL NULL NULL 3 4 NULL NULL NULL NULL NULL NULL 4 5 NULL NULL -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t1.a); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t1.a) order by t3.a; a b a b a b -NULL NULL NULL NULL 3 4 -NULL NULL NULL NULL 4 5 NULL NULL NULL NULL 1 2 NULL NULL NULL NULL 2 3 -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t2.a and t3.a > t1.a); -a b a b a b NULL NULL NULL NULL 3 4 NULL NULL NULL NULL 4 5 +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t2.a and t3.a > t1.a) order by t3.a; +a b a b a b NULL NULL NULL NULL 1 2 NULL NULL NULL NULL 2 3 -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.b > t2.a and t3.a < t1.b); +NULL NULL NULL NULL 3 4 +NULL NULL NULL NULL 4 5 +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.b > t2.a and t3.a < t1.b) order by t3.a; a b a b a b 1 3 1 2 1 2 +NULL NULL NULL NULL 2 3 NULL NULL NULL NULL 3 4 NULL NULL NULL NULL 4 5 -NULL NULL NULL NULL 2 3 select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) order by t3.a; a b a b a b a b 1 3 1 2 1 2 1 3 @@ -82,26 +82,26 @@ NULL NULL NULL NULL 4 5 NULL NULL select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) right join t4 on (t3.a = t4.a and t2.a = t4.a) order by t3.a; a b a b a b a b 1 3 1 2 1 2 1 3 -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) left join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) left join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a) order by t3.a; a b a b a b a b 1 3 1 2 1 2 1 3 2 3 2 4 2 3 NULL NULL NULL NULL NULL NULL 3 4 NULL NULL NULL NULL NULL NULL 4 5 NULL NULL -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) right join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) right join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a) order by t4.a; a b a b a b a b 1 3 1 2 1 2 1 3 -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) left join t5 on (t4.a = t5.a and t3.b = t5.b); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) left join t5 on (t4.a = t5.a and t3.b = t5.b) order by t5.a; a b a b a b a b a b -1 3 1 2 1 2 1 3 1 2 NULL NULL NULL NULL 3 4 NULL NULL NULL NULL NULL NULL NULL NULL 4 5 NULL NULL NULL NULL NULL NULL NULL NULL 2 3 NULL NULL NULL NULL -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b); +1 3 1 2 1 2 1 3 1 2 +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) order by t5.a; a b a b a b a b a b 1 3 1 2 1 2 1 3 1 2 NULL NULL NULL NULL NULL NULL NULL NULL 3 4 -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) right join t6 on (t5.a = t6.a and t4.a = t6.a); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) right join t6 on (t5.a = t6.a and t4.a = t6.a) order by t6.a; a b a b a b a b a b a b 1 3 1 2 1 2 1 3 1 2 1 2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 3 4 diff --git a/mysql-test/suite/tianmu/std_data/issue1865.dat b/mysql-test/suite/tianmu/std_data/issue1865.dat new file mode 100644 index 000000000..a70a059c2 --- /dev/null +++ b/mysql-test/suite/tianmu/std_data/issue1865.dat @@ -0,0 +1,2 @@ +\N 10 +\N 15 diff --git a/mysql-test/suite/tianmu/std_data/tinyint_range.tbl b/mysql-test/suite/tianmu/std_data/tinyint_range.tbl new file mode 100644 index 000000000..68653bee0 --- /dev/null +++ b/mysql-test/suite/tianmu/std_data/tinyint_range.tbl @@ -0,0 +1,254 @@ +-126|0 +-125|1 +-124|2 +-123|3 +-122|4 +-121|5 +-120|6 +-119|7 +-118|8 +-117|9 +-116|10 +-115|11 +-114|12 +-113|13 +-112|14 +-111|15 +-110|16 +-109|17 +-108|18 +-107|19 +-106|20 +-105|21 +-104|22 +-103|23 +-102|24 +-101|25 +-100|26 +-99|27 +-98|28 +-97|29 +-96|30 +-95|31 +-94|32 +-93|33 +-92|34 +-91|35 +-90|36 +-89|37 +-88|38 +-87|39 +-86|40 +-85|41 +-84|42 +-83|43 +-82|44 +-81|45 +-80|46 +-79|47 +-78|48 +-77|49 +-76|50 +-75|51 +-74|52 +-73|53 +-72|54 +-71|55 +-70|56 +-69|57 +-68|58 +-67|59 +-66|60 +-65|61 +-64|62 +-63|63 +-62|64 +-61|65 +-60|66 +-59|67 +-58|68 +-57|69 +-56|70 +-55|71 +-54|72 +-53|73 +-52|74 +-51|75 +-50|76 +-49|77 +-48|78 +-47|79 +-46|80 +-45|81 +-44|82 +-43|83 +-42|84 +-41|85 +-40|86 +-39|87 +-38|88 +-37|89 +-36|90 +-35|91 +-34|92 +-33|93 +-32|94 +-31|95 +-30|96 +-29|97 +-28|98 +-27|99 +-26|100 +-25|101 +-24|102 +-23|103 +-22|104 +-21|105 +-20|106 +-19|107 +-18|108 +-17|109 +-16|110 +-15|111 +-14|112 +-13|113 +-12|114 +-11|115 +-10|116 +-9|117 +-8|118 +-7|119 +-6|120 +-5|121 +-4|122 +-3|123 +-2|124 +-1|125 +0|126 +1|127 +2|128 +3|129 +4|130 +5|131 +6|132 +7|133 +8|134 +9|135 +10|136 +11|137 +12|138 +13|139 +14|140 +15|141 +16|142 +17|143 +18|144 +19|145 +20|146 +21|147 +22|148 +23|149 +24|150 +25|151 +26|152 +27|153 +28|154 +29|155 +30|156 +31|157 +32|158 +33|159 +34|160 +35|161 +36|162 +37|163 +38|164 +39|165 +40|166 +41|167 +42|168 +43|169 +44|170 +45|171 +46|172 +47|173 +48|174 +49|175 +50|176 +51|177 +52|178 +53|179 +54|180 +55|181 +56|182 +57|183 +58|184 +59|185 +60|186 +61|187 +62|188 +63|189 +64|190 +65|191 +66|192 +67|193 +68|194 +69|195 +70|196 +71|197 +72|198 +73|199 +74|200 +75|201 +76|202 +77|203 +78|204 +79|205 +80|206 +81|207 +82|208 +83|209 +84|210 +85|211 +86|212 +87|213 +88|214 +89|215 +90|216 +91|217 +92|218 +93|219 +94|220 +95|221 +96|222 +97|223 +98|224 +99|225 +100|226 +101|227 +102|228 +103|229 +104|230 +105|231 +106|232 +107|233 +108|234 +109|235 +110|236 +111|237 +112|238 +113|239 +114|240 +115|241 +116|242 +117|243 +118|244 +119|245 +120|246 +121|247 +122|248 +123|249 +124|250 +125|251 +126|252 +127|253 diff --git a/mysql-test/suite/tianmu/t/alter_table1.test b/mysql-test/suite/tianmu/t/alter_table1.test index d5bea703f..17bfd8f29 100644 --- a/mysql-test/suite/tianmu/t/alter_table1.test +++ b/mysql-test/suite/tianmu/t/alter_table1.test @@ -18,7 +18,7 @@ CREATE TABLE st1 name VARCHAR(25), deptId INT(11), salary FLOAT -); +) engine=tianmu; alter table st1 add column test varchar(4); alter table st1 add column test1 varchar(4) after test; @@ -48,7 +48,7 @@ CREATE TABLE st2 name VARCHAR(25), deptId INT(11), salary FLOAT -); +) engine=tianmu; insert into st2 values(3,'haha1',45,4.5); insert into st2 values(1,'haha2',12,1.2); @@ -72,7 +72,7 @@ name VARCHAR(25), deptId INT(11), salary FLOAT, PRIMARY KEY(id) -); +) engine=tianmu; ALTER TABLE st3 RENAME to st4 ; ALTER TABLE st4 RENAME as st3 ; @@ -95,7 +95,7 @@ name VARCHAR(25), deptId INT(11), salary FLOAT, PRIMARY KEY(id) -); +) engine=tianmu; alter table st5 modify name varchar(20); alter table st5 modify column name varchar(24); @@ -112,7 +112,7 @@ name VARCHAR(25), deptId INT(11), salary FLOAT, PRIMARY KEY(id) -); +) engine=tianmu; alter table st6 rename to st7,add name1 varchar(10); desc st7; @@ -130,4 +130,9 @@ alter table st8 add name3 varchar(10),modify name varchar(20); desc st8; # clean up +DROP TABLE st8; +DROP TABLE st5; +DROP TABLE st4; +DROP TABLE st2; +DROP TABLE st1; drop database alter_table1_test; diff --git a/mysql-test/suite/tianmu/t/auto_increment.testbak b/mysql-test/suite/tianmu/t/auto_increment.test similarity index 100% rename from mysql-test/suite/tianmu/t/auto_increment.testbak rename to mysql-test/suite/tianmu/t/auto_increment.test diff --git a/mysql-test/suite/tianmu/t/bigint_unsigned.test b/mysql-test/suite/tianmu/t/bigint_unsigned.test new file mode 100644 index 000000000..3b8581545 --- /dev/null +++ b/mysql-test/suite/tianmu/t/bigint_unsigned.test @@ -0,0 +1,229 @@ +--source include/have_tianmu.inc + +--echo # +--echo # Test bigint unsigned +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS bigint_unsigned_test; +--enable_warnings + +CREATE DATABASE bigint_unsigned_test; +USE bigint_unsigned_test; + +# Test of reading of bigint values + +select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296; +select 9223372036854775807,-009223372036854775808; +select +9999999999999999999,-9999999999999999999; +select cast(9223372036854775808 as unsigned)+1; +select 9223372036854775808+1; +select -(0-3),round(-(0-3)), round(9999999999999999999); +select 1,11,101,1001,10001,100001,1000001,10000001,100000001,1000000001,10000000001,100000000001,1000000000001,10000000000001,100000000000001,1000000000000001,10000000000000001,100000000000000001,1000000000000000001,10000000000000000001; +select -1,-11,-101,-1001,-10001,-100001,-1000001,-10000001,-100000001,-1000000001,-10000000001,-100000000001,-1000000000001,-10000000000001,-100000000000001,-1000000000000001,-10000000000000001,-100000000000000001,-1000000000000000001,-10000000000000000001; +select conv(1,10,16),conv((1<<2)-1,10,16),conv((1<<10)-2,10,16),conv((1<<16)-3,10,16),conv((1<<25)-4,10,16),conv((1<<31)-5,10,16),conv((1<<36)-6,10,16),conv((1<<47)-7,10,16),conv((1<<48)-8,10,16),conv((1<<55)-9,10,16),conv((1<<56)-10,10,16),conv((1<<63)-11,10,16); + +# bigint test range[0, 9223372036854775807] + +create table t1 (a bigint unsigned not null, primary key(a)); +insert into t1 values (9223372036854775807), (0xFFFFFFFFFFFFFF), (9223372036854775806), (9223372036854775805); +select * from t1 order by 1; +select * from t1 where a=9223372036854775807; +select * from t1 where a='9223372036854775807'; +delete from t1 where a=9223372036854775807; +select * from t1 order by 1; +drop table t1; + +create table t1 ( a int not null default 1, big bigint ); +insert into t1 (big) values (-1),(12345678901234567),(9223372036854775807),(9223372036854775805); +select * from t1; +select min(big),max(big),max(big)-1 from t1; +select min(big),max(big),max(big)-1 from t1 group by a; +--error 1264 +alter table t1 modify big bigint unsigned not null; +select min(big),max(big),max(big)-1 from t1; +select min(big),max(big),max(big)-1 from t1 group by a; +insert into t1 (big) values (9223372036854775807); +select * from t1; +select min(big),max(big),max(big)-1 from t1; +select min(big),max(big),max(big)-1 from t1 group by a; +select min(big),max(big),max(big)-1 from t1; +select min(big),max(big),max(big)-1 from t1 group by a; +alter table t1 modify big bigint not null; +select * from t1; +select min(big),max(big),max(big)-1 from t1; +select min(big),max(big),max(big)-1 from t1 group by a; +drop table t1; + +# Test problem with big values for auto_increment + +create table t1 (id bigint auto_increment primary key, a int) auto_increment=9999999999; +insert into t1 values (null,1); +select * from t1; +select * from t1 limit 9999999999; +drop table t1; + +# precisions for bigints + +CREATE TABLE t1 (quantity decimal(18,0)); +insert into t1 values (100000000000000); +insert into t1 values (10000000000000.0); +insert into t1 values ('10000000000000'); +select * from t1; +drop table t1; + +SELECT '0x8000000000000001'+0; + +# Test for join BIGINT UNSIGNED + +create table t1 ( + value64 bigint unsigned not null, + value32 integer not null, + primary key(value64, value32) +); + +create table t2 ( + value64 bigint unsigned not null, + value32 integer not null, + primary key(value64, value32) +); + +insert into t1 values(9223372036854775806, 1); +insert into t1 values(9223372036854775807, 2); +insert into t2 values(9223372036854775806, 3); +insert into t2 values(9223372036854775807, 4); + +select * from t1; +select * from t2; +select * from t1, t2 where t1.value64=9223372036854775806 and t2.value64=9223372036854775806; +select * from t1, t2 where t1.value64=9223372036854775806 and t2.value64=t1.value64; +select * from t1, t2 where t1.value64= 9223372036854775807 and t2.value64=9223372036854775807; +select * from t1, t2 where t1.value64= 9223372036854775807 and t2.value64=t1.value64; +drop table t1, t2; + +# Test bigint + +create table t1 (sint64 bigint not null); +insert into t1 values (-9223372036854775806); +select * from t1; +drop table t1; + +create table t1 (a char(100), b varchar(100), c text, d blob); +insert into t1 values( + 18446744073709551615,18446744073709551615, + 18446744073709551615, 18446744073709551615 +); +insert into t1 values (-1 | 0,-1 | 0,-1 | 0 ,-1 | 0); +select * from t1; +drop table t1; + +create table t1 (quantity decimal(2) unsigned); +insert into t1 values (50), (0), (1); +select * from t1; +drop table t1; + +#mod is signed with bigint + +select cast(9223372036854775807 as unsigned) mod 50 as result; +create table t1 (c1 bigint unsigned); +insert into t1 values (9223372036854775807); +select c1 mod 50 as result from t1; +drop table t1; + +#use bigint unsigned as input to cast + +select cast(19999999999999999999 as signed); +select cast(-19999999999999999999 as signed); + +select -9223372036854775808; +select -(9223372036854775808); +select -((9223372036854775808)); +select -(-(9223372036854775808)); +select --9223372036854775808, ---9223372036854775808, ----9223372036854775808; +select -(-9223372036854775808), -(-(-9223372036854775808)); + +CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY, + a BIGINT(20) UNSIGNED, + b VARCHAR(20)); +INSERT INTO t1 (a) VALUES + (0), + (CAST(0x7FFFFFFFFFFFFFF AS UNSIGNED)), + (CAST(0x800000000000000 AS UNSIGNED)), + (CAST(0xFFFFFFFFFFFFFFF AS UNSIGNED)); +UPDATE t1 SET b = a; +select * from t1; +DROP TABLE t1; + +# DECIMAL COMPARISON + +CREATE TABLE t_bigint(id BIGINT); +INSERT INTO t_bigint VALUES (1), (2); + +SELECT id, id >= 1.1 FROM t_bigint; +SELECT id, 1.1 <= id FROM t_bigint; + +SELECT id, id = 1.1 FROM t_bigint; +SELECT id, 1.1 = id FROM t_bigint; + +SELECT * from t_bigint WHERE id = 1.1; +SELECT * from t_bigint WHERE id = 1.1e0; +#bug1346 SELECT * from t_bigint WHERE id = '1.1'; +#bug1346 SELECT * from t_bigint WHERE id = '1.1e0'; +SELECT * from t_bigint WHERE id IN (1.1, 2.2); +SELECT * from t_bigint WHERE id IN (1.1e0, 2.2e0); +#bug1346 SELECT * from t_bigint WHERE id IN ('1.1', '2.2'); +#bug1346 SELECT * from t_bigint WHERE id IN ('1.1e0', '2.2e0'); +SELECT * from t_bigint WHERE id BETWEEN 1.1 AND 1.9; +SELECT * from t_bigint WHERE id BETWEEN 1.1e0 AND 1.9e0; +#bug1346 SELECT * from t_bigint WHERE id BETWEEN '1.1' AND '1.9'; +#bug1346 SELECT * from t_bigint WHERE id BETWEEN '1.1e0' AND '1.9e0'; +DROP TABLE t_bigint; + +CREATE TABLE t1 (a BIGINT); +INSERT INTO t1 VALUES (1); +SELECT * FROM t1 WHERE coalesce(a) BETWEEN 0 and 0.9; +SELECT * FROM t1 WHERE coalesce(a)=0.9; +SELECT * FROM t1 WHERE coalesce(a) in (0.8,0.9); +SELECT * FROM t1 WHERE a BETWEEN 0 AND 0.9; +SELECT * FROM t1 WHERE a=0.9; +SELECT * FROM t1 WHERE a IN (0.8,0.9); +DROP TABLE t1; + +# between...and againest bigint unsigned + +create table t (id bigint unsigned, b int); +insert into t values(7223372036854775807,1); +insert into t values(7223372036854775806,2); +insert into t values(9223372036854775805,3); +select count(*) from t +where id>=7223372036854775806 and id <=9223372036854775807; +select count(*) from t +where id between 7223372036854775806 and 9223372036854775807; +alter table t add primary key (id); +select count(*) from t +where id>=7223372036854775806 and id <=9223372036854775807; +select count(*) from t +where id between 7223372036854775806 and 9223372036854775807; +drop table t; + +SELECT (184467440737095 BETWEEN 0 AND 18446744073709551500); +SELECT 184467440737095 >= 0; +SELECT 0 <= 18446744073709551500; + +#select cast(100 as unsigned) between 1 and -1 returns true + +SELECT CAST(100 AS UNSIGNED) BETWEEN 1 AND -1; +SELECT CAST(100 AS UNSIGNED) NOT BETWEEN 1 AND -1; +SELECT CAST(0 AS UNSIGNED) BETWEEN 0 AND -1; +SELECT CAST(0 AS UNSIGNED) NOT BETWEEN 0 AND -1; + +select -9223372036854775808 mod 9223372036854775810 as result; +select bin(convert(-9223372036854775808 using ucs2)); +SELECT ( 9223372036854775808 BETWEEN 9223372036854775808 AND 9223372036854775808 ); +SELECT ( 9223372036854775807 BETWEEN 9223372036854775808 AND 1 ); +SELECT ( -1 BETWEEN 9223372036854775808 AND 1 ); +SELECT ( 0 BETWEEN 9223372036854775808 AND 1 ); +SELECT ( 1 BETWEEN 9223372036854775808 AND 1 ); + +# cleanup +drop DATABASE bigint_unsigned_test; diff --git a/mysql-test/suite/tianmu/t/case_when.test b/mysql-test/suite/tianmu/t/case_when.test new file mode 100644 index 000000000..212ddbeeb --- /dev/null +++ b/mysql-test/suite/tianmu/t/case_when.test @@ -0,0 +1,163 @@ +--source include/have_tianmu.inc + +--echo # +--echo # test case when +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS case_when_test; +--enable_warnings + +CREATE DATABASE case_when_test; +USE case_when_test; + +--disable_warnings +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +--enable_warnings + +select CASE "b" when "a" then 1 when "b" then 2 END; +select CASE "c" when "a" then 1 when "b" then 2 END; +select CASE "c" when "a" then 1 when "b" then 2 ELSE 3 END; +select CASE BINARY "b" when "a" then 1 when "B" then 2 WHEN "b" then "ok" END; +select CASE "b" when "a" then 1 when binary "B" then 2 WHEN "b" then "ok" END; +select CASE concat("a","b") when concat("ab","") then "a" when "b" then "b" end; +select CASE when 1=0 then "true" else "false" END; +select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END; +select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END; +select (CASE "two" when "one" then "1" WHEN "two" then "2" END) | 0; +select (CASE "two" when "one" then 1.00 WHEN "two" then 2.00 END) +0.0; +select case 1/0 when "a" then "true" else "false" END; +select case 1/0 when "a" then "true" END; +select (case 1/0 when "a" then "true" END) | 0; +select (case 1/0 when "a" then "true" END) + 0.0; +select case when 1>0 then "TRUE" else "FALSE" END; +select case when 1<0 then "TRUE" else "FALSE" END; + +# +# using GROUP BY on CASE +# +create table t1 (a int); +insert into t1 values(1),(2),(3),(4); +select case a when 1 then 2 when 2 then 3 else 0 end as fcase, count(*) from t1 group by fcase order by fcase; +select case a when 1 then "one" when 2 then "two" else "nothing" end as fcase, count(*) from t1 group by fcase order by fcase; +drop table t1; + +# +# Test MAX(CASE ... ) that can return null +# + +create table t1 (row int not null, col int not null, val varchar(255) not null); +insert into t1 values (1,1,'orange'),(1,2,'large'),(2,1,'yellow'),(2,2,'medium'),(3,1,'green'),(3,2,'small'); +select max(case col when 1 then val else null end) as color from t1 group by row; +drop table t1; + +SET NAMES latin1; + +# +# CASE and argument types/collations aggregation into result +# +CREATE TABLE t1 SELECT + CASE WHEN 1 THEN _latin1'a' COLLATE latin1_danish_ci ELSE _latin1'a' END AS c1, + CASE WHEN 1 THEN _latin1'a' ELSE _latin1'a' COLLATE latin1_danish_ci END AS c2, + CASE WHEN 1 THEN 'a' ELSE 1 END AS c3, + CASE WHEN 1 THEN 1 ELSE 'a' END AS c4, + CASE WHEN 1 THEN 'a' ELSE 1.0 END AS c5, + CASE WHEN 1 THEN 1.0 ELSE 'a' END AS c6, + CASE WHEN 1 THEN 1 ELSE 1.0 END AS c7, + CASE WHEN 1 THEN 1.0 ELSE 1 END AS c8, + CASE WHEN 1 THEN 1.0 END AS c9, + CASE WHEN 1 THEN 0.1e1 else 0.1 END AS c10, + CASE WHEN 1 THEN 0.1e1 else 1 END AS c11, + CASE WHEN 1 THEN 0.1e1 else '1' END AS c12 +; +SHOW CREATE TABLE t1; +DROP TABLE t1; + +--error 1267 +SELECT CASE + WHEN 1 + THEN _latin1'a' COLLATE latin1_danish_ci + ELSE _latin1'a' COLLATE latin1_swedish_ci + END; + +--error 1270 +SELECT CASE _latin1'a' COLLATE latin1_general_ci + WHEN _latin1'a' COLLATE latin1_danish_ci THEN 1 + WHEN _latin1'a' COLLATE latin1_swedish_ci THEN 2 + END; + +SELECT +CASE _latin1'a' COLLATE latin1_general_ci WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' COLLATE latin1_bin WHEN _latin1'A' THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_swedish_ci THEN '1' ELSE 2 END, +CASE _latin1'a' WHEN _latin1'A' COLLATE latin1_bin THEN '1' ELSE 2 END; + +--error 1267 +CREATE TABLE t1 SELECT IFNULL('a' COLLATE latin1_swedish_ci, 'b' COLLATE latin1_bin); + +SELECT 'case+union+test' +UNION +SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; + +SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END; + +SELECT 'case+union+test' +UNION +SELECT CASE '1' WHEN '2' THEN 'BUG' ELSE 'nobug' END; + +# +# problem with MIN(CASE...) +# + +create table t1(a float, b int default 3); +insert into t1 (a) values (2), (11), (8); +select min(a), min(case when 1=1 then a else NULL end), + min(case when 1!=1 then NULL else a end) +from t1 where b=3 group by b; +drop table t1; + + +# +# conversion of the arguments for COALESCE and IFNULL +# + +CREATE TABLE t1 (EMPNUM INT); +INSERT INTO t1 VALUES (0), (2); +CREATE TABLE t2 (EMPNUM DECIMAL (4, 2)); +INSERT INTO t2 VALUES (0.0), (9.0); + +SELECT COALESCE(t2.EMPNUM,t1.EMPNUM) AS CEMPNUM, + t1.EMPNUM AS EMPMUM1, t2.EMPNUM AS EMPNUM2 + FROM t1 LEFT JOIN t2 ON t1.EMPNUM=t2.EMPNUM; + +SELECT IFNULL(t2.EMPNUM,t1.EMPNUM) AS CEMPNUM, + t1.EMPNUM AS EMPMUM1, t2.EMPNUM AS EMPNUM2 + FROM t1 LEFT JOIN t2 ON t1.EMPNUM=t2.EMPNUM; + +DROP TABLE t1,t2; + +# +# Truncated UNSIGNED BIGINT columns +# +create table t1 (a int, b bigint unsigned); +create table t2 (c int); +insert into t1 (a, b) values (1,457279462277), (2,1819694241997), + (3,1114190595086); +insert into t2 (c) values (1), (2), (3); +select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1 + join t2 on t1.a=t2.c order by d; +select t1.a, (case t1.a when 0 then 0 else t1.b end) d from t1 + join t2 on t1.a=t2.c where b=1114190595086 order by d; +drop table t1, t2; + +# +# CRASH IN ITEM_FUNC_CASE::FIND_ITEM WITH CASE WHEN +# ELSE CLAUSE +# + +CREATE TABLE t1(a YEAR); +SELECT 1 FROM t1 WHERE a=1 AND CASE 1 WHEN a THEN 1 ELSE 1 END; +DROP TABLE t1; + +#clean up +drop database case_when_test; \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/create_tmp.test b/mysql-test/suite/tianmu/t/create_tmp.test new file mode 100644 index 000000000..e214ef7b7 --- /dev/null +++ b/mysql-test/suite/tianmu/t/create_tmp.test @@ -0,0 +1,107 @@ +--source include/have_tianmu.inc + +--echo # +--echo # Test create temporary +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS create_tmp_test; +--enable_warnings + +CREATE DATABASE create_tmp_test; +USE create_tmp_test; + +CREATE TEMPORARY TABLE st ( + id INT(11), + name VARCHAR(255) +); + +INSERT INTO st (id, name) VALUES (1, 'John'); +INSERT INTO st (id, name) VALUES (2, 'Jane'); +SELECT * FROM st; +UPDATE st SET name = 'Johnny' WHERE id = 1; +SELECT * FROM st; +DELETE FROM st WHERE id = 2; +SELECT * FROM st; + +CREATE TEMPORARY TABLE st1 ( + id INT(11), + name VARCHAR(255) +); + +CREATE TEMPORARY TABLE st2 ( + id INT(11), + city VARCHAR(255) +); + +INSERT INTO st1 (id, name) VALUES (1, 'John'); +INSERT INTO st1 (id, name) VALUES (2, 'Jane'); +INSERT INTO st2 (id, city) VALUES (1, 'London'); +INSERT INTO st2 (id, city) VALUES (2, 'New York'); +SELECT st1.name, st2.city +FROM st1 INNER JOIN st2 ON st1.id=st2.id; + +create table t2 (id int(11) auto_increment primary key, score int(11), name varchar(32)) ; +insert into t2 (score, name) values (98, 'Bob'); +select * from t2 where score > 90; + +create temporary table t3 like t2 ; +insert into t3 (score, name) values (88, 'Charlie'); +select * from t3; + +# data type +create table t5 ( + id int(11) unsigned auto_increment primary key, + col1 varchar(32), + col2 datetime, + col3 time +) ; + +insert into t5 (col1, col2, col3) values ('aaa', '2022-01-17 15:22:00', '12:00:00'); +insert into t5 (col1, col2, col3) values ('bbb', '2022-01-18 10:10:10', '20:00:00'); +insert into t5 (col1, col2, col3) values ('ccc', '2022-01-19 15:45:32', '18:45:00'); +select * from t5 where col1 = 'aaa'; + +# create temporary table like +create temporary table temp_t6 like t5 ; +insert into temp_t6 (col1, col2, col3) select col1, col2, col3 from t5 where col1 between 'aaa' and 'bbb'; +select * from temp_t6 order by col2 desc; +drop temporary table if exists temp_t7; + +# unsigned type +create temporary table temp_t7( + id int(11)unsigned auto_increment primary key, + col1 varchar(32) +); +insert into temp_t7(col1)values('apple'),('banana'),('orange'),('watermelon'),('grapefruit'); +select * from temp_t7 order by id desc; + +create temporary table temp_t8(id int(11) unsigned auto_increment primary key, col1 varchar(32), col2 datetime, status char(1)) ; +insert into temp_t8(col1,col2,status)values('aaa','2022-02-19 09:21:40','Y'),('bbb','2022-02-20 14:15:23','N'),('ccc','2022-02-21 22:30:10','Y'),('ddd','2022-02-22 08:50:20','N'),('eee','2022-02-23 10:35:59','Y'); +select * from temp_t8; + +create temporary table temp_t9(id int(11) unsigned auto_increment primary key, col3 varchar(32), col4 int(11),price decimal(8,2)); +insert into temp_t9(col3, col4, price) values('code11', 10, 523.2),('code22', 20 , 2480),('code33', 30, 89.99),('code44', 40, 5200.55); +select * from temp_t9; + +CREATE TEMPORARY TABLE temp_t10 SELECT * FROM temp_t9 LIMIT 3; +select * from temp_t10; + +# decimal type +drop table if exists t1,t2,t3; +CREATE TEMPORARY TABLE t1 (c1 DECIMAL(10,2)); +INSERT INTO t1 VALUES (10.00), (-24.53), (5936.28); + +CREATE TEMPORARY TABLE t2 (c1 DECIMAL(38,10)); +INSERT INTO t2 VALUES (1.23), (-2.78), (99.99); + +CREATE TEMPORARY TABLE t3 (c1 DECIMAL(12,5), c2 DECIMAL(20,8)); +INSERT INTO t3 VALUES (123.45678, 450.04510000), (-234.54628, 2434.87654865); + +SELECT *, LENGTH(c1) FROM t1; +SELECT *, LENGTH(c1) FROM t2; +SELECT *, LENGTH(c1), LENGTH(c2) FROM t3; +DROP TEMPORARY TABLE t1, t2, t3; + +# clean UP +DROP DATABASE create_tmp_test; diff --git a/mysql-test/suite/tianmu/t/date_formats.test b/mysql-test/suite/tianmu/t/date_formats.test new file mode 100644 index 000000000..56a85f879 --- /dev/null +++ b/mysql-test/suite/tianmu/t/date_formats.test @@ -0,0 +1,172 @@ +--source include/have_tianmu.inc + +--echo # +--echo # Test of date format functions +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS date_formats_test; +--enable_warnings + +CREATE DATABASE date_formats_test; +USE date_formats_test; + +# Test of str_to_date + +# PS doesnot support fractions of a second +select str_to_date(concat('15-01-2001',' 2:59:58.999'), + concat('%d-%m-%Y',' ','%H:%i:%s.%f')); +select STR_TO_DATE('2004.12.12 22.30.61','%Y.%m.%d %T'); + +SET sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +create table t1 (date char(30), format char(30) not null); +insert into t1 values +('2003-01-02 10:11:12', '%Y-%m-%d %H:%i:%S'), +('03-01-02 8:11:2.123456', '%y-%m-%d %H:%i:%S.%#'), +#bug1495('0003-01-02 8:11:2.123456', '%Y-%m-%d %H:%i:%S.%#'), +('03-01-02 8:11:2.123456', '%Y-%m-%d %H:%i:%S.%#'), +('2003-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p'), +#bug1495('2003-01-02 01:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f%p'), +#bug1495('2003-01-02 02:11:12.12345AM', '%Y-%m-%d %h:%i:%S.%f %p'), +#bug1495('2003-01-02 12:11:12.12345 am', '%Y-%m-%d %h:%i:%S.%f%p'), +('2003-01-02 11:11:12Pm', '%Y-%m-%d %h:%i:%S%p'), +('10:20:10', '%H:%i:%s'), +('10:20:10', '%h:%i:%s.%f'), +('10:20:10', '%T'), +('10:20:10AM', '%h:%i:%s%p'), +('10:20:10AM', '%r'), +#bug1495('10:20:10.44AM', '%h:%i:%s.%f%p'), +('15-01-2001 12:59:58', '%d-%m-%Y %H:%i:%S'), +('15 September 2001', '%d %M %Y'), +('15 SEPTEMB 2001', '%d %M %Y'), +('15 MAY 2001', '%d %b %Y'), +('15th May 2001', '%D %b %Y'), +('Sunday 15 MAY 2001', '%W %d %b %Y'), +('Sund 15 MAY 2001', '%W %d %b %Y'), +('Tuesday 00 2002', '%W %U %Y'), +('Thursday 53 1998', '%W %u %Y'), +('Sunday 01 2001', '%W %v %x'), +('Tuesday 52 2001', '%W %V %X'), +('060 2004', '%j %Y'), +('4 53 1998', '%w %u %Y'), +('15-01-2001', '%d-%m-%Y %H:%i:%S'), +('15-01-20', '%d-%m-%y'), +('15-2001-1', '%d-%Y-%c'); + +select date,format,str_to_date(date, format) as str_to_date from t1; +# Use as a string +select date,format,concat('',str_to_date(date, format)) as con from t1; +# Use as datetime +select date,format,cast(str_to_date(date, format) as datetime) as datetime from t1; +select date,format,DATE(str_to_date(date, format)) as date2 from t1; +select date,format,TIME(str_to_date(date, format)) as time from t1; +select date,format,concat(TIME(str_to_date(date, format))) as time2 from t1; +# Test small bug in %f handling +select concat('',str_to_date('8:11:2.123456 03-01-02','%H:%i:%S.%f %y-%m-%d')); + +# Test wrong dates or converion specifiers + +truncate table t1; +insert into t1 values +('2003-01-02 10:11:12 PM', '%Y-%m-%d %H:%i:%S %p'), +('2003-01-02 10:11:12.123456', '%Y-%m-%d %h:%i:%S %p'), +('2003-01-02 10:11:12AM', '%Y-%m-%d %h:%i:%S.%f %p'), +('2003-01-02 10:11:12AN', '%Y-%m-%d %h:%i:%S%p'), +('2003-01-02 10:11:12 PM', '%y-%m-%d %H:%i:%S %p'), +('10:20:10AM', '%H:%i:%s%p'), +('15 Septembei 2001', '%d %M %Y'), +('15 Ju 2001', '%d %M %Y'), +('Sund 15 MA', '%W %d %b %Y'), +('Thursdai 12 1998', '%W %u %Y'), +('Sunday 01 2001', '%W %v %X'), +('Tuesday 52 2001', '%W %V %x'), +('Tuesday 52 2001', '%W %V %Y'), +('Tuesday 52 2001', '%W %u %x'), +('7 53 1998', '%w %u %Y'), +(NULL, get_format(DATE,'USA')); +select date,format,str_to_date(date, format) as str_to_date from t1; +select date,format,concat(str_to_date(date, format),'') as con from t1; + +# Test 'maybe' date formats and 'strange but correct' results + +truncate table t1; +insert into t1 values +('10:20:10AM', '%h:%i:%s'), +('2003-01-02 10:11:12', '%Y-%m-%d %h:%i:%S'), +('03-01-02 10:11:12 PM', '%Y-%m-%d %h:%i:%S %p'); + +select date,format,str_to_date(date, format) as str_to_date from t1; +select date,format,concat(str_to_date(date, format),'') as con from t1; +drop table t1; + +# Test of date_format() +create table t1 (d date); +insert into t1 values ('2004-07-14'),('2005-07-14'); +select date_format(d,"%d") from t1 order by 1; +drop table t1; + +# PS doesnot support fractional seconds +select str_to_date("2003-....01ABCD-02 10:11:12.0012", "%Y-%.%m%@-%d %H:%i:%S.%f") as a; + +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +#bug1495create table t1 select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f") as f1, +#bug1495 str_to_date("10:11:12.0012", "%H:%i:%S.%f") as f2, +#bug1495 str_to_date("2003-01-02", "%Y-%m-%d") as f3, +#bug1495 str_to_date("02", "%d") as f4, str_to_date("02 10", "%d %H") as f5; +#bug1495describe t1; +#bug1495select * from t1; + +#bug1495create table t1 select "02 10" as a, "%d %H" as b; +#bug1495select str_to_date(a,b) from t1; +#bug1495create table t2 select str_to_date(a,b) from t1; +#bug1495describe t2; +select str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S.%f") as f1, + str_to_date("2003-01-02 10:11:12.0012", "%Y-%m-%d %H:%i:%S") as f2, + str_to_date("2003-01-02", "%Y-%m-%d") as f3, + str_to_date("02 10:11:12", "%d %H:%i:%S.%f") as f4, + str_to_date("02 10:11:12", "%d %H:%i:%S") as f5, + str_to_date("02 10", "%d %f") as f6; +select str_to_date("2003-01-02 10:11:12.0012ABCD", "%Y-%m-%d %H:%i:%S.%f") as f1, + addtime("-01:01:01.01 GGG", "-23:59:59.1") as f2, + microsecond("1997-12-31 23:59:59.01XXXX") as f3; + +select str_to_date("2003-04-05 g", "%Y-%m-%d") as f1, + str_to_date("2003-04-05 10:11:12.101010234567", "%Y-%m-%d %H:%i:%S.%f") as f2; + +create table t1 (f1 datetime); +insert into t1 (f1) values ("2005-01-01"); +insert into t1 (f1) values ("2005-02-01"); +select date_format(f1, "%m") as d1, date_format(f1, "%M") as d2 from t1 order by date_format(f1, "%M"); +drop table t1; + +CREATE TABLE t1 (a varchar(10), PRIMARY KEY (a)); +CREATE TABLE t2 (a varchar(10), b date, PRIMARY KEY(a,b)); +CREATE TABLE t3 (a varchar(10), b TIME, PRIMARY KEY(a,b)); +INSERT INTO t1 VALUES ('test1'); +INSERT INTO t2 VALUES +('test1','2016-12-13'),('test1','2016-12-14'),('test1','2016-12-15'); +INSERT INTO t3 VALUES +('test1','11:13:14'), ('test1','12:13:14'), ('test1','10:13:14'); + +SELECT * +FROM t1 LEFT JOIN t2 + ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; + +SELECT * +FROM t1 LEFT JOIN t2 IGNORE INDEX(PRIMARY) + ON t2.a = 'test1' AND t2.b = '20161213' +WHERE t1.a = 'test1'; + +SELECT b, b = '20161213', + CASE b WHEN '20161213' then 'found' ELSE 'not found' END FROM t2; +SELECT b, b IN ('20161213'), b in ('20161213', 0) FROM t2; + +#Uses datatype TIME +SELECT b, b = '121314', + CASE b WHEN '121314' then 'found' ELSE 'not found' END FROM t3 order by 1; +SELECT b, b in ('121314'), b in ('121314', 0) FROM t3 order by 1; + +#clean UP +drop database date_formats_test; + diff --git a/mysql-test/suite/tianmu/t/disabled.def b/mysql-test/suite/tianmu/t/disabled.def new file mode 100644 index 000000000..2ecc5ee14 --- /dev/null +++ b/mysql-test/suite/tianmu/t/disabled.def @@ -0,0 +1,19 @@ + ############################################################################## + # + # List the test cases that are to be disabled temporarily. + # + # Separate the test case name and the comment with ':'. + # + # : BUG# + # + # Do not use any TAB characters for whitespace. + # + ############################################################################## + auto_increment : BUG_FOR_auto_increment 2023-4-7 ringsc + issue364 : bug_for_364 2023-4-7 ringsc + issue433 : bug_for_433 2023-4-7 ringsc + issue446 : bug_for_446 2023-4-7 ringsc + issue581 : bug_for_581 2023-4-7 ringsc + load : bug_for_load 2023-4-7 ringsc + trigger : bug_for_trigger 2023-4-7 ringsc + alter_table_primarykey : bug_for_alter_pk diff --git a/mysql-test/suite/tianmu/t/double_float.test b/mysql-test/suite/tianmu/t/double_float.test index 3687c3c46..d2b3fe9fd 100644 --- a/mysql-test/suite/tianmu/t/double_float.test +++ b/mysql-test/suite/tianmu/t/double_float.test @@ -13,8 +13,6 @@ USE `double_float`; SET default_storage_engine=tianmu; SELECT @@default_storage_engine; -set autocommit=0; - CREATE TABLE test1 (dkey int); INSERT INTO test1 VALUES (1), (2), (3); SELECT test1.dkey FROM test1 ORDER BY test1.dkey; @@ -28,19 +26,19 @@ INSERT INTO qatabledouble VALUES (1.993777023789432E+21); INSERT INTO qatabledouble VALUES (1.797693134862315E+38); INSERT INTO qatabledouble VALUES (-19937770237894323221); INSERT INTO qatabledouble VALUES (17976931348623158); -SELECT * FROM qatabledouble; +SELECT * FROM qatabledouble order by col; INSERT INTO qatabledouble VALUES (null); INSERT INTO qatabledouble VALUES (null); INSERT INTO qatabledouble VALUES (null); -SELECT * FROM qatabledouble; +SELECT * FROM qatabledouble order by col; INSERT INTO qatablefloat VALUES (null); INSERT INTO qatablefloat VALUES (null); INSERT INTO qatablefloat VALUES (null); -SELECT * FROM qatablefloat; +SELECT * FROM qatablefloat order by col; DELETE FROM qatabledouble WHERE col IS NULL; -SELECT * FROM qatabledouble; +SELECT * FROM qatabledouble order by col; delete FROM qatablefloat WHERE col IS NULL; -SELECT * FROM qatablefloat; +SELECT * FROM qatablefloat order by col; CREATE TABLE qatabledouble_v2 (col1 DOUBLE, col2 DOUBLE, col3 DOUBLE) ; INSERT INTO qatabledouble_v2 VALUES (-0.50, -0.50, -0.50); INSERT INTO qatabledouble_v2 VALUES (-0.49, -0.49, -0.49); @@ -67,7 +65,7 @@ INSERT INTO qatabledouble_v2 VALUES (0.0,0.0,0.0); INSERT INTO qatabledouble_v2 VALUES (.50,.50,.50); INSERT INTO qatabledouble_v2 VALUES (.49,.49,.49); INSERT INTO qatabledouble_v2 VALUES (.0,.0,.0); -SELECT * FROM qatabledouble_v2; +SELECT * FROM qatabledouble_v2 order by col1; CREATE TABLE qatablefloat_v3 (col1 float, col2 float, col3 float) ; INSERT INTO qatablefloat_v3 VALUES (-0.50, -0.50, -0.50); INSERT INTO qatablefloat_v3 VALUES (-0.49, -0.49, -0.49); @@ -94,6 +92,6 @@ INSERT INTO qatablefloat_v3 VALUES (0.0,0.0,0.0); INSERT INTO qatablefloat_v3 VALUES (.50,.50,.50); INSERT INTO qatablefloat_v3 VALUES (.49,.49,.49); INSERT INTO qatablefloat_v3 VALUES (.0,.0,.0); -SELECT * FROM qatablefloat_v3; +SELECT * FROM qatablefloat_v3 order by col1; DROP DATABASE `double_float`; diff --git a/mysql-test/suite/tianmu/t/drop_index-master.opt b/mysql-test/suite/tianmu/t/drop_index-master.opt index 4494579d7..4eb1b974d 100644 --- a/mysql-test/suite/tianmu/t/drop_index-master.opt +++ b/mysql-test/suite/tianmu/t/drop_index-master.opt @@ -1 +1,2 @@ ---sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_KEY_ERROR +--sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/drop_index.test b/mysql-test/suite/tianmu/t/drop_index.test index 6ad7b74e3..57c656400 100644 --- a/mysql-test/suite/tianmu/t/drop_index.test +++ b/mysql-test/suite/tianmu/t/drop_index.test @@ -34,7 +34,7 @@ CREATE TABLE `t3` ( FULLTEXT KEY `idx_lastname` (`last_name`) ) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; -set session sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set session tianmu_no_key_error=OFF; --error ER_TIANMU_NOT_SUPPORTED_UNIQUE_INDEX drop index idx_id on t1; diff --git a/mysql-test/suite/tianmu/t/drop_restric.test b/mysql-test/suite/tianmu/t/drop_restric.test new file mode 100644 index 000000000..1e39e9e37 --- /dev/null +++ b/mysql-test/suite/tianmu/t/drop_restric.test @@ -0,0 +1,30 @@ +--source include/have_tianmu.inc + +--echo # +--echo # DROP TABLE RESTRICT +--echo # The RESTRICT clause limits the table to being dropped in the front end only. +--echo # This could be useful when the table has been dropped on one user module, +--echo # and needs to be synced to others. +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS drop_restric_test; +--enable_warnings + +CREATE DATABASE drop_restric_test; +USE drop_restric_test; + +CREATE TABLE t1 (id INT, name CHAR(25)); +INSERT INTO t1 VALUES (1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five'); + +SELECT * FROM t1 ORDER BY id; +SELECT COUNT(*) FROM t1; + +DROP TABLE IF EXISTS t1 RESTRICT; +--error 1051 +DROP TABLE t1; + +# Clean up +--disable_warnings +DROP DATABASE IF EXISTS drop_restric_test; +--enable_warnings diff --git a/mysql-test/suite/tianmu/t/empty_string_not_null.test b/mysql-test/suite/tianmu/t/empty_string_not_null.test new file mode 100644 index 000000000..844c010a3 --- /dev/null +++ b/mysql-test/suite/tianmu/t/empty_string_not_null.test @@ -0,0 +1,71 @@ +--source include/have_tianmu.inc + +--echo # +--echo # tests updates that sets invalid range when we set value at max boundary that is less than max. +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS empty_string_not_null; +CREATE DATABASE empty_string_not_null; +USE empty_string_not_null; +--enable_warnings + +CREATE TABLE t(s text); +INSERT INTO t(s) VALUES (''), (NULL); + +SELECT COUNT(*) FROM t WHERE s IS NULL; +SELECT COUNT(*) FROM t WHERE s IS NOT NULL; + +SELECT * FROM t; + +DROP TABLE t; + +CREATE TABLE t(s text); +# this will test different code path in writeengine. +INSERT INTO t(s) VALUES (''); +INSERT INTO t(s) VALUES (NULL); + +SELECT * FROM t; + +SELECT COUNT(*) FROM t WHERE s IS NULL; + +DROP TABLE t; + +CREATE TABLE t(s text) ; +# handling of some obsucure pseudo-null magic value. +INSERT INTO t(s) VALUES ('_CpNuLl_'),(''), (NULL); + +SELECT * FROM t; + +SELECT COUNT(*) FROM t WHERE s IS NULL; + +DROP TABLE t; + +# There is a problem with comparison +CREATE TABLE t(c6 CHAR(6)) ; + +INSERT INTO t(c6) VALUES ('a'), ('b'), ('c'); + +SELECT 2, COUNT(*) FROM t WHERE (c6 <= 'b' OR c6 <= ''); + +SELECT 2, COUNT(*) FROM t WHERE (c6 <= 'b'); + +SELECT 0, COUNT(*) FROM t WHERE (c6 <= ''); + +SELECT 0, COUNT(*) FROM t WHERE (c6 <= ' '); + +SELECT 2, COUNT(*) FROM t WHERE (c6 <= 'b' OR c6 <= ' '); + +SELECT 0, COUNT(*) FROM t WHERE (c6 < ''); + +SELECT 0, COUNT(*) FROM t WHERE (c6 < ' '); + +DROP TABLE IF EXISTS t; +CREATE TABLE t(a CHAR(10)); +INSERT INTO t(a) VALUES (''), (NULL), (' '), (' a '); +SELECT LTRIM(a) FROM t; +SELECT RTRIM(a) FROM t; +#SELECT length(RTRIM(a)) FROM t; +#SELECT length(RTRIM(a)) FROM t; + +DROP DATABASE empty_string_not_null; diff --git a/mysql-test/suite/tianmu/t/escape.test b/mysql-test/suite/tianmu/t/escape.test index dbd976c58..27a24cc05 100644 --- a/mysql-test/suite/tianmu/t/escape.test +++ b/mysql-test/suite/tianmu/t/escape.test @@ -41,7 +41,7 @@ SELECT * FROM st1 WHERE NAME LIKE CONCAT("%", "a_", "%") ESCAPE "a"; SELECT * FROM st1 WHERE NAME LIKE "a%_" ESCAPE "a" ; SELECT * FROM st1 WHERE NAME LIKE "a%a" ESCAPE "a" ; -#bug1157 SELECT * FROM st1 WHERE NAME LIKE "a%a_" ESCAPE "a"; +SELECT * FROM st1 WHERE NAME LIKE "a%a_" ESCAPE "a"; drop table st1; CREATE TABLE `st1` ( @@ -61,7 +61,7 @@ select * from st1; select * from st1 where name like '%hello%'; select * from st1 where name like '_hello'; select * from st1 where name like 'hello12_'; -#bug1157 select * from st1 where name like '/_hello' escape '/'; +select * from st1 where name like '/_hello' escape '/'; create table st2(id int ,column_2 varchar(10),column_3 varchar(10)); @@ -80,11 +80,11 @@ select * from st2 where column_2 like '%\_%' ; select * from st2 where column_2 like '%?_%' escape '?'; -#bug1162 select * from st2 where column_2 like '%?_a\\%'; -#bug1162 select * from st2 where column_2 like '%\_a\\%'; +select * from st2 where column_2 like '%?_a\\%'; +select * from st2 where column_2 like '%\_a\\%'; -#bug1162 select * from st2 where column_2 like '%?_a?\%'; -#bug1162 select * from st2 where column_2 like '%\_a\\%'; +select * from st2 where column_2 like '%?_a?\%'; +select * from st2 where column_2 like '%\_a\\%'; # clean up DROP DATABASE escape_test; diff --git a/mysql-test/suite/tianmu/t/hash_join.test b/mysql-test/suite/tianmu/t/hash_join.test new file mode 100644 index 000000000..fffbc1f90 --- /dev/null +++ b/mysql-test/suite/tianmu/t/hash_join.test @@ -0,0 +1,107 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS hash_join_test; +--enable_warnings + +CREATE DATABASE hash_join_test; + +USE hash_join_test; + +CREATE TABLE `test1` ( + `id` varchar(64) NOT NULL COMMENT 'ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `test2` ( + `user_id` varchar(32) NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; + +CREATE TABLE `test3` ( + `id` varchar(32) NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; + +CREATE TABLE `test4` ( + `id` varchar(32) NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; + +insert test1 values('aaa'); +insert test1 values('bbb'); +insert test1 values('ccc'); +insert test1 values('eee'); + +insert test2 values('aaa'); +insert test2 values('bbb'); +insert test2 values('ccc'); +insert test2 values('fff'); + +insert test3 values('aaa'); +insert test3 values('bbb'); +insert test3 values('ccc'); +insert test3 values('ddd'); + +insert test4 values('aaa'); +insert test4 values('bbb'); +insert test4 values('ccc'); +insert test4 values('hhh'); +insert test4 values('ggg'); + +select test1.id,test2.user_id from test2,test1 where test2.user_id = test1.id ; + +select test1.id,test2.user_id,test3.id from test2,test1,test3 where test2.user_id = test1.id and test2.user_id = test3.id; + +select test1.id,test2.user_id,test3.id,test4.id from test2,test1,test3,test4 where test2.user_id = test1.id and test2.user_id = test3.id and test3.id = test4.id; + +CREATE TABLE `t1` ( + `id` int NOT NULL COMMENT 'ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `t2` ( + `user_id` int NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; + +CREATE TABLE `t3` ( + `id` int NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; + +CREATE TABLE `t4` ( + `id` int NOT NULL COMMENT '用户ID' +) ENGINE=TIANMU DEFAULT CHARSET=utf8; + +insert t1 values(101); +insert t1 values(103); +insert t1 values(103); +insert t1 values(201); + +insert t2 values(101); +insert t2 values(102); +insert t2 values(103); +insert t2 values(202); + +insert t3 values(101); +insert t3 values(102); +insert t3 values(103); +insert t3 values(203); + +insert t4 values(101); +insert t4 values(102); +insert t4 values(103); +insert t4 values(204); +insert t4 values(205); + +select t1.id,t2.user_id from t2,t1 where t2.user_id = t1.id ; + +select t1.id,t2.user_id,t3.id from t2,t1,t3 where t2.user_id = t1.id and t2.user_id = t3.id; + +select t1.id,t2.user_id,t3.id,t4.id from t2,t1,t3,t4 where t2.user_id = t1.id and t2.user_id = t3.id and t3.id = t4.id; + +drop table test1; +drop table test2; +drop table test3; +drop table test4; + +drop table t1; +drop table t2; +drop table t3; +drop table t4; + +DROP DATABASE hash_join_test; diff --git a/mysql-test/suite/tianmu/t/in_withpk.test b/mysql-test/suite/tianmu/t/in_withpk.test new file mode 100644 index 000000000..45f46a8b4 --- /dev/null +++ b/mysql-test/suite/tianmu/t/in_withpk.test @@ -0,0 +1,126 @@ +--source include/have_tianmu.inc + +--echo # +--echo # Test in subquery with pk +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS in_withpk_test; +--enable_warnings + +CREATE DATABASE in_withpk_test; +USE in_withpk_test; + +create table t0 (a int); +insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +create table t1 ( + a int, + b int, + primary key(a) +) ; +insert into t1 values (1,1),(3,3),(2,2); + +create table t2 ( + a int, + b int +) ; +insert into t2 select a, a/2 from t0; +select * from t1 order by 1; +select * from t2; +select * from t2 where b in (select a from t1); + +create table t3 ( + a int, + b int, + pk1 char(50), pk2 char(50), pk3 char(50), + primary key(pk1, pk2, pk3) +) ; +insert into t3 select a,a, a,a,a from t0; + +select * from t3 where b in (select a from t1); + +drop table t3; +create table t3 ( + a int, + b int, + pk1 char(100), pk2 char(100), + primary key(pk1, pk2) +) ; +insert into t3 select + A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a, A.a + 10*B.a +from t0 A, t0 B where B.a <5; +select * from t3 where b in (select a from t0); +select * from t3 where b in (select A.a+B.a from t0 A, t0 B where B.a<5) order by a,b; + +select * from t1 where a in (select b from t2) order by a; + +drop table t0, t1, t2, t3; +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +create table t2 (a char(50), b char(50), c char(50), primary key (a,b,c)) ; +insert into t2 select concat(a, repeat('X',48)),repeat('B',50),repeat('B',50) from t1; +insert into t2 select concat(a, repeat('Y',48)),repeat('B',50),repeat('B',50) from t1; +alter table t2 add filler1 int; + +insert into t1 select A.a + 2*(B.a + 2*C.a) from t1 A, t1 B, t1 C; + +select * from t2 where filler1 in ( select a from t1); +drop table t1, t2; + +create table t1 (c6 timestamp); +create table t2 (c2 double); +insert into t2 values(12.4); +select 1 from t2 where c2 = any (select log10(null) from t1 where c6 4567890123456789; +#bug1332 SELECT * FROM int8_tbl WHERE q2 < 4567890123456789; +SELECT * FROM int8_tbl WHERE q2 > 4567890123456789; +#bug1332 SELECT * FROM int8_tbl WHERE q2 <= 4567890123456789; +SELECT * FROM int8_tbl WHERE q2 >= 4567890123456789; + +# int8/int4 cmp +SELECT * FROM int8_tbl WHERE q2 = 456; +SELECT * FROM int8_tbl WHERE q2 <> 456; +#bug1332 SELECT * FROM int8_tbl WHERE q2 < 456; +SELECT * FROM int8_tbl WHERE q2 > 456; +#bug1332 SELECT * FROM int8_tbl WHERE q2 <= 456; +SELECT * FROM int8_tbl WHERE q2 >= 456; + +# int4/int8 cmp +SELECT * FROM int8_tbl WHERE 123 = q1; +SELECT * FROM int8_tbl WHERE 123 <> q1; +SELECT * FROM int8_tbl WHERE 123 < q1; +#bug1332 SELECT * FROM int8_tbl WHERE 123 > q1; +SELECT * FROM int8_tbl WHERE 123 <= q1; +#bug1332 SELECT * FROM int8_tbl WHERE 123 >= q1; + +# cleanup +drop DATABASE integer_range_test; diff --git a/mysql-test/suite/tianmu/t/issue1065.test b/mysql-test/suite/tianmu/t/issue1065.test index 128d5f6e4..e0f391b59 100644 --- a/mysql-test/suite/tianmu/t/issue1065.test +++ b/mysql-test/suite/tianmu/t/issue1065.test @@ -9,7 +9,8 @@ CREATE DATABASE issue1065_test; USE issue1065_test; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; --enable_warnings --disable_warnings drop table if exists t_test; @@ -56,7 +57,8 @@ DELIMITER ;// drop PROCEDURE add_user; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; --enable_warnings DELIMITER //; @@ -90,7 +92,8 @@ DELIMITER ;// drop PROCEDURE add_user; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; --enable_warnings DELIMITER //; @@ -136,7 +139,8 @@ CREATE TABLE t_test( ) engine=innodb; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; +set tianmu_mandatory=ON; +set tianmu_no_key_error=ON; --enable_warnings DELIMITER //; @@ -170,7 +174,8 @@ DELIMITER ;// drop PROCEDURE add_user; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; +set tianmu_no_key_error=OFF; --enable_warnings DELIMITER //; diff --git a/mysql-test/suite/tianmu/t/issue1079_366.test b/mysql-test/suite/tianmu/t/issue1079_366.test new file mode 100644 index 000000000..340b61aaf --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1079_366.test @@ -0,0 +1,50 @@ +--source include/have_tianmu.inc +--source include/have_binlog_format_row.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1079_test; +--enable_warnings +CREATE DATABASE issue1079_test; +USE issue1079_test; + +create table t(fi int, fv varchar(30), fdt datetime)engine=tianmu; + +insert into t values(1,'VAR-1',current_timestamp); +insert into t values(2,'VAR-2',current_timestamp); +insert into t values(3,'VAR-3',current_timestamp); +insert into t values(4,'VAR-4',current_timestamp); +insert into t values(5,'VAR-5',current_timestamp); +insert into t values(6,'VAR-6',current_timestamp); +insert into t values(7,'VAR-7',current_timestamp); +insert into t values(8,'VAR-8',current_timestamp); +insert into t values(9,'VAR-9',current_timestamp); +insert into t values(10,'VAR-10',current_timestamp); +select count(*) c from t; + +insert into t select fi+10,concat('VAR-',fi+10),current_timestamp from t; +insert into t select fi+20,concat('VAR-',fi+20),current_timestamp from t; +insert into t select fi+40,concat('VAR-',fi+40),current_timestamp from t; +insert into t select fi+80,concat('VAR-',fi+80),current_timestamp from t; +select count(*) c from t; + +insert into t select fi+160,concat('VAR-',fi+160),current_timestamp from t; +insert into t select fi+320,concat('VAR-',fi+320),current_timestamp from t; +insert into t select fi+640,concat('VAR-',fi+640),current_timestamp from t; +select count(*) c from t; + +insert into t select fi+1280,concat('VAR-',fi+1280),current_timestamp from t; +insert into t select fi+2560,concat('VAR-',fi+2560),current_timestamp from t; +insert into t select fi+5120,concat('VAR-',fi+5120),current_timestamp from t; +select count(*) c from t; + +insert into t select fi+10240,concat('VAR-',fi+10240),current_timestamp from t; +insert into t select fi+20480,concat('VAR-',fi+20480),current_timestamp from t; +select count(*) c from t; + +show create table t; + +alter table t modify column fv varchar(60); + +show create table t; + +DROP DATABASE issue1079_test; diff --git a/mysql-test/suite/tianmu/t/issue1090.test b/mysql-test/suite/tianmu/t/issue1090.test index c40f01b0f..467ea3d28 100644 --- a/mysql-test/suite/tianmu/t/issue1090.test +++ b/mysql-test/suite/tianmu/t/issue1090.test @@ -6,12 +6,12 @@ set global default_storage_engine=innodb; --enable_warnings --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --echo [on slave] --source include/sync_slave_sql_with_master.inc --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -39,11 +39,11 @@ drop table t_issue1090; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # --echo [on slave] --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings --echo [on master] @@ -52,8 +52,6 @@ create table t_issue1090_2(c1 int,c2 varchar(255)); show create table t_issue1090_2; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show variables like '%_engine'; show create table t_issue1090_2; --echo [on master] connection master; @@ -61,8 +59,6 @@ alter table t_issue1090_2 add c3 int; show create table t_issue1090_2; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_2; --echo [on master] connection master; @@ -70,11 +66,11 @@ drop table t_issue1090_2; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --echo [on slave] --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -84,8 +80,6 @@ create table t_issue1090_3(c1 int,c2 varchar(255)); show create table t_issue1090_3; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_3; --echo [on master] connection master; @@ -93,8 +87,6 @@ alter table t_issue1090_3 add c3 int; show create table t_issue1090_3; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_3; --echo [on master] connection master; @@ -102,12 +94,12 @@ drop table t_issue1090_3; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # --echo [on slave] --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings @@ -118,8 +110,6 @@ create table t_issue1090_4(c1 int,c2 varchar(255)); show create table t_issue1090_4; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_4; --echo [on master] connection master; @@ -127,8 +117,6 @@ alter table t_issue1090_4 DROP COLUMN c2; show create table t_issue1090_4; --echo [on slave] --source include/sync_slave_sql_with_master.inc -show global variables like 'sql_mode'; -show global variables like '%_engine'; show create table t_issue1090_4; --echo [on master] connection master; diff --git a/mysql-test/suite/tianmu/t/issue1111-slave.opt b/mysql-test/suite/tianmu/t/issue1111-slave.opt new file mode 100644 index 000000000..0b4d5c77c --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1111-slave.opt @@ -0,0 +1,2 @@ +--tianmu_mandatory=ON +--tianmu_no_key_error=ON diff --git a/mysql-test/suite/tianmu/t/issue1111.testbak b/mysql-test/suite/tianmu/t/issue1111.test similarity index 99% rename from mysql-test/suite/tianmu/t/issue1111.testbak rename to mysql-test/suite/tianmu/t/issue1111.test index 5d156aa4d..d3093c558 100644 --- a/mysql-test/suite/tianmu/t/issue1111.testbak +++ b/mysql-test/suite/tianmu/t/issue1111.test @@ -10,7 +10,6 @@ drop table if exists `t3`; -- source include/master-slave.inc --enable_warnings - --echo # --echo # Has primary key --echo # @@ -34,6 +33,7 @@ update ttt set name='lllll' where id in(1,3,2); select * from ttt where id in(1,3,2) order by id desc; --echo [on slave] --source include/sync_slave_sql_with_master.inc +show create table ttt; select * from ttt where id in(1,3,2) order by id desc; --echo [on master] connection master; diff --git a/mysql-test/suite/tianmu/t/issue1131.test b/mysql-test/suite/tianmu/t/issue1131.test index 7527f3e72..1d3dc5848 100644 --- a/mysql-test/suite/tianmu/t/issue1131.test +++ b/mysql-test/suite/tianmu/t/issue1131.test @@ -5,15 +5,14 @@ use test; drop table IF EXISTS tmp_table; --enable_warnings --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; --enable_warnings create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; @@ -29,15 +28,14 @@ drop table tmp_table; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; --enable_warnings create table t_issue1131(c1 int,c2 varchar(255))engine=innodb; show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; @@ -52,16 +50,15 @@ show create table tmp_table; drop table tmp_table; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # set default_storage_engine=innodb; --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set tianmu_mandatory=ON; --enable_warnings set default_storage_engine=innodb; create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; @@ -76,16 +73,15 @@ show create table tmp_table; drop table tmp_table; --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # --echo [on slave] --disable_warnings -set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set tianmu_mandatory=OFF; --enable_warnings create table t_issue1131(c1 int,c2 varchar(255)); show create table t_issue1131; -show variables like 'sql_mode'; show variables like '%_engine'; alter table t_issue1131 add c3 int; show create table t_issue1131; diff --git a/mysql-test/suite/tianmu/t/issue1173.test b/mysql-test/suite/tianmu/t/issue1173.test new file mode 100644 index 000000000..e1b4d9e83 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1173.test @@ -0,0 +1,21 @@ +--source include/have_tianmu.inc +--disable_warnings + +DROP DATABASE IF EXISTS issue1173; +CREATE DATABASE issue1173; +USE issue1173; + +CREATE TABLE t1 (a TIME(1) NOT NULL); +INSERT INTO t1 VALUES ('00:00:02.9'); +SELECT a, a & a, a | a, a^0, a<<1, a<<0, a>>1, bit_count(a) FROM t1; + +CREATE TABLE t2 (a DATETIME(1) NOT NULL); +INSERT INTO t2 VALUES ('2001-01-01 00:00:02.9'); +INSERT INTO t2 VALUES ('2001-01-01 23:59:59.9'); +INSERT INTO t2 VALUES ('9999-12-31 23:59:59.9'); +SELECT a, a & a, a | a, a^0, a<<1, a<<0, a>>1, bit_count(a) FROM t2; + +DROP TABLE t1; +DROP TABLE t2; + +DROP DATABASE issue1173; diff --git a/mysql-test/suite/tianmu/t/issue1174-slave.opt b/mysql-test/suite/tianmu/t/issue1174-slave.opt new file mode 100644 index 000000000..43c6c2ea1 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1174-slave.opt @@ -0,0 +1,2 @@ +--tianmu_mandatory=ON +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1174.test b/mysql-test/suite/tianmu/t/issue1174.test index 51662f244..dfcefcd02 100644 --- a/mysql-test/suite/tianmu/t/issue1174.test +++ b/mysql-test/suite/tianmu/t/issue1174.test @@ -10,7 +10,6 @@ drop table if exists `t3`; -- source include/master-slave.inc --enable_warnings - --echo # --echo # Has primary key --echo # @@ -35,6 +34,7 @@ update ttt set name='lllll' where id in(1,3,2,0); select * from ttt where id in(1,3,2,0) order by id desc; --echo [on slave] --source include/sync_slave_sql_with_master.inc +show create table ttt; select * from ttt where id in(1,3,2,0) order by id desc; --echo [on master] connection master; diff --git a/mysql-test/suite/tianmu/t/issue1175.test b/mysql-test/suite/tianmu/t/issue1175.test new file mode 100644 index 000000000..1562d2402 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1175.test @@ -0,0 +1,54 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1175_test; +--enable_warnings + +--echo # Creating test database issue1175_test +CREATE DATABASE issue1175_test; + +USE issue1175_test; + +--disable_warnings + +--echo # Create test table with tianmu engine +CREATE TABLE t1 ( + id INT AUTO_INCREMENT PRIMARY KEY, + t TIME, + d DATE, + dt DATETIME, + ts TIMESTAMP +) ENGINE=TIANMU; + +--echo # Insert data into test table +INSERT INTO t1 (t, d, dt, ts) VALUES +('00:00:00', '2000-01-01', '2000-01-01 00:00:00', '2000-01-01 00:00:00'), +('-838:59:59', '2001-02-28', '2001-02-28 00:00:00', '2001-02-28 00:00:00'), +('838:59:59', '2002-03-31', '2002-03-31 23:59:59', '2002-03-31 23:59:59'), +('-100:00:00', '2010-12-31', '2010-12-31 12:34:56', '2010-12-31 12:34:56'), +('200:00:00', '2011-11-30', '2011-11-30 18:00:00', '2011-11-30 18:00:00'), +('-400:00:00', '2012-02-29', '2012-02-29 01:23:45', '2012-02-29 01:23:45'), +('720:00:00', '2020-10-31', '2020-10-31 14:00:00', '2020-10-31 14:00:00'), +('05:30:15', '1985-04-12', '1985-04-12 05:30:15.123', '1985-04-12 05:30:15.123'), +('-23:45:01', '1995-08-24', '1995-08-24 15:45:30.987', '1995-08-24 15:45:30.987'), +('67:15:45', '2005-06-15', '2005-06-15 10:59:59.001', '2005-06-15 10:59:59.001'), +('-115:00:00', '2007-12-25', '2007-12-25 23:30:45.500', '2007-12-25 23:30:45.500'), +('350:30:15', '2015-09-05', '2015-09-05 12:00:00.999', '2015-09-05 12:00:00.999'), +('-500:45:30', '2017-03-01', '2017-03-01 01:23:45.250', '2017-03-01 01:23:45.250'), +('600:15:00', '2021-05-01', '2021-05-01 17:30:00.123', '2021-05-01 17:30:00.123'), +('12:34:56', '1970-01-01', '1970-01-01 12:34:56', '1970-01-01 12:34:56'), +('-300:00:00.123', '1980-06-30', '1980-06-30 18:30:45.123', '1980-06-30 18:30:45.123'), +('450:00:00', '1990-03-15', '1990-03-15 11:59:59.999', '1990-03-15 11:59:59.999'), +('-600:00:00.9', '1999-09-09', '1999-09-09 06:45:00.250', '1999-09-09 06:45:00.250'), +('-09:00:00', '2005-02-28', '2005-02-28 15:00:00.123', '2005-02-28 15:00:00.123'), +('-123:45:00', '2008-08-08', '2008-08-08 20:15:30.987', '2008-08-08 20:15:30.987'), +('99:00:00', '2013-07-07', '2013-07-07 17:30:45.500', '2013-07-07 17:30:45.500'), +('-220:00:00', '2016-04-30', '2016-04-30 02:00:00.999', '2016-04-30 02:00:00.999'), +('580:00:00', '2019-12-31', '2019-12-31 01:23:45.250', '2019-12-31 01:23:45.250'), +('-750:00:00', '2021-08-31', '2021-08-31 09:45:00.123', '2021-08-31 09:45:00.123'); + +--echo # Select all data from test table +SELECT * FROM t1 ORDER BY id; + +--echo # Dropping test database issue1175_test +DROP DATABASE issue1175_test; diff --git a/mysql-test/suite/tianmu/t/issue1186-slave.opt b/mysql-test/suite/tianmu/t/issue1186-slave.opt index f217c0127..43c6c2ea1 100644 --- a/mysql-test/suite/tianmu/t/issue1186-slave.opt +++ b/mysql-test/suite/tianmu/t/issue1186-slave.opt @@ -1 +1,2 @@ ---sql_mode='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR' +--tianmu_mandatory=ON +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1318-master.opt b/mysql-test/suite/tianmu/t/issue1318-master.opt index 4494579d7..4eb1b974d 100644 --- a/mysql-test/suite/tianmu/t/issue1318-master.opt +++ b/mysql-test/suite/tianmu/t/issue1318-master.opt @@ -1 +1,2 @@ ---sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_KEY_ERROR +--sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1325-slave.opt b/mysql-test/suite/tianmu/t/issue1325-slave.opt new file mode 100644 index 000000000..43c6c2ea1 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1325-slave.opt @@ -0,0 +1,2 @@ +--tianmu_mandatory=ON +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1325.test b/mysql-test/suite/tianmu/t/issue1325.test index 998df688c..2282bf278 100644 --- a/mysql-test/suite/tianmu/t/issue1325.test +++ b/mysql-test/suite/tianmu/t/issue1325.test @@ -15,14 +15,6 @@ CREATE DATABASE issue1325_test; USE issue1325_test; ---source include/sync_slave_sql_with_master.inc ---echo # on slave: -USE issue1325_test; -show databases; ---disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU,NO_KEY_ERROR'; ---enable_warnings - --echo # --echo # Secondary INDEX --echo # @@ -40,8 +32,7 @@ show create table ttt; --source include/sync_slave_sql_with_master.inc --echo # on slave: -connection master; ---echo # on master: +USE issue1325_test; show create table ttt; --echo # @@ -62,7 +53,6 @@ show create table xxx; --echo # on slave: show create table xxx; - --echo # --echo # Full-text index --echo # @@ -120,5 +110,4 @@ DROP DATABASE issue1325_test; --source include/sync_slave_sql_with_master.inc --echo # on slave: -show databases; stop slave; diff --git a/mysql-test/suite/tianmu/t/issue1402.test b/mysql-test/suite/tianmu/t/issue1402.test new file mode 100644 index 000000000..173f42884 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1402.test @@ -0,0 +1,43 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1402_test; +--enable_warnings + +CREATE DATABASE issue1402_test; + +USE issue1402_test; + +CREATE TABLE t1 (id INT, d DECIMAL(10,4)) ENGINE=tianmu; + +INSERT INTO t1 VALUES (1, 1.2345), (2, 2.3456), (3, 3.4567); + +SELECT COUNT(*), SUM(d), AVG(d), MIN(d), MAX(d) FROM t1; + +SELECT id, SUM(d) FROM t1 GROUP BY id; + +SELECT * FROM t1 ORDER BY d DESC; + +SELECT * FROM t1 WHERE d > (SELECT AVG(d) FROM t1); + +SELECT id, SUM(d) FROM t1 WHERE d > (SELECT AVG(d) FROM t1) GROUP BY id; + +SELECT * FROM t1 WHERE d > (SELECT AVG(d) FROM t1) ORDER BY d DESC; + +SELECT id, SUM(d) FROM t1 WHERE d > (SELECT AVG(d) FROM t1) GROUP BY id ORDER BY SUM(d) DESC; + +SELECT t1.id, t1.d, t2.d FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id; + +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id; + +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id ORDER BY SUM(t1.d) DESC; + +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id ORDER BY SUM(t1.d) DESC LIMIT 1; + +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id ORDER BY SUM(t1.d) DESC LIMIT 1 OFFSET 1; + +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id GROUP BY t1.id HAVING SUM(t1.d) > 3 ORDER BY SUM(t1.d) DESC LIMIT 1 OFFSET 1; + +SELECT t1.id, SUM(t1.d), SUM(t2.d) FROM t1 JOIN (SELECT id, d FROM t1 WHERE d > 2) t2 ON t1.id = t2.id WHERE t1.id > 1 GROUP BY t1.id HAVING SUM(t1.d) > 3 ORDER BY SUM(t1.d) DESC LIMIT 1 OFFSET 1; + +drop database issue1402_test; diff --git a/mysql-test/suite/tianmu/t/issue1464-slave.opt b/mysql-test/suite/tianmu/t/issue1464-slave.opt new file mode 100644 index 000000000..43c6c2ea1 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1464-slave.opt @@ -0,0 +1,2 @@ +--tianmu_mandatory=ON +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1464.test b/mysql-test/suite/tianmu/t/issue1464.test new file mode 100644 index 000000000..498df28e8 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1464.test @@ -0,0 +1,44 @@ +--source include/have_tianmu.inc +--source include/have_binlog_format_row.inc +--disable_warnings +--source include/master-slave.inc +--enable_warnings + +connection master; +--echo # on master: +--disable_warnings +DROP DATABASE IF EXISTS issue1464_test; +--enable_warnings +CREATE DATABASE issue1464_test; +USE issue1464_test; +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +USE issue1464_test; + +connection master; +--echo # on master: +create table ttt(id varchar(64) primary key,name varchar(10))engine=innodb; +insert into ttt values('0000352b6b4f4011bd18da7176e22c03','AAA'); +insert into ttt values('000246c51ca745f893a705f1699e9b2a','BBB'); +insert into ttt values('00049c87d9c64c498e004f6b08f1dd38','CCC'); +delete from ttt where id='0000352b6b4f4011bd18da7176e22c03'; +select * from ttt order by id; +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +show create table ttt; +select * from ttt order by id; + +connection master; +--echo # on master: +insert into ttt values('0000352b6b4f4011bd18da7176e22c03','AAA'); +update ttt set name='name_' where id='000246c51ca745f893a705f1699e9b2a'; +select * from ttt order by id; +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +select * from ttt order by id; + +connection master; +--echo # on master: +DROP DATABASE issue1464_test; +--source include/sync_slave_sql_with_master.inc +stop slave; diff --git a/mysql-test/suite/tianmu/t/issue1510-master.opt b/mysql-test/suite/tianmu/t/issue1510-master.opt new file mode 100644 index 000000000..e3c87f6c3 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1510-master.opt @@ -0,0 +1 @@ +--autocommit=0 \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1510.test b/mysql-test/suite/tianmu/t/issue1510.test new file mode 100644 index 000000000..640acae21 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1510.test @@ -0,0 +1,23 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1510_test; +--enable_warnings + +CREATE DATABASE issue1510_test; + +USE issue1510_test; + +create table ttt(id int primary key,name varchar(10)); +begin; +insert into ttt values(1,'AAA'); +commit; +select * from ttt; +drop table ttt; + +create table ttt(id int primary key,name varchar(10)); +insert into ttt values(1,'AAA'); +select * from ttt; +drop table ttt; + +DROP DATABASE issue1510_test; diff --git a/mysql-test/suite/tianmu/t/issue1523-slave.opt b/mysql-test/suite/tianmu/t/issue1523-slave.opt new file mode 100644 index 000000000..8404579b8 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1523-slave.opt @@ -0,0 +1,3 @@ +--tianmu_mandatory=ON +--tianmu_no_key_error=ON +--tianmu_insert_delayed=1 \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1523.test b/mysql-test/suite/tianmu/t/issue1523.test new file mode 100644 index 000000000..6762bb0be --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1523.test @@ -0,0 +1,154 @@ +--source include/have_tianmu.inc +--source include/have_binlog_format_row.inc +--disable_warnings +--source include/master-slave.inc +--enable_warnings + +connection master; +--echo # on master: +--disable_warnings +DROP DATABASE IF EXISTS issue1523_test; +--enable_warnings +CREATE DATABASE issue1523_test; +USE issue1523_test; +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +USE issue1523_test; + +connection master; +--echo # on master: +CREATE TABLE t1 ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `dev_code` varchar(20) NOT NULL, + `port` smallint(2) DEFAULT '0', + `server_ip` varchar(20) DEFAULT NULL, + `work_status` int(1) DEFAULT '2', + `port_link_car` int(1) NOT NULL DEFAULT '0', + `last_order_sn` varchar(42) DEFAULT NULL, + `last_charge_type` smallint(1) DEFAULT NULL, + `last_charge_mode` int(2) DEFAULT '0', + `last_status` smallint(1) DEFAULT NULL, + `last_soc` int(3) DEFAULT NULL, + `last_car_no` varchar(42) DEFAULT NULL, + `last_vin` varchar(45) DEFAULT NULL, + `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `portindex` (`dev_code`,`port`), + KEY `dev_code` (`dev_code`) +) ENGINE=INNODB; + +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(1,'3301081000000019',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); + +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(2,'3301081000000020',0,'172.16.171.219',3,1,1,'2018-08-20 13:46:42','2023-04-02 22:10:30'); + +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(3,'3301081000000021',0,'172.16.171.219',4,2,2,'2018-08-20 13:46:42','2023-04-02 22:10:30'); + +insert into t1 values +(4,'3301081000000022',1,'172.16.171.219',2,1,'2023040314582504221842260',5,0,5,100,'JJY3786','LKLA6G1M4HA727506','2018-08-20 13:46:42','2023-04-02 22:10:30'); + +insert into t1 values +(5,'3301081000000023',1,'172.16.171.219',2,1,'2023040314582504221842261',6,0,6,101,'JJY3787','LKLA6G1M4HA727506','2018-08-20 13:46:42','2023-04-02 22:10:30'); + +insert into t1 values +(6,'3301081000000024',1,'172.16.171.219',2,1,'2023040314582504221842262',7,0,7,102,'JJY3788','LKLA6G1M4HA727506','2018-08-20 13:46:42','2023-04-02 22:10:30'); + +update t1 set last_car_no='JJY3786' where id=1; +update t1 set last_car_no=NULL where id=1; +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(7,'3301081000000025',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); + +select last_car_no from t1 where id=1; +select count(*) from t1; + +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +sleep 5; +select last_car_no from t1 where id=1; +select count(*) from t1; + +connection master; +--echo # on master: +update t1 set last_car_no='JJY3786' where id=1; +update t1 set last_car_no=NULL where id=1; +update t1 set last_car_no='JJY3786' where id=1; +update t1 set last_car_no=NULL where id=1; +update t1 set last_car_no='JJY3786' where id=1; +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(8,'3301081000000026',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); + +select last_car_no from t1 where id=1; +select count(*) from t1; + +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +sleep 5; +select last_car_no from t1 where id=1; +select count(*) from t1; + +connection master; +--echo # on master: +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(9,'3301081000000027',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +delete from t1 where id=9; +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(9,'3301081000000027',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +select last_car_no from t1 where id=9; +select count(*) from t1; + +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +sleep 5; +select last_car_no from t1 where id=9; +select count(*) from t1; + +connection master; +--echo # on master: +update t1 set last_car_no=NULL where id=1; +delete from t1 where id =1; +select last_car_no from t1 where id=1; +select count(*) from t1; + +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +sleep 5; +select last_car_no from t1 where id=1; +select count(*) from t1; + +connection master; +--echo # on master: +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(10,'3301081000000028',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +update t1 set last_car_no='JJY3786' where id=10; +select last_car_no from t1 where id=10; +select count(*) from t1; + +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +sleep 5; +select last_car_no from t1 where id=10; +select count(*) from t1; + +connection master; +--echo # on master: +insert into t1(id,dev_code,port,server_ip,work_status,port_link_car,last_charge_mode,create_time,update_time) values +(11,'3301081000000029',0,'172.16.171.219',2,0,0,'2018-08-20 13:46:42','2023-04-02 22:10:30'); +update t1 set last_car_no='JJY3786' where id=11; +delete from t1 where id =11; +select last_car_no from t1 where id=11; +select count(*) from t1; + +--source include/sync_slave_sql_with_master.inc +--echo # on slave: +sleep 5; +select last_car_no from t1 where id=11; +select count(*) from t1; + +connection master; +--echo # on master: +DROP DATABASE issue1523_test; +--source include/sync_slave_sql_with_master.inc +stop slave; diff --git a/mysql-test/suite/tianmu/t/issue1564.test b/mysql-test/suite/tianmu/t/issue1564.test new file mode 100644 index 000000000..5314f03f3 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1564.test @@ -0,0 +1,27 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1564; +--enable_warnings +create database issue1564; +use issue1564; + +create table t(a bigint not null); +insert into t values(-222222), (-22), (-15),(-16),(0), (11), (12), (9223372036854775807); +select * from t; +select * from t where a = 18446744073709551601; +select * from t where a != 18446744073709551601; +select * from t where a = -22; +select * from t where a != -22; +select * from t where a in(-16, -15, -11); +select * from t where a > 18446744073709551599; +select * from t where a >= 18446744073709551599; +select * from t where a < 18446744073709551599; +select * from t where a <= 18446744073709551599; +select * from t where a between -22 and 18446744073709551599; +select * from t where a between -22 and 9223372036854775807; +select * from t where a between -222222 and 9223372036854775807; +select * from t where a between 9223372036854775807 and -22; + +drop table t; +drop database issue1564; diff --git a/mysql-test/suite/tianmu/t/issue1599.test b/mysql-test/suite/tianmu/t/issue1599.test new file mode 100644 index 000000000..328829a3d --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1599.test @@ -0,0 +1,42 @@ +--source include/have_tianmu.inc + +--disable_warnings + +CREATE DATABASE IF NOT EXISTS test_db_1599; + +USE test_db_1599; + +create table ttt(c1 int,c2 int); + +insert into ttt values(327266,1),(327267,1),(327268,1),(327269,1),(327270,1); + +select c1 from ttt union select 'aaa' c1 from (select c2 from ttt where c1 IN (327265)) x; + +select c1 from ttt union all select 'aaa' c1 from (select c2 from ttt where c1 IN (327265)) x; + +select c1 from ttt union select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; + +select c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; + +select 111 c1 from ttt union select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; + +select 111 c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (327265)) x; + +drop table ttt; + +create table ttt(c1 decimal(18,0),c2 decimal(18,0)); + +insert into ttt values(3000000000027266,1),(3000000000027267,1),(3000000000027268,1),(3000000000027269,1),(3000000000027270,1); + +select c1 from ttt union select 'aaa' c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; + +select c1 from ttt union select 111 c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; + +select 'aaa' c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; + +select 111 c1 from ttt union all select 111 c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; + +select c1 from ttt union all select 'aaa' c1 from (select c2 from ttt where c1 IN (3000000000027265)) x; + + +drop database test_db_1599; diff --git a/mysql-test/suite/tianmu/t/issue1616.test b/mysql-test/suite/tianmu/t/issue1616.test new file mode 100644 index 000000000..7805fb960 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1616.test @@ -0,0 +1,64 @@ +--source include/have_tianmu.inc +--disable_warnings +DROP DATABASE IF EXISTS issue1616_test; +CREATE DATABASE issue1616_test; +USE issue1616_test; +--enable_warnings + +CREATE TABLE T1 (id int(11) NOT NULL auto_increment, parent_id int(11) DEFAULT '0' NOT NULL, level tinyint(4) + DEFAULT '0' NOT NULL, PRIMARY KEY (id)) engine=tianmu; + +INSERT INTO T1 VALUES (3,1,1),(4,1,1); +--ERROR 1062 +INSERT INTO T1 VALUES (3,1,1),(4,1,1); + +SELECT * FROM T1; + +UPDATE IGNORE T1 SET id=id+1; + +SELECT * FROM T1; + +--ERROR 1062 +UPDATE T1 SET id =10; + +SELECT * FROM T1; + +--ERROR 1062 +UPDATE T1 SET ID=5 WHERE ID=3; +SELECT * FROM T1; + +DROP TABLE T1; + + +CREATE TABLE T2 (dt datetime, val int, primary key(dt)) ENGINE =tianmu; +INSERT INTO T2 VALUES ('2017-11-05 20:29:36',1), ('2027-11-05 20:29:36', 2); +--ERROR 1062 +UPDATE T2 SET dt ='2027-11-05 20:29:36' WHERE val =1; + +SELECT * FROM T2; +DROP TABLE T2; + +#multi-keys +CREATE TABLE T3 (id int(11) NOT NULL auto_increment, parent_id int(11) DEFAULT '0' NOT NULL, level tinyint(4) + DEFAULT '0' NOT NULL, PRIMARY KEY (id, parent_id)) engine=tianmu; + +INSERT INTO T3 VALUES (3,1,1),(4,1,1); +--ERROR 1062 +INSERT INTO T3 VALUES (3,1,1),(4,1,1); + +UPDATE IGNORE T3 SET id=id+1; +SELECT * FROM T3; + +DROP TABLE T3; + +CREATE TABLE T4 (id int(11) NOT NULL auto_increment, parent_id int(11) DEFAULT '0' NOT NULL, level tinyint(4) + DEFAULT '0' NOT NULL, PRIMARY KEY (id)) engine=innodb; + +INSERT INTO T4 VALUES (3,1,1),(4,1,1); +--ERROR 1062 +UPDATE T4 SET id =10; + +SELECT * FROM T4; +DROP TABLE T4; + +DROP DATABASE issue1616_test; diff --git a/mysql-test/suite/tianmu/t/issue1637-master.opt b/mysql-test/suite/tianmu/t/issue1637-master.opt new file mode 100644 index 000000000..02eff7f9d --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1637-master.opt @@ -0,0 +1,3 @@ +--tianmu_mandatory=ON +--tianmu_no_key_error=ON +--tianmu_insert_delayed=0 diff --git a/mysql-test/suite/tianmu/t/issue1637.test b/mysql-test/suite/tianmu/t/issue1637.test new file mode 100644 index 000000000..991fe6064 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1637.test @@ -0,0 +1,22 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1637_test; +--enable_warnings + +CREATE DATABASE issue1637_test; + +USE issue1637_test; + +create table ttt(id int primary key,name varchar(10)); +insert into ttt values(1,'aaa'); +insert into ttt values(2,'bbb'); +--disable_warnings +insert ignore into ttt values(2,'ccc'); +--enable_warnings + +sleep 2; + +select * from ttt; + +DROP DATABASE issue1637_test; diff --git a/mysql-test/suite/tianmu/t/issue1662.test b/mysql-test/suite/tianmu/t/issue1662.test new file mode 100644 index 000000000..1db590381 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1662.test @@ -0,0 +1,53 @@ +--source include/have_tianmu.inc + +--disable_warnings + +--let $my_var = 0 + +--echo # Create test database +CREATE DATABASE IF NOT EXISTS test_db_1662; + +USE test_db_1662; + +--echo # Create test table with tianmu engine +CREATE TABLE IF NOT EXISTS test_table ( + id INT, + value INT, + PRIMARY KEY (id) +) ENGINE=tianmu; + +--echo # Insert data into test table +INSERT INTO test_table (id, value) VALUES + (1, 10), + (2, 20), + (3, 10), + (4, 30), + (5, 20); + +--echo # Select data from test table with user-defined variable +SELECT + id, + value, + @my_var := IF(value = @prev_value, @my_var, @my_var + 1) AS group_id, + @prev_value := value +FROM + test_table, + (SELECT @my_var := 0, @prev_value := NULL) AS init +ORDER BY + value, + id; + +SELECT + id, + value, + @my_var := IF(id = @prev_value, @my_var, @my_var + 1) AS group_id, + @prev_value := value +FROM + test_table, + (SELECT @my_var := 0, @prev_value := NULL) AS init +ORDER BY + value, + id; + +DROP DATABASE test_db_1662; + diff --git a/mysql-test/suite/tianmu/t/issue1696.test b/mysql-test/suite/tianmu/t/issue1696.test new file mode 100644 index 000000000..cdc0ed5dc --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1696.test @@ -0,0 +1,77 @@ +--source include/have_tianmu.inc + +--disable_warnings + +--echo # Creating test database test_db_1696 +CREATE DATABASE IF NOT EXISTS test_db_1696; + +USE test_db_1696; + +CREATE DATABASE IF NOT EXISTS test_database; +USE test_database; + +CREATE TABLE IF NOT EXISTS t1 ( + id INT NOT NULL, + value INT NOT NULL +) ENGINE=tianmu; + +INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 1), (5, 2), (6, 3); + +CREATE TABLE IF NOT EXISTS t2 ( + id INT NOT NULL, + value INT NOT NULL +) ENGINE=tianmu; + +INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3), (4, 1), (5, 2), (6, 3); + +CREATE TABLE IF NOT EXISTS t3 ( + id INT NOT NULL, + value INT NOT NULL +) ENGINE=tianmu; + +INSERT INTO t3 VALUES (1, 1), (2, 2), (3, 3), (4, 1), (5, 2), (6, 3); + +SET @counter = 0; + +SELECT + *, + IF(@counter != 1, @counter, @counter := @counter + 1) AS counter +FROM + ( + SELECT + t1.id AS id1, + t1.value AS value1, + t2.id AS id2, + t2.value AS value2, + t3.id AS id3, + t3.value AS value3 + FROM + t1 + JOIN t2 ON t1.value = t2.value + JOIN t3 ON t2.value = t3.value + ) AS derived_table; +DROP TABLE t1, t2, t3; + +set @rankno = 1; + +create table d(taxis_no int); + +insert into d values(1); +insert into d values(1); +insert into d values(1); + +SELECT IF(@rankno != d.taxis_no, @rankno := 1, @rankno := @rankno + 1) from d; + +set @rankno = 1; + +drop table d; +create table d(taxis_no int); + +insert into d values(1); +insert into d values(2); +insert into d values(3); + +SELECT IF(@rankno != d.taxis_no, @rankno := 1, @rankno := @rankno + 1) from d; + +--echo # Dropping test database test_db_1696 +DROP DATABASE IF EXISTS test_db_1696; \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue1707.test b/mysql-test/suite/tianmu/t/issue1707.test new file mode 100644 index 000000000..10e6a878e --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1707.test @@ -0,0 +1,41 @@ +--source include/have_tianmu.inc + +--disable_warnings + +CREATE DATABASE IF NOT EXISTS test_db_1707; + +USE test_db_1707; + +CREATE TABLE tianmu_table ( + id INT NOT NULL, + name VARCHAR(50) NOT NULL, + age INT NOT NULL, + gender VARCHAR(10) NOT NULL, + salary INT NOT NULL, + address VARCHAR(100) NOT NULL +) ENGINE=tianmu; + +INSERT INTO tianmu_table + (id, name, age, gender, salary, address) +VALUES + (1, 'John', 25, 'Male', 50000, '123 Main St'), + (2, 'Jane', 30, 'Female', 60000, '456 Elm St'), + (3, 'Bob', 35, 'Male', 70000, '789 Maple St'); + + +select @age_cutoff := age +from ( +SELECT name, age, gender, salary +FROM ( + SELECT name, age, gender, salary + FROM tianmu_table + WHERE age < 30 + UNION ALL + SELECT name, age, gender, salary + FROM tianmu_table + WHERE age >= 30 +) AS derived_table +WHERE salary > 30 ) H; + + +drop database test_db_1707; diff --git a/mysql-test/suite/tianmu/t/issue1784.test b/mysql-test/suite/tianmu/t/issue1784.test new file mode 100644 index 000000000..f77eefda8 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1784.test @@ -0,0 +1,158 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1784_test; + +CREATE DATABASE issue1784_test; + +USE issue1784_test; + +### tianmu + +## no value + +create table t1 (age int) engine=tianmu; + +select * from t1; + +select age from t1; + +select age, sum(age) from t1 group by age; + +select age, sum(age) from (select * from t1) ta group by age; + +select case when age is not null then age else 33 end, sum(age) from t1 group by age; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; + +## has value + +insert into t1 values(1); + +select * from t1; + +select age from t1; + +select age, sum(age) from t1 group by age; + +select age, sum(age) from (select * from t1) ta group by age; + +select case when age is not null then age else 33 end, sum(age) from t1 group by age; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; + +### innodb + +## no value + +drop table t1; + +create table t1 (age int) engine=innodb; + +select * from t1; + +select age from t1; + +select age, sum(age) from t1 group by age; + +select age, sum(age) from (select * from t1) ta group by age; + +select case when age is not null then age else 33 end, sum(age) from t1 group by age; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; + +## has value + +insert into t1 values(1); + +select * from t1; + +select age from t1; + +select age, sum(age) from t1 group by age; + +select age, sum(age) from (select * from t1) ta group by age; + +select case when age is not null then age else 33 end, sum(age) from t1 group by age; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta group by age; + +#### + +drop table t1; + +SET sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; + +### tianmu + +## no value + +create table t1 (age int) engine=tianmu; + +select * from t1; + +select age from t1; + +select age, sum(age) from t1; + +select age, sum(age) from (select * from t1) ta; + +select case when age is not null then age else 33 end, sum(age) from t1; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; + +## has value + +insert into t1 values(1); + +select * from t1; + +select age from t1; + +select age, sum(age) from t1; + +select age, sum(age) from (select * from t1) ta; + +select case when age is not null then age else 33 end, sum(age) from t1; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; + +### innodb + +## no value + +drop table t1; + +create table t1 (age int) engine=innodb; + +select * from t1; + +select age from t1; + +select age, sum(age) from t1; + +select age, sum(age) from (select * from t1) ta; + +select case when age is not null then age else 33 end, sum(age) from t1; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; + +## has value + +insert into t1 values(1); + +select * from t1; + +select age from t1; + +select age, sum(age) from t1; + +select age, sum(age) from (select * from t1) ta; + +select case when age is not null then age else 33 end, sum(age) from t1; + +select case when age is not null then age else 33 end, sum(age) from (select * from t1) ta; + +## clean test database + +DROP DATABASE issue1784_test; diff --git a/mysql-test/suite/tianmu/t/issue1808.test b/mysql-test/suite/tianmu/t/issue1808.test new file mode 100644 index 000000000..90ae0798f --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1808.test @@ -0,0 +1,20 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1808_test; + +CREATE DATABASE issue1808_test; + +USE issue1808_test; + +--enable_warnings +--disable_query_log + +CREATE TABLE ttt(c1 decimal(18,0),c2 decimal(18,0)); +INSERT INTO ttt VALUES(3000000000027266,1),(3000000000027267,1),(3000000000027268,1),(3000000000027269,1),(3000000000027270,1); + +--enable_query_log +SELECT c1 FROM ttt UNION ALL SELECT 'aaa' c1 FROM (SELECT c2 FROM ttt WHERE c1 IN (3000000000027265)) x ORDER BY c1; + +DROP DATABASE issue1808_test; + diff --git a/mysql-test/suite/tianmu/t/issue1848.test b/mysql-test/suite/tianmu/t/issue1848.test new file mode 100644 index 000000000..cd8a38359 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1848.test @@ -0,0 +1,43 @@ +-- source include/have_tianmu.inc + +--disable_warnings + +--disable_query_log + +DROP DATABASE IF EXISTS issue1848_test_db; +CREATE DATABASE issue1848_test_db; + +USE issue1848_test_db; + +DROP TABLE IF EXISTS squence; + +CREATE TABLE sequence ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created_date` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=TIANMU AUTO_INCREMENT=3000000004910127 DEFAULT CHARSET=utf8mb4; + +INSERT INTO `sequence` +VALUES (3000000000010000,'2023-04-17 15:25:11'), +(3000000000010001,'2023-04-17 15:29:14'), +(3000000000010002,'2023-04-17 15:29:14'), +(3000000000010003,'2023-04-17 15:29:14'), +(3000000000010004,'2023-04-17 15:29:14'), +(3000000000010005,'2023-04-17 15:29:14'), +(3000000000010006,'2023-04-17 15:29:14'), +(3000000000010007,'2023-04-17 15:29:14'), +(3000000000010008,'2023-04-17 15:29:14'), +(3000000000010009,'2023-04-17 15:29:14'), +(3000000000010010,'2023-04-17 15:29:14'); + +--enable_query_log + +SELECT GROUP_CONCAT(t.id) FROM sequence t; + +--disable_query_log +DROP TABLE sequence; + +DROP DATABASE issue1848_test_db; +--enable_query_log + +--enable_warnings diff --git a/mysql-test/suite/tianmu/t/issue1855.test b/mysql-test/suite/tianmu/t/issue1855.test new file mode 100644 index 000000000..914e401d2 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1855.test @@ -0,0 +1,88 @@ +-- source include/have_tianmu.inc + +--disable_warnings + +--disable_query_log + +DROP DATABASE IF EXISTS issue1855_test_db; +CREATE DATABASE issue1855_test_db; + +USE issue1855_test_db; + +DROP TABLE IF EXISTS squence; + +CREATE TABLE ttt ( + p_id varchar(50) NOT NULL, + p_val int NOT NULL +) ENGINE=TIANMU AUTO_INCREMENT=3000000004910127 DEFAULT CHARSET=utf8mb4; + +INSERT INTO `ttt` +VALUES("THIS IS", 20), +("THIS IS", 5), +("A TEST", 2), +("FOR SUM LENGTH", 10); +--enable_query_log + +SELECT SUM(LENGTH(p_id)) FROM ttt; + +SELECT SUM(LENGTH(p_id)/2) FROM ttt; + +SELECT SUM(LENGTH(p_val)) FROM ttt; + +SELECT SUM(LENGTH(p_val)/2) FROM ttt; + +--disable_query_log + +--DELIMITER // +CREATE PROCEDURE insert_data() +wholeblock:BEGIN + DECLARE x INT; + DECLARE str VARCHAR(50); + DECLARE str1 VARCHAR(50); + SET x = 0; + SET str = 'this is '; + SET str1 = ''; + + loop_label: LOOP + IF x > 10000 THEN + LEAVE loop_label; + END IF; + + SET str1 = substring(md5(rand()), 1, 10); + SET str = CONCAT(str,str1,','); + SET str = CONCAT(str,x,','); + + INSERT INTO ttt VALUES (str, x); + SET str =''; + SET x = x + 1; + ITERATE loop_label; + END LOOP; +END// + +--DELIMITER ; + +CALL insert_data(); + +DROP PROCEDURE insert_data; + +SHOW VARIABLES LIKE "%tianmu_groupby_parallel%"; + +SET GLOBAL tianmu_groupby_parallel_rows_minimum = 100; +SET GLOBAL tianmu_groupby_parallel_degree = 4; + +SHOW VARIABLES LIKE "%tianmu_groupby_parallel%"; + +SELECT SUM(LENGTH(p_id)) FROM ttt; + +SELECT SUM(LENGTH(p_id)/2) FROM ttt; + +SELECT SUM(LENGTH(p_val)) FROM ttt; + +SELECT SUM(LENGTH(p_val)/2) FROM ttt; + + +DROP TABLE ttt; +DROP DATABASE issue1855_test_db; +--enable_query_log + +--enable_warnings diff --git a/mysql-test/suite/tianmu/t/issue1860.test b/mysql-test/suite/tianmu/t/issue1860.test new file mode 100644 index 000000000..3077ad01d --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1860.test @@ -0,0 +1,43 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1860_test; + +CREATE DATABASE issue1860_test; +USE issue1860_test; +--enable_warnings + + +CREATE TABLE tt(id decimal(18,0), dt datetime) ENGINE =TIANMU; +INSERT INTO tt VALUES(1111.0, '2023-01-01'); + +SELECT id FROM tt UNION SELECT 2222 c1 FROM dual; + +INSERT INTO tt VALUES(2222.0, '2023-02-02'); + +SELECT id FROM tt UNION SELECT 2222 c1 FROM dual; +SELECT id FROM tt UNION ALL SELECT 2222 c1 FROM dual; + +SELECT id FROM tt UNION SELECT 2222 ; +sELECT id FROM tt UNION ALL SELECT 2222; + +SELECT id, dt FROM tt UNION SELECT 2222, '2022-01-01'; +SELECT id, dt FROM tt UNION SELECT 2222, str_to_date('2022-02-03', '%Y-%m-%d'); +SELECT id, dt FROM tt UNION SELECT 2222, str_to_date('2023-02-02', '%Y-%m-%d'); + +#ERROR 1105 (HY000): wrong types of columns +--error 1105 +SELECT dt FROM tt UNION SELECT 2222; +SELECT dt FROM tt UNION SELECT '2222'; + +#ERROR 1222 (21000): The used SELECT statements have a different number of columns +--error 1222 +SELECT * FROM tt UNION SELECT 222; +--error 1222 +SELECT * FROM tt UNION ALL SELECT 222; + + +DROP TABLE tt; + +DROP DATABASE issue1860_test; + diff --git a/mysql-test/suite/tianmu/t/issue1861.test b/mysql-test/suite/tianmu/t/issue1861.test new file mode 100644 index 000000000..02ad68d0d --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1861.test @@ -0,0 +1,78 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1861_test; + +CREATE DATABASE issue1861_test; +USE issue1861_test; +--enable_warnings + +CREATE TABLE `c1fg_pool` ( + `ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', + PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `c1fg_pl_node` ( + `ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', + `POOL_ID` decimal(18,0) NOT NULL DEFAULT '-1', + `COMPANY_ID` decimal(18,0) DEFAULT '-1', + PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; + + +CREATE TABLE `c1fg_pl_account` ( + `ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', + `NODE_ID` decimal(18,0) NOT NULL DEFAULT '-1', + PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `c1fg_pl_subsidiary` ( + `ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1', + `ACCOUNT_ID` decimal(18,0) NOT NULL DEFAULT '-1', + `FISCAL_DATE` date DEFAULT NULL, + `DR_AMOUNT` decimal(16,2) NOT NULL DEFAULT '0.00' , + PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; + + +CREATE TABLE `c1md_company` ( + `ROW_ID` decimal(18,0) NOT NULL DEFAULT '-1' , + `SYS_ID` decimal(18,0) NOT NULL DEFAULT '-1' , + PRIMARY KEY (`ROW_ID`) +) ENGINE=TIANMU DEFAULT CHARSET=utf8mb4; + +#--------------------------------------------------- +SELECT B.company_id, + '上划日' ud_type, + 2 sort_no, + '合计' fiscal_date, + DATE_FORMAT('2023-06-06', '%Y-%m-%d') fiscal_date, + C.pl_amount + FROM c1fg_pool A + INNER JOIN c1fg_pl_node B + ON A.row_id = B.pool_id + LEFT JOIN (SELECT c.node_id, SUM(d.dr_amount) pl_amount + FROM c1fg_pool a, + c1fg_pl_node b, + c1fg_pl_account c, + c1fg_pl_subsidiary d + WHERE a.row_id = b.pool_id + AND b.row_id = c.node_id + AND c.row_id = d.account_id + AND b.company_id IN + (SELECT t1.row_id + FROM c1md_company t1, c1md_company t2 + WHERE t1.sys_id = t2.sys_id) + GROUP BY c.node_id) C +ON B.row_id = C.node_id +ORDER BY B.company_id; + + + +DROP TABLE c1md_company; +DROP TABLE c1fg_pl_subsidiary; +DROP TABLE c1fg_pl_account; +DROP TABLE c1fg_pl_node; +DROP TABLE c1fg_pool; + +DROP DATABASE issue1861_test; diff --git a/mysql-test/suite/tianmu/t/issue1864.test b/mysql-test/suite/tianmu/t/issue1864.test new file mode 100644 index 000000000..a39f2c437 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1864.test @@ -0,0 +1,32 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1864_test; + +CREATE DATABASE issue1864_test; + +USE issue1864_test; + +create table t1(c1 decimal(5,2)) engine=tianmu; +insert into t1 values(111.22); + +create table t2(id int) engine=tianmu; +insert into t2 values(11122); + +select xxx.x from (select c1 as x from t1 union all select 1 as x from t2) xxx; + +select xxx.x from ( select t1.c1 as x from t1 inner join t2 on t1.c1 != t2.id ) xxx; + +CREATE TABLE cs1 (d1 DECIMAL(17), d2 DECIMAL(17,10), d3 DECIMAL(17,17)) engine=tianmu; + +INSERT INTO cs1 VALUES (125, 1.25, 0.125); + +INSERT INTO cs1 VALUES (-125, -1.25, -0.125); + +select * from cs1; + +select * from cs1 union select * from cs1; + +SELECT d1, d1, d2 FROM cs1 UNION SELECT d2, d3, d3 FROM cs1; + +DROP DATABASE issue1864_test; diff --git a/mysql-test/suite/tianmu/t/issue1865.test b/mysql-test/suite/tianmu/t/issue1865.test new file mode 100644 index 000000000..e308fae22 --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue1865.test @@ -0,0 +1,29 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS issue1865_test_db; +--enable_warnings + +CREATE DATABASE issue1865_test_db; + +USE issue1865_test_db; + +create table t1 (a int default 100, b int, c varchar(60))engine=tianmu; + +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +eval load data infile '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue1865.dat' into table t1 (a, c); +select * from t1; + +alter table t1 alter column b drop default; +alter table t1 alter column b set default 10; + +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +eval load data infile '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue1865.dat' into table t1 (a, c); +select * from t1; + +alter table t1 modify c text; +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +eval load data infile '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue1865.dat' into table t1 (a, c); +select * from t1; + +DROP DATABASE issue1865_test_db; diff --git a/mysql-test/suite/tianmu/t/issue364.test.bak b/mysql-test/suite/tianmu/t/issue364.test similarity index 100% rename from mysql-test/suite/tianmu/t/issue364.test.bak rename to mysql-test/suite/tianmu/t/issue364.test diff --git a/mysql-test/suite/tianmu/t/issue433.testbak b/mysql-test/suite/tianmu/t/issue433.test similarity index 100% rename from mysql-test/suite/tianmu/t/issue433.testbak rename to mysql-test/suite/tianmu/t/issue433.test diff --git a/mysql-test/suite/tianmu/t/issue446.testbak b/mysql-test/suite/tianmu/t/issue446.test similarity index 100% rename from mysql-test/suite/tianmu/t/issue446.testbak rename to mysql-test/suite/tianmu/t/issue446.test diff --git a/mysql-test/suite/tianmu/t/issue581.test.bak b/mysql-test/suite/tianmu/t/issue581.test similarity index 100% rename from mysql-test/suite/tianmu/t/issue581.test.bak rename to mysql-test/suite/tianmu/t/issue581.test diff --git a/mysql-test/suite/tianmu/t/issue848-master.opt b/mysql-test/suite/tianmu/t/issue848-master.opt new file mode 100644 index 000000000..4eb1b974d --- /dev/null +++ b/mysql-test/suite/tianmu/t/issue848-master.opt @@ -0,0 +1,2 @@ +--sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION +--tianmu_no_key_error=ON \ No newline at end of file diff --git a/mysql-test/suite/tianmu/t/issue848.test b/mysql-test/suite/tianmu/t/issue848.test index 1fb1f3435..0ce3ff1e9 100644 --- a/mysql-test/suite/tianmu/t/issue848.test +++ b/mysql-test/suite/tianmu/t/issue848.test @@ -1,26 +1,34 @@ --source include/have_tianmu.inc -create database test_issue848; -use test_issue848; + +--disable_warnings +DROP DATABASE IF EXISTS issue848_test; +--enable_warnings + +CREATE DATABASE issue848_test; +USE issue848_test; + CREATE TABLE `t1` ( `c_char` char(10) DEFAULT NULL COMMENT 'char', `c_varchar` varchar(10) DEFAULT NULL COMMENT 'varchar', `c_text` text COMMENT 'text') ENGINE=TIANMU DEFAULT CHARSET=GBK; + show create table t1; insert into t1(c_char,c_varchar,c_text) values(x'D6D0B9FA',x'D5E3BDAD',x'BABCD6DD'); + ALTER TABLE t1 DEFAULT CHARACTER SET gbk; show create table t1; ALTER TABLE t1 CHARACTER SET latin1; show create table t1; -alter table t1 add column ex_column char(30); +ALTER TABLE t1 ADD COLUMN ex_column char(30) AFTER c_text; show create table t1; -ALTER TABLE t1 MODIFY c_char char(10) CHARACTER SET UTF8MB4; -ALTER TABLE t1 MODIFY c_varchar char(10) CHARACTER SET UTF8MB4; -ALTER TABLE t1 MODIFY c_text char(10) CHARACTER SET UTF8MB4; +ALTER TABLE t1 MODIFY c_char char(15) CHARACTER SET UTF8MB4; +ALTER TABLE t1 MODIFY c_varchar char(15) CHARACTER SET UTF8MB4; +ALTER TABLE t1 MODIFY c_text char(15) CHARACTER SET UTF8MB4; show create table t1; select hex(c_char),hex(c_varchar),hex(c_text) from t1; @@ -30,5 +38,5 @@ ALTER TABLE t1 CHANGE c_text c_text char(10) CHARACTER SET GBK; select hex(c_char),hex(c_varchar),hex(c_text) from t1; show create table t1; -drop table t1; -drop database test_issue848; +DROP TABLE t1; +DROP DATABASE issue848_test; diff --git a/mysql-test/suite/tianmu/t/issue880.test b/mysql-test/suite/tianmu/t/issue880.test index 5eedb88ae..6aaa0972f 100644 --- a/mysql-test/suite/tianmu/t/issue880.test +++ b/mysql-test/suite/tianmu/t/issue880.test @@ -121,15 +121,15 @@ CREATE TABLE `issue880_t3` ( --disable_warnings # load data issue880_t1 --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR -eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t1.txt' INTO TABLE issue880_t1; +eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t1.txt' INTO TABLE issue880_t1 FIELDS TERMINATED BY ';'; # load data issue880_t3 --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR -eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t3.txt' INTO TABLE issue880_t3; +eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t3.txt' INTO TABLE issue880_t3 FIELDS TERMINATED BY ';'; # load data issue880_t2 --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR -eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t2.txt' INTO TABLE issue880_t2; +eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/std_data/issue880_t2.txt' INTO TABLE issue880_t2 FIELDS TERMINATED BY ';'; --enable_warnings # test timestamp union timestamp diff --git a/mysql-test/suite/tianmu/t/issue956.test b/mysql-test/suite/tianmu/t/issue956.test index 9994c8fb7..c596999a2 100644 --- a/mysql-test/suite/tianmu/t/issue956.test +++ b/mysql-test/suite/tianmu/t/issue956.test @@ -5,14 +5,14 @@ --enable_warnings --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # default_storage_engine=innodb --echo # --echo [on slave] --source include/sync_slave_sql_with_master.inc set global default_storage_engine=innodb; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -41,13 +41,13 @@ drop table t_issue956; --echo # ---echo # sql_mode='MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # default_storage_engine=innodb --echo # --echo [on slave] set global default_storage_engine=innodb; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings --echo [on master] @@ -75,13 +75,13 @@ drop table t_issue956_2; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # default_storage_engine=tianmu --echo # --echo [on slave] set global default_storage_engine=tianmu; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] @@ -110,13 +110,13 @@ drop table t_issue956_3; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU' +--echo # tianmu_mandatory=ON --echo # default_storage_engine=tianmu --echo # --echo [on slave] set global default_storage_engine=tianmu; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,MANDATORY_TIANMU'; +set global tianmu_mandatory=ON; --enable_warnings @@ -146,13 +146,13 @@ drop table t_issue956_4; --source include/sync_slave_sql_with_master.inc --echo # ---echo # sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' +--echo # tianmu_mandatory=OFF --echo # default_storage_engine=MyISAM --echo # --echo [on slave] set global default_storage_engine=MyISAM; --disable_warnings -set global sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; +set global tianmu_mandatory=OFF; --enable_warnings --echo [on master] diff --git a/mysql-test/suite/tianmu/t/left_right_func.test b/mysql-test/suite/tianmu/t/left_right_func.test new file mode 100644 index 000000000..31285a018 --- /dev/null +++ b/mysql-test/suite/tianmu/t/left_right_func.test @@ -0,0 +1,36 @@ +--source include/have_tianmu.inc + +--echo # +--echo # left and right func test +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS left_right_func_test; +--enable_warnings + +CREATE DATABASE left_right_func_test; +USE left_right_func_test; + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +CREATE TABLE t1 (`time_tk` INT(11) UNSIGNED NOT NULL) DEFAULT CHARSET=latin1; + +INSERT INTO t1 VALUES +(2013113023), +(1900010100), +(2199123100), +(2199123100), +(2147483646), +(2147483647), +(2147483648); + +SELECT LEFT(time_tk,6) AS time_tk_left FROM t1; +SELECT RIGHT(time_tk,6) AS time_tk_right FROM t1; + +DROP TABLE IF EXISTS t1; + +# Clean UP +--disable_warnings +DROP DATABASE left_right_func_test; +--enable_warnings diff --git a/mysql-test/suite/tianmu/t/like_not_like.test b/mysql-test/suite/tianmu/t/like_not_like.test new file mode 100644 index 000000000..e1dd76904 --- /dev/null +++ b/mysql-test/suite/tianmu/t/like_not_like.test @@ -0,0 +1,25 @@ +--source include/have_tianmu.inc + +--echo # +--echo # This test tests the (NOT) LIKE test in filters that is added +--echo # to a FilterCommand in primproc. +--echo # This is a very rare situation, yet somehow I managed to trigger it. +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS like_not_like; +--enable_warnings + +CREATE DATABASE like_not_like; +USE like_not_like; + +CREATE TABLE tcs(d1 CHAR(6), d2 CHAR(6)); + +INSERT INTO tcs(d1, d2) VALUES ('a','a'), ('a', 'b'); + +SELECT 'stonedb like', d1, d2 FROM tcs WHERE (d1 LIKE d2); + +SELECT 'stonedb not like', d1, d2 FROM tcs WHERE (d1 NOT LIKE d2); + +# clean up +DROP DATABASE like_not_like; diff --git a/mysql-test/suite/tianmu/t/load.testbak b/mysql-test/suite/tianmu/t/load.test similarity index 100% rename from mysql-test/suite/tianmu/t/load.testbak rename to mysql-test/suite/tianmu/t/load.test diff --git a/mysql-test/suite/tianmu/t/multi_join.test b/mysql-test/suite/tianmu/t/multi_join.test new file mode 100644 index 000000000..ec3b5a29a --- /dev/null +++ b/mysql-test/suite/tianmu/t/multi_join.test @@ -0,0 +1,36 @@ +--source include/have_tianmu.inc + +--echo # +--echo # right join/left join/inner join /full join +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS multi_join_test; +--enable_warnings + +CREATE DATABASE multi_join_test; +USE multi_join_test; + +drop table if exists all_datatype_table; +create table all_datatype_table(id int not null,c_intger integer,c_char char(10)); + +insert into all_datatype_table values(1,1000,1000); +insert into all_datatype_table values(2,2000,1000); +insert into all_datatype_table values(3,2001,null); +insert into all_datatype_table values(4,2002,'a'); + +select count(*) from all_datatype_table t1 right join all_datatype_table t2 on t1.id=t2.id +inner join all_datatype_table t3 on t1.id=t3.id +right join all_datatype_table t4 on t1.id=t4.id +left join all_datatype_table t5 on t1.id=t5.id +inner join all_datatype_table t6 on t1.id=t6.id +left join all_datatype_table t7 on t1.id=t7.id +right join all_datatype_table t8 on t1.id=t8.id +right join all_datatype_table t10 on t1.id=t10.id +right join all_datatype_table t11 on t1.id=t11.id +right join all_datatype_table t13 on t1.id=t13.id +right join all_datatype_table t15 on t1.id=t15.id +right join all_datatype_table t16 on t1.id=t16.id; + +# Clean UP +drop DATABASE multi_join_test; diff --git a/mysql-test/suite/tianmu/t/order_by.test b/mysql-test/suite/tianmu/t/order_by.test new file mode 100644 index 000000000..b4aa05f2d --- /dev/null +++ b/mysql-test/suite/tianmu/t/order_by.test @@ -0,0 +1,28 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS order_by; +--enable_warnings + +CREATE DATABASE order_by; +USE order_by; + +create table t1 (a int, b int) ; +create table t2 (a int, b int) ; + +insert into t1 values (1, 2), (1, 3), (1, 4), (2, 5), (2, 6), (2, 7); +insert into t2 values (1, 2), (1, 2), (1, 4), (2, 5), (2, 6), (2, 8); + +select * from t1, t2 where t1.a = t2.a and t2.b = (select max(b) from t2 where t1.a = t2.a) order by t1.a,t1.b,t2.b; +select * from t1, t2 where t1.a = t2.a and t2.b < (select max(b) from t2 where t1.a = t2.a) order by t1.a,t1.b,t2.b; +select * from t1, t2 where t1.a = t2.a and t2.b > (select max(b) from t2 where t1.a = t2.a) order by t1.a,t1.b,t2.b; + +select * from t1, t2 where t1.a = t2.a and t1.b = (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t2.b; +select * from t1, t2 where t1.a = t2.a and t2.b < (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t1.a,t1.b,t2.b; +select * from t1, t2 where t1.a = t2.a and t2.b > (select avg(t2.b) from t2 where t1.a = t2.a group by t2.a) order by t1.a,t1.b,t2.b; + +drop table t1; +drop table t2; + +#clean up +DROP DATABASE order_by; diff --git a/mysql-test/suite/tianmu/t/range.test b/mysql-test/suite/tianmu/t/range.test new file mode 100644 index 000000000..4bbcef53b --- /dev/null +++ b/mysql-test/suite/tianmu/t/range.test @@ -0,0 +1,971 @@ +--source include/have_tianmu.inc + +--echo # +--echo # Test range +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS range_test; +--enable_warnings +CREATE DATABASE range_test; +USE range_test; + +--disable_warnings +drop table if exists t1, t2, t3; +--enable_warnings +SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; +CREATE TABLE t1 ( + event_date date DEFAULT '0000-00-00' NOT NULL, + type int(11) DEFAULT '0' NOT NULL, + event_id int(11) DEFAULT '0' NOT NULL, + PRIMARY KEY (event_date,type,event_id) +); + +INSERT INTO t1 VALUES ('1999-07-10',100100,24), ('1999-07-11',100100,25), +('1999-07-13',100600,0), ('1999-07-13',100600,4), ('1999-07-13',100600,26), +('1999-07-14',100600,10), ('1999-07-15',100600,16), ('1999-07-15',100800,45), +('1999-07-15',101000,47), ('1999-07-16',100800,46), ('1999-07-20',100600,5), +('1999-07-20',100600,27), ('1999-07-21',100600,11), ('1999-07-22',100600,17), +('1999-07-23',100100,39), ('1999-07-24',100100,39), ('1999-07-24',100500,40), +('1999-07-25',100100,39), ('1999-07-27',100600,1), ('1999-07-27',100600,6), +('1999-07-27',100600,28), ('1999-07-28',100600,12), ('1999-07-29',100500,41), +('1999-07-29',100600,18), ('1999-07-30',100500,41), ('1999-07-31',100500,41), +('1999-08-01',100700,34), ('1999-08-03',100600,7), ('1999-08-03',100600,29), +('1999-08-04',100600,13), ('1999-08-05',100500,42), ('1999-08-05',100600,19), +('1999-08-06',100500,42), ('1999-08-07',100500,42), ('1999-08-08',100500,42), +('1999-08-10',100600,2), ('1999-08-10',100600,9), ('1999-08-10',100600,30), +('1999-08-11',100600,14), ('1999-08-12',100600,20), ('1999-08-17',100500,8), +('1999-08-17',100600,31), ('1999-08-18',100600,15), ('1999-08-19',100600,22), +('1999-08-24',100600,3), ('1999-08-24',100600,32), ('1999-08-27',100500,43), +('1999-08-31',100600,33), ('1999-09-17',100100,37), ('1999-09-18',100100,37), +('1999-09-19',100100,37), ('2000-12-18',100700,38); + +select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date; +explain select event_date,type,event_id from t1 WHERE type = 100601 and event_date >= "1999-07-01" AND event_date < "1999-07-15" AND (type=100600 OR type=100100) ORDER BY event_date; +select event_date,type,event_id from t1 WHERE event_date >= "1999-07-01" AND event_date <= "1999-07-15" AND (type=100600 OR type=100100) or event_date >= "1999-07-01" AND event_date <= "1999-07-15" AND type=100099; +drop table t1; + +CREATE TABLE t1 ( + PAPER_ID smallint(6) DEFAULT '0' NOT NULL, + YEAR smallint(6) DEFAULT '0' NOT NULL, + ISSUE smallint(6) DEFAULT '0' NOT NULL, + CLOSED tinyint(4) DEFAULT '0' NOT NULL, + ISS_DATE date DEFAULT '0000-00-00' NOT NULL, + PRIMARY KEY (PAPER_ID,YEAR,ISSUE) +); +INSERT INTO t1 VALUES (3,1999,34,0,'1999-07-12'), (1,1999,111,0,'1999-03-23'), + (1,1999,222,0,'1999-03-23'), (3,1999,33,0,'1999-07-12'), + (3,1999,32,0,'1999-07-12'), (3,1999,31,0,'1999-07-12'), + (3,1999,30,0,'1999-07-12'), (3,1999,29,0,'1999-07-12'), + (3,1999,28,0,'1999-07-12'), (1,1999,40,1,'1999-05-01'), + (1,1999,41,1,'1999-05-01'), (1,1999,42,1,'1999-05-01'), + (1,1999,46,1,'1999-05-01'), (1,1999,47,1,'1999-05-01'), + (1,1999,48,1,'1999-05-01'), (1,1999,49,1,'1999-05-01'), + (1,1999,50,0,'1999-05-01'), (1,1999,51,0,'1999-05-01'), + (1,1999,200,0,'1999-06-28'), (1,1999,52,0,'1999-06-28'), + (1,1999,53,0,'1999-06-28'), (1,1999,54,0,'1999-06-28'), + (1,1999,55,0,'1999-06-28'), (1,1999,56,0,'1999-07-01'), + (1,1999,57,0,'1999-07-01'), (1,1999,58,0,'1999-07-01'), + (1,1999,59,0,'1999-07-01'), (1,1999,60,0,'1999-07-01'), + (3,1999,35,0,'1999-07-12'); +select YEAR,ISSUE from t1 where PAPER_ID=3 and (YEAR>1999 or (YEAR=1999 and ISSUE>28)) order by YEAR,ISSUE; +drop table t1; + +CREATE TABLE t1 ( + id int(11) NOT NULL auto_increment, + parent_id int(11) DEFAULT '0' NOT NULL, + level tinyint(4) DEFAULT '0' NOT NULL, + PRIMARY KEY (id) +); +INSERT INTO t1 VALUES (1,0,0), (3,1,1), (4,1,1), (8,2,2), (9,2,2), (17,3,2), +(22,4,2), (24,4,2), (28,5,2), (29,5,2), (30,5,2), (31,6,2), (32,6,2), (33,6,2), +(203,7,2), (202,7,2), (20,3,2), (157,0,0), (193,5,2), (40,7,2), (2,1,1), +(15,2,2), (6,1,1), (34,6,2), (35,6,2), (16,3,2), (7,1,1), (36,7,2), (18,3,2), +(26,5,2), (27,5,2), (183,4,2), (38,7,2), (25,5,2), (37,7,2), (21,4,2), +(19,3,2), (5,1,1), (179,5,2); +# The following select returned 0 rows in 3.23.8 +SELECT * FROM t1 WHERE level = 1 AND parent_id = 1 order by id; +drop table t1; + +# +# Testing of bug in range optimizer with many key parts and > and < +# + +create table t1( + Satellite varchar(25) not null, + SensorMode varchar(25) not null, + FullImageCornersUpperLeftLongitude double not null, + FullImageCornersUpperRightLongitude double not null, + FullImageCornersUpperRightLatitude double not null, + FullImageCornersLowerRightLatitude double not null); + +insert into t1 values("OV-3","PAN1",91,-92,40,50); +insert into t1 values("OV-4","PAN1",91,-92,40,50); + +select * from t1 where t1.Satellite = "OV-3" and t1.SensorMode = "PAN1" and t1.FullImageCornersUpperLeftLongitude > -90.000000 and t1.FullImageCornersUpperRightLongitude < -82.000000; +drop table t1; + +create table t1 ( aString char(100) not null default ""); +insert t1 (aString) values ( "believe in myself" ), ( "believe" ), ("baaa" ), ( "believe in love"); +select * from t1 where aString < "believe in myself" order by aString; +select * from t1 where aString > "believe in love" order by aString; +select * from t1 where aString < "believe in myself" order by aString; +select * from t1 where aString > "believe in love" order by aString; +drop table t1; + +# +# test for a bug with in() and unique key +# + +create table t1 (id int(10) primary key); +insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9); + +select id from t1 where id in (2,5,9) ; +select id from t1 where id=2 or id=5 or id=9 ; +drop table t1; +create table t1 ( id1 int not null, id2 int not null, idnull int null, c char(20), primary key (id1,id2)); +insert into t1 values (0,1,NULL,"aaa"), (1,1,NULL,"aaa"), (2,1,NULL,"aaa"), + (3,1,NULL,"aaa"), (4,1,NULL,"aaa"), (5,1,NULL,"aaa"), + (6,1,NULL,"aaa"), (7,1,NULL,"aaa"), (8,1,NULL,"aaa"), + (9,1,NULL,"aaa"), (10,1,NULL,"aaa"), (11,1,NULL,"aaa"), + (12,1,NULL,"aaa"), (13,1,NULL,"aaa"), (14,1,NULL,"aaa"), + (15,1,NULL,"aaa"), (16,1,NULL,"aaa"), (17,1,NULL,"aaa"), + (18,1,NULL,"aaa"), (19,1,NULL,"aaa"), (20,1,NULL,"aaa"); +select a.id1, b.idnull from t1 as a, t1 as b where a.id2=1 and a.id1=1 and b.id1=a.idnull order by b.id2 desc limit 1; +drop table t1; + + +# +# Problem with optimizing != +# + +create table t1 ( + id int not null auto_increment, + name char(1) not null, + uid int not null, + primary key (id)); + +create table t2 ( + id int not null auto_increment, + name char(1) not null, + uid int not null, + primary key (id)); + +insert into t1(id, uid, name) values(1, 0, ' '); +insert into t1(uid, name) values(0, ' '); + +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +insert into t2(uid, name) select uid, name from t1; +insert into t2(uid, name) select uid, name from t1; +insert into t2(uid, name) select uid, name from t1; +insert into t2(uid, name) select uid, name from t1; +insert into t1(uid, name) select uid, name from t2; +#bug1563select * from t1 order by id; +#bug1563select * from t2 order by id; + +delete from t2; +insert into t2(uid, name) values + (1, CHAR(64+1)), + (2, CHAR(64+2)), + (3, CHAR(64+3)), + (4, CHAR(64+4)), + (5, CHAR(64+5)), + (6, CHAR(64+6)), + (7, CHAR(64+7)), + (8, CHAR(64+8)), + (9, CHAR(64+9)), + (10, CHAR(64+10)), + (11, CHAR(64+11)), + (12, CHAR(64+12)), + (13, CHAR(64+13)), + (14, CHAR(64+14)), + (15, CHAR(64+15)), + (16, CHAR(64+16)), + (17, CHAR(64+17)), + (18, CHAR(64+18)), + (19, CHAR(64+19)), + (20, CHAR(64+20)), + (21, CHAR(64+21)), + (22, CHAR(64+22)), + (23, CHAR(64+23)), + (24, CHAR(64+24)), + (25, CHAR(64+25)), + (26, CHAR(64+26)); + +insert into t1(uid, name) select uid, name from t2 order by uid; +delete from t1; +delete from t2; +insert into t2(id, uid, name) select id, uid, name from t1; + +select count(*) from t1; +select count(*) from t2; + +select * from t1, t2 where t1.uid=t2.uid AND t1.uid > 0; +select * from t1, t2 where t1.uid=t2.uid AND t2.uid > 0; +select * from t1, t2 where t1.uid=t2.uid AND t1.uid != 0; +select * from t1, t2 where t1.uid=t2.uid AND t2.uid != 0; + +select * from t1, t2 where t1.uid=t2.uid AND t1.uid > 0 order by t1.id; +select * from t1, t2 where t1.uid=t2.uid AND t1.uid != 0 order by t1.id; + +drop table t1,t2; + +create table t1 (x bigint unsigned not null); +insert into t1(x) values (0xfffffffffffff0); +insert into t1(x) values (0xfffffffffffff1); +select * from t1; +select count(*) from t1 where x>0; +select count(*) from t1 where x=0; +select count(*) from t1 where x<0; +select count(*) from t1 where x < -16; +select count(*) from t1 where x = -16; +select count(*) from t1 where x > -16; +select count(*) from t1 where x = 18446744073709551601; + + +create table t2 (x bigint not null); +insert into t2(x) values (-16); +insert into t2(x) values (-15); +select * from t2; +select count(*) from t2 where x>0; +select count(*) from t2 where x=0; +select count(*) from t2 where x<0; +select count(*) from t2 where x < -16; +select count(*) from t2 where x = -16; +select count(*) from t2 where x > -16; +#bug1564select count(*) from t2 where x = 18446744073709551601; +drop table t1,t2; + +--disable_warnings +create table t1 (x bigint unsigned not null primary key) engine=innodb; +--enable_warnings +insert into t1(x) values (0xfffffffffffff0); +insert into t1(x) values (0xfffffffffffff1); +select * from t1; +select count(*) from t1 where x>0; +select count(*) from t1 where x=0; +select count(*) from t1 where x<0; +select count(*) from t1 where x < -16; +select count(*) from t1 where x = -16; +select count(*) from t1 where x > -16; +select count(*) from t1 where x = 18446744073709551601; + +drop table t1; + +# +# Bug #11185 incorrect comparison of unsigned int to signed constant +# +create table t1 (a bigint unsigned); +insert into t1 select 184467440737095515; +insert into t1 select 184467440737095514; + +select * from t1 where a <> -1; +select * from t1 where a > -1 or a < -1; +select * from t1 where a > -1; +select * from t1 where a < -1; + +drop table t1; + +# +# Binary Comparison regression in MySQL 4.1 +# Binary searches didnt use a case insensitive index. +# + +set names latin1; +create table t1 (a char(10), b text) character set latin1; +INSERT INTO t1 (a) VALUES +('111'),('222'),('222'),('222'),('222'),('444'),('aaa'),('AAA'),('bbb'); +drop table t1; + +--disable_warnings +CREATE TABLE t1 ( + `CLIENT` char(3) character set latin1 collate latin1_bin NOT NULL default '000', + `ARG1` char(3) character set latin1 collate latin1_bin NOT NULL default '', + `ARG2` char(3) character set latin1 collate latin1_bin NOT NULL default '', + `FUNCTION` varchar(10) character set latin1 collate latin1_bin NOT NULL default '', + `FUNCTINT` int(11) NOT NULL default '0' +) DEFAULT CHARSET=latin1; +--enable_warnings + +INSERT INTO t1 VALUES ('000',' 0',' 0','Text 001',0), ('000',' 0',' 1','Text 002',0), + ('000',' 1',' 2','Text 003',0), ('000',' 2',' 3','Text 004',0), + ('001',' 3',' 0','Text 017',0); + +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 1' OR ARG1 != ' 2'); + +SELECT count(*) FROM t1 WHERE CLIENT='000' AND (ARG1 != ' 2' OR ARG1 != ' 1'); +drop table t1; + +# Wrong range optimizer results, "Use_count: Wrong count ..." +# warnings in server stderr. +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +CREATE TABLE t2 ( + pk1 int(11) NOT NULL, + pk2 int(11) NOT NULL, + pk3 int(11) NOT NULL, + pk4 int(11) NOT NULL, + filler char(82), + PRIMARY KEY (pk1,pk2,pk3,pk4) +) DEFAULT CHARSET=latin1; + +insert into t2 select 1, A.a+10*B.a, 432, 44, 'fillerZ' from t1 A, t1 B; +INSERT INTO t2 VALUES (2621, 2635, 0, 0,'filler'), (2621, 2635, 1, 0,'filler'), + (2621, 2635, 10, 0,'filler'), (2621, 2635, 11, 0,'filler'), + (2621, 2635, 14, 0,'filler'), (2621, 2635, 1000015, 0,'filler'); + +SELECT * FROM t2 +WHERE ((((pk4 =0) AND (pk1 =2621) AND (pk2 =2635))) +OR ((pk4 =1) AND (((pk1 IN ( 7, 2, 1 ))) OR (pk1 =522)) AND ((pk2 IN ( 0, 2635)))) +) AND (pk3 >=1000000); +drop table t1, t2; + +# +# Partial index and long sjis search with '>' fails sometimes +# + +create table t1(a char(2)); +insert into t1 values ('x'), ('xx'); +select a from t1 where a > 'x'; +drop table t1; + +# high mem usage (crash) in range optimizer (depends on order of fields in where) +create table t1 ( + c1 char(10), c2 char(10), c3 char(10), c4 char(10), + c5 char(10), c6 char(10), c7 char(10), c8 char(10), + c9 char(10), c10 char(10), c11 char(10), c12 char(10), + c13 char(10), c14 char(10), c15 char(10), c16 char(10) +); +insert into t1 (c1) values ('1'),('1'),('1'),('1'); + +# This must run without crash and fast: +select * from t1 where + c1 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c2 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c3 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c4 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c5 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c6 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c7 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c8 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c9 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC") + and c10 in ("abcdefgh", "123456789", "qwertyuio", "asddfgh", + "abcdefg1", "123456781", "qwertyui1", "asddfg1", + "abcdefg2", "123456782", "qwertyui2", "asddfg2", + "abcdefg3", "123456783", "qwertyui3", "asddfg3", + "abcdefg4", "123456784", "qwertyui4", "asddfg4", + "abcdefg5", "123456785", "qwertyui5", "asddfg5", + "abcdefg6", "123456786", "qwertyui6", "asddfg6", + "abcdefg7", "123456787", "qwertyui7", "asddfg7", + "abcdefg8", "123456788", "qwertyui8", "asddfg8", + "abcdefg9", "123456789", "qwertyui9", "asddfg9", + "abcdefgA", "12345678A", "qwertyuiA", "asddfgA", + "abcdefgB", "12345678B", "qwertyuiB", "asddfgB", + "abcdefgC", "12345678C", "qwertyuiC", "asddfgC"); +drop table t1; + +# +# Test for optimization request: to use keys for +# NOT IN (c1,...,cn) and NOT BETWEEN c1 AND c2 +# + +CREATE TABLE t1 ( + id int(11) NOT NULL auto_increment, + status varchar(20), + PRIMARY KEY (id) +); + +INSERT INTO t1 VALUES +(1,'B'), (2,'B'), (3,'B'), (4,'B'), (5,'B'), (6,'B'), +(7,'B'), (8,'B'), (9,'B'), (10,'B'), (11,'B'), (12,'B'), +(13,'B'), (14,'B'), (15,'B'), (16,'B'), (17,'B'), (18,'B'), +(19,'B'), (20,'B'), (21,'B'), (22,'B'), (23,'B'), (24,'B'), +(25,'A'), (26,'A'), (27,'A'), (28,'A'), (29,'A'), (30,'A'), +(31,'A'), (32,'A'), (33,'A'), (34,'A'), (35,'A'), (36,'A'), +(37,'A'), (38,'A'), (39,'A'), (40,'A'), (41,'A'), (42,'A'), +(43,'A'), (44,'A'), (45,'A'), (46,'A'), (47,'A'), (48,'A'), +(49,'A'), (50,'A'), (51,'A'), (52,'A'), (53,'C'), (54,'C'), +(55,'C'), (56,'C'), (57,'C'), (58,'C'), (59,'C'), (60,'C'); + +SELECT * FROM t1 WHERE status <> 'A' AND status <> 'B'; +SELECT * FROM t1 WHERE status NOT IN ('A','B'); +SELECT * FROM t1 WHERE status NOT BETWEEN 'A' AND 'B'; +SELECT * FROM t1 WHERE status < 'A' OR status > 'B'; + +DROP TABLE t1; + +# +# Test for range to be used over a view +# + +CREATE TABLE t1 (a int, b int, primary key(a,b)); + +INSERT INTO t1 VALUES + (1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3),(4,1),(4,2),(4,3); + +CREATE VIEW v1 as SELECT a,b FROM t1 WHERE b=3; + +SELECT a,b FROM t1 WHERE a < 2 and b=3; +SELECT a,b FROM v1 WHERE a < 2 and b=3; + +DROP VIEW v1; +DROP TABLE t1; + +# +# DELETE statement with a NOT (LIKE/<=>) where condition +# for an indexed attribute +# + +CREATE TABLE t1 (name varchar(15) NOT NULL); +INSERT INTO t1 VALUES ('Betty'), ('Anna'); + +SELECT * FROM t1; +DELETE FROM t1 WHERE name NOT LIKE 'A%a'; +SELECT * FROM t1; + +DROP TABLE t1; + +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (NULL), (1), (2), (3); + +SELECT * FROM t1; +DELETE FROM t1 WHERE NOT(a <=> 2); +SELECT * FROM t1; + +DROP TABLE t1; + +# +# BUG#13317: range optimization doesnt work for IN over VIEW. +# +create table t1 (a int, b int, primary key(a,b)); +create view v1 as select a, b from t1; + +INSERT INTO `t1` VALUES +(0,0),(1,0),(2,0),(3,0),(4,0),(5,1),(6,1),(7,1),(8,1),(9,1),(10,2),(11,2),(12,2) +,(13,2),(14,2),(15,3),(16,3),(17,3),(18,3),(19,3); + +drop view v1; +drop table t1; + +# BUG#13455: +create table t3 (a int); +insert into t3 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +create table t1 (a varchar(10), filler char(200)) charset=binary; +insert into t1 values ('a',''); +insert into t1 values ('a ',''); +insert into t1 values ('a ', ''); +insert into t1 select concat('a', 1000 + A.a + 10 * (B.a + 10 * C.a)), '' + from t3 A, t3 B, t3 C; + +create table t2 (a varchar(10), filler char(200)); +insert into t2 select * from t1; + +update t1 set a='b' where a<>'a'; +select a, hex(filler) from t1 where a not between 'b' and 'b'; +drop table t1,t2,t3; + +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); +create table t2 (a int); +insert into t2 select 2*(A.a + 10*(B.a + 10*C.a)) from t1 A, t1 B, t1 C; + +set @a="select * from t2 force index (a) where a NOT IN(0"; +select count(*) from (select @a:=concat(@a, ',', a) from t2 ) Z; +set @a=concat(@a, ')'); + +insert into t2 values (11),(13),(15); +drop table t1, t2; + +# +# range access for BETWEEN with a constant for the first argument +# + +CREATE TABLE t1 ( + id int NOT NULL DEFAULT '0', + b int NOT NULL DEFAULT '0', + c int NOT NULL DEFAULT '0'); + +INSERT INTO t1(id) VALUES (1), (2), (3), (4), (5), (6), (7), (8); + +INSERT INTO t1(b,c) VALUES (3,4), (3,4); + +SELECT * FROM t1 WHERE b<=3 AND 3<=c; +SELECT * FROM t1 WHERE 3 BETWEEN b AND c; + +SELECT * FROM t1 WHERE 0 < b OR 0 > c; +SELECT * FROM t1 WHERE 0 NOT BETWEEN b AND c; + +DROP TABLE t1; + +--echo +--echo "Comparison of DATE with DATETIME still not using indexes correctly" +--echo +CREATE TABLE t1 ( + id int(11) NOT NULL auto_increment, + dateval date default NULL, + PRIMARY KEY (id) +) AUTO_INCREMENT=173; + +INSERT INTO t1 VALUES +(1,'2007-01-01'),(2,'2007-01-02'),(3,'2007-01-03'),(4,'2007-01-04'), +(5,'2007-01-05'),(6,'2007-01-06'),(7,'2007-01-07'),(8,'2007-01-08'), +(9,'2007-01-09'),(10,'2007-01-10'),(11,'2007-01-11'); +drop table t1; + +# +# different or-ed predicates were erroneously merged into one that +# resulted in ref access instead of range access and a wrong result set +# + +CREATE TABLE t1 ( + a varchar(32) +) DEFAULT CHARSET=latin1 COLLATE=latin1_bin; + +INSERT INTO t1 VALUES + ('B'), ('A'), ('A'), ('C'), ('B'), ('A'), ('A'); + +SELECT a FROM t1 WHERE a='b' OR a='B'; +DROP TABLE t1; + +# +#highest possible value for INT erroneously filtered by WHERE +# + +# test UNSIGNED. only occurs when indexed. +CREATE TABLE t1 (f1 TINYINT(11) UNSIGNED NOT NULL, PRIMARY KEY (f1)); + +INSERT INTO t1 VALUES (127),(254),(0),(1),(255); + +--disable_ps_protocol + +# test upper bound +# count 5 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256; +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 256.0; +# count 4 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 255; + +# show we dont fiddle with lower bound on UNSIGNED +# count 0 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < -1; +# count 5 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -1; + +DROP TABLE t1; + + +# test signed. only occurs when index. +CREATE TABLE t1 ( f1 TINYINT(11) NOT NULL, PRIMARY KEY (f1)); + +INSERT INTO t1 VALUES (127),(126),(0),(-128),(-127); + +# test upper bound +# count 5 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128; +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 128.0; +# count 4 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 < 127; + +# test lower bound +# count 5 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129; +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -129.0; +# count 4 +SELECT SQL_NO_CACHE COUNT(*) FROM t1 WHERE f1 > -128; + +--enable_ps_protocol + +DROP TABLE t1; + +# End of 5.0 tests + +# Adjust 'ref' estimate if we have 'range' estimate for +# a smaller scan interval +create table t1 (a int); +insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); + +create table t2 (a int, b int, filler char(100)); +insert into t2 select A.a + 10 * (B.a + 10 * C.a), 10, 'filler' from t1 A, +t1 B, t1 C where A.a < 5; + +insert into t2 select 1000, b, 'filler' from t2; + +drop table t1, t2; + +# +# wrong result returned for range scan when using covering index +# +CREATE TABLE t1( a INT, b INT); + +CREATE TABLE t2( a INT, b INT ); + +CREATE TABLE t3( a INT, b INT ); + +INSERT INTO t1( a, b ) +VALUES (0, 1), (1, 2), (1, 4), (2, 3), (5, 0), (9, 7); + +INSERT INTO t2( a, b ) +VALUES ( 1, 1), ( 2, 1), ( 3, 1), ( 4, 1), ( 5, 1), + ( 6, 1), ( 7, 1), ( 8, 1), ( 9, 1), (10, 1), + (11, 1), (12, 1), (13, 1), (14, 1), (15, 1), + (16, 1), (17, 1), (18, 1), (19, 1), (20, 1); + +INSERT INTO t2 SELECT a, 2 FROM t2 WHERE b = 1; +INSERT INTO t2 SELECT a, 3 FROM t2 WHERE b = 1; + +# To make range scan compelling to the optimizer +INSERT INTO t2 SELECT -1, -1 FROM t2; +INSERT INTO t2 SELECT -1, -1 FROM t2; +INSERT INTO t2 SELECT -1, -1 FROM t2; + +INSERT INTO t3 +VALUES (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), + (6, 0), (7, 0), (8, 0), (9, 0), (10, 0); + +# To make range scan compelling to the optimizer +INSERT INTO t3 SELECT * FROM t3 WHERE a = 10; +INSERT INTO t3 SELECT * FROM t3 WHERE a = 10; + + +# +# Problem#1 Test queries. Will give missing results unless Problem#1 is fixed. +# With one exception, they are independent of Problem#2. +# +SELECT * FROM t1 WHERE +3 <= a AND a < 5 OR +5 < a AND b = 3 OR +3 <= a; + +# +# Problem#2 Test queries. +# These queries will give missing results if Problem#1 is fixed. +# But Problem#1 also hides this bug. +# +SELECT * FROM t2 WHERE +5 <= a AND a < 10 AND b = 1 OR +15 <= a AND a < 20 AND b = 3 +OR +1 <= a AND b = 1; + +SELECT * FROM t2 WHERE +5 <= a AND a < 10 AND b = 2 OR +15 <= a AND a < 20 AND b = 3 +OR +1 <= a AND b = 1; + + +SELECT * FROM t3 WHERE +5 <= a AND a < 10 AND b = 3 OR +a < 5 OR +a < 10; + +DROP TABLE t1, t2, t3; + +--echo # +--echo # Endless 100% CPU loop with STRAIGHT_JOIN +--echo # + +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (1), (NULL); +SELECT * FROM t1 WHERE a <> NULL and (a <> NULL or a <= NULL); +DROP TABLE t1; + +--echo # +--echo # regression of range optimizer and date comparison in 5.1.39! +--echo # +CREATE TABLE t1 ( a DATE ); +CREATE TABLE t2 ( a DATETIME); + +--echo # Make optimizer choose range scan +INSERT INTO t1 VALUES ('2009-09-22'), ('2009-09-22'), ('2009-09-22'); +INSERT INTO t1 VALUES ('2009-09-23'), ('2009-09-23'), ('2009-09-23'); + +INSERT INTO t2 VALUES ('2009-09-22 12:00:00'), ('2009-09-22 12:00:00'), + ('2009-09-22 12:00:00'); +INSERT INTO t2 VALUES ('2009-09-23 12:00:00'), ('2009-09-23 12:00:00'), + ('2009-09-23 12:00:00'); + +--echo # DATE vs DATE +SELECT * FROM t1 WHERE a >= '2009/09/23'; +SELECT * FROM t1 WHERE a >= '20090923'; +#bug1567SELECT * FROM t1 WHERE a >= 20090923; +SELECT * FROM t1 WHERE a >= '2009-9-23'; +SELECT * FROM t1 WHERE a >= '2009.09.23'; +SELECT * FROM t1 WHERE a >= '2009:09:23'; + +--echo # DATE vs DATETIME +SELECT * FROM t2 WHERE a >= '2009/09/23'; +SELECT * FROM t2 WHERE a >= '20090923'; +#SELECT * FROM t2 WHERE a >= 20090923; +SELECT * FROM t2 WHERE a >= '2009-9-23'; +SELECT * FROM t2 WHERE a >= '2009.09.23'; +SELECT * FROM t2 WHERE a >= '2009:09:23'; + +--echo # DATETIME vs DATETIME +SELECT * FROM t2 WHERE a >= '2009/09/23 12:00:00'; +SELECT * FROM t2 WHERE a >= '20090923120000'; +#SELECT * FROM t2 WHERE a >= 20090923120000; +SELECT * FROM t2 WHERE a >= '2009-9-23 12:00:00'; +SELECT * FROM t2 WHERE a >= '2009.09.23 12:00:00'; +SELECT * FROM t2 WHERE a >= '2009:09:23 12:00:00'; + +--echo # DATETIME vs DATE +SELECT * FROM t1 WHERE a >= '2009/09/23 00:00:00'; +SELECT * FROM t1 WHERE a >= '20090923000000'; +#SELECT * FROM t1 WHERE a >= 20090923000000; +SELECT * FROM t1 WHERE a >= '2009-9-23 00:00:00'; +SELECT * FROM t1 WHERE a >= '2009.09.23 00:00:00'; +SELECT * FROM t1 WHERE a >= '2009:09:23 00:00:00'; + +--echo # Test of the new get_date_from_str implementation +--echo # Behavior differs slightly between the trunk and mysql-pe. +--echo # The former may give errors for the truncated values, while the latter +--echo # gives warnings. The purpose of this test is not to interfere, and only +--echo # preserve existing behavior. +SELECT str_to_date('2007-10-00', '%Y-%m-%d') >= '' AND + str_to_date('2007-10-00', '%Y-%m-%d') <= '2007/10/20'; + +SELECT str_to_date('2007-20-00', '%Y-%m-%d') >= '2007/10/20' AND + str_to_date('2007-20-00', '%Y-%m-%d') <= ''; + +SELECT str_to_date('2007-10-00', '%Y-%m-%d') BETWEEN '' AND '2007/10/20'; +SELECT str_to_date('2007-20-00', '%Y-%m-%d') BETWEEN '2007/10/20' AND ''; + +SELECT str_to_date('', '%Y-%m-%d'); + +DROP TABLE t1, t2; + +--echo # +--echo # valgrind errors with query using 'Range checked for each +--echo # record' +--echo # +CREATE TABLE t1 ( + a INT, + b CHAR(2), + c INT, + d INT +); + +INSERT INTO t1 VALUES ( NULL, 'a', 1, 2 ), ( NULL, 'a', 1, 2 ), + ( 1, 'a', 1, 2 ), ( 1, 'a', 1, 2 ); + +CREATE TABLE t2 ( + a INT, + c INT, + e INT +); + +INSERT INTO t2 VALUES ( 1, 1, NULL ), ( 1, 1, NULL ); + +--echo # Should not give Valgrind warnings +SELECT 1 +FROM t1, t2 +WHERE t1.d <> '1' AND t1.b > '1' +AND t1.a = t2.a AND t1.c = t2.c; + +DROP TABLE t1, t2; + +--echo # +--echo # sql-bench's insert test fails due to wrong result +--echo # + +CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a)); + +INSERT INTO t1 VALUES (0,0), (1,1); + +DROP TABLE t1; + +--echo # +--echo # 'NOT BETWEEN' evaluation is incorrect +--echo # + +CREATE TABLE t1 (c_key INT, c_notkey INT); +INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3); +SELECT * FROM t1 WHERE 2 NOT BETWEEN c_notkey AND c_key; + +DROP TABLE t1; + +--echo # +--echo # 'BETWEEN' evaluation is incorrect +--echo # + +# Test some BETWEEN predicates which does *not* follow the +# 'normal' pattern of BETWEEN AND + +CREATE TABLE t1(pk INT PRIMARY KEY, i4 INT); + +INSERT INTO t1 VALUES (1,10), (2,20), (3,30); + +SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 10; + +SELECT * FROM t1 WHERE 10 BETWEEN i4 AND i4; + +SELECT * FROM t1 WHERE 10 BETWEEN 10 AND i4; + +SELECT * FROM t1 WHERE 10 BETWEEN i4 AND 10; + +SELECT * FROM t1 WHERE 10 BETWEEN 10 AND 10; + +SELECT * FROM t1 WHERE 10 BETWEEN 11 AND 11; + +SELECT * FROM t1 WHERE 10 BETWEEN 100 AND 0; + +SELECT * FROM t1 WHERE i4 BETWEEN 100 AND 0; + +SELECT * FROM t1 WHERE i4 BETWEEN 10 AND 99999999999999999; + +SELECT * FROM t1 WHERE i4 BETWEEN 999999999999999 AND 30; + +SELECT * FROM t1 WHERE i4 BETWEEN 10 AND '20'; + +SELECT * FROM t1, t1 as t2 WHERE t2.pk BETWEEN t1.i4 AND t1.i4; + +SELECT * FROM t1, t1 as t2 WHERE t1.i4 BETWEEN t2.pk AND t2.pk; + +DROP TABLE t1; + +--echo # +--echo # SELECT RESULTS VARY WITH VERSION AND +--echo # WITH/WITHOUT INDEX RANGE SCAN +--echo # + +create table t1 (id int unsigned not null auto_increment primary key); +insert into t1 values (null); +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +insert into t1 select null from t1; +create table t2 ( + id int unsigned not null auto_increment, + val decimal(5,3) not null, + primary key (id,val)); +--disable_warnings +insert into t2 select null,id*0.0009 from t1; +--enable_warnings +#bug1563select * from t2 order by id; + +#clean up +drop database range_test; diff --git a/mysql-test/suite/tianmu/t/ssb_small.test b/mysql-test/suite/tianmu/t/ssb_small.test new file mode 100644 index 000000000..71f12441f --- /dev/null +++ b/mysql-test/suite/tianmu/t/ssb_small.test @@ -0,0 +1,96 @@ +--source include/have_tianmu.inc + +--disable_warnings +DROP DATABASE IF EXISTS ssb_small_test; +--enable_warnings + +CREATE DATABASE ssb_small_test; +USE ssb_small_test; + + +create table part ( + p_partkey int, + p_name varchar (55), + p_mfgr char (25), + p_brand char (10), + p_type varchar (25), + p_size int, + p_container char (10), + p_retailprice decimal(12,2), + p_comment varchar (23) +); + +create table lineitem ( + l_orderkey int, + l_partkey int, + l_suppkey int, + l_linenumber bigint, + l_quantity decimal(12,2), + l_extendedprice decimal(12,2), + l_discount decimal(12,2), + l_tax decimal(12,2), + l_returnflag char (1), + l_linestatus char (1), + l_shipdate date, + l_commitdate date, + l_receiptdate date, + l_shipinstruct char (25), + l_shipmode char (10), + l_comment varchar (44) +); + +INSERT INTO part VALUES +(1, 'goldenrod lavender spring chocolate lace', 'Manufacturer#1', 'Brand#13', 'PROMO BURNISHED COPPER', 7, 'JUMBO PKG', 901.00, 'ly. slyly ironi'), +(2, 'blush thistle blue yellow saddle', 'Manufacturer#1', 'Brand#13', 'LARGE BRUSHED BRASS', 1, 'LG CASE', 902.00, 'lar accounts amo'), +(3, 'spring green yellow purple cornsilk', 'Manufacturer#4', 'Brand#42', 'STANDARD POLISHED BRASS', 21, 'WRAP CASE', 903.00, 'egular deposits hag'), +(4, 'cornflower chocolate smoke green pink', 'Manufacturer#3', 'Brand#34', 'SMALL PLATED BRASS', 14, 'MED DRUM', 904.00, 'p furiously r'), +(5, 'forest brown coral puff cream', 'Manufacturer#3', 'Brand#32', 'STANDARD POLISHED TIN', 15, 'SM PKG', 905.00, 'wake carefully'); + +INSERT INTO lineitem VALUES +(1, 156, 4, 1, 17, 17954.55, 0.04, 0.02, 'N', 'O', '1996-03-13', '1996-02-12', '1996-03-22', 'DELIVER IN PERSON', 'TRUCK', 'egular courts above the'), +(1, 68, 9, 2, 36, 34850.16, 0.09, 0.06, 'N', 'O', '1996-04-12', '1996-02-28', '1996-04-20', 'TAKE BACK RETURN', 'MAIL', 'ly final dependencies: slyly bold'), +(1, 64, 5, 3, 8, 7712.48, 0.10, 0.02, 'N', 'O', '1996-01-29', '1996-03-05', '1996-01-31', 'TAKE BACK RETURN', 'REG AIR', 'riously. regular, express dep'), +(1, 3, 6, 4, 28, 25284.00, 0.09, 0.06, 'N', 'O', '1996-04-21', '1996-03-30', '1996-05-16', 'NONE', 'AIR', 'lites. fluffily even de'), +(1, 25, 8, 5, 24, 22200.48, 0.10, 0.04, 'N', 'O', '1996-03-30', '1996-03-14', '1996-04-01', 'NONE', 'FOB', 'pending foxes. slyly re'), +(1, 16, 3, 6, 32, 29312.32, 0.07, 0.02, 'N', 'O', '1996-01-30', '1996-02-07', '1996-02-03', 'DELIVER IN PERSON', 'MAIL', 'arefully slyly ex'), +(2, 107, 2, 1, 38, 38269.80, 0.00, 0.05, 'N', 'O', '1997-01-28', '1997-01-14', '1997-02-02', 'TAKE BACK RETURN', 'RAIL', 'ven requests. deposits breach a'); + + +select + sum(l_extendedprice* (1 - l_discount)) as revenue +from + lineitem, + part +where + ( + p_partkey = l_partkey + and p_brand = 'Brand#23' + and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') + and l_quantity >= 2 and l_quantity <= 2 + 10 + and p_size between 1 and 5 + and l_shipmode in ('AIR', 'AIR REG') + and l_shipinstruct = 'DELIVER IN PERSON' + ) + or + ( + p_partkey = l_partkey + and p_brand = 'Brand#24' + and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') + and l_quantity >= 20 and l_quantity <= 20 + 10 + and p_size between 1 and 10 + and l_shipmode in ('AIR', 'AIR REG') + and l_shipinstruct = 'DELIVER IN PERSON' + ) + or + ( + p_partkey = l_partkey + and p_brand = 'Brand#44' + and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') + and l_quantity >= 26 and l_quantity <= 26 + 10 + and p_size between 1 and 15 + and l_shipmode in ('AIR', 'AIR REG') + and l_shipinstruct = 'DELIVER IN PERSON' + ); + +#clean up +DROP DATABASE ssb_small_test; diff --git a/mysql-test/suite/tianmu/t/std_test.test b/mysql-test/suite/tianmu/t/std_test.test new file mode 100644 index 000000000..4c94f55c0 --- /dev/null +++ b/mysql-test/suite/tianmu/t/std_test.test @@ -0,0 +1,121 @@ +--source include/have_tianmu.inc + +--echo # +--echo # std floor VAR_SAMP func test +--echo # + +--disable_warnings +DROP DATABASE IF EXISTS std_test; +--enable_warnings + +CREATE DATABASE std_test; +USE std_test; + +create table t1 ( + col_signed tinyint, + col_unsigned tinyint unsigned +); + +--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR +eval LOAD DATA LOCAL infile '$MYSQL_TEST_DIR/suite/tianmu/std_data/tinyint_range.tbl' INTO TABLE t1 FIELDS TERMINATED BY '|'; + +ALTER TABLE t1 ADD COLUMN col_small_signed SMALLINT; +ALTER TABLE t1 ADD COLUMN col_small_unsigned SMALLINT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_med_signed MEDIUMINT; +ALTER TABLE t1 ADD COLUMN col_med_unsigned MEDIUMINT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_int_signed INT; +ALTER TABLE t1 ADD COLUMN col_int_unsigned INT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_big_signed BIGINT; +ALTER TABLE t1 ADD COLUMN col_big_unsigned BIGINT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_dec_signed DECIMAL(17,0); +ALTER TABLE t1 ADD COLUMN col_dec_unsigned DECIMAL(17,0) UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_float_signed FLOAT; +ALTER TABLE t1 ADD COLUMN col_float_unsigned FLOAT UNSIGNED; +ALTER TABLE t1 ADD COLUMN col_double_signed DOUBLE; +ALTER TABLE t1 ADD COLUMN col_double_unsigned DOUBLE UNSIGNED; + +UPDATE t1 SET col_small_signed=col_signed + sign(col_signed) * 32000; +UPDATE t1 SET col_small_unsigned=col_unsigned + 65000; +UPDATE t1 SET col_med_signed=col_signed + sign(col_signed) * 8388000; +UPDATE t1 SET col_med_unsigned=col_unsigned + 16776000; +UPDATE t1 SET col_int_signed=col_signed + sign(col_signed) * 2147483000; +UPDATE t1 SET col_int_unsigned=col_unsigned + 4294000000; + +UPDATE t1 SET col_big_signed=col_signed + sign(col_signed) * 9223372036854775000; +#bug1485UPDATE t1 SET col_big_unsigned=col_unsigned + 9223372036854775000; +#bug1485UPDATE t1 SET col_dec_signed=col_signed + sign(col_signed) * 80000000000000001; +#bug1485UPDATE t1 SET col_dec_unsigned=col_unsigned + 8000000000000003; +UPDATE t1 SET col_float_signed=col_signed + 0.637 + sign(col_signed) * 8388000; +UPDATE t1 SET col_float_unsigned=col_unsigned + 0.637 + 16776000; +UPDATE t1 SET col_double_signed=col_signed + 0.637 + sign(col_signed) * 2147483000; +UPDATE t1 SET col_double_unsigned=col_unsigned + 0.637 + 4294000000; + + +SELECT 'q1', floor(STD(col_signed)) FROM t1; +SELECT 'q2', floor(STD(col_unsigned)) FROM t1; +SELECT 'q3', floor(STD(col_small_signed)) FROM t1; +SELECT 'q4', floor(STD(col_small_unsigned)) FROM t1; +SELECT 'q5', floor(STD(col_med_signed)) FROM t1; +SELECT 'q6', floor(STD(col_med_unsigned)) FROM t1; +SELECT 'q7', floor(STD(col_int_signed)) FROM t1; +SELECT 'q8', floor(STD(col_int_unsigned)) FROM t1; +SELECT 'q9', floor(STD(col_big_signed)) FROM t1; +#bug1485SELECT 'q10', floor(STD(col_big_unsigned)) FROM t1; +#bug1485SELECT 'q11', floor(STD(col_dec_signed)) FROM t1; +SELECT 'q13', floor(STD(col_float_signed)) FROM t1; +SELECT 'q14', floor(STD(col_float_unsigned)) FROM t1; +SELECT 'q15', floor(STD(col_double_signed)) FROM t1; +SELECT 'q16', floor(STD(col_double_unsigned)) FROM t1; + + +SELECT 'q17', floor(STDDEV_SAMP(col_signed)) FROM t1; +SELECT 'q18', floor(STDDEV_SAMP(col_unsigned)) FROM t1; +SELECT 'q19', floor(STDDEV_SAMP(col_small_signed)) FROM t1; +SELECT 'q20', floor(STDDEV_SAMP(col_small_unsigned)) FROM t1; +SELECT 'q21', floor(STDDEV_SAMP(col_med_signed)) FROM t1; +SELECT 'q22', floor(STDDEV_SAMP(col_med_unsigned)) FROM t1; +SELECT 'q23', floor(STDDEV_SAMP(col_int_signed)) FROM t1; +SELECT 'q24', floor(STDDEV_SAMP(col_int_unsigned)) FROM t1; +SELECT 'q25', floor(STDDEV_SAMP(col_big_signed)) FROM t1; +#bug1485SELECT 'q26', floor(STDDEV_SAMP(col_big_unsigned)) FROM t1; +#bug1485SELECT 'q27', floor(STDDEV_SAMP(col_dec_signed)) FROM t1; +SELECT 'q29', floor(STDDEV_SAMP(col_float_signed)) FROM t1; +SELECT 'q30', floor(STDDEV_SAMP(col_float_unsigned)) FROM t1; +SELECT 'q31', floor(STDDEV_SAMP(col_double_signed)) FROM t1; +SELECT 'q32', floor(STDDEV_SAMP(col_double_unsigned)) FROM t1; + +SELECT 'q33', floor(VAR_POP(col_signed)) FROM t1; +SELECT 'q34', floor(VAR_POP(col_unsigned)) FROM t1; +SELECT 'q35', floor(VAR_POP(col_small_signed)) FROM t1; +SELECT 'q36', floor(VAR_POP(col_small_unsigned)) FROM t1; +SELECT 'q37', floor(VAR_POP(col_med_signed)) FROM t1; +SELECT 'q38', floor(VAR_POP(col_med_unsigned)) FROM t1; +SELECT 'q39', floor(VAR_POP(col_int_signed)) FROM t1; +SELECT 'q40', floor(VAR_POP(col_int_unsigned)) FROM t1; +SELECT 'q41', floor(VAR_POP(col_big_signed)) FROM t1; +#bug1485SELECT 'q42', floor(VAR_POP(col_big_unsigned)) FROM t1; +#bug1485SELECT 'q43', floor(VAR_POP(col_dec_signed)) FROM t1; +SELECT 'q45', floor(VAR_POP(col_float_signed)) FROM t1; +SELECT 'q46', floor(VAR_POP(col_float_unsigned)) FROM t1; +SELECT 'q47', floor(VAR_POP(col_double_signed)) FROM t1; +SELECT 'q48', floor(VAR_POP(col_double_unsigned)) FROM t1; + + +SELECT 'q49', floor(VAR_SAMP(col_signed)) FROM t1; +SELECT 'q50', floor(VAR_SAMP(col_unsigned)) FROM t1; +SELECT 'q51', floor(VAR_SAMP(col_small_signed)) FROM t1; +SELECT 'q52', floor(VAR_SAMP(col_small_unsigned)) FROM t1; +SELECT 'q53', floor(VAR_SAMP(col_med_signed)) FROM t1; +SELECT 'q54', floor(VAR_SAMP(col_med_unsigned)) FROM t1; +SELECT 'q55', floor(VAR_SAMP(col_int_signed)) FROM t1; +SELECT 'q56', floor(VAR_SAMP(col_int_unsigned)) FROM t1; +SELECT 'q57', floor(VAR_SAMP(col_big_signed)) FROM t1; +#bug1485SELECT 'q58', floor(VAR_SAMP(col_big_unsigned)) FROM t1; +#bug1485SELECT 'q59', floor(VAR_SAMP(col_dec_signed)) FROM t1; +SELECT 'q61', floor(VAR_SAMP(col_float_signed)) FROM t1; +SELECT 'q62', floor(VAR_SAMP(col_float_unsigned)) FROM t1; +SELECT 'q63', floor(VAR_SAMP(col_double_signed)) FROM t1; +SELECT 'q64', floor(VAR_SAMP(col_double_unsigned)) FROM t1; + +# Clean UP +DROP DATABASE std_test; diff --git a/mysql-test/suite/tianmu/t/trigger.test.bak b/mysql-test/suite/tianmu/t/trigger.test similarity index 100% rename from mysql-test/suite/tianmu/t/trigger.test.bak rename to mysql-test/suite/tianmu/t/trigger.test diff --git a/mysql-test/suite/tianmu/t/union_case.test b/mysql-test/suite/tianmu/t/union_case.test new file mode 100644 index 000000000..e6485d5bc --- /dev/null +++ b/mysql-test/suite/tianmu/t/union_case.test @@ -0,0 +1,51 @@ +--source include/have_tianmu.inc +--echo # MCOL-641 Union Test Cases +--echo # Once MCOL-5417 is supported, the errored out queries below should be fixed. + +--disable_warnings +DROP DATABASE IF EXISTS union_case_test; +--enable_warnings + +CREATE DATABASE union_case_test; +USE union_case_test; + +SET SQL_MODE='ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; + +CREATE TABLE cs1 (d1 DECIMAL(17), d2 DECIMAL(17,10), d3 DECIMAL(17,17)) ; +CREATE TABLE cs2 (d1 DECIMAL(17) UNSIGNED, d2 DECIMAL(17,10) UNSIGNED, d3 DECIMAL(17,17) UNSIGNED) ; + +INSERT INTO cs1 VALUES (125, 1.25, 0.125); +INSERT INTO cs1 VALUES (-125, -1.25, -0.125); +INSERT INTO cs1 values (9999999999999998, 9999999.9999999998, 0.9999999999999998); +INSERT INTO cs1 values (99999999999999999, 9999999.9999999999, 0.99999999999999999); +INSERT INTO cs1 values (-9999999999999998, -9999999.9999999998, -0.9999999999999998); +INSERT INTO cs1 values (-99999999999999999, -9999999.9999999999, -0.99999999999999999); +#bug1868 select * from cs1; +#bug1870 SELECT d1, d2, d3 FROM cs1 UNION SELECT d1, d2, d3 FROM cs1; + +CREATE TABLE cs3 (d1 int, d2 int, d3 int) ; +INSERT INTO cs3 VALUES (12, 16, 56); +INSERT INTO cs3 VALUES (7, 6, 45); +INSERT INTO cs3 VALUES (0, 0, 0); +SELECT d1, d1, d2 FROM cs3 UNION SELECT d2, d3, d3 FROM cs3; + +INSERT INTO cs2 VALUES (125, 1.25, 0.125); +INSERT INTO cs2 values (9999999999999998, 9999999.9999999998, 0.9999999999999998); +INSERT INTO cs2 values (99999999999999999, 9999999.9999999999, 0.99999999999999999); + +#bug1870 SELECT d1, d2, d3 FROM cs2 UNION SELECT d1, d2, d3 FROM cs2; + +DROP TABLE cs1, cs2; +CREATE TABLE cs1 (d1 DECIMAL(17, 0), d2 DECIMAL(17, 14), d3 DECIMAL(17, 14)) ; +CREATE TABLE cs2 (d1 DECIMAL(17, 0) UNSIGNED, d2 DECIMAL(17, 14) UNSIGNED, d3 DECIMAL(17, 14) UNSIGNED) ; +INSERT INTO cs1 VALUES (12345678901234567, 12.34567890123456, 0.1234567890123456); +INSERT INTO cs1 VALUES (-12345678901234567, -12.34567890123456, -0.1234567890123456); +INSERT INTO cs1 VALUES (99999999999999999, 99.999999999999999, 0.999999999999999); +INSERT INTO cs1 VALUES (-99999999999999999, -99.999999999999999, -0.999999999999999); +INSERT INTO cs2 VALUES (12345678901234567, 12.34567890123456, 0.1234567890123456); +INSERT INTO cs2 VALUES (99999999999999999, 99.999999999999999, 0.999999999999999); + +#bug1870 SELECT d1, d1, d2 FROM cs1 UNION SELECT d2, d3, d3 FROM cs1; + +# Clean UP +DROP DATABASE union_case_test; diff --git a/mysql-test/suite/tianmu/t/unsigned_support_issue1267.test b/mysql-test/suite/tianmu/t/unsigned_support_issue1267.test index 5495070d9..78ca69220 100644 --- a/mysql-test/suite/tianmu/t/unsigned_support_issue1267.test +++ b/mysql-test/suite/tianmu/t/unsigned_support_issue1267.test @@ -272,7 +272,7 @@ select * from load_unsigned; eval select * into outfile "$MYSQL_TEST_DIR/suite/tianmu/tmp/unsigned_outfile-test.txt" from load_unsigned; truncate table load_unsigned; --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR -eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/tmp/unsigned_outfile-test.txt' INTO TABLE load_unsigned FIELDS TERMINATED BY ';'; +eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/suite/tianmu/tmp/unsigned_outfile-test.txt' INTO TABLE load_unsigned; select * from load_unsigned; drop table load_unsigned; diff --git a/mysql-test/suite/tianmu/t/various_join.test b/mysql-test/suite/tianmu/t/various_join.test index ddf70f28b..363614f5a 100644 --- a/mysql-test/suite/tianmu/t/various_join.test +++ b/mysql-test/suite/tianmu/t/various_join.test @@ -32,37 +32,37 @@ insert into t7 values (1, 3); insert into t8 values (1, 3); insert into t9 values (1, 2); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a = 1 or t3.a = 3); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a > 1); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) order by t3.a; +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a) order by t4.a; +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a = 1 or t3.a = 3) order by t3.a; +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) where (t3.a > 1) order by t3.a; select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t2.a = t3.a) left join t4 on (t3.a = t4.a and t1.b = t4.b) order by t3.a; select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t2.a = t3.a) left join t4 on (t3.a = t4.a and t2.b = t4.b) order by t3.a; -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t1.a); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t2.a and t3.a > t1.a); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.b > t2.a and t3.a < t1.b); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t1.a) order by t3.a; +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.a > t2.a and t3.a > t1.a) order by t3.a; +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b and t3.b > t2.a and t3.a < t1.b) order by t3.a; # Below query is disabled until fixed #925 -#select * from t1 left join t2 on (t1.a = t2.a) left join t3 on (t2.a = t3.a) left join t4 on (t4.a = t3.a) left join t5 on (t5.a = t2.a) left join t6 on (t5.a = t6.a and t6.a = t4.a); +#select * from t1 left join t2 on (t1.a = t2.a) left join t3 on (t2.a = t3.a) left join t4 on (t4.a = t3.a) left join t5 on (t5.a = t2.a) left join t6 on (t5.a = t6.a and t6.a = t4.a) order by t6.a; select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) order by t3.a; select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) right join t4 on (t3.a = t4.a and t2.a = t4.a) order by t3.a; -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) left join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) right join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) left join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a) order by t3.a; +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a) right join t4 on (t3.a = t4.a and t1.a = t4.a and t2.a = t4.a) order by t4.a; # Below query is disabled until fixed #925 -#select * from t1 left join t2 on (t1.a = t2.a) left join t3 on (t2.a = t3.a) left join t4 on (t4.a = t3.a) left join t5 on (t5.a = t2.a) left join t6 on (t5.a = t6.a and t6.a = t4.a) left join t7 on (t7.a = t3.a) left join t8 on (t8.a = t7.a and t8.a = t2.a); +#select * from t1 left join t2 on (t1.a = t2.a) left join t3 on (t2.a = t3.a) left join t4 on (t4.a = t3.a) left join t5 on (t5.a = t2.a) left join t6 on (t5.a = t6.a and t6.a = t4.a) left join t7 on (t7.a = t3.a) left join t8 on (t8.a = t7.a and t8.a = t2.a) order by t8.a; -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) left join t5 on (t4.a = t5.a and t3.b = t5.b); -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) left join t5 on (t4.a = t5.a and t3.b = t5.b) order by t5.a; +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) order by t5.a; # Below query is disabled until fixed #925 -#select * from t1 left join t2 on (t1.a = t2.a) left join t3 on (t2.a = t3.a) left join t4 on (t4.a = t3.a) left join t5 on (t5.a = t2.a) left join t6 on (t5.a = t6.a and t6.a = t4.a) left join t7 on (t7.a = t3.a) left join t8 on (t8.a = t7.a and t8.a = t2.a) left join t9 on (t7.a = t9.a and t4.a = t9.a); +#select * from t1 left join t2 on (t1.a = t2.a) left join t3 on (t2.a = t3.a) left join t4 on (t4.a = t3.a) left join t5 on (t5.a = t2.a) left join t6 on (t5.a = t6.a and t6.a = t4.a) left join t7 on (t7.a = t3.a) left join t8 on (t8.a = t7.a and t8.a = t2.a) left join t9 on (t7.a = t9.a and t4.a = t9.a) order by t9.a; -select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) right join t6 on (t5.a = t6.a and t4.a = t6.a); +select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) right join t6 on (t5.a = t6.a and t4.a = t6.a) order by t6.a; # Below query is disabled until fixed #925 -#select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) left join t6 on (t5.a = t6.a and t4.a = t6.a); +#select * from t1 inner join t2 on (t1.a = t2.a) right join t3 on (t1.a = t3.a and t2.b = t3.b) left join t4 on (t3.a = t4.a and t2.a = t4.a) right join t5 on (t4.a = t5.a and t3.b = t5.b) left join t6 on (t5.a = t6.a and t4.a = t6.a) order by t6.a; drop table t1; drop table t2; diff --git a/scripts/mysql_system_tables.sql b/scripts/mysql_system_tables.sql index dd6333073..2dbb48969 100644 --- a/scripts/mysql_system_tables.sql +++ b/scripts/mysql_system_tables.sql @@ -79,7 +79,7 @@ CREATE TABLE IF NOT EXISTS time_zone_transition_type ( Time_zone_id int unsign CREATE TABLE IF NOT EXISTS time_zone_leap_second ( Transition_time bigint signed NOT NULL, Correction int signed NOT NULL, PRIMARY KEY TranTime (Transition_time) ) engine=INNODB STATS_PERSISTENT=0 CHARACTER SET utf8 comment='Leap seconds information for time zones'; -CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob DEFAULT '' NOT NULL, body longblob NOT NULL, definer char(93) collate utf8_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH', 'MANDATORY_TIANMU', 'NO_KEY_ERROR') DEFAULT '' NOT NULL, comment text collate utf8_bin NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db,name,type)) engine=MyISAM character set utf8 comment='Stored Procedures'; +CREATE TABLE IF NOT EXISTS proc (db char(64) collate utf8_bin DEFAULT '' NOT NULL, name char(64) DEFAULT '' NOT NULL, type enum('FUNCTION','PROCEDURE') NOT NULL, specific_name char(64) DEFAULT '' NOT NULL, language enum('SQL') DEFAULT 'SQL' NOT NULL, sql_data_access enum( 'CONTAINS_SQL', 'NO_SQL', 'READS_SQL_DATA', 'MODIFIES_SQL_DATA') DEFAULT 'CONTAINS_SQL' NOT NULL, is_deterministic enum('YES','NO') DEFAULT 'NO' NOT NULL, security_type enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, param_list blob NOT NULL, returns longblob DEFAULT '' NOT NULL, body longblob NOT NULL, definer char(93) collate utf8_bin DEFAULT '' NOT NULL, created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', sql_mode set( 'REAL_AS_FLOAT', 'PIPES_AS_CONCAT', 'ANSI_QUOTES', 'IGNORE_SPACE', 'NOT_USED', 'ONLY_FULL_GROUP_BY', 'NO_UNSIGNED_SUBTRACTION', 'NO_DIR_IN_CREATE', 'POSTGRESQL', 'ORACLE', 'MSSQL', 'DB2', 'MAXDB', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS', 'NO_FIELD_OPTIONS', 'MYSQL323', 'MYSQL40', 'ANSI', 'NO_AUTO_VALUE_ON_ZERO', 'NO_BACKSLASH_ESCAPES', 'STRICT_TRANS_TABLES', 'STRICT_ALL_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'INVALID_DATES', 'ERROR_FOR_DIVISION_BY_ZERO', 'TRADITIONAL', 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', 'PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL, comment text collate utf8_bin NOT NULL, character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db,name,type)) engine=MyISAM character set utf8 comment='Stored Procedures'; CREATE TABLE IF NOT EXISTS procs_priv ( Host char(60) binary DEFAULT '' NOT NULL, Db char(64) binary DEFAULT '' NOT NULL, User char(32) binary DEFAULT '' NOT NULL, Routine_name char(64) COLLATE utf8_general_ci DEFAULT '' NOT NULL, Routine_type enum('FUNCTION','PROCEDURE') NOT NULL, Grantor char(93) DEFAULT '' NOT NULL, Proc_priv set('Execute','Alter Routine','Grant') COLLATE utf8_general_ci DEFAULT '' NOT NULL, Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (Host,Db,User,Routine_name,Routine_type), KEY Grantor (Grantor) ) engine=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Procedure privileges'; @@ -89,7 +89,7 @@ CREATE TABLE IF NOT EXISTS general_log (event_time TIMESTAMP(6) NOT NULL DEFAULT -- Create slow_log CREATE TABLE IF NOT EXISTS slow_log (start_time TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), user_host MEDIUMTEXT NOT NULL, query_time TIME(6) NOT NULL, lock_time TIME(6) NOT NULL, rows_sent INTEGER NOT NULL, rows_examined INTEGER NOT NULL, db VARCHAR(512) NOT NULL, last_insert_id INTEGER NOT NULL, insert_id INTEGER NOT NULL, server_id INTEGER UNSIGNED NOT NULL, sql_text MEDIUMBLOB NOT NULL, thread_id BIGINT(21) UNSIGNED NOT NULL) engine=CSV CHARACTER SET utf8 comment="Slow log"; -CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(93) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH', 'MANDATORY_TIANMU', 'NO_KEY_ERROR') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events'; +CREATE TABLE IF NOT EXISTS event ( db char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', name char(64) CHARACTER SET utf8 NOT NULL default '', body longblob NOT NULL, definer char(93) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', execute_at DATETIME default NULL, interval_value int(11) default NULL, interval_field ENUM('YEAR','QUARTER','MONTH','DAY','HOUR','MINUTE','WEEK','SECOND','MICROSECOND','YEAR_MONTH','DAY_HOUR','DAY_MINUTE','DAY_SECOND','HOUR_MINUTE','HOUR_SECOND','MINUTE_SECOND','DAY_MICROSECOND','HOUR_MICROSECOND','MINUTE_MICROSECOND','SECOND_MICROSECOND') default NULL, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, modified TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00', last_executed DATETIME default NULL, starts DATETIME default NULL, ends DATETIME default NULL, status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED', on_completion ENUM('DROP','PRESERVE') NOT NULL default 'DROP', sql_mode set('REAL_AS_FLOAT','PIPES_AS_CONCAT','ANSI_QUOTES','IGNORE_SPACE','NOT_USED','ONLY_FULL_GROUP_BY','NO_UNSIGNED_SUBTRACTION','NO_DIR_IN_CREATE','POSTGRESQL','ORACLE','MSSQL','DB2','MAXDB','NO_KEY_OPTIONS','NO_TABLE_OPTIONS','NO_FIELD_OPTIONS','MYSQL323','MYSQL40','ANSI','NO_AUTO_VALUE_ON_ZERO','NO_BACKSLASH_ESCAPES','STRICT_TRANS_TABLES','STRICT_ALL_TABLES','NO_ZERO_IN_DATE','NO_ZERO_DATE','INVALID_DATES','ERROR_FOR_DIVISION_BY_ZERO','TRADITIONAL','NO_AUTO_CREATE_USER','HIGH_NOT_PRECEDENCE','NO_ENGINE_SUBSTITUTION','PAD_CHAR_TO_FULL_LENGTH') DEFAULT '' NOT NULL, comment char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL default '', originator INTEGER UNSIGNED NOT NULL, time_zone char(64) CHARACTER SET latin1 NOT NULL DEFAULT 'SYSTEM', character_set_client char(32) collate utf8_bin, collation_connection char(32) collate utf8_bin, db_collation char(32) collate utf8_bin, body_utf8 longblob, PRIMARY KEY (db, name) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT 'Events'; CREATE TABLE IF NOT EXISTS ndb_binlog_index (Position BIGINT UNSIGNED NOT NULL, File VARCHAR(255) NOT NULL, epoch BIGINT UNSIGNED NOT NULL, inserts INT UNSIGNED NOT NULL, updates INT UNSIGNED NOT NULL, deletes INT UNSIGNED NOT NULL, schemaops INT UNSIGNED NOT NULL, orig_server_id INT UNSIGNED NOT NULL, orig_epoch BIGINT UNSIGNED NOT NULL, gci INT UNSIGNED NOT NULL, next_position BIGINT UNSIGNED NOT NULL, next_file VARCHAR(255) NOT NULL, PRIMARY KEY(epoch, orig_server_id, orig_epoch)) ENGINE=MYISAM; diff --git a/scripts/mysql_system_tables_fix.sql b/scripts/mysql_system_tables_fix.sql index e781ddb74..9af709c74 100644 --- a/scripts/mysql_system_tables_fix.sql +++ b/scripts/mysql_system_tables_fix.sql @@ -476,9 +476,7 @@ ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL, 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', - 'PAD_CHAR_TO_FULL_LENGTH', - 'MANDATORY_TIANMU', - 'NO_KEY_ERROR' + 'PAD_CHAR_TO_FULL_LENGTH' ) DEFAULT '' NOT NULL, DEFAULT CHARACTER SET utf8; @@ -598,9 +596,7 @@ ALTER TABLE event MODIFY sql_mode 'NO_AUTO_CREATE_USER', 'HIGH_NOT_PRECEDENCE', 'NO_ENGINE_SUBSTITUTION', - 'PAD_CHAR_TO_FULL_LENGTH', - 'MANDATORY_TIANMU', - 'NO_KEY_ERROR' + 'PAD_CHAR_TO_FULL_LENGTH' ) DEFAULT '' NOT NULL AFTER on_completion; ALTER TABLE event MODIFY name char(64) CHARACTER SET utf8 NOT NULL default ''; diff --git a/sql/auth/sql_authorization.cc b/sql/auth/sql_authorization.cc index 2874fa0da..a40aa5b93 100644 --- a/sql/auth/sql_authorization.cc +++ b/sql/auth/sql_authorization.cc @@ -4389,10 +4389,10 @@ bool check_fk_parent_table_access(THD *thd, // Return if engine does not support Foreign key Constraint. if (!ha_check_storage_engine_flag(db_type, HTON_SUPPORTS_FOREIGN_KEYS)) { - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; if (db_type == tianmu_hton && - (alter_info->flags & Alter_info::ADD_FOREIGN_KEY) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + (alter_info->flags & Alter_info::ADD_FOREIGN_KEY) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_FOREIGN_KEY, MYF(0)); return true; } diff --git a/sql/item.h b/sql/item.h index f094b81bd..e848302d0 100644 --- a/sql/item.h +++ b/sql/item.h @@ -3570,7 +3570,7 @@ class Item_decimal :public Item_num enum_field_types field_type() const { return MYSQL_TYPE_NEWDECIMAL; } longlong val_int(); double val_real(); - String *val_str(String*); + virtual String *val_str(String*); my_decimal *val_decimal(my_decimal *val) { return &decimal_value; } bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) { diff --git a/sql/sql_class.h b/sql/sql_class.h index 73e35a69a..bb9204de0 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -179,9 +179,6 @@ enum enum_binlog_format { #define MODE_HIGH_NOT_PRECEDENCE (MODE_NO_AUTO_CREATE_USER*2) #define MODE_NO_ENGINE_SUBSTITUTION (MODE_HIGH_NOT_PRECEDENCE*2) #define MODE_PAD_CHAR_TO_FULL_LENGTH (1ULL << 31) -//Force the engine to be tianmu when acting as a slave library -#define MODE_MANDATORY_TIANMU (1ULL << 32) -#define MODE_NO_KEY_ERROR (1ULL << 33) /* Replication uses 8 bytes to store SQL_MODE in the binary log. The day you @@ -584,6 +581,17 @@ typedef struct system_variables 'COLUMN_TYPE' field. */ my_bool show_old_temporals; + + /* + Specifies whether to enable mandatory Tianmu engine in table. + if yes ,set tianmu_mandatory to ON, otherwise set the variable to OFF. + */ + my_bool tianmu_mandatory; + /* + Specifies whether to to directly skip DDL statements that are not supported by the SQL layer, + instead of reporting errors. if yes ,set tianmu_no_key_error to ON, otherwise set the variable to OFF. + */ + my_bool tianmu_no_key_error; } SV; diff --git a/sql/sql_load.cc b/sql/sql_load.cc index ecd40a27b..01b883fab 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -51,7 +51,7 @@ #include -#include "../storage/tianmu/handler/ha_my_tianmu.h" // tianmu code +#include "../storage/tianmu/sql/ha_my_tianmu.h" // tianmu code using std::min; using std::max; diff --git a/sql/sql_optimizer.cc b/sql/sql_optimizer.cc index 2e670e6d3..ad2a548e5 100644 --- a/sql/sql_optimizer.cc +++ b/sql/sql_optimizer.cc @@ -228,7 +228,7 @@ JOIN::optimize(OptimizePhase phase) if (phase == OptimizePhase::Before_LOJ_Transform) { if (tl->is_view_or_derived() && tl->optimize_derived_for_tianmu(thd)) - DBUG_RETURN(1); + DBUG_RETURN(0); } } } @@ -5142,23 +5142,8 @@ bool JOIN::make_join_plan() trace_table_dependencies(trace, join_tab, primary_tables); // Build the key access information, which is the basis for ref access. - if (where_cond || select_lex->outer_join) - { - /* - The primary key of the tianmu engine does not support delete and update statements. - The following codes can be deleted after subsequent support - */ - TABLE *const table= join_tab->table(); - bool check_if_tianmu_engine = table && table->s && - (table->s->db_type() ? (table->s->db_type()->db_type == DB_TYPE_TIANMU): false); - enum_sql_command sql_command = SQLCOM_END; - if(thd->lex) sql_command = thd->lex->sql_command; - bool check_tianmu_delete_or_update = (check_if_tianmu_engine && ((sql_command == SQLCOM_DELETE) || - (sql_command == SQLCOM_DELETE_MULTI) || - (sql_command == SQLCOM_UPDATE) || - (sql_command == SQLCOM_UPDATE_MULTI))); - - if (!check_tianmu_delete_or_update && update_ref_and_keys(thd, &keyuse_array, join_tab, tables, where_cond, + if (where_cond || select_lex->outer_join) { + if (update_ref_and_keys(thd, &keyuse_array, join_tab, tables, where_cond, cond_equal, ~select_lex->outer_join, select_lex, &sargables)) DBUG_RETURN(true); @@ -6901,19 +6886,17 @@ merge_key_fields(Key_field *start, Key_field *new_fields, Key_field *end, old->val= new_fields->val; /* The referred expression can be NULL: */ old->null_rejecting= 0; - } - else - { - /* - We are comparing two different const. In this case we can't - use a key-lookup on this so it's better to remove the value - and let the range optimizer handle it - */ - if (old == --first_free) // If last item - break; - *old= *first_free; // Remove old value - old--; // Retry this value - } + } else { + /* + We are comparing two different const. In this case we can't + use a key-lookup on this so it's better to remove the value + and let the range optimizer handle it + */ + if (old == --first_free) // If last item + break; + *old = *first_free; // Remove old value + old--; // Retry this value + } } } } @@ -9404,13 +9387,11 @@ static bool make_join_select(JOIN *join, Item *cond) get_quick_record_count(). */ assert(tab->quick()->is_valid()); - } - else - { + } else { delete tab->quick(); - tab->set_quick(NULL); + tab->set_quick(NULL); } - } + } if ((tab->type() == JT_ALL || tab->type() == JT_RANGE || tab->type() == JT_INDEX_MERGE || tab->type() == JT_INDEX_SCAN) && @@ -10126,7 +10107,7 @@ bool optimize_cond(THD *thd, Item **cond, COND_EQUAL **cond_equal, DBUG_EXECUTE("where",print_where(*cond,"after const change", QT_ORDINARY);); } } - if (*cond) + if ((*cond) && (!( (int64)(*cond) & 0x1))) { Opt_trace_object step_wrapper(trace); step_wrapper.add_alnum("transformation", "trivial_condition_removal"); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index e486cfc89..4e534fd81 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -118,7 +118,7 @@ #include "rpl_group_replication.h" #include -#include "../storage/tianmu/handler/ha_my_tianmu.h" // tianmu code +#include "../storage/tianmu/sql/ha_my_tianmu.h" // tianmu code using std::max; /** @@ -2774,18 +2774,14 @@ mysql_execute_command(THD *thd, bool first_level) if (!thd->in_sub_stmt) thd->query_plan.set_query_plan(lex->sql_command, lex, !thd->stmt_arena->is_conventional()); - /* - the (sql_mode) of (MANDATORY_TIANMU) is set, - the engine will be forcibly converted to the tianmu engine. - */ + if(lex && ((lex->sql_command == SQLCOM_CREATE_TABLE) || (lex->sql_command == SQLCOM_ALTER_TABLE)) && !(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE)){ - sql_mode_t sql_mode = thd->variables.sql_mode; - if(thd->slave_thread) sql_mode = global_system_variables.sql_mode; - if(sql_mode & MODE_MANDATORY_TIANMU){ + my_bool tianmu_mandatory = thd->slave_thread ? global_system_variables.tianmu_mandatory : thd->variables.tianmu_mandatory; + if(tianmu_mandatory){ lex->create_info.db_type = ha_default_handlerton(thd); old_db_type = lex->create_info.db_type->db_type; lex->create_info.db_type->db_type = DB_TYPE_TIANMU; diff --git a/sql/sql_resolver.cc b/sql/sql_resolver.cc index 44d3971f4..447f3267d 100644 --- a/sql/sql_resolver.cc +++ b/sql/sql_resolver.cc @@ -1037,9 +1037,7 @@ bool SELECT_LEX::resolve_subquery(THD *thd) for (TABLE_LIST *p_table_list = parent_tables.first; p_table_list; p_table_list = p_table_list->next_local) { TABLE* p_table = p_table_list->table; - if (p_table && p_table->s && p_table->s->db_type() && - p_table->s->db_type()->db_type == DB_TYPE_TIANMU && - p_table->key_info) { + if (p_table && p_table->reginfo.join_tab && p_table->reginfo.join_tab->quick()) { tianmu_table_has_index = true; break; } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 837ac4d37..1dec5be78 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -77,7 +77,7 @@ #include #include -#include "../storage/tianmu/handler/ha_my_tianmu.h" // TIANMU UPGRADE +#include "../storage/tianmu/sql/ha_my_tianmu.h" // TIANMU UPGRADE using std::max; using std::min; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index db9000529..f55c3877e 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -3933,17 +3933,16 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, } (*key_count)++; tmp=file->max_key_parts(); - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; if ((create_info->db_type->db_type == DB_TYPE_TIANMU)) { if ((file->ha_table_flags() & HA_NON_SECONDARY_KEY) && - (key->type == KEYTYPE_MULTIPLE) && - !(sql_mode & MODE_NO_KEY_ERROR)) { + (key->type == KEYTYPE_MULTIPLE) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_SECONDARY_INDEX, MYF(0)); DBUG_RETURN(TRUE); } if ((file->ha_table_flags() & HA_NON_UNIQUE_KEY) && - (key->type == KEYTYPE_UNIQUE) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + (key->type == KEYTYPE_UNIQUE) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_UNIQUE_INDEX, MYF(0)); DBUG_RETURN(TRUE); } @@ -4081,8 +4080,9 @@ mysql_prepare_create_table(THD *thd, const char *error_schema_name, DBUG_RETURN(TRUE); } if (create_info->db_type->db_type == DB_TYPE_TIANMU){ - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if(!(sql_mode & MODE_NO_KEY_ERROR)) { + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if(!tianmu_no_key_error) { my_message(ER_TIANMU_NOT_SUPPORTED_FULLTEXT_INDEX, ER(ER_TIANMU_NOT_SUPPORTED_FULLTEXT_INDEX), MYF(0)); DBUG_RETURN(TRUE); @@ -8318,9 +8318,9 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, !my_strcasecmp(system_charset_info,key_name, drop->name)) { // for issue 1342 and 1343, if sql_mode does not contains NO_KEY_ERROR, // drop unique key, sencondary index, and fulltext index will return an error. - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && - !(sql_mode & MODE_NO_KEY_ERROR)) { + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && !tianmu_no_key_error) { if (key_info->flags & HA_SPATIAL){ //key_type= KEYTYPE_SPATIAL; //do nothing @@ -8524,12 +8524,12 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, // Now this contains only DROP for foreign keys and not-found objects Alter_drop *drop; drop_it.rewind(); - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; while ((drop=drop_it++)) { switch (drop->type) { case Alter_drop::KEY: - if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_FOUND_INDEX, MYF(0)); goto err; } @@ -8539,8 +8539,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, alter_info->drop_list.head()->name); goto err; case Alter_drop::FOREIGN_KEY: - if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && - (!(sql_mode & MODE_NO_KEY_ERROR))) { + if ((create_info->db_type->db_type == DB_TYPE_TIANMU) && !tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_FOREIGN_KEY, MYF(0)); } break; @@ -8555,8 +8554,9 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, if (rename_key_list.elements) { if (create_info->db_type->db_type == DB_TYPE_TIANMU){ - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if(!(sql_mode & MODE_NO_KEY_ERROR)){ + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if(!tianmu_no_key_error){ my_error(ER_TIANMU_NOT_FOUND_INDEX, MYF(0)); goto err; } diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc index 8388c8ce2..aeeab2cca 100644 --- a/sql/sql_trigger.cc +++ b/sql/sql_trigger.cc @@ -227,8 +227,9 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create) table= tables->table; table->pos_in_table_list= tables; if ((table->file && table->file->ht == tianmu_hton)){ - sql_mode_t sql_mode = thd->slave_thread ? global_system_variables.sql_mode : thd->variables.sql_mode; - if(!(sql_mode & MODE_NO_KEY_ERROR)) { + my_bool tianmu_no_key_error = thd->slave_thread ? global_system_variables.tianmu_no_key_error : + thd->variables.tianmu_no_key_error; + if(!tianmu_no_key_error) { my_error(ER_TIANMU_NOT_SUPPORTED_TRIGGER, MYF(0)); goto end; } diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 44ef56180..cc59db135 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -956,7 +956,7 @@ bool st_select_lex_unit::cleanup(bool full) #ifndef NDEBUG void st_select_lex_unit::assert_not_fully_clean() { - assert(cleaned < UC_CLEAN); + assert(cleaned <= UC_CLEAN); SELECT_LEX *sl= first_select(); for (;;) { diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 452b2481c..779b0836a 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3904,7 +3904,7 @@ static const char *sql_mode_names[]= "STRICT_ALL_TABLES", "NO_ZERO_IN_DATE", "NO_ZERO_DATE", "ALLOW_INVALID_DATES", "ERROR_FOR_DIVISION_BY_ZERO", "TRADITIONAL", "NO_AUTO_CREATE_USER", "HIGH_NOT_PRECEDENCE", "NO_ENGINE_SUBSTITUTION", - "PAD_CHAR_TO_FULL_LENGTH", "MANDATORY_TIANMU", "NO_KEY_ERROR", + "PAD_CHAR_TO_FULL_LENGTH", 0 }; export bool sql_mode_string_representation(THD *thd, sql_mode_t sql_mode, @@ -5996,6 +5996,24 @@ static Sys_var_mybool Sys_show_old_temporals( ON_CHECK(0), ON_UPDATE(0), DEPRECATED_VAR("")); +static Sys_var_mybool Sys_tianmu_mandatory( + "tianmu_mandatory", + "Specifies whether to enable mandatory Tianmu engine in table." + "if yes ,set tianmu_mandatory to ON, otherwise set the variable to OFF.", + SESSION_VAR(tianmu_mandatory), + CMD_LINE(OPT_ARG), + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, + ON_CHECK(0), ON_UPDATE(0)); + +static Sys_var_mybool Sys_tianmu_no_key_error( + "tianmu_no_key_error", + "Specifies whether to to directly skip DDL statements that are not supported by the SQL layer," + "instead of reporting errors. if yes ,set tianmu_no_key_error to ON, otherwise set the variable to OFF.", + SESSION_VAR(tianmu_no_key_error), + CMD_LINE(OPT_ARG), + DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, + ON_CHECK(0), ON_UPDATE(0)); + static Sys_var_charptr Sys_disabled_storage_engines( "disabled_storage_engines", "Limit CREATE TABLE for the storage engines listed", diff --git a/storage/tianmu/CMakeLists.txt b/storage/tianmu/CMakeLists.txt index 3302e1e6b..9449b05bd 100644 --- a/storage/tianmu/CMakeLists.txt +++ b/storage/tianmu/CMakeLists.txt @@ -55,6 +55,14 @@ AUX_SOURCE_DIRECTORY(base/core SOURCE_base_core) AUX_SOURCE_DIRECTORY(base/fmt SOURCE_base_fmt) AUX_SOURCE_DIRECTORY(base/net SOURCE_base_net) AUX_SOURCE_DIRECTORY(base/util SOURCE_base_util) +AUX_SOURCE_DIRECTORY(optimizer SOURCE_optimizer) +AUX_SOURCE_DIRECTORY(optimizer/compile SOURCE_compile) +AUX_SOURCE_DIRECTORY(optimizer/iterators SOURCE_iterators) +AUX_SOURCE_DIRECTORY(optimizer/statistics SOURCE_statistics) +AUX_SOURCE_DIRECTORY(optimizer/plan SOURCE_plan) +AUX_SOURCE_DIRECTORY(executor SOURCE_executor) +AUX_SOURCE_DIRECTORY(data SOURCE_data) +AUX_SOURCE_DIRECTORY(sql SOURCE_sql) SET(TIANMU_SOURCES ${SOURCE_common} ${SOURCE_compress} @@ -72,7 +80,16 @@ SET(TIANMU_SOURCES ${SOURCE_common} ${SOURCE_base_core} ${SOURCE_base_fmt} ${SOURCE_base_net} - ${SOURCE_base_util}) + ${SOURCE_base_util} + ${SOURCE_optimizer} + ${SOURCE_compile} + ${SOURCE_iterators} + ${SOURCE_statistics} + ${SOURCE_plan} + ${SOURCE_executor} + ${SOURCE_data} + ${SOURCE_sql} + ) MYSQL_ADD_PLUGIN(tianmu ${TIANMU_SOURCES} STORAGE_ENGINE diff --git a/storage/tianmu/async_tests/task_executor.cpp b/storage/tianmu/async_tests/task_executor.cpp index 57d65c9ee..dcb0933c2 100644 --- a/storage/tianmu/async_tests/task_executor.cpp +++ b/storage/tianmu/async_tests/task_executor.cpp @@ -19,7 +19,7 @@ #include "base/core/app_template.h" #include "base/core/future.h" -#include "core/task_executor.h" +#include "executor/task_executor.h" #ifndef DISABLE_USED_FOR_TIANMU #include "core/engine.h" diff --git a/storage/tianmu/common/common_definitions.h b/storage/tianmu/common/common_definitions.h index db184b386..7dabc51e8 100644 --- a/storage/tianmu/common/common_definitions.h +++ b/storage/tianmu/common/common_definitions.h @@ -59,8 +59,7 @@ enum class ColumnType : unsigned char { BIN, // free binary (BLOB), no encoding BYTE, // free binary, fixed size, no encoding VARBYTE, // free binary, variable size, no encoding - REAL, // double (stored as non-interpreted int64_t, null value is - // NULL_VALUE_64) + REAL, // double (stored as non-interpreted int64_t, null value is NULL_VALUE_64) DATETIME, TIMESTAMP, DATETIME_N, diff --git a/storage/tianmu/common/defs.h b/storage/tianmu/common/defs.h index d4f8b8335..595e65bf4 100644 --- a/storage/tianmu/common/defs.h +++ b/storage/tianmu/common/defs.h @@ -18,6 +18,7 @@ #define TIANMU_COMMON_DEFS_H_ #pragma once +#include #include namespace Tianmu { @@ -42,19 +43,17 @@ constexpr const char *COL_FILTER_HIST_DIR = "hist"; constexpr const char *COL_KN_FILE = "KN"; constexpr const char *COL_META_FILE = "META"; constexpr const char *COL_DN_FILE = "DN"; -/* - The size of the file where the DPN metadata resides, in bytes - At present, the size of a single DPN is 88 bytes, and the storage limit is 8.589 billion lines -*/ -constexpr size_t COL_DN_FILE_SIZE = 11 * 1024 * 1024; + +constexpr uint8_t MAX_PSS = 16; // max pack size shift +constexpr uint8_t DFT_PSS = 16; +constexpr size_t MAX_ROW_NUMS_EACH_PACK = 1 << common::MAX_PSS; // max 64K rows per pack + +constexpr size_t MAX_CMPR_SIZE = 0x007D000000; constexpr const char *COL_DATA_FILE = "DATA"; constexpr const char *COL_VERSION_DIR = "v"; constexpr uint32_t COL_FILE_VERSION = 3; constexpr uint32_t MAX_COLUMNS_PER_TABLE = 4000; - -constexpr uint8_t MAX_PSS = 16; -constexpr uint8_t DFT_PSS = 16; -constexpr size_t MAX_CMPR_SIZE = 0x007D000000; +constexpr uint32_t MAX_ROW_NUM_SHIFT = 33; // max 8G (1 << 33) rows per storage limitation using PACK_INDEX = uint32_t; constexpr PACK_INDEX INVALID_PACK_INDEX = -1; diff --git a/storage/tianmu/compress/basic_data_filt.h b/storage/tianmu/compress/basic_data_filt.h index e195b6d09..5db0a147b 100644 --- a/storage/tianmu/compress/basic_data_filt.h +++ b/storage/tianmu/compress/basic_data_filt.h @@ -22,8 +22,8 @@ #include "compress/data_filt.h" #include "compress/dictionary.h" -#include "core/bin_tools.h" #include "core/quick_math.h" +#include "util/bin_tools.h" namespace Tianmu { namespace compress { diff --git a/storage/tianmu/compress/dictionary.cpp b/storage/tianmu/compress/dictionary.cpp index 03ca77927..1a0ce71d7 100644 --- a/storage/tianmu/compress/dictionary.cpp +++ b/storage/tianmu/compress/dictionary.cpp @@ -19,7 +19,7 @@ #include -#include "core/bin_tools.h" +#include "util/bin_tools.h" #include "util/qsort.h" namespace Tianmu { diff --git a/storage/tianmu/compress/num_compressor.h b/storage/tianmu/compress/num_compressor.h index 4bf01e771..0405030a7 100644 --- a/storage/tianmu/compress/num_compressor.h +++ b/storage/tianmu/compress/num_compressor.h @@ -25,8 +25,8 @@ #include "compress/range_code.h" #include "compress/top_bit_dict.h" #include "core/quick_math.h" -#include "core/tools.h" #include "system/fet.h" +#include "util/tools.h" namespace Tianmu { namespace compress { diff --git a/storage/tianmu/compress/range_code.h b/storage/tianmu/compress/range_code.h index b0c2b47dd..bb5a3b83f 100644 --- a/storage/tianmu/compress/range_code.h +++ b/storage/tianmu/compress/range_code.h @@ -23,7 +23,7 @@ #include "common/assert.h" #include "common/exception.h" #include "compress/defs.h" -#include "core/bin_tools.h" +#include "util/bin_tools.h" namespace Tianmu { namespace compress { diff --git a/storage/tianmu/core/data_cache.cpp b/storage/tianmu/core/data_cache.cpp index 632d44ba7..9b3cbba61 100644 --- a/storage/tianmu/core/data_cache.cpp +++ b/storage/tianmu/core/data_cache.cpp @@ -17,7 +17,7 @@ #include "data_cache.h" -#include "core/tianmu_attr.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/data_cache.h b/storage/tianmu/core/data_cache.h index 6997eb384..2340fd486 100644 --- a/storage/tianmu/core/data_cache.h +++ b/storage/tianmu/core/data_cache.h @@ -24,7 +24,7 @@ #include #include -#include "core/pack.h" +#include "data/pack.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/delta_table.cpp b/storage/tianmu/core/delta_table.cpp index 3f2b5a6bb..f572c3c39 100644 --- a/storage/tianmu/core/delta_table.cpp +++ b/storage/tianmu/core/delta_table.cpp @@ -28,7 +28,10 @@ namespace core { /// DeltaTable DeltaTable::DeltaTable(const std::string &name, uint32_t delta_id, uint32_t cf_id) - : fullname_(name), delta_tid_(delta_id), cf_handle_(ha_kvstore_->GetCfHandleByID(cf_id)) { + : fullname_(name), delta_tid_(delta_id) { + index::KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + cf_handle_ = store->GetCfHandleByID(cf_id); + ASSERT(cf_handle_, "column family handle not exist " + name); } @@ -40,7 +43,9 @@ std::shared_ptr DeltaTable::CreateDeltaTable(const std::shared_ptr delta = ha_kvstore_->FindDeltaTable(normalized_name); + + index::KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + std::shared_ptr delta = store->FindDeltaTable(normalized_name); if (delta) return delta; @@ -48,10 +53,12 @@ std::shared_ptr DeltaTable::CreateDeltaTable(const std::shared_ptrGetCfHandle(cf_name)->GetID(); - uint32_t delta_id = ha_kvstore_->GetNextIndexId(); + + uint32_t cf_id = store->GetCfHandle(cf_name)->GetID(); + uint32_t delta_id = store->GetNextIndexId(); delta = std::make_shared(normalized_name, delta_id, cf_id); - ha_kvstore_->KVWriteDeltaMeta(delta); + store->KVWriteDeltaMeta(delta); + TIANMU_LOG(LogCtl_Level::INFO, "Create Delta Store: %s, CF ID: %d, Delta Store ID: %u", normalized_name.c_str(), cf_id, delta_id); @@ -63,11 +70,13 @@ common::ErrorCode DeltaTable::Rename(const std::string &to) { if (!index::NormalizeName(to, dname)) { return common::ErrorCode::FAILED; } - if (ha_kvstore_->FindDeltaTable(dname)) { + + index::KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + if (store->FindDeltaTable(dname)) { return common::ErrorCode::FAILED; } - ha_kvstore_->KVRenameDeltaMeta(fullname_, dname); + store->KVRenameDeltaMeta(fullname_, dname); fullname_ = dname; return common::ErrorCode::SUCCESS; } @@ -75,18 +84,22 @@ common::ErrorCode DeltaTable::Rename(const std::string &to) { void DeltaTable::FillRowByRowid(Transaction *tx, TABLE *table, int64_t obj) { uchar key[sizeof(uint32_t) + sizeof(uint64_t)]; size_t key_pos = 0; + index::KVTransaction &kv_trans = tx->KVTrans(); // table id index::be_store_index(key + key_pos, delta_tid_); key_pos += sizeof(uint32_t); + // row id index::be_store_uint64(key + key_pos, obj); key_pos += sizeof(uint64_t); + std::string delta_record; rocksdb::Status status = kv_trans.GetData(cf_handle_, {(char *)key, key_pos}, &delta_record); if (!status.ok()) { throw common::Exception("Error, kv_trans.GetData failed, key: %s" + std::string((char *)key, key_pos)); } + core::Engine::DecodeInsertRecordToField(delta_record.data(), table->field); } @@ -96,31 +109,38 @@ common::ErrorCode DeltaTable::DropDeltaTable(const std::string &table_name) { throw common::Exception("Normalized memtable name failed " + table_name); return common::ErrorCode::FAILED; } - auto delta = ha_kvstore_->FindDeltaTable(normalized_name); + + index::KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + auto delta = store->FindDeltaTable(normalized_name); if (!delta) return common::ErrorCode::SUCCESS; TIANMU_LOG(LogCtl_Level::INFO, "Dropping RowStore: %s, CF ID: %d, RowStore ID: %u", normalized_name.c_str(), delta->GetCFHandle()->GetID(), delta->GetDeltaTableID()); - return ha_kvstore_->KVDelDeltaMeta(normalized_name); + return store->KVDelDeltaMeta(normalized_name); } void DeltaTable::Init(uint64_t base_row_num) { index::KVTransaction kv_trans; uchar entry_key[sizeof(uint32_t)]; + index::be_store_index(entry_key, delta_tid_); + rocksdb::Slice prefix((char *)entry_key, sizeof(uint32_t)); rocksdb::ReadOptions read_options; read_options.total_order_seek = true; std::unique_ptr iter(kv_trans.GetDataIterator(read_options, cf_handle_)); iter->Seek(prefix); + row_id.store(base_row_num); - if (iter->Valid() && iter->key().starts_with(prefix)) { + + while (iter->Valid() && iter->key().starts_with(prefix)) { // row_id auto type = *reinterpret_cast(const_cast(iter->value().data())); if (type == RecordType::kInsert) { row_id.fetch_add(1); } + // load_id uint32_t load_num = *reinterpret_cast(const_cast(iter->value().data()) + sizeof(RecordType)); load_id.fetch_add(load_num); @@ -151,9 +171,9 @@ void DeltaTable::AddInsertRecord(Transaction *tx, uint64_t row_id, std::unique_p kv_trans.Acquiresnapshot(); tx->ResetInsertRowNum(); } - load_id++; - stat.write_cnt++; - stat.write_bytes += size; + load_id.fetch_add(1); + stat.write_cnt.fetch_add(1); + stat.write_bytes.fetch_add(size); } void DeltaTable::AddRecord(Transaction *tx, uint64_t row_id, std::unique_ptr buf, uint32_t size) { @@ -172,9 +192,9 @@ void DeltaTable::AddRecord(Transaction *tx, uint64_t row_id, std::unique_ptr &attrs) : table_(table), attrs_(attrs) { // get snapshot for rocksdb, snapshot will release when DeltaIterator is destructured - auto snapshot = ha_kvstore_->GetRdbSnapshot(); + index::KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + auto snapshot = store->GetRdbSnapshot(); + rocksdb::ReadOptions read_options; read_options.total_order_seek = true; read_options.snapshot = snapshot; - it_ = std::unique_ptr(ha_kvstore_->GetRdb()->NewIterator(read_options, table_->GetCFHandle())); + it_ = std::unique_ptr(store->GetRdb()->NewIterator(read_options, table_->GetCFHandle())); + uchar entry_key[sizeof(uint32_t)]; uint32_t table_id = table_->GetDeltaTableID(); index::be_store_index(entry_key, table_id); rocksdb::Slice prefix = rocksdb::Slice((char *)entry_key, sizeof(uint32_t)); it_->Seek(prefix); + if (RdbKeyValid()) { position_ = CurrentRowId(); start_position_ = position_; @@ -259,6 +283,7 @@ bool DeltaIterator::operator!=(const DeltaIterator &other) { return !(*this == o void DeltaIterator::Next() { it_->Next(); + if (RdbKeyValid()) { position_ = CurrentRowId(); } else { diff --git a/storage/tianmu/core/delta_table.h b/storage/tianmu/core/delta_table.h index 9751c87df..b1d27f05d 100644 --- a/storage/tianmu/core/delta_table.h +++ b/storage/tianmu/core/delta_table.h @@ -22,13 +22,13 @@ #include "common/exception.h" #include "core/delta_record_head.h" -#include "core/tianmu_attr.h" #include "index/kv_store.h" #include "rocksdb/db.h" #include "rocksdb/iterator.h" #include "rocksdb/slice.h" #include "types/tianmu_data_types.h" #include "util/bitset.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/dimension_group.h b/storage/tianmu/core/dimension_group.h index e8aeeb792..4968192d6 100644 --- a/storage/tianmu/core/dimension_group.h +++ b/storage/tianmu/core/dimension_group.h @@ -18,10 +18,10 @@ #define TIANMU_CORE_DIMENSION_GROUP_H_ #pragma once -#include "core/bin_tools.h" #include "core/dimension_vector.h" -#include "core/filter.h" -#include "core/index_table.h" +#include "executor/filter.h" +#include "index/index_table.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/dimension_group_multiple.h b/storage/tianmu/core/dimension_group_multiple.h index 2ae523d2f..442fbd117 100644 --- a/storage/tianmu/core/dimension_group_multiple.h +++ b/storage/tianmu/core/dimension_group_multiple.h @@ -20,10 +20,10 @@ #include -#include "core/bin_tools.h" #include "core/dimension_group.h" -#include "core/filter.h" -#include "core/index_table.h" +#include "executor/filter.h" +#include "index/index_table.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/engine.cpp b/storage/tianmu/core/engine.cpp index ab20bb40c..60ac7b280 100644 --- a/storage/tianmu/core/engine.cpp +++ b/storage/tianmu/core/engine.cpp @@ -28,10 +28,9 @@ #include "common/mysql_gate.h" #include "core/delta_table.h" #include "core/table_share.h" -#include "core/task_executor.h" #include "core/temp_table.h" -#include "core/tools.h" #include "core/transaction.h" +#include "executor/task_executor.h" #include "mm/initializer.h" #include "mm/memory_statistics.h" #include "mysql/thread_pool_priv.h" @@ -43,6 +42,7 @@ #include "util/bitset.h" #include "util/fs.h" #include "util/thread_pool.h" +#include "util/tools.h" namespace Tianmu { namespace DBHandler { @@ -81,10 +81,11 @@ static int setup_sig_handler() { fs::path Engine::GetNextDataDir() { std::scoped_lock guard(v_mtx); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); if (tianmu_data_dirs.empty()) { // fall back to use MySQL data directory - auto p = ha_tianmu_engine_->tianmu_data_dir / TIANMU_DATA_DIR; + auto p = eng->tianmu_data_dir / TIANMU_DATA_DIR; if (!fs::is_directory(p)) fs::create_directory(p); return p; @@ -117,6 +118,7 @@ fs::path Engine::GetNextDataDir() { } return v[std::rand() % v.size()]; } + // round-robin static int idx = 0; return tianmu_data_dirs[idx++ % sz]; @@ -127,22 +129,27 @@ static int has_pack(const LEX_STRING &comment) { std::string str(comment.str, comment.length); boost::to_upper(str); std::string val; + auto pos = str.find("PACK"); if (pos == std::string::npos) return ret; + size_t val_pos = str.find(':', pos); if (val_pos == std::string::npos) return ret; + size_t term_pos = str.find(';', val_pos); if (term_pos == std::string::npos) { val = str.substr(val_pos + 1); } else { val = str.substr(val_pos + 1, term_pos - val_pos - 1); } + boost::trim(val); ret = atoi(val.c_str()); if (ret > common::DFT_PSS || ret <= 0) ret = common::DFT_PSS; + return ret; } @@ -150,12 +157,15 @@ static std::string has_mem_name(const LEX_STRING &comment) { std::string name = ""; std::string str(comment.str, comment.length); boost::to_upper(str); + auto pos = str.find("ROWSTORE"); if (pos == std::string::npos) return name; + size_t val_pos = str.find(':', pos); if (val_pos == std::string::npos) return name; + size_t term_pos = str.find(';', val_pos); if (term_pos == std::string::npos) { name = str.substr(val_pos + 1); @@ -199,27 +209,32 @@ Engine::Engine() : std::thread::hardware_concurrency()), insert_buffer(BUFFER_FILE, tianmu_sysvar_insert_buffer_size) { tianmu_data_dir = mysql_real_data_home; + store_ = nullptr; } int Engine::Init(uint engine_slot) { m_slot = engine_slot; ConfigureRCControl(); + if (tianmu_sysvar_controlquerylog > 0) { tianmu_querylog_.setOn(); } else { tianmu_querylog_.setOff(); } + std::srand(unsigned(time(nullptr))); if (tianmu_sysvar_servermainheapsize == 0) { long pages = sysconf(_SC_PHYS_PAGES); long pagesize = sysconf(_SC_PAGESIZE); + if (pagesize > 0 && pages > 0) { tianmu_sysvar_servermainheapsize = pages * pagesize / 1_MB / 2; } else { tianmu_sysvar_servermainheapsize = 10000; } } + size_t main_size = size_t(tianmu_sysvar_servermainheapsize) << 20; std::string hugefiledir = tianmu_sysvar_hugefiledir; @@ -236,13 +251,14 @@ int Engine::Init(uint engine_slot) { boost::trim_if(cachefolder_path, boost::is_any_of("\"")); if (SetUpCacheFolder(cachefolder_path) != 0) return 1; + system::ClearDirectory(cachefolder_path); m_resourceManager = new system::ResourceManager(); // init the tianmu key-value store, aka, rocksdb engine. - ha_kvstore_ = new index::KVStore(); - ha_kvstore_->Init(); + store_ = new index::KVStore(); + store_->Init(); #ifdef FUNCTIONS_EXECUTION_TIMES fet = new FunctionsExecutionTimes(); @@ -275,9 +291,11 @@ int Engine::Init(uint engine_slot) { [this]() { for (auto &delta : m_table_deltas) { TIANMU_LOG(LogCtl_Level::INFO, - "delta table id: %d delta_size: %d, current load id: %d, merge id: %d, current row_id: %d", - delta.second->GetDeltaTableID(), delta.second->load_id.load() - delta.second->merge_id.load(), - delta.second->load_id.load(), delta.second->merge_id.load(), delta.second->row_id.load()); + "table name: %s, delta table id: %d delta_size: %ld, current load id: %ld, merge id: %ld, " + "current row_id: %ld", + delta.second->FullName().c_str(), delta.second->GetDeltaTableID(), + delta.second->load_id.load() - delta.second->merge_id.load(), delta.second->load_id.load(), + delta.second->merge_id.load(), delta.second->row_id.load()); } }}, {tianmu_sysvar_log_loop_interval * 5, @@ -311,6 +329,7 @@ int Engine::Init(uint engine_slot) { } TIANMU_LOG(LogCtl_Level::INFO, "Tianmu monitor thread exiting..."); }); + m_load_thread = std::thread([this] { ProcessInsertBufferMerge(); }); m_merge_thread = std::thread([this] { ProcessDeltaStoreMerge(); }); m_purge_thread = std::thread([this] { @@ -378,8 +397,21 @@ Engine::~Engine() { table_share_map.clear(); m_table_deltas.clear(); m_table_keys.clear(); - delete m_resourceManager; - delete the_filter_block_owner; + + if (m_resourceManager) { + delete m_resourceManager; + m_resourceManager = nullptr; + } + + if (store_) { + delete store_; + store_ = nullptr; + } + + if (the_filter_block_owner) { + delete the_filter_block_owner; + the_filter_block_owner = nullptr; + } try { mm::MemoryManagerInitializer::EnsureNoLeakedTraceableObject(); @@ -388,10 +420,8 @@ Engine::~Engine() { } catch (...) { TIANMU_LOG(LogCtl_Level::ERROR, "Unkown exception caught"); } - if (tianmu_control_.isOn()) - mm::MemoryManagerInitializer::deinit(true); - else - mm::MemoryManagerInitializer::deinit(false); + + mm::MemoryManagerInitializer::deinit(tianmu_control_.isOn() ? true : false); TIANMU_LOG(LogCtl_Level::INFO, "Tianmu engine destroyed."); } @@ -738,14 +768,19 @@ uint32_t Engine::GetNextTableId() { if (!fs::exists(p)) { TIANMU_LOG(LogCtl_Level::INFO, "Creating table id file"); std::ofstream seq_file(p.string()); - if (seq_file) + if (seq_file) { seq_file << 0; + seq_file.flush(); // sync to disk mandatory. + } + if (!seq_file) { throw common::FileException("Failed to write to table id file"); } + + return 0; // fast return if it's a new-created tianmu.tid file. } - uint32_t seq; + uint32_t seq{0}; std::fstream seq_file(p.string()); if (seq_file) seq_file >> seq; @@ -755,6 +790,7 @@ uint32_t Engine::GetNextTableId() { seq++; seq_file.seekg(0); seq_file << seq; + seq_file.flush(); // sync to disk mandatory. if (!seq_file) { throw common::FileException("Failed to write to table id file"); } @@ -920,9 +956,18 @@ AttributeTypeInfo Engine::GetAttrTypeInfo(const Field &field) { } void Engine::CommitTx(THD *thd, bool all) { + /* + Currently, the tianmu engine does not support manual transactions, + and there is a problem with the current determination of automatic commit. + After auto commit is turned off, tianmu will not commit the transaction. + Therefore, it is modified to the default automatic commit statement level transaction. + In the future, this logic will be modified after manual transactions are supported. + if (all || !thd_test_options(thd, OPTION_NOT_AUTOCOMMIT)) { GetTx(thd)->Commit(thd); } + */ + GetTx(thd)->Commit(thd); ClearTx(thd); } @@ -937,15 +982,20 @@ void Engine::Rollback(THD *thd, bool all, bool force_error_message) { } int Engine::DeleteTable(const char *table, [[maybe_unused]] THD *thd) { + DBUG_ENTER("Engine::DeleteTable"); + { std::unique_lock mem_guard(mem_table_mutex); DeltaTable::DropDeltaTable(table); m_table_deltas.erase(table); } + if (DeleteTableIndex(table, thd)) { TIANMU_LOG(LogCtl_Level::ERROR, "DeleteTable failed"); - return 1; + DBUG_RETURN(1); } + DBUG_EXECUTE_IF("TIANMU_DELETE_TABLE_AFTER_INDEX", { DBUG_RETURN(1); }); + UnRegisterTable(table); std::string p = table; p += common::TIANMU_EXT; @@ -960,20 +1010,25 @@ int Engine::DeleteTable(const char *table, [[maybe_unused]] THD *thd) { system::DeleteDirectory(p); TIANMU_LOG(LogCtl_Level::INFO, "Drop table %s, ID = %u", table, id); - return 0; + DBUG_RETURN(0); } void Engine::TruncateTable(const std::string &table_path, [[maybe_unused]] THD *thd) { + DBUG_ENTER("Engine::TruncateTable"); + auto indextab = GetTableIndex(table_path); if (indextab != nullptr) { indextab->TruncateIndexTable(); } + auto tab = current_txn_->GetTableByPath(table_path); tab->Truncate(); auto id = tab->GetID(); cache.ReleaseTable(id); filter_cache.RemoveIf([id](const FilterCoordinate &c) { return c[0] == int(id); }); TIANMU_LOG(LogCtl_Level::INFO, "Truncated table %s, ID = %u", table_path.c_str(), id); + + DBUG_VOID_RETURN; } std::shared_ptr Engine::GetTableRD(const std::string &table_path) { @@ -1347,6 +1402,7 @@ static void HandleDelayedLoad(uint32_t table_id, std::vectoris_error() ? trans_rollback_stmt(thd) : trans_commit_stmt(thd); thd->get_stmt_da()->set_overwrite_status(false); close_thread_tables(thd); + if (thd->transaction_rollback_request) { trans_rollback_implicit(thd); thd->mdl_context.release_transactional_locks(); @@ -1359,17 +1415,22 @@ static void HandleDelayedLoad(uint32_t table_id, std::vectoris_fatal_error) { TIANMU_LOG(LogCtl_Level::ERROR, "LOAD DATA failed on table '%s'", tab_name.c_str()); } + thd->release_resources(); thd_manager->remove_thd(thd); delete thd; + my_thread_end(); } void DistributeLoad(std::unordered_map>> &tm) { utils::result_set res; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + for (auto &it : tm) { - res.insert(ha_tianmu_engine_->bg_load_thread_pool.add_task(HandleDelayedLoad, it.first, std::ref(it.second))); + res.insert(eng->bg_load_thread_pool.add_task(HandleDelayedLoad, it.first, std::ref(it.second))); } + res.get_all(); tm.clear(); } @@ -1435,6 +1496,7 @@ void Engine::ProcessDeltaStoreMerge() { while (!mysqld_server_started) { struct timespec abstime; set_timespec(&abstime, 1); + mysql_cond_timedwait(&COND_server_started, &LOCK_server_started, &abstime); if (exiting) { mysql_mutex_unlock(&LOCK_server_started); @@ -1445,6 +1507,8 @@ void Engine::ProcessDeltaStoreMerge() { std::map sleep_cnts; TIANMU_LOG(LogCtl_Level::INFO, "Tianmu merge delta store thread start..."); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + while (!exiting) { if (!tianmu_sysvar_enable_rowstore) { std::unique_lock lk(cv_merge_mtx); @@ -1460,16 +1524,21 @@ void Engine::ProcessDeltaStoreMerge() { uint64_t record_count = delta_table->CountRecords(); if ((record_count >= tianmu_sysvar_insert_numthreshold || (sleep_cnts.count(name) && sleep_cnts[name] > tianmu_sysvar_insert_cntthreshold))) { - auto share = ha_tianmu_engine_->getTableShare(name); + auto share = eng->getTableShare(name); auto table_id = share->TabID(); + utils::BitSet null_mask(share->NumOfCols()); + std::unique_ptr buf(new char[sizeof(uint32_t) + name.size() + 1 + null_mask.data_size()]); char *ptr = buf.get(); *(uint32_t *)ptr = table_id; // table id ptr += sizeof(uint32_t); + std::memcpy(ptr, name.c_str(), name.size()); ptr += name.size(); + *ptr++ = 0; // end with NUL + std::memcpy(ptr, null_mask.data(), null_mask.data_size()); need_merge_table[table_id].emplace_back(std::move(buf)); sleep_cnts[name] = 0; @@ -1492,6 +1561,7 @@ void Engine::ProcessDeltaStoreMerge() { continue; } } + if (!need_merge_table.empty()) DistributeLoad(need_merge_table); else { @@ -1499,6 +1569,7 @@ void Engine::ProcessDeltaStoreMerge() { cv_merge.wait_for(lk, std::chrono::milliseconds(tianmu_sysvar_insert_wait_ms)); } } + TIANMU_LOG(LogCtl_Level::INFO, "Tianmu merge delta store thread exiting..."); } @@ -1532,16 +1603,8 @@ void Engine::LogStat() { // commands we are interested in static const enum_sql_command cmds[] = { - SQLCOM_SELECT, - // SQLCOM_CREATE_TABLE, - // SQLCOM_ALTER_TABLE, - SQLCOM_UPDATE, - SQLCOM_INSERT, - // SQLCOM_INSERT_SELECT, - // SQLCOM_DELETE, - // SQLCOM_TRUNCATE, - // SQLCOM_DROP_TABLE, - SQLCOM_LOAD, + SQLCOM_SELECT, SQLCOM_CREATE_TABLE, SQLCOM_ALTER_TABLE, SQLCOM_UPDATE, SQLCOM_INSERT, + SQLCOM_INSERT_SELECT, SQLCOM_DELETE, SQLCOM_TRUNCATE, SQLCOM_DROP_TABLE, SQLCOM_LOAD, }; STATUS_VAR sv; @@ -1644,21 +1707,23 @@ void Engine::InsertDelayed(const std::string &table_path, TABLE *table) { } } -void Engine::InsertToDelta(const std::string &table_path, std::shared_ptr &share, TABLE *table) { +int Engine::InsertToDelta(const std::string &table_path, std::shared_ptr &share, TABLE *table) { my_bitmap_map *org_bitmap = dbug_tmp_use_all_columns(table, table->read_set); std::shared_ptr defer(nullptr, [table, org_bitmap](...) { dbug_tmp_restore_column_map(table->read_set, org_bitmap); }); auto tm_table = share->GetSnapshot(); uint64_t row_id = tm_table->NextRowId(); // Insert primary key first - tm_table->InsertIndexForDelta(table, row_id); - + int ret = tm_table->InsertIndexForDelta(table, row_id); + if (ret != 0) + return ret; // check & encode uint32_t buf_sz = 0; std::unique_ptr buf; EncodeInsertRecord(table_path, table->field, table->s->fields, table->s->blob_fields, buf, buf_sz, table->in_use); // insert to delta tm_table->InsertToDelta(row_id, std::move(buf), buf_sz); + return ret; } void Engine::UpdateToDelta(const std::string &table_path, std::shared_ptr &share, TABLE *table, @@ -1729,7 +1794,7 @@ int Engine::InsertRow(const std::string &table_path, [[maybe_unused]] Transactio try { if (tianmu_sysvar_insert_delayed && table->s->tmp_table == NO_TMP_TABLE) { if (tianmu_sysvar_enable_rowstore) { - InsertToDelta(table_path, share, table); + ret = InsertToDelta(table_path, share, table); } else { InsertDelayed(table_path, table); } @@ -1743,7 +1808,6 @@ int Engine::InsertRow(const std::string &table_path, [[maybe_unused]] Transactio } catch (common::DupKeyException &e) { ret = HA_ERR_FOUND_DUPP_KEY; TIANMU_LOG(LogCtl_Level::ERROR, "delayed inserting failed: %s", e.what()); - my_message(static_cast(common::ErrorCode::DUPP_KEY), e.what(), MYF(0)); } catch (common::Exception &e) { TIANMU_LOG(LogCtl_Level::ERROR, "delayed inserting failed. %s %s", e.what(), e.trace().c_str()); } catch (std::exception &e) { @@ -1762,6 +1826,7 @@ int Engine::InsertRow(const std::string &table_path, [[maybe_unused]] Transactio int Engine::UpdateRow(const std::string &table_path, TABLE *table, std::shared_ptr &share, uint64_t row_id, const uchar *old_data, uchar *new_data) { + // DBUG_ENTER("Engine::UpdateRow"); int ret = 0; if (tianmu_sysvar_insert_delayed && table->s->tmp_table == NO_TMP_TABLE && tianmu_sysvar_enable_rowstore) { UpdateToDelta(table_path, share, table, row_id, old_data, new_data); @@ -1771,14 +1836,12 @@ int Engine::UpdateRow(const std::string &table_path, TABLE *table, std::shared_p ret = tm_table->Update(table, row_id, old_data, new_data); } return ret; - if (tianmu_sysvar_insert_delayed) { - tianmu_stat.failed_delta_update++; - ret = 1; - } + // DBUG_RETURN(ret); } int Engine::DeleteRow(const std::string &table_path, TABLE *table, std::shared_ptr &share, uint64_t row_id) { + DBUG_ENTER("Engine::DeleteRow"); int ret = 0; if (tianmu_sysvar_insert_delayed && table->s->tmp_table == NO_TMP_TABLE && tianmu_sysvar_enable_rowstore) { DeleteToDelta(share, table, row_id); @@ -1787,11 +1850,8 @@ int Engine::DeleteRow(const std::string &table_path, TABLE *table, std::shared_p auto tm_table = current_txn_->GetTableByPath(table_path); ret = tm_table->Delete(table, row_id); } - return ret; - if (tianmu_sysvar_insert_delayed) { - tianmu_stat.failed_delta_delete++; - ret = 1; - } + + DBUG_RETURN(ret); } common::TianmuError Engine::RunLoader(THD *thd, sql_exchange *ex, TABLE_LIST *table_list, void *arg) { @@ -1957,12 +2017,13 @@ std::unique_ptr Engine::CreateIOParameters(const std::stri std::string data_dir; std::string data_path; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); if (fs::path(path).is_absolute()) { data_dir = ""; data_path = path; } else { - data_dir = ha_tianmu_engine_->tianmu_data_dir; + data_dir = eng->tianmu_data_dir; std::string db_name, tab_name; std::tie(db_name, tab_name) = GetNames(path); data_path += db_name; @@ -1997,6 +2058,7 @@ void Engine::ComputeTimeZoneDiffInMinutes(THD *thd, short &sign, short &minutes) minutes = common::NULL_VALUE_SH; return; } + MYSQL_TIME client_zone, utc; utc.year = 1970; utc.month = 1; @@ -2012,8 +2074,10 @@ void Engine::ComputeTimeZoneDiffInMinutes(THD *thd, short &sign, short &minutes) long msecs; sign = 1; minutes = 0; + if (calc_time_diff(&utc, &client_zone, 1, &secs, &msecs)) sign = -1; + minutes = (short)(secs / 60); } @@ -2071,6 +2135,7 @@ common::TianmuError Engine::GetIOP(std::unique_ptr &io_par tdb = (char *)thd.db().str; io_params = CreateIOParameters(&thd, table, arg); + short sign, minutes; ComputeTimeZoneDiffInMinutes(&thd, sign, minutes); io_params->SetTimeZone(sign, minutes); @@ -2141,10 +2206,10 @@ common::TianmuError Engine::GetIOP(std::unique_ptr &io_par if (ex.field.escaped->alloced_length() != 0) io_params->SetEscapeCharacter(*ex.field.escaped->ptr()); - if (ex.field.field_term->alloced_length() != 0) + if (ex.field.field_term->ptr() && strlen(ex.field.field_term->ptr())) io_params->SetDelimiter(ex.field.field_term->ptr()); - if (ex.line.line_term->alloced_length() != 0) + if (ex.line.line_term->ptr() && strlen(ex.line.line_term->ptr())) io_params->SetLineTerminator(ex.line.line_term->ptr()); if (ex.field.enclosed->length()) { @@ -2229,7 +2294,10 @@ std::shared_ptr Engine::GetTableShare(const TABLE_SHARE *table_share table_share_map[name] = share; return share; } + return it->second; + } catch (common::DatabaseException &e) { + TIANMU_LOG(LogCtl_Level::ERROR, "Failed to create table share: %s", e.getExceptionMsg()); } catch (common::Exception &e) { TIANMU_LOG(LogCtl_Level::ERROR, "Failed to create table share: %s", e.what()); } catch (std::exception &e) { @@ -2261,6 +2329,7 @@ bool Engine::DeleteTableIndex(const std::string &table_path, [[maybe_unused]] TH if (index::TianmuTableIndex::FindIndexTable(table_path)) { index::TianmuTableIndex::DropIndexTable(table_path); } + if (m_table_keys.find(table_path) != m_table_keys.end()) { m_table_keys.erase(table_path); } diff --git a/storage/tianmu/core/engine.h b/storage/tianmu/core/engine.h index 1c90ece31..af38c6841 100644 --- a/storage/tianmu/core/engine.h +++ b/storage/tianmu/core/engine.h @@ -18,6 +18,7 @@ #define TIANMU_CORE_ENGINE_H_ #pragma once +#include #include #include #include @@ -26,13 +27,13 @@ #include "common/assert.h" #include "common/exception.h" -#include "core/combined_iterator.h" #include "core/data_cache.h" #include "core/object_cache.h" #include "core/query.h" #include "core/table_share.h" #include "core/temp_table.h" #include "core/tianmu_table.h" +#include "executor/combined_iterator.h" #include "exporter/data_exporter.h" #include "exporter/export2file.h" #include "index/tianmu_table_index.h" @@ -79,6 +80,8 @@ class Engine final { ~Engine(); int Init(uint engine_slot); + index::KVStore *getStore() const { return store_; } + void CreateTable(const std::string &table, TABLE *from, HA_CREATE_INFO *create_info); int DeleteTable(const char *table, THD *thd); void TruncateTable(const std::string &table_path, THD *thd); @@ -117,7 +120,7 @@ class Engine final { const uchar *old_data, uchar *new_data); int DeleteRow(const std::string &tablename, TABLE *table, std::shared_ptr &share, uint64_t row_id); void InsertDelayed(const std::string &table_path, TABLE *table); - void InsertToDelta(const std::string &table_path, std::shared_ptr &share, TABLE *table); + int InsertToDelta(const std::string &table_path, std::shared_ptr &share, TABLE *table); void UpdateToDelta(const std::string &table_path, std::shared_ptr &share, TABLE *table, uint64_t row_id, const uchar *old_data, uchar *new_data); void DeleteToDelta(std::shared_ptr &share, TABLE *table, uint64_t row_id); @@ -176,6 +179,9 @@ class Engine final { static const char *StrToFiled(const char *ptr, Field *field, DeltaRecordHead *deltaRecord, int col_num); static char *FiledToStr(char *ptr, Field *field, DeltaRecordHead *deltaRecord, int col_num, THD *thd); + void setExtra(ha_extra_function extra) { extra_info = extra; } + ha_extra_function getExtra() { return extra_info; } + private: void AddTx(Transaction *tx); void RemoveTx(Transaction *tx); @@ -241,6 +247,8 @@ class Engine final { system::ResourceManager *m_resourceManager = nullptr; uint m_slot = 0; + //????? + // atomic_uint32_t tableID_; struct TrxCmp { bool operator()(Transaction *l, Transaction *r) const; @@ -282,6 +290,9 @@ class Engine final { std::unique_ptr task_executor; uint64_t m_mem_available_ = 0; uint64_t m_swap_used_ = 0; + index::KVStore *store_; + + ha_extra_function extra_info; }; class ResultSender { @@ -291,7 +302,7 @@ class ResultSender { void Send(TempTable *t); void Send(TempTable::RecordIterator &iter); - void SendRow(const std::vector> &record, TempTable *owner); + void SendRow(std::vector> &record, TempTable *owner); void SetLimits(int64_t *_offset, int64_t *_limit) { offset = _offset; @@ -304,12 +315,14 @@ class ResultSender { void Finalize(TempTable *result); int64_t SentRows() const { return rows_sent; } + public: + List &fields; + protected: THD *thd; Query_result *res; std::map items_backup; uint *buf_lens; - List &fields; bool is_initialized; int64_t *offset; int64_t *limit; @@ -317,7 +330,7 @@ class ResultSender { int64_t affect_rows; virtual void Init(TempTable *t); - virtual void SendRecord(const std::vector> &record); + virtual void SendRecord(std::vector> &record); }; class ResultExportSender final : public ResultSender { @@ -329,7 +342,7 @@ class ResultExportSender final : public ResultSender { protected: void Init(TempTable *t) override; - void SendRecord(const std::vector> &record) override; + void SendRecord(std::vector> &record) override; exporter::select_tianmu_export *export_res_; std::unique_ptr tianmu_data_exp_; diff --git a/storage/tianmu/core/engine_execute.cpp b/storage/tianmu/core/engine_execute.cpp index c8be65a3f..78fe836bd 100644 --- a/storage/tianmu/core/engine_execute.cpp +++ b/storage/tianmu/core/engine_execute.cpp @@ -19,8 +19,11 @@ #include #include -#include "core/compilation_tools.h" -#include "core/compiled_query.h" +#include "optimizer/compile//compiled_query.h" +#include "optimizer/compile/compilation_tools.h" +#include "optimizer/compile/compiler.h" +#include "optimizer/plan/query_plan.h" + #include "core/engine.h" #include "core/query.h" #include "core/transaction.h" @@ -71,12 +74,9 @@ class KillTimer { /* Handles a single query -If an error appears during query preparation/optimization -query structures are cleaned up and the function returns information about the -error through res'. If the query can not be compiled by Tianmu engine -QueryRouteTo::kToMySQL is returned and MySQL engine continues query -execution. -*/ +If an error appears during query preparation/optimization query structures are cleaned up and the function returns +information about the error through res'. If the query can not be compiled by Tianmu engine QueryRouteTo::kToMySQL is +returned and MySQL engine continues query execution.*/ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulong setup_tables_done_option, int &res, int &is_optimize_after_tianmu, int &tianmu_free_join, int with_insert) { KillTimer timer(thd, tianmu_sysvar_max_execution_time); @@ -111,35 +111,34 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo // at this point all tables are in RCBase engine, so we can proceed with the // query and we know that if the result goes to the file, the TIANMU_DATAFORMAT is // one of TIANMU formats + core::Engine *eng = reinterpret_cast(tianmu_hton->data); QueryRouteTo route = QueryRouteTo::kToTianmu; SELECT_LEX *save_current_select = lex->current_select(); - List derived_optimized; // collection to remember derived - // tables that are optimized + List derived_optimized; // collection to remember derived tables that are optimized + if (thd->fill_derived_tables() && lex->derived_tables) { - // Derived tables are processed completely in the function - // open_and_lock_tables(...). To avoid execution of derived tables in - // open_and_lock_tables(...) the function mysql_derived_filling(..) - // optimizing and executing derived tables is passed over, then optimization - // of derived tables must go here. + // Derived tables are processed completely in the function open_and_lock_tables(...). To avoid execution of derived + // tables in open_and_lock_tables(...) the function mysql_derived_filling(..) optimizing and executing derived + // tables is passed over, then optimization of derived tables must go here. res = FALSE; int tianmu_free_join = FALSE; lex->thd->derived_tables_processing = TRUE; + for (SELECT_LEX *sl = lex->all_selects_list; sl; sl = sl->next_select_in_list()) // for all selects for (TABLE_LIST *cursor = sl->get_table_list(); cursor; cursor = cursor->next_local) // for all tables if (cursor->table && cursor->is_view_or_derived()) { // data source (view or FROM subselect) // optimize derived table SELECT_LEX *first_select = cursor->derived_unit()->first_select(); if (first_select->next_select() && first_select->next_select()->linkage == UNION_TYPE) { //?? only if union - if (lex->is_explain() || cursor->derived_unit()->item) { //??called for explain - // OR there is subselect(?) + if (lex->is_explain() || cursor->derived_unit()->item) { //??called for explain OR there is subselect(?) route = QueryRouteTo::kToMySQL; goto ret_derived; } + if (!cursor->derived_unit()->is_executed() || - cursor->derived_unit()->uncacheable) { //??not already executed (not - // materialized?) - // OR not cacheable (meaning not yet in cache, i.e. not - // materialized it seems to boil down to NOT MATERIALIZED(?) + cursor->derived_unit()->uncacheable) { //??not already executed (not materialized?) + // OR not cacheable (meaning not yet in cache, i.e. not materialized it seems to boil down to NOT + // MATERIALIZED(?) res = cursor->derived_unit()->optimize_for_tianmu(); //===exec() derived_optimized.push_back(cursor->derived_unit()); } @@ -147,17 +146,21 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo cursor->derived_unit()->set_limit(first_select); if (cursor->derived_unit()->select_limit_cnt == HA_POS_ERROR) first_select->remove_base_options(OPTION_FOUND_ROWS); + lex->set_current_select(first_select); int optimize_derived_after_tianmu = FALSE; res = optimize_select( thd, ulong(first_select->active_options() | thd->variables.option_bits | SELECT_NO_UNLOCK), (Query_result *)cursor->derived_result, first_select, optimize_derived_after_tianmu, tianmu_free_join); + if (optimize_derived_after_tianmu) derived_optimized.push_back(cursor->derived_unit()); } + lex->set_current_select(save_current_select); if (!res && tianmu_free_join) // no error & route = QueryRouteTo::kToMySQL; + if (res || route == QueryRouteTo::kToMySQL) goto ret_derived; } @@ -167,6 +170,7 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo se = dynamic_cast(result); if (se != nullptr) result = new exporter::select_tianmu_export(se); + // prepare, optimize and execute the main query select_lex = lex->select_lex; unit = lex->unit; @@ -174,11 +178,9 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo if (!(res = unit->prepare(thd, result, (ulong)(SELECT_NO_UNLOCK | setup_tables_done_option), 0))) { // similar to mysql_union(...) from sql_union.cpp - /* FIXME: create_table is private in mysql5.6 - select_create* sc = dynamic_cast(result); - if (sc && sc->create_table->table && sc->create_table->table->db_stat - != 0) { my_error(ER_TABLE_EXISTS_ERROR, MYF(0), - sc->create_table->table_name); res = 1; } else + /* FIXME: create_table is private in mysql5.6 select_create* sc = dynamic_cast(result); + if (sc && sc->create_table->table && sc->create_table->table->db_stat != 0) { my_error(ER_TABLE_EXISTS_ERROR, + MYF(0), sc->create_table->table_name); res = 1; } else */ if (lex->is_explain() || unit->item) // explain or sth was already computed - go to mysql route = QueryRouteTo::kToMySQL; @@ -188,18 +190,13 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo is_optimize_after_tianmu = TRUE; if (!res) { try { - route = ha_tianmu_engine_->Execute(unit->thd, unit->thd->lex, result, unit); + route = eng->Execute(unit->thd, unit->thd->lex, result, unit); if (route == QueryRouteTo::kToMySQL) { if (in_case_of_failure_can_go_to_mysql) - if (old_executed) - unit->set_executed(); - else - unit->reset_executed(); - + (old_executed) ? unit->set_executed() : unit->reset_executed(); else { const char *err_msg = - "Error: Query syntax not implemented in Tianmu, can " - "export " + "Error: Query syntax not implemented in Tianmu, can export " "only to MySQL format (set TIANMU_DATAFORMAT to 'MYSQL')."; TIANMU_LOG(LogCtl_Level::ERROR, err_msg); my_message(ER_SYNTAX_ERROR, err_msg, MYF(0)); @@ -213,37 +210,34 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo } } } + if (res || route == QueryRouteTo::kToTianmu) { res |= (int)unit->cleanup(0); is_optimize_after_tianmu = FALSE; } } else { - unit->set_limit(unit->global_parameters()); // the fragment of original - // handle_select(...) - //(until the first part of optimization) - // used for non-union select + unit->set_limit(unit->global_parameters()); // the fragment of original handle_select(...) + //(until the first part of optimization) used for non-union select - //'options' of mysql_select will be set in JOIN, as far as JOIN for - // every PS/SP execution new, we will not need reset this flag if - // setup_tables_done_option changed for next rexecution + //'options' of mysql_select will be set in JOIN, as far as JOIN for every PS/SP execution new, we will not need + // reset this flag if setup_tables_done_option changed for next rexecution int err; err = optimize_select(thd, ulong(select_lex->active_options() | thd->variables.option_bits | setup_tables_done_option), result, select_lex, is_optimize_after_tianmu, tianmu_free_join); - // RCBase query engine entry point + // query engine entry point if (!err) { try { route = Execute(thd, lex, result); if (route == QueryRouteTo::kToMySQL && !in_case_of_failure_can_go_to_mysql) { TIANMU_LOG(LogCtl_Level::ERROR, - "Error: Query syntax not implemented in Tianmu, can export " - "only to MySQL format (set TIANMU_DATAFORMAT to 'MYSQL')."); + "Error: Query syntax not implemented in Tianmu, can export only to MySQL format (set " + "TIANMU_DATAFORMAT to 'MYSQL')."); my_message(ER_SYNTAX_ERROR, - "Query syntax not implemented in Tianmu, can export only " - "to MySQL " - "format (set TIANMU_DATAFORMAT to 'MYSQL').", + "Query syntax not implemented in Tianmu, can export only to MySQL format (set TIANMU_DATAFORMAT " + "to 'MYSQL').", MYF(0)); throw ReturnMeToMySQLWithError(); } @@ -266,17 +260,16 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo } if (select_lex->join && Query::IsLOJ(select_lex->join_list)) is_optimize_after_tianmu = TRUE; // optimize partially (phase=Doneoptimization), since part of LOJ - // optimization was already done - res |= (int)thd->is_error(); // the ending of original handle_select(...) */ + // optimization was already done // the ending of original handle_select(...) */ + res |= (int)thd->is_error(); if (unlikely(res)) { // If we had a another error reported earlier then this will be ignored // result->send_error(ER_UNKNOWN_ERROR, ER(ER_UNKNOWN_ERROR)); result->abort_result_set(); } if (se != nullptr) { - // free the tianmu export object, - // restore the original mysql export object - // and prepare if it is expected to be prepared + // free the tianmu export object, restore the original mysql export object and prepare if it is expected to be + // prepared if (!select_lex->next_select() && select_lex->join != 0 && select_lex->query_result() == result) { select_lex->set_query_result(se); if (((exporter::select_tianmu_export *)result)->IsPrepared()) @@ -287,9 +280,8 @@ QueryRouteTo Engine::HandleSelect(THD *thd, LEX *lex, Query_result *&result, ulo result = se; } ret_derived: - // if the query is redirected to MySQL engine - // optimization of derived tables must be completed - // and derived tables must be filled + // if the query is redirected to MySQL engine optimization of derived tables must be completed and derived tables must + // be filled if (route == QueryRouteTo::kToMySQL) { for (SELECT_LEX *sl = lex->all_selects_list; sl; sl = sl->next_select_in_list()) for (TABLE_LIST *cursor = sl->get_table_list(); cursor; cursor = cursor->next_local) @@ -341,12 +333,14 @@ int optimize_select(THD *thd, ulong select_options, Query_result *result, SELECT } if (!(join = new JOIN(thd, select_lex))) return TRUE; /* purecov: inspected */ + select_lex->set_join(join); } join->best_rowcount = 2; is_optimize_after_tianmu = TRUE; if ((err = join->optimize(OptimizePhase::Before_LOJ_Transform))) return err; + return FALSE; } @@ -356,6 +350,7 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE DEBUG_ASSERT(thd->lex == lex); SELECT_LEX *selects_list = lex->select_lex; SELECT_LEX *last_distinct = nullptr; + if (unit_for_union != nullptr) last_distinct = unit_for_union->union_distinct; @@ -367,9 +362,10 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE return QueryRouteTo::kToMySQL; } - auto join_exec = ([&selects_list, &result_output] { + auto join_exec = ([&thd, &selects_list, &result_output] { selects_list->set_query_result(result_output); ASSERT(selects_list->join); + thd->lex->set_current_select(selects_list->join->select_lex); selects_list->join->exec(); return QueryRouteTo::kToTianmu; }); @@ -379,7 +375,7 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE List_iterator_fast li(selects_list->fields_list); for (Item *item = li++; item; item = li++) { if ((item->type() == Item::Type::FUNC_ITEM) && - (down_cast(item)->functype() == Item_func::Functype::FUNC_SP)) { + ((down_cast(item)->functype() == Item_func::Functype::FUNC_SP))) { return join_exec(); } } @@ -422,10 +418,33 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE } } - for (SELECT_LEX *sl = selects_list; sl; sl = sl->next_select()) { - if (sl->join->m_select_limit == 0) { - exec_direct = true; - break; + if (!exec_direct) { + for (SELECT_LEX *sl = selects_list; sl; sl = sl->next_select()) { + if ((!sl->join->m_select_limit) && (!sl->join->where_cond)) { + exec_direct = true; + break; + } + } + } + + if (exec_direct) { + if ((selects_list->fields_list.elements)) { + List_iterator_fast li(selects_list->fields_list); + for (Item *item = li++; item; item = li++) { + if (Item::Type::FUNC_ITEM != item->type()) { + continue; + } + + if (Item_func::Functype::SUSERVAR_FUNC == down_cast(item)->functype()) { + exec_direct = false; + break; + } + + if (dynamic_cast(item)) { + exec_direct = false; + break; + } + } } } @@ -463,6 +482,7 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE std::string table_path = Engine::GetTablePath(((Query_tables_list *)lex)->query_tables->table); rct = current_txn_->GetTableByPathIfExists(table_path); } + if ((unit_for_union != nullptr) && (lex->sql_command != SQLCOM_CREATE_TABLE)) { // for exclude CTAS int res = result_output->prepare(unit_for_union->item_list, unit_for_union); if (res) { @@ -470,15 +490,16 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE my_message(ER_UNKNOWN_ERROR, "Tianmu: unsupported UNION", MYF(0)); throw ReturnMeToMySQLWithError(); } - if (export_file_name) - sender.reset(new ResultExportSender(unit_for_union->thd, result_output, unit_for_union->item_list)); - else - sender.reset(new ResultSender(unit_for_union->thd, result_output, unit_for_union->item_list)); + + sender.reset(export_file_name + ? new ResultExportSender(unit_for_union->thd, result_output, unit_for_union->item_list) + : new ResultSender(unit_for_union->thd, result_output, unit_for_union->item_list)); + } else { - if (export_file_name) - sender.reset(new ResultExportSender(selects_list->master_unit()->thd, result_output, selects_list->item_list)); - else - sender.reset(new ResultSender(selects_list->master_unit()->thd, result_output, selects_list->item_list)); + sender.reset( + export_file_name + ? new ResultExportSender(selects_list->master_unit()->thd, result_output, selects_list->item_list) + : new ResultSender(selects_list->master_unit()->thd, result_output, selects_list->item_list)); } TempTable *result = query.Preexecute(cqu, sender.get()); @@ -500,6 +521,7 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE rct.reset(); } sender.reset(); + } catch (...) { bool with_error = false; if (sender) { @@ -511,6 +533,7 @@ QueryRouteTo Engine::Execute(THD *thd, LEX *lex, Query_result *result_output, SE } return (handle_exceptions(thd, current_txn_, with_error)); } + return QueryRouteTo::kToTianmu; } @@ -522,12 +545,12 @@ QueryRouteTo handle_exceptions(THD *thd, Transaction *cur_connection, bool with_ throw; } catch (common::NotImplementedException const &x) { tianmu_control_.lock(cur_connection->GetThreadID()) << "Switched to MySQL: " << x.what() << system::unlock; - my_message(ER_UNKNOWN_ERROR, - (std::string("The query includes syntax that is not supported " - "by the storage engine. Tianmu: ") + - x.what()) - .c_str(), - MYF(0)); + my_message( + ER_UNKNOWN_ERROR, + (std::string("The query includes syntax that is not supported by the storage engine. Tianmu: ") + x.what()) + .c_str(), + MYF(0)); + if (with_error) { std::string msg(x.what()); msg.append(" Can't switch to MySQL execution path"); @@ -569,6 +592,7 @@ QueryRouteTo handle_exceptions(THD *thd, Transaction *cur_connection, bool with_ } return QueryRouteTo::kToMySQL; } + } // namespace core } // namespace Tianmu @@ -619,8 +643,7 @@ int st_select_lex_unit::optimize_for_tianmu() { set_limit(sl); if (sl == global_parameters() || thd->lex->is_explain()) { offset_limit_cnt = 0; - // We can't use LIMIT at this stage if we are using ORDER BY for the - // whole query + // We can't use LIMIT at this stage if we are using ORDER BY for the whole query if (sl->order_list.first || thd->lex->is_explain()) select_limit_cnt = HA_POS_ERROR; } diff --git a/storage/tianmu/core/engine_results.cpp b/storage/tianmu/core/engine_results.cpp index bba6a519d..8d0eb4dfa 100644 --- a/storage/tianmu/core/engine_results.cpp +++ b/storage/tianmu/core/engine_results.cpp @@ -240,7 +240,7 @@ void ResultSender::Send(TempTable::RecordIterator &iter) { rows_sent++; } -void ResultSender::SendRow(const std::vector> &record, TempTable *owner) { +void ResultSender::SendRow(std::vector> &record, TempTable *owner) { if (current_txn_->Killed()) throw common::KilledException(); @@ -270,7 +270,7 @@ void ResultSender::SendRow(const std::vector> &r) { +void ResultSender::SendRecord(std::vector> &r) { Item *item; Field *f; Item_field *ifield; @@ -297,7 +297,17 @@ void ResultSender::SendRecord(const std::vectortable->write_set, f->field_index); - auto is_null = Engine::ConvertToField(f, tianmu_dt, nullptr); + auto is_null = false; + if (((f->type() == MYSQL_TYPE_VARCHAR) || (f->type() == MYSQL_TYPE_STRING) || + (f->type() == MYSQL_TYPE_BLOB)) && + (Tianmu::types::ValueTypeEnum::STRING_TYPE != tianmu_dt.GetValueType())) { + std::unique_ptr tianmu_dt_unq(new types::BString(tianmu_dt.ToBString())); + tianmu_dt_unq.swap(r[col_id]); + types::TianmuDataType &tianmu_dt_new(*r[col_id]); + is_null = Engine::ConvertToField(f, tianmu_dt_new, nullptr); + } else { + is_null = Engine::ConvertToField(f, tianmu_dt, nullptr); + } SetFieldState(f, is_null); } break; @@ -507,7 +517,7 @@ void ResultExportSender::Init(TempTable *t) { } // send to Exporter -void ResultExportSender::SendRecord(const std::vector> &r) { +void ResultExportSender::SendRecord(std::vector> &r) { List_iterator_fast li(fields); Item *l_item; li.rewind(); diff --git a/storage/tianmu/core/ftree.h b/storage/tianmu/core/ftree.h index 679e53c7f..6dd182c87 100644 --- a/storage/tianmu/core/ftree.h +++ b/storage/tianmu/core/ftree.h @@ -20,9 +20,9 @@ #define TIANMU_CORE_FTREE_H_ #pragma once -#include "core/bin_tools.h" #include "mm/traceable_object.h" #include "types/tianmu_data_types.h" +#include "util/bin_tools.h" #include "util/fs.h" namespace Tianmu { diff --git a/storage/tianmu/core/hash_table.cpp b/storage/tianmu/core/hash_table.cpp index dea5cc62b..9a7978f95 100644 --- a/storage/tianmu/core/hash_table.cpp +++ b/storage/tianmu/core/hash_table.cpp @@ -19,8 +19,8 @@ #include "common/assert.h" #include "core/hash_table.h" -#include "core/rough_multi_index.h" #include "core/transaction.h" +#include "index/rough_multi_index.h" #include "system/fet.h" namespace Tianmu { diff --git a/storage/tianmu/core/hash_table.h b/storage/tianmu/core/hash_table.h index 3baa980a4..aa2b23e0b 100644 --- a/storage/tianmu/core/hash_table.h +++ b/storage/tianmu/core/hash_table.h @@ -22,8 +22,8 @@ #include #include "base/util/spinlock.h" -#include "core/bin_tools.h" #include "mm/traceable_object.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/item_tianmu_field.cpp b/storage/tianmu/core/item_tianmu_field.cpp index 090a5c89d..e567d5563 100644 --- a/storage/tianmu/core/item_tianmu_field.cpp +++ b/storage/tianmu/core/item_tianmu_field.cpp @@ -18,9 +18,9 @@ #include "item_tianmu_field.h" #include "common/assert.h" -#include "core/compilation_tools.h" #include "core/quick_math.h" #include "core/transaction.h" +#include "optimizer/compile/compilation_tools.h" namespace Tianmu { namespace core { @@ -238,6 +238,7 @@ Item_tianmudecimal::Item_tianmudecimal(DataType t) : Item_decimal(0, false) { } void Item_tianmudecimal::Set(int64_t val) { + std::scoped_lock guard(mtx); std::fill(decimal_value.buf, decimal_value.buf + decimal_value.len, 0); if (val) { int2my_decimal((uint)-1, val, 0, &decimal_value); @@ -248,6 +249,11 @@ void Item_tianmudecimal::Set(int64_t val) { decimal_value.frac = scale; } +String *Item_tianmudecimal::val_str(String *str) { + std::scoped_lock guard(mtx); + return Item_decimal::val_str(str); +} + my_decimal *Item_tianmudatetime_base::val_decimal(my_decimal *d) { int2my_decimal((uint)-1, val_int(), 0, d); return d; @@ -260,8 +266,10 @@ bool Item_tianmudatetime_base::get_time(MYSQL_TIME *ltime) { } longlong Item_tianmudatetime::val_int() { - return dt.year * 10000000000LL + dt.month * 100000000 + dt.day * 1000000 + dt.hour * 10000 + dt.minute * 100 + - dt.second; + MYSQL_TIME ltime; + dt.Store(<ime, MYSQL_TIMESTAMP_DATETIME); + longlong tmp = (longlong)TIME_to_ulonglong_datetime_round(<ime); + return dt.Neg() ? -tmp : tmp; } String *Item_tianmudatetime::val_str(String *s) { @@ -311,7 +319,12 @@ bool Item_tianmudate::get_time(MYSQL_TIME *ltime) { return false; } -longlong Item_tianmutime::val_int() { return dt.hour * 10000 + dt.minute * 100 + dt.second; } +longlong Item_tianmutime::val_int() { + MYSQL_TIME ltime; + dt.Store(<ime, MYSQL_TIMESTAMP_TIME); + longlong tmp = (longlong)TIME_to_ulonglong_time_round(<ime); + return dt.Neg() ? -tmp : tmp; +} String *Item_tianmutime::val_str(String *s) { MYSQL_TIME ltime; get_time(<ime); diff --git a/storage/tianmu/core/item_tianmu_field.h b/storage/tianmu/core/item_tianmu_field.h index a2e834054..f72bbe0ec 100644 --- a/storage/tianmu/core/item_tianmu_field.h +++ b/storage/tianmu/core/item_tianmu_field.h @@ -19,12 +19,13 @@ #pragma once #include +#include #include #include "common/common_definitions.h" -#include "core/data_type.h" #include "core/value_or_null.h" #include "core/var_id.h" +#include "types/data_type.h" namespace Tianmu { namespace core { @@ -133,10 +134,12 @@ class Item_tianmudecimal : public Item_decimal { Item_tianmudecimal(DataType t); void Set(int64_t val); + String *val_str(String *) override; private: int scale; int64_t scaleCoef; + std::mutex mtx; }; //! Base class for TIANMU's Item classes to store date/time values of columns diff --git a/storage/tianmu/core/joner_hash.h b/storage/tianmu/core/joner_hash.h index 6dd0cb22a..13af8efe9 100644 --- a/storage/tianmu/core/joner_hash.h +++ b/storage/tianmu/core/joner_hash.h @@ -18,8 +18,8 @@ #define TIANMU_CORE_JONER_HASH_H_ #pragma once -#include "core/joiner.h" -#include "core/joiner_hash_table.h" +#include "optimizer/joiner.h" +#include "optimizer/joiner_hash_table.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/just_a_table.cpp b/storage/tianmu/core/just_a_table.cpp index ae3278a21..d3bf9b060 100644 --- a/storage/tianmu/core/just_a_table.cpp +++ b/storage/tianmu/core/just_a_table.cpp @@ -18,9 +18,9 @@ #include "just_a_table.h" #include "common/assert.h" -#include "core/cq_term.h" -#include "core/filter.h" #include "core/temp_table.h" +#include "executor/filter.h" +#include "optimizer/compile/cq_term.h" namespace Tianmu { namespace core { @@ -39,8 +39,10 @@ ValueOrNull JustATable::GetComplexValue(const int64_t obj, const int attr) { str_to_datetime(s.GetDataBytesPointer(), s.len_, &myt, TIME_DATETIME_ONLY, ¬_used); return ValueOrNull(types::TianmuDateTime(myt, common::ColumnType::TIMESTAMP).GetInt64()); } + if (ct.IsFixed() || ct.IsFloat() || ct.IsDateTime()) return ValueOrNull(GetTable64(obj, attr)); + if (ct.IsString()) { ValueOrNull val; types::BString s; @@ -48,6 +50,7 @@ ValueOrNull JustATable::GetComplexValue(const int64_t obj, const int attr) { val.SetBString(s); return val; } + throw common::Exception("Unrecognized data type in JustATable::GetComplexValue"); } } // namespace core diff --git a/storage/tianmu/core/just_a_table.h b/storage/tianmu/core/just_a_table.h index ab445b7bc..a73e7d81b 100644 --- a/storage/tianmu/core/just_a_table.h +++ b/storage/tianmu/core/just_a_table.h @@ -28,7 +28,10 @@ namespace types { class BString; } // namespace types namespace core { + enum class TType { TABLE, TEMP_TABLE }; +enum class TableSubType : int { UN_KNOWN = 0, DUAL, CONST, NORMAL }; + class Transaction; class PhysicalColumn; class Filter; @@ -58,6 +61,7 @@ class JustATable : public std::enable_shared_from_this { virtual const ColumnType &GetColumnType(int n_a) = 0; virtual uint32_t Getpackpower() const = 0; + //! Returns column value in the form required by complex expressions ValueOrNull GetComplexValue(const int64_t obj, const int attr); diff --git a/storage/tianmu/core/mysql_expression.cpp b/storage/tianmu/core/mysql_expression.cpp index 40f141ac7..9871ed146 100644 --- a/storage/tianmu/core/mysql_expression.cpp +++ b/storage/tianmu/core/mysql_expression.cpp @@ -18,10 +18,10 @@ #include "mysql_expression.h" #include "common/assert.h" -#include "core/compilation_tools.h" #include "core/engine.h" #include "core/transaction.h" #include "item_timefunc.h" +#include "optimizer/compile/compilation_tools.h" #include "types/value_parser4txt.h" namespace Tianmu { @@ -560,6 +560,9 @@ std::shared_ptr MysqlExpression::ItemInt2ValueOrNull(Item *item) { if (v == common::NULL_VALUE_64) v++; val->SetFixed(v); + // add unsigned flag here as item may have unsigned valued, like where a = 18446744073709551601; 18446744073709551601 + // is an unsigned valued stored in item. Introduced by a bug: https://github.com/stoneatom/stonedb/issues/1564 + val->SetUnsignedFlag(static_cast(item->unsigned_flag)); if (item->null_value) return std::make_shared(); return val; diff --git a/storage/tianmu/core/parallel_hash_join.cpp b/storage/tianmu/core/parallel_hash_join.cpp index 684e051c5..b53d8f61e 100644 --- a/storage/tianmu/core/parallel_hash_join.cpp +++ b/storage/tianmu/core/parallel_hash_join.cpp @@ -19,13 +19,13 @@ #include "common/assert.h" #include "core/engine.h" -#include "core/join_thread_table.h" -#include "core/joiner_hash.h" #include "core/parallel_hash_join.h" #include "core/proxy_hash_joiner.h" -#include "core/task_executor.h" #include "core/temp_table.h" #include "core/transaction.h" +#include "executor/join_thread_table.h" +#include "executor/task_executor.h" +#include "optimizer/joiner_hash.h" #include "system/fet.h" #include "util/thread_pool.h" #include "vc/virtual_column.h" @@ -33,8 +33,15 @@ namespace Tianmu { namespace core { namespace { -const int kJoinSplittedMinPacks = 5; -const int kTraversedPacksPerFragment = 30; +// bug 1538: The instance occasionally crashes when the parallel degree is enabled for +// the hash join. To change this from 5 to INT_MAX32/2, to disable the parallel of +// right table, btw. the kTraversedPacksPerFragment is for left table. +// we'll re-enable the hash join later if the bug is fixed in near future. +const int kJoinSplittedMinPacks = INT_MAX32 / 2; +// bug 1476: change this threhold from 30 to INT_MAX32 to disable the parallel hash join +// because the result is sometimes wrong if parallel hash join is enabled. +// we'll re-enable the hash join later if the bug is fixed in near future. +const int kTraversedPacksPerFragment = INT_MAX32 / 2; int EvaluateTraversedFragments(int packs_count) { const int kMaxTraversedFragmentCount = 8; @@ -540,6 +547,9 @@ int64_t ParallelHashJoiner::TraverseDim(MIIterator &mit, int64_t *outer_tuples) int64_t traversed_rows = 0; bool no_except = true; utils::result_set res; + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + try { for (MITaskIterator *iter : task_iterators) { auto &ht = traversed_hash_tables_.emplace_back(hash_table_key_size_, hash_table_tuple_size_, @@ -552,7 +562,7 @@ int64_t ParallelHashJoiner::TraverseDim(MIIterator &mit, int64_t *outer_tuples) params.build_item = multi_index_builder_->CreateBuildItem(); params.task_miter = iter; - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&ParallelHashJoiner::AsyncTraverseDim, this, ¶ms)); + res.insert(eng->query_thread_pool.add_task(&ParallelHashJoiner::AsyncTraverseDim, this, ¶ms)); } } catch (std::exception &e) { res.get_all_with_except(); @@ -786,6 +796,10 @@ int64_t ParallelHashJoiner::MatchDim(MIIterator &mit) { std::vector match_task_params; match_task_params.reserve(task_iterators.size()); int64_t matched_rows = 0; + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + if (task_iterators.size() > 1) { bool no_except = true; utils::result_set res; @@ -796,7 +810,7 @@ int64_t ParallelHashJoiner::MatchDim(MIIterator &mit) { params.build_item = multi_index_builder_->CreateBuildItem(); params.task_miter = iter; - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&ParallelHashJoiner::AsyncMatchDim, this, ¶ms)); + res.insert(eng->query_thread_pool.add_task(&ParallelHashJoiner::AsyncMatchDim, this, ¶ms)); } } catch (std::exception &e) { res.get_all_with_except(); @@ -1166,14 +1180,18 @@ int64_t ParallelHashJoiner::SubmitOuterMatched(MIIterator &miter) { std::vector outer_matched_params; outer_matched_params.reserve(task_iterators.size()); utils::result_set res; + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + try { for (MITaskIterator *iter : task_iterators) { auto ¶ms = outer_matched_params.emplace_back(); params.task_iter = iter; params.build_item = multi_index_builder_->CreateBuildItem(); - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&ParallelHashJoiner::AsyncSubmitOuterMatched, this, - ¶ms, outer_matched_filter_.get())); + res.insert(eng->query_thread_pool.add_task(&ParallelHashJoiner::AsyncSubmitOuterMatched, this, ¶ms, + outer_matched_filter_.get())); } } catch (std::exception &e) { res.get_all_with_except(); diff --git a/storage/tianmu/core/parallel_hash_join.h b/storage/tianmu/core/parallel_hash_join.h index b1f52bd8c..5bd0ec598 100644 --- a/storage/tianmu/core/parallel_hash_join.h +++ b/storage/tianmu/core/parallel_hash_join.h @@ -22,10 +22,10 @@ #include #include -#include "core/column_bin_encoder.h" #include "core/hash_table.h" -#include "core/joiner.h" -#include "core/multi_index_builder.h" +#include "index/multi_index_builder.h" +#include "optimizer/joiner.h" +#include "vc/column_bin_encoder.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/parameterized_filter.cpp b/storage/tianmu/core/parameterized_filter.cpp index f5983bab0..293303672 100644 --- a/storage/tianmu/core/parameterized_filter.cpp +++ b/storage/tianmu/core/parameterized_filter.cpp @@ -17,17 +17,17 @@ #include "parameterized_filter.h" -#include "core/condition_encoder.h" #include "core/engine.h" -#include "core/joiner.h" -#include "core/mi_iterator.h" -#include "core/mi_updating_iterator.h" -#include "core/pack_orderer.h" #include "core/query.h" -#include "core/rough_multi_index.h" #include "core/temp_table.h" #include "core/transaction.h" #include "core/value_set.h" +#include "data/pack_orderer.h" +#include "index/rough_multi_index.h" +#include "optimizer/condition_encoder.h" +#include "optimizer/iterators/mi_iterator.h" +#include "optimizer/iterators/mi_updating_iterator.h" +#include "optimizer/joiner.h" #include "util/thread_pool.h" #include "vc/const_column.h" #include "vc/const_expr_column.h" @@ -1529,13 +1529,16 @@ void ParameterizedFilter::ApplyDescriptor(int desc_number, int64_t limit) pack_some++; } + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + MIUpdatingIterator mit(mind_, dims); desc.CopyDesCond(mit); if (desc.EvaluateOnIndex(mit, limit) == common::ErrorCode::SUCCESS) { tianmu_control_.lock(mind_->m_conn->GetThreadID()) << "EvaluateOnIndex done, desc number " << desc_number << system::unlock; } else { - int poolsize = ha_tianmu_engine_->query_thread_pool.size(); + int poolsize = eng->query_thread_pool.size(); if ((tianmu_sysvar_threadpoolsize > 0) && (packs_no / poolsize > 0) && !desc.IsType_Subquery() && !desc.ExsitTmpTable()) { int step = 0; @@ -1573,9 +1576,8 @@ void ParameterizedFilter::ApplyDescriptor(int desc_number, int64_t limit) utils::result_set res; for (int i = 0; i < task_num; ++i) { - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&ParameterizedFilter::TaskProcessPacks, this, - &taskIterator[i], current_txn_, rf, &dims, desc_number, - limit, one_dim)); + res.insert(eng->query_thread_pool.add_task(&ParameterizedFilter::TaskProcessPacks, this, &taskIterator[i], + current_txn_, rf, &dims, desc_number, limit, one_dim)); } res.get_all_with_except(); diff --git a/storage/tianmu/core/parameterized_filter.h b/storage/tianmu/core/parameterized_filter.h index d227d4a52..fa95f9d06 100644 --- a/storage/tianmu/core/parameterized_filter.h +++ b/storage/tianmu/core/parameterized_filter.h @@ -18,11 +18,11 @@ #define TIANMU_CORE_PARAMETERIZED_FILTER_H_ #pragma once -#include "core/condition.h" -#include "core/cq_term.h" -#include "core/joiner.h" #include "core/just_a_table.h" -#include "core/multi_index.h" +#include "index/multi_index.h" +#include "optimizer/compile/cq_term.h" +#include "optimizer/condition.h" +#include "optimizer/joiner.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/proxy_hash_joiner.cpp b/storage/tianmu/core/proxy_hash_joiner.cpp index eca9bd0a7..fc7cd8fb8 100644 --- a/storage/tianmu/core/proxy_hash_joiner.cpp +++ b/storage/tianmu/core/proxy_hash_joiner.cpp @@ -23,16 +23,16 @@ #include "base/util/defer.h" #include "common/assert.h" #include "common/exception.h" -#include "core/column_bin_encoder.h" #include "core/engine.h" -#include "core/join_thread_table.h" -#include "core/mi_step_iterator.h" -#include "core/multi_index_builder.h" -#include "core/task_executor.h" #include "core/temp_table.h" #include "core/transaction.h" +#include "executor/join_thread_table.h" +#include "executor/task_executor.h" +#include "index/multi_index_builder.h" +#include "optimizer/iterators/mi_step_iterator.h" #include "proxy_hash_joiner.h" #include "system/fet.h" +#include "vc/column_bin_encoder.h" #include "vc/virtual_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/proxy_hash_joiner.h b/storage/tianmu/core/proxy_hash_joiner.h index 4949e94f3..0353a9182 100644 --- a/storage/tianmu/core/proxy_hash_joiner.h +++ b/storage/tianmu/core/proxy_hash_joiner.h @@ -20,7 +20,7 @@ #include -#include "core/joiner.h" +#include "optimizer/joiner.h" namespace Tianmu { namespace core { @@ -41,4 +41,4 @@ class ProxyHashJoiner : public TwoDimensionalJoiner { } // namespace core } // namespace Tianmu -#endif // TIANMU_CORE_PROXY_HASH_JOINER_H_ \ No newline at end of file +#endif // TIANMU_CORE_PROXY_HASH_JOINER_H_ diff --git a/storage/tianmu/core/query.cpp b/storage/tianmu/core/query.cpp index 1079b2b35..b86d9e28c 100644 --- a/storage/tianmu/core/query.cpp +++ b/storage/tianmu/core/query.cpp @@ -18,16 +18,16 @@ #include "query.h" #include "common/common_definitions.h" -#include "compiled_query.h" -#include "core/compilation_tools.h" -#include "core/cq_term.h" #include "core/engine.h" #include "core/mysql_expression.h" #include "core/parameterized_filter.h" -#include "core/rough_multi_index.h" #include "core/temp_table.h" #include "core/transaction.h" #include "core/value_set.h" +#include "index/rough_multi_index.h" +#include "optimizer/compile/compilation_tools.h" +#include "optimizer/compile/compiled_query.h" +#include "optimizer/compile/cq_term.h" #include "vc/const_column.h" #include "vc/const_expr_column.h" #include "vc/expr_column.h" @@ -586,26 +586,18 @@ TempTable *Query::Preexecute(CompiledQuery &qu, ResultSender *sender, [[maybe_un std::shared_ptr t1_ptr, t2_ptr, t3_ptr; if (step.t1.n != common::NULL_VALUE_32) { - if (step.t1.n >= 0) - t1_ptr = Table(step.t1.n); // normal table - else { - t1_ptr = ta[-step.t1.n - 1]; // TempTable - } + // normal table or TempTable + t1_ptr = (step.t1.n >= 0) ? Table(step.t1.n) : ta[-step.t1.n - 1]; } + if (step.t2.n != common::NULL_VALUE_32) { - if (step.t2.n >= 0) - t2_ptr = Table(step.t2.n); // normal table - else { - t2_ptr = ta[-step.t2.n - 1]; // TempTable - } + t2_ptr = (step.t2.n >= 0) ? Table(step.t2.n) : ta[-step.t2.n - 1]; } + if (step.t3.n != common::NULL_VALUE_32) { - if (step.t3.n >= 0) - t3_ptr = Table(step.t3.n); // normal table - else { - t3_ptr = ta[-step.t3.n - 1]; // TempTable - } + t3_ptr = (step.t3.n >= 0) ? Table(step.t3.n) : ta[-step.t3.n - 1]; } + // Some technical information if (step.alias && std::strcmp(step.alias, "roughstats") == 0) { // magical word (passed as table alias) to display statistics @@ -623,13 +615,18 @@ TempTable *Query::Preexecute(CompiledQuery &qu, ResultSender *sender, [[maybe_un case CompiledQuery::StepType::TABLE_ALIAS: ta[-step.t1.n - 1] = t2_ptr; break; - case CompiledQuery::StepType::TMP_TABLE: + case CompiledQuery::StepType::TMP_TABLE: { DEBUG_ASSERT(step.t1.n < 0); - ta[-step.t1.n - 1] = step.n1 - ? TempTable::Create(ta[-step.tables1[0].n - 1].get(), step.tables1[0].n, this, true) - : TempTable::Create(ta[-step.tables1[0].n - 1].get(), step.tables1[0].n, this); + TableSubType sub_type = TableSubType::NORMAL; + if (step.n2 == static_cast::type>(TableSubType::DUAL)) { + sub_type = TableSubType::DUAL; + } + + ta[-step.t1.n - 1] = + step.n1 ? TempTable::Create(ta[-step.tables1[0].n - 1].get(), step.tables1[0].n, this, sub_type, true) + : TempTable::Create(ta[-step.tables1[0].n - 1].get(), step.tables1[0].n, this, sub_type); ((TempTable *)ta[-step.t1.n - 1].get())->ReserveVirtColumns(qu.NumOfVirtualColumns(step.t1)); - break; + } break; case CompiledQuery::StepType::CREATE_CONDS: DEBUG_ASSERT(step.t1.n < 0); if (step.ex_op == common::ExtraOperation::EX_COND_PUSH) { @@ -902,6 +899,7 @@ TempTable *Query::Preexecute(CompiledQuery &qu, ResultSender *sender, [[maybe_un tianmu_control_.lock(m_conn->GetThreadID()) << "ERROR: unsupported type of CQStep (" << static_cast(step.type) << ")" << system::unlock; } + } catch (...) { for (auto &c : conds) delete c; throw; @@ -1727,7 +1725,15 @@ bool Query::ClearSubselectTransformation(common::Operator &oper_for_subselect, I if (cond_removed->type() == Item::FUNC_ITEM && down_cast(cond_removed)->functype() == Item_func::TRIG_COND_FUNC) { // Condition was wrapped into trigger - cond_removed = down_cast(down_cast(cond_removed)->arguments()[0]); + Item_func_trig_cond *trig_cond = down_cast(cond_removed); + Item *arg = trig_cond->arguments()[0]; + + if ((arg->type() == Item::FUNC_ITEM) && (down_cast(arg)->functype() == Item_func::EQ_FUNC)) { + cond_removed = down_cast(arg); + } else + cond_removed = down_cast(arg); + + // cond_removed = down_cast(down_cast(cond_removed)->arguments()[0]); } if (cond_removed->type() == Item::COND_ITEM && down_cast(cond_removed)->functype() == Item_func::COND_OR_FUNC) { diff --git a/storage/tianmu/core/query.h b/storage/tianmu/core/query.h index 8c074f7a8..001f85df5 100644 --- a/storage/tianmu/core/query.h +++ b/storage/tianmu/core/query.h @@ -18,11 +18,11 @@ #define TIANMU_CORE_QUERY_H_ #pragma once -#include "core/column_type.h" #include "core/item_tianmu_field.h" -#include "core/joiner.h" #include "core/mysql_expression.h" -#include "handler/ha_my_tianmu.h" +#include "optimizer/joiner.h" +#include "sql/ha_my_tianmu.h" +#include "vc/column_type.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/query_compile.cpp b/storage/tianmu/core/query_compile.cpp index 39719f4fc..d4ef73525 100644 --- a/storage/tianmu/core/query_compile.cpp +++ b/storage/tianmu/core/query_compile.cpp @@ -1,1327 +1,1335 @@ -/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. - Use is subject to license terms - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA -*/ - -#include - -#include "common/mysql_gate.h" -#include "core/compilation_tools.h" -#include "core/compiled_query.h" -#include "core/engine.h" -#include "core/mysql_expression.h" -#include "core/query.h" -#include "core/transaction.h" - -namespace Tianmu { -namespace core { -QueryRouteTo TableUnmysterify(TABLE_LIST *tab, const char *&database_name, const char *&table_name, - const char *&table_alias, const char *&table_path) { - ASSERT_MYSQL_STRING(tab->table->s->db); - ASSERT_MYSQL_STRING(tab->table->s->table_name); - ASSERT_MYSQL_STRING(tab->table->s->path); - - database_name = tab->table->s->db.str; - if (tab->referencing_view) - table_name = tab->referencing_view->table_name; - else - table_name = tab->table->s->table_name.str; - table_alias = tab->alias; - table_path = tab->table->s->path.str; - - return QueryRouteTo::kToTianmu; -} - -QueryRouteTo JudgeErrors(SELECT_LEX *sl) { - if (!sl->join) { - return QueryRouteTo::kToMySQL; - } - - /* gone with mysql5.6 - if(sl->join && sl->join->procedure) { - my_message(ER_SYNTAX_ERROR, "Tianmu specific error: No PROCEDURE - syntax supported", MYF(0)); throw ReturnMeToMySQLWithError(); - } - */ - - if (sl->offset_limit) - if (sl->offset_limit->type() != Item::INT_ITEM /*|| sl->offset_limit->val_int()*/) { - my_message(ER_SYNTAX_ERROR, "Tianmu specific error: Only numerical OFFSET supported", MYF(0)); - throw ReturnMeToMySQLWithError(); - } - - if (sl->select_limit) - if (sl->select_limit->type() != Item::INT_ITEM) { - my_message(ER_SYNTAX_ERROR, "Tianmu specific error: Only numerical LIMIT supported", MYF(0)); - throw ReturnMeToMySQLWithError(); - } - if (sl->olap == ROLLUP_TYPE) { - /*my_message(ER_SYNTAX_ERROR, "Tianmu specific error: WITH ROLLUP not - supported", MYF(0)); throw ReturnMeToMySQLWithError();*/ - return QueryRouteTo::kToMySQL; - } - - return QueryRouteTo::kToTianmu; -} - -void SetLimit(SELECT_LEX *sl, SELECT_LEX *gsl, int64_t &offset_value, int64_t &limit_value) { - if (sl->select_limit && (!gsl || sl->select_limit != gsl->select_limit)) { - limit_value = sl->select_limit->val_int(); - if (limit_value == UINT_MAX) { /* this value seems to be sometimes - automatically set by MYSQL to UINT_MAX*/ - limit_value = -1; // no limit set - offset_value = -1; - }; - }; - - if (limit_value) - offset_value = 0; - - if (sl->offset_limit && (!gsl || sl->offset_limit != gsl->offset_limit)) - offset_value = sl->offset_limit->val_int(); -} - -// Used in Query::Compile() to break compilation in the middle and make cleanup -// before returning -class CompilationError {}; - -QueryRouteTo Query::FieldUnmysterify(Item *item, const char *&database_name, const char *&table_name, - const char *&table_alias, const char *&table_path, const TABLE *&table_ptr, - const char *&field_name, const char *&field_alias) { - table_alias = EMPTY_TABLE_CONST_INDICATOR; - database_name = nullptr; - table_name = nullptr; - table_path = nullptr; - table_ptr = nullptr; - field_name = nullptr; - field_alias = nullptr; - - item = UnRef(item); - - Item_field *ifield; - switch (static_cast(item->type())) { - case static_cast(Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM): - ifield = dynamic_cast(item)->OriginalItem(); - if (IsAggregationItem(ifield)) { - Item_sum *is = (Item_sum *)ifield; - if (is->get_arg_count() > 1) - return QueryRouteTo::kToMySQL; - Item *tmp_item = UnRef(is->get_arg(0)); - if (tmp_item->type() == Item::FIELD_ITEM) - ifield = (Item_field *)tmp_item; - else if (static_cast(tmp_item->type()) == - static_cast(Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM)) - ifield = dynamic_cast(tmp_item)->OriginalItem(); - else { - return QueryRouteTo::kToMySQL; - } - } - break; - case Item::FIELD_ITEM: // regular select - ifield = (Item_field *)item; - break; - - case Item::SUM_FUNC_ITEM: { // min(k), max(k), count(), avg(k), sum - Item_sum *is = (Item_sum *)item; - if (is->get_arg_count() > 1) { - return QueryRouteTo::kToMySQL; - } - Item *tmp_item = UnRef(is->get_arg(0)); - if (tmp_item->type() == Item::FIELD_ITEM) - ifield = (Item_field *)tmp_item; - else if (static_cast(tmp_item->type()) == - static_cast(Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM)) /* *CAUTION* comparision of - enumerators from different - enums */ - ifield = dynamic_cast(tmp_item)->OriginalItem(); - else - return QueryRouteTo::kToMySQL; - break; - } - case Item::FUNC_ITEM: // complex expressions - // if(WrapMysqlExpression(item, ¬_a_table_column) == - // WrapStatus::SUCCESS) - return QueryRouteTo::kToTianmu; - return QueryRouteTo::kToMySQL; - default: - // if(WrapMysqlExpression(item, ¬_a_table_column) == - // WrapStatus::SUCCESS) - return QueryRouteTo::kToTianmu; - return QueryRouteTo::kToMySQL; - }; - - /* - * By MW. Related to bug 1073. - * - * For views, 'table_alias' must be created as a concatenation - * of original view(s) name(s) and the table name - * - currently it's just the table name, which leads to ambiguity and errors - * when the same table is used in another place in the query. - * Note that there can be several nested views. - * - * To retrieve name(s) of the view(s) from which the current 'ifield' comes - * you may try the following expression: - * - * ifield->cached_table->table_list->belong_to_view->alias or - * ...->table_name or - * ifield->cached_table->table_list->referencing_view->alias or - * ...->table_name - * - * Here, 'belong_to_view' and 'referencing_view' are different - * if there are nested views. - * - * Probably ifield->cached_table could be also used to find - * 'database_name', 'table_name' and 'table_path' - * in a simpler way than currently. - */ - - Field *f = ifield->result_field; - - ASSERT_MYSQL_STRING(f->table->s->db); - ASSERT_MYSQL_STRING(f->table->s->table_name); - ASSERT_MYSQL_STRING(f->table->s->path); - - table_ptr = f->table; - table_alias = ifield->table_name; - database_name = f->table->s->db.str; - table_name = GetTableName(ifield); - table_path = f->table->s->path.str; - field_name = f->field_name; - field_alias = ifield->item_name.ptr(); - - return QueryRouteTo::kToTianmu; -} - -bool Query::FieldUnmysterify(Item *item, TabID &tab, AttrID &col) { - Item_field *ifield; - if (item->type() == Item_tianmufield::get_tianmuitem_type()) { - ifield = dynamic_cast(item)->OriginalItem(); - if (IsAggregationItem(ifield)) { - Item_sum *is = (Item_sum *)ifield; - if (is->get_arg_count() > 1) - return false; - Item *tmp_item = UnRef(is->get_arg(0)); - if (tmp_item->type() == Item::FIELD_ITEM) - ifield = (Item_field *)tmp_item; - else if (tmp_item->type() == Item_tianmufield::get_tianmuitem_type()) - ifield = dynamic_cast(tmp_item)->OriginalItem(); - else if (tmp_item->type() == Item::FUNC_ITEM) { - Item_tianmufield *tianmui = dynamic_cast(item); - tab.n = tianmui->varID[0].tab; - col.n = tianmui->varID[0].tab; - return true; - } else - return false; - } - } else if (item->type() == Item::SUM_FUNC_ITEM) { // min(k), max(k), count(), avg(k), sum(), - // group_concat() - Item_sum *is = (Item_sum *)item; - if (is->get_arg_count() > 1) { - int dir = 0; - if (((Item_sum *)item)->sum_func() == Item_sum::GROUP_CONCAT_FUNC) { - dir = ((Item_func_group_concat *)item)->direction(); - } - - // only pass 1 group 1 order by case, which is the only case Tianmu - // supported - if (dir == 0 || is->get_arg_count() != 2) - return false; - } - Item *tmp_item = UnRef(is->get_arg(0)); - if (tmp_item->type() == Item::FIELD_ITEM) - ifield = (Item_field *)tmp_item; - else if (tmp_item->type() == Item_tianmufield::get_tianmuitem_type()) - ifield = dynamic_cast(tmp_item)->OriginalItem(); - else - return false; - } else if (item->type() == Item::FIELD_ITEM) - ifield = (Item_field *)item; - else - return false; - - if (!ifield->table_name) { - return false; - // union results have no name, but refer to the temp table - // if(field_alias2num.find(TabIDColAlias((*table_alias2index)[ifield->table_name], - // ifield->item_name.ptr())) == field_alias2num.end()) - // return false; - // col.n = - // field_alias2num[TabIDColAlias((*table_alias2index)[ifield->table_name], - // ifield->item_name.ptr())]; - // tab.n = common::NULL_VALUE_32; - // return true; - } - const char *table_name = GetTableName(ifield); - std::string ext_alias = - std::string(table_name ? table_name : "") + std::string(":") + std::string(ifield->table_name); - auto it = table_alias2index_ptr.lower_bound(ext_alias); - auto it_end = table_alias2index_ptr.upper_bound(ext_alias); - if (it == table_alias2index_ptr.end()) - return false; - for (; it != it_end; it++) { - TABLE *mysql_table = it->second.second; - tab = TabID(it->second.first); - if (ifield->field->table != mysql_table) - continue; - - // FIXME: is this correct? - if (!mysql_table->pos_in_table_list->is_view_or_derived()) { - // Physical table in FROM - TianmuTable - int field_num; - for (field_num = 0; mysql_table->field[field_num]; field_num++) - if (mysql_table->field[field_num]->field_name == ifield->result_field->field_name) - break; - if (!mysql_table->field[field_num]) - continue; - col = AttrID(field_num); - return true; - } else { - // subselect in FROM - TempTable - if (field_alias2num.find(TabIDColAlias(tab.n, ifield->result_field->field_name)) == field_alias2num.end()) - continue; - col.n = field_alias2num[TabIDColAlias(tab.n, ifield->result_field->field_name)]; - return true; - } - } - return false; -} - -QueryRouteTo Query::AddJoins(List &join, TabID &tmp_table, std::vector &left_tables, - std::vector &right_tables, bool in_subquery, bool &first_table /*= true*/, - bool for_subq_in_where /*false*/, bool use_tmp_when_no_join /*false*/) { - if (!join.elements) { - // Use use_tmp_when_no_join when AddJoins - // The caller decides that the scenario is When join_list has no elements and field has sp - if (use_tmp_when_no_join) { - // The index of the subscript [-1] indicates - // that the first physical table is used as the temporary table. - // The subscript value operation in - // TMP_TABLE is required in combination with Query::Preexecute. - TabID tab(-1); - left_tables.push_back(tab); - cq->TmpTable(tmp_table, tab, for_subq_in_where); - return QueryRouteTo::kToTianmu; - } - - // no tables in table list in this select - return QueryRouteTo::kToMySQL; - } - - // on first call first_table = true. It indicates if it is the first table to - // be added is_left is true iff it is nested left join which needs to be - // flatten (all tables regardless of their join type need to be left-joined) - TABLE_LIST *join_ptr; - List_iterator li(join); - std::vector reversed; - - // if the table list was empty altogether, we wouldn't even enter - // Compilation(...) it must be sth. like `select 1 from t1 union select 2` and - // we are in the second select in the union - - reversed.reserve(join.elements); - while ((join_ptr = li++) != nullptr) reversed.push_back(join_ptr); - size_t size = reversed.size(); - for (unsigned int i = 0; i < size; i++) { - join_ptr = reversed[size - i - 1]; - if (join_ptr->nested_join) { - std::vector local_left, local_right; - if (QueryRouteTo::kToMySQL == AddJoins(join_ptr->nested_join->join_list, tmp_table, local_left, local_right, - in_subquery, first_table, for_subq_in_where)) - return QueryRouteTo::kToMySQL; - JoinType join_type = GetJoinTypeAndCheckExpr(join_ptr->outer_join, join_ptr->join_cond()); - CondID cond_id; - if (QueryRouteTo::kToMySQL == BuildCondsIfPossible(join_ptr->join_cond(), cond_id, tmp_table, join_type)) - return QueryRouteTo::kToMySQL; - left_tables.insert(left_tables.end(), right_tables.begin(), right_tables.end()); - local_left.insert(local_left.end(), local_right.begin(), local_right.end()); - if (join_ptr->outer_join) - right_tables = local_left; - else - left_tables.insert(left_tables.end(), local_left.begin(), local_left.end()); - if (join_ptr->join_cond() && join_ptr->outer_join) { - cq->LeftJoinOn(tmp_table, left_tables, right_tables, cond_id); - left_tables.insert(left_tables.end(), right_tables.begin(), right_tables.end()); - right_tables.clear(); - } else if (join_ptr->join_cond() && !join_ptr->outer_join) - cq->InnerJoinOn(tmp_table, left_tables, right_tables, cond_id); - } else { - DEBUG_ASSERT(join_ptr->table && "We require that the table is defined if it is not a nested join"); - const char *database_name = 0; - const char *table_name = 0; - const char *table_alias = 0; - const char *table_path = 0; - TabID tab(0); - if (join_ptr->is_view_or_derived()) { - if (QueryRouteTo::kToMySQL == - Compile(cq, join_ptr->derived_unit()->first_select(), join_ptr->derived_unit()->union_distinct, &tab)) - return QueryRouteTo::kToMySQL; - table_alias = join_ptr->alias; - } else { - if (QueryRouteTo::kToMySQL == TableUnmysterify(join_ptr, database_name, table_name, table_alias, table_path)) - return QueryRouteTo::kToMySQL; - int tab_num = path2num[table_path]; // number of a table on a list in - // `this` QUERY object - int id = t[tab_num]->GetID(); - cq->TableAlias(tab, TabID(tab_num), table_name, id); - } - std::string ext_alias = std::string(table_name ? table_name : "") + std::string(":") + std::string(table_alias); - table_alias2index_ptr.insert(std::make_pair(ext_alias, std::make_pair(tab.n, join_ptr->table))); - if (first_table) { - left_tables.push_back(tab); - DEBUG_ASSERT(!join_ptr->join_cond() && - "It is not possible to join the first table with the LEFT " - "direction"); - cq->TmpTable(tmp_table, tab, for_subq_in_where); - first_table = false; - } else { - cq->Join(tmp_table, tab); - JoinType join_type = GetJoinTypeAndCheckExpr(join_ptr->outer_join, join_ptr->join_cond()); - // if(join_type == JoinType::JO_LEFT && join_ptr->join_cond() && - // dynamic_cast(join_ptr->join_cond())) - // return QueryRouteTo::kToMySQL; - CondID cond_id; - if (QueryRouteTo::kToMySQL == BuildCondsIfPossible(join_ptr->join_cond(), cond_id, tmp_table, join_type)) - return QueryRouteTo::kToMySQL; - if (join_ptr->join_cond() && join_ptr->outer_join) { - right_tables.push_back(tab); - cq->LeftJoinOn(tmp_table, left_tables, right_tables, cond_id); - left_tables.push_back(tab); - right_tables.clear(); - } else if (join_ptr->join_cond() && !join_ptr->outer_join) { - right_tables.push_back(tab); - cq->InnerJoinOn(tmp_table, left_tables, right_tables, cond_id); - left_tables.push_back(tab); - right_tables.clear(); - } else - left_tables.push_back(tab); - // if(join_ptr->on_expr) - // cq->SetLOJOuterDim(tmp_table, tab, i); - } - } - } - return QueryRouteTo::kToTianmu; -} - -QueryRouteTo Query::AddFields(List &fields, TabID const &tmp_table, TabID const &base_table, - bool const group_by_clause, int &num_of_added_fields, bool ignore_minmax, - bool &aggregation_used) { - List_iterator_fast li(fields); - Item *item; - int added = 0; - item = li++; - while (item) { - WrapStatus ws; - common::ColOperation oper; - bool distinct; - if (QueryRouteTo::kToMySQL == OperationUnmysterify(item, oper, distinct, group_by_clause)) - return QueryRouteTo::kToMySQL; - - if (IsAggregationItem(item)) - aggregation_used = true; - - // in case of transformed subquery sometimes we need to revert back - // transformation to MIN/MAX - if (ignore_minmax && (oper == common::ColOperation::MIN || oper == common::ColOperation::MAX)) - oper = common::ColOperation::LISTING; - - // select PHYSICAL COLUMN or AGGREGATION over PHYSICAL COLUMN - if ((IsFieldItem(item) || IsAggregationOverFieldItem(item)) && - (IsLocalColumn(item, tmp_table) || (!base_table.IsNullID() && IsLocalColumn(item, base_table)))) - AddColumnForPhysColumn(item, tmp_table, base_table, oper, distinct, false, item->item_name.ptr()); - // REF to FIELD_ITEM - else if (item->type() == Item::REF_ITEM) { - item = UnRef(item); - continue; - } - // if ((UnRef(item)->type() == Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM || - // UnRef(item)->type() == Item_tianmufield::FIELD_ITEM) && - // IsLocalColumn(UnRef(item), tmp_table)) - // AddColumnForPhysColumn(UnRef(item), tmp_table, oper, distinct, false, false); - // else { - // // - // } - else if (IsAggregationItem(item) && (((Item_sum *)item)->get_arg(0))->type() == Item::REF_ITEM && - (UnRef(((Item_sum *)item)->get_arg(0))->type() == Item_tianmufield::get_tianmuitem_type() || - (UnRef(((Item_sum *)item)->get_arg(0))->type() == Item_tianmufield::FIELD_ITEM)) && - IsLocalColumn(UnRef(((Item_sum *)item)->get_arg(0)), tmp_table)) - // AGGR on REF to FIELD_ITEM - AddColumnForPhysColumn(UnRef(((Item_sum *)item)->get_arg(0)), tmp_table, TabID(), oper, distinct, false, - item->item_name.ptr()); - else if (IsAggregationItem(item)) { - // select AGGREGATION over EXPRESSION - Item_sum *item_sum = (Item_sum *)item; - if (item_sum->get_arg_count() > 1 || HasAggregation(item_sum->get_arg(0))) - return QueryRouteTo::kToMySQL; - if (IsCountStar(item_sum)) { // count(*) doesn't need any virtual column - AttrID at; - cq->AddColumn(at, tmp_table, CQTerm(), oper, item_sum->item_name.ptr(), false); - field_alias2num[TabIDColAlias(tmp_table.n, item_sum->item_name.ptr())] = at.n; - } else { - MysqlExpression *expr; - ws = WrapMysqlExpression(item_sum->get_arg(0), tmp_table, expr, false, false); - if (ws == WrapStatus::FAILURE) - return QueryRouteTo::kToMySQL; - AddColumnForMysqlExpression(expr, tmp_table, - ignore_minmax ? item_sum->get_arg(0)->item_name.ptr() : item_sum->item_name.ptr(), - oper, distinct); - } - } else if (item->type() == Item::SUBSELECT_ITEM) { - CQTerm term; - AttrID at; - if (Item2CQTerm(item, term, tmp_table, - /*group_by_clause ? HAVING_FILTER :*/ CondType::WHERE_COND) == QueryRouteTo::kToMySQL) - return QueryRouteTo::kToMySQL; - cq->AddColumn(at, tmp_table, term, common::ColOperation::LISTING, item->item_name.ptr(), distinct); - field_alias2num[TabIDColAlias(tmp_table.n, item->item_name.ptr())] = at.n; - } else { - // select EXPRESSION - if (HasAggregation(item)) { - oper = common::ColOperation::DELAYED; - aggregation_used = true; - } - MysqlExpression *expr(nullptr); - ws = WrapMysqlExpression(item, tmp_table, expr, false, oper == common::ColOperation::DELAYED); - if (ws == WrapStatus::FAILURE) - return QueryRouteTo::kToMySQL; - if (!item->item_name.ptr()) { - Item_func_conv_charset *item_conv = dynamic_cast(item); - if (item_conv) { - Item **ifunc_args = item_conv->arguments(); - AddColumnForMysqlExpression(expr, tmp_table, ifunc_args[0]->item_name.ptr(), oper, distinct); - } else { - AddColumnForMysqlExpression(expr, tmp_table, item->item_name.ptr(), oper, distinct); - } - } else - AddColumnForMysqlExpression(expr, tmp_table, item->item_name.ptr(), oper, distinct); - } - added++; - item = li++; - } - num_of_added_fields = added; - return QueryRouteTo::kToTianmu; -} - -// todo(dfx): handle more query scenarios -QueryRouteTo Query::AddSemiJoinFiled(List &fields, List &join, const TabID &tmp_table) { - List_iterator_fast field_li(fields); - Item *item; - item = field_li++; - while (item) { - WrapStatus ws; - common::ColOperation oper; - bool distinct; - if (QueryRouteTo::kToMySQL == OperationUnmysterify(item, oper, distinct, 0)) - return QueryRouteTo::kToMySQL; - if (!IsFieldItem(item)) { - item = field_li++; - continue; - } - AddColumnForPhysColumn(item, tmp_table, TabID(), oper, distinct, false, item->item_name.ptr()); - item = field_li++; - } - - TABLE_LIST *join_ptr; - List_iterator li(join); - std::vector reversed; - while ((join_ptr = li++) != nullptr) { - reversed.push_back(join_ptr); - } - size_t size = reversed.size(); - for (unsigned int i = 0; i < size; i++) { - join_ptr = reversed[size - i - 1]; - if (join_ptr->nested_join) { - List_iterator_fast outer_field_li(join_ptr->nested_join->sj_outer_exprs); - Item *outer_item; - outer_item = outer_field_li++; - while (outer_item) { - WrapStatus ws; - common::ColOperation oper; - bool distinct; - if (QueryRouteTo::kToMySQL == OperationUnmysterify(outer_item, oper, distinct, 0)) - return QueryRouteTo::kToMySQL; - if (!IsFieldItem(outer_item)) { - outer_item = outer_field_li++; - continue; - } - AddColumnForPhysColumn(outer_item, tmp_table, TabID(), oper, distinct, false, outer_item->item_name.ptr()); - outer_item = outer_field_li++; - } - } - } - return QueryRouteTo::kToTianmu; -} - -QueryRouteTo Query::AddGroupByFields(ORDER *group_by, const TabID &tmp_table, const TabID &base_table) { - for (; group_by; group_by = group_by->next) { - if (group_by->direction != ORDER::ORDER_ASC) { - my_message(ER_SYNTAX_ERROR, - "Tianmu specific error: Using DESC after GROUP BY clause not " - "allowed. Use " - "ORDER BY to order the result", - MYF(0)); - throw ReturnMeToMySQLWithError(); - } - - Item *item = *(group_by->item); - item = UnRef(item); - // group by PHYSICAL COLUMN - if ((IsFieldItem(item) || (IsAggregationItem(item) && IsFieldItem(((Item_sum *)item)->get_arg(0)))) && - (IsLocalColumn(item, tmp_table) || (!base_table.IsNullID() && IsLocalColumn(item, base_table)))) { - AddColumnForPhysColumn(item, tmp_table, base_table, common::ColOperation::GROUP_BY, false, true); - } else if (item->type() == Item::SUBSELECT_ITEM) { - CQTerm term; - AttrID at; - if (Item2CQTerm(item, term, tmp_table, CondType::WHERE_COND) == QueryRouteTo::kToMySQL) - return QueryRouteTo::kToMySQL; - cq->AddColumn(at, tmp_table, term, common::ColOperation::GROUP_BY, 0); - // field_alias2num[TabIDColAlias(tmp_table.n, - // item->item_name.ptr())] = - // at.n; - } else { // group by COMPLEX EXPRESSION - MysqlExpression *expr = 0; - if (WrapStatus::FAILURE == WrapMysqlExpression(item, tmp_table, expr, true, true)) - return QueryRouteTo::kToMySQL; - AddColumnForMysqlExpression(expr, tmp_table, item->item_name.ptr(), common::ColOperation::GROUP_BY, false, true); - } - } - return QueryRouteTo::kToTianmu; -} - -QueryRouteTo Query::AddOrderByFields(ORDER *order_by, TabID const &tmp_table, TabID const &base_table, - int const group_by_clause) { - for (; order_by; order_by = order_by->next) { - std::pair vc; - Item *item = *(order_by->item); - CQTerm my_term; - QueryRouteTo result{QueryRouteTo::kToMySQL}; - // at first we need to check if we don't have non-deterministic expression - // (e.g., rand()) in such case we should order by output column in TempTable - if (!IsFieldItem(item) && !IsAggregationItem(item) && !IsDeterministic(item) && - item->type() != Item::SUBSELECT_ITEM) { - MysqlExpression *expr = nullptr; - WrapStatus ws = WrapMysqlExpression(item, tmp_table, expr, false, false); - if (ws == WrapStatus::FAILURE) - return QueryRouteTo::kToMySQL; - DEBUG_ASSERT(!expr->IsDeterministic()); - int col_num = AddColumnForMysqlExpression(expr, tmp_table, nullptr, common::ColOperation::LISTING, false, true); - vc = VirtualColumnAlreadyExists(tmp_table, tmp_table, AttrID(-col_num - 1)); - if (vc.first == common::NULL_VALUE_32) { - vc.first = tmp_table.n; - cq->CreateVirtualColumn(vc.second, tmp_table, tmp_table, AttrID(col_num)); - phys2virt.insert(std::make_pair(std::make_pair(tmp_table.n, -col_num - 1), vc)); - } - cq->Add_Order(tmp_table, AttrID(vc.second), (order_by->direction != ORDER::ORDER_ASC)); - continue; - } - if (group_by_clause) { - if (item->type() == Item::FUNC_ITEM) { - MysqlExpression *expr = nullptr; - bool delayed = false; - if (HasAggregation(item)) { - delayed = true; - } - - WrapStatus ws = WrapMysqlExpression(item, tmp_table, expr, false, delayed); - if (ws == WrapStatus::FAILURE) - return QueryRouteTo::kToMySQL; - DEBUG_ASSERT(expr->IsDeterministic()); - int col_num = AddColumnForMysqlExpression( - expr, tmp_table, nullptr, delayed ? common::ColOperation::DELAYED : common::ColOperation::LISTING, false, - true); - vc = VirtualColumnAlreadyExists(tmp_table, tmp_table, AttrID(-col_num - 1)); - if (vc.first == common::NULL_VALUE_32) { - vc.first = tmp_table.n; - cq->CreateVirtualColumn(vc.second, tmp_table, tmp_table, AttrID(col_num)); - phys2virt.insert(std::make_pair(std::make_pair(tmp_table.n, -col_num - 1), vc)); - } - cq->Add_Order(tmp_table, AttrID(vc.second), (order_by->direction != ORDER::ORDER_ASC)); - continue; - // we can reuse transformation done in case of HAVING - // result = Item2CQTerm(item, my_term, tmp_table, CondType::HAVING_COND); - } else { - AttrID at; - result = Item2CQTerm(item, my_term, tmp_table, CondType::HAVING_COND, false, nullptr, nullptr, base_table); - if (item->type() == Item::SUBSELECT_ITEM) { - // create a materialized column with subsel results for the ordering - cq->AddColumn(at, tmp_table, my_term, common::ColOperation::DELAYED, nullptr, false); - vc = VirtualColumnAlreadyExists(tmp_table, tmp_table, at); - if (vc.first == common::NULL_VALUE_32) { - vc.first = tmp_table.n; - cq->CreateVirtualColumn(vc.second, tmp_table, tmp_table, at); - phys2virt.insert(std::make_pair(std::pair(tmp_table.n, at.n), vc)); - } - } else // a naked column - vc.second = my_term.vc_id; - // cq->Add_Order(tmp_table, AttrID(vc.second), !(order_by->asc)); - } - - } else { - result = Item2CQTerm(item, my_term, tmp_table, CondType::WHERE_COND); - vc.second = my_term.vc_id; - } - if (result != QueryRouteTo::kToTianmu) - return QueryRouteTo::kToMySQL; - cq->Add_Order(tmp_table, AttrID(vc.second), order_by->direction != ORDER::ORDER_ASC); - } - return QueryRouteTo::kToTianmu; -} - -QueryRouteTo Query::AddGlobalOrderByFields(SQL_I_List *global_order, const TabID &tmp_table, int max_col) { - if (!global_order) - return QueryRouteTo::kToTianmu; - - ORDER *order_by; - for (uint i = 0; i < global_order->elements; i++) { - order_by = (i == 0 ? (ORDER *)(global_order->first) : order_by->next); - // the way to traverse 'global_order' list maybe is not very orthodox, but - // it works - - if (order_by == nullptr) - return QueryRouteTo::kToMySQL; - - int col_num = common::NULL_VALUE_32; - if ((*(order_by->item))->type() == Item::INT_ITEM) { - col_num = int((*(order_by->item))->val_int()); - if (col_num < 1 || col_num > max_col) - return QueryRouteTo::kToMySQL; - col_num--; - col_num = -col_num - 1; // make it negative as are columns in TempTable - } else { - Item *item = *(order_by->item); - if (!item->item_name.ptr()) - return QueryRouteTo::kToMySQL; - bool found = false; - for (auto &it : field_alias2num) { - if (tmp_table.n == it.first.first && strcasecmp(it.first.second.c_str(), item->item_name.ptr()) == 0) { - col_num = it.second; - found = true; - break; - } - } - if (!found) - return QueryRouteTo::kToMySQL; - } - int attr; - cq->CreateVirtualColumn(attr, tmp_table, tmp_table, AttrID(col_num)); - phys2virt.insert(std::make_pair(std::make_pair(tmp_table.n, col_num), std::make_pair(tmp_table.n, attr))); - cq->Add_Order(tmp_table, AttrID(attr), order_by->direction != ORDER::ORDER_ASC); - } - - return QueryRouteTo::kToTianmu; -} - -Query::WrapStatus Query::WrapMysqlExpression(Item *item, const TabID &tmp_table, MysqlExpression *&expr, bool in_where, - bool aggr_used) { - // Check if the expression doesn't contain any strange items that we don't - // want to see. By the way, collect references to all Item_field objects. - std::set ifields; - MysqlExpression::Item2VarID item2varid; - if (!MysqlExpression::SanityAggregationCheck(item, ifields)) - return WrapStatus::FAILURE; - - // this large "if" can be removed to use common code, but many small "ifs" - // must be created then - if (in_where) { - // create a map: [Item_field pointer] -> VarID - for (auto &it : ifields) { - if (IsAggregationItem(it)) { - // a few checkings for aggregations - Item_sum *aggregation = (Item_sum *)it; - if (aggregation->get_arg_count() > 1) - return WrapStatus::FAILURE; - if (IsCountStar(aggregation)) // count(*) doesn't need any virtual column - return WrapStatus::FAILURE; - } - AttrID col, at; - TabID tab; - // find [tab] and [col] which identify column in TIANMU - if (!FieldUnmysterify(it, tab, col)) - return WrapStatus::FAILURE; - if (!cq->ExistsInTempTable(tab, tmp_table)) { - bool is_group_by; - TabID params_table = cq->FindSourceOfParameter(tab, tmp_table, is_group_by); - common::ColOperation oper; - bool distinct; - if (QueryRouteTo::kToMySQL == OperationUnmysterify(it, oper, distinct, true)) - return WrapStatus::FAILURE; - if (is_group_by && !IsParameterFromWhere(params_table)) { - col.n = AddColumnForPhysColumn(it, params_table, TabID(), oper, distinct, true); - item2varid[it] = VarID(params_table.n, col.n); - } else - item2varid[it] = VarID(tab.n, col.n); - } else { - // aggregation in WHERE not possible unless it is a parameter - DEBUG_ASSERT(!IsAggregationItem(it)); - item2varid[it] = VarID(tab.n, col.n); - } - } - } else { // !in_where - WrapStatus ws; - AttrID at, vc; - for (auto &it : ifields) { - if (IsAggregationItem(it)) { - Item_sum *aggregation = (Item_sum *)it; - if (aggregation->get_arg_count() > 1) - return WrapStatus::FAILURE; - - if (IsCountStar(aggregation)) { // count(*) doesn't need any virtual column - at.n = GetAddColumnId(AttrID(common::NULL_VALUE_32), tmp_table, common::ColOperation::COUNT, false); - if (at.n == common::NULL_VALUE_32) // doesn't exist yet - cq->AddColumn(at, tmp_table, CQTerm(), common::ColOperation::COUNT, nullptr, false); - } else { - common::ColOperation oper; - bool distinct; - if (QueryRouteTo::kToMySQL == OperationUnmysterify(aggregation, oper, distinct, true)) - return WrapStatus::FAILURE; - AttrID col; - TabID tab; - if (IsFieldItem(aggregation->get_arg(0)) && FieldUnmysterify(aggregation, tab, col) && - cq->ExistsInTempTable(tab, tmp_table)) { - // PHYSICAL COLUMN - at.n = AddColumnForPhysColumn(aggregation->get_arg(0), tmp_table, TabID(), oper, distinct, true); - } else { - // EXPRESSION - ws = WrapMysqlExpression(aggregation->get_arg(0), tmp_table, expr, in_where, false); - if (ws == WrapStatus::FAILURE) - return ws; - at.n = AddColumnForMysqlExpression(expr, tmp_table, aggregation->item_name.ptr(), oper, distinct, true); - } - } - item2varid[it] = VarID(tmp_table.n, at.n); - } else if (IsFieldItem(it)) { - AttrID col; - TabID tab; - if (!FieldUnmysterify(it, tab, col)) - return WrapStatus::FAILURE; - if (!cq->ExistsInTempTable(tab, tmp_table)) { - bool is_group_by; - TabID params_table = cq->FindSourceOfParameter(tab, tmp_table, is_group_by); - common::ColOperation oper; - bool distinct; - if (QueryRouteTo::kToMySQL == OperationUnmysterify(it, oper, distinct, true)) - return WrapStatus::FAILURE; - if (is_group_by && !IsParameterFromWhere(params_table)) { - col.n = AddColumnForPhysColumn(it, params_table, TabID(), oper, distinct, true); - item2varid[it] = VarID(params_table.n, col.n); - } else - item2varid[it] = VarID(tab.n, col.n); - } else if (aggr_used) { - common::ColOperation oper; - bool distinct; - if (QueryRouteTo::kToMySQL == OperationUnmysterify(it, oper, distinct, true)) - return WrapStatus::FAILURE; - at.n = AddColumnForPhysColumn(it, tmp_table, TabID(), oper, distinct, true); - item2varid[it] = VarID(tmp_table.n, at.n); - } else { - item2varid[it] = VarID(tab.n, col.n); - } - } else - DEBUG_ASSERT(0); // unknown item type? - } - } - gc_expressions.push_back(expr = new MysqlExpression(item, item2varid)); - return WrapStatus::SUCCESS; -} - -int Query::AddColumnForPhysColumn(Item *item, const TabID &tmp_table, TabID const &base_table, - const common::ColOperation oper, const bool distinct, bool group_by, - const char *alias) { - std::pair vc; - AttrID col, at; - TabID tab; - if (!FieldUnmysterify(item, tab, col)) - return common::NULL_VALUE_32; - if (tab.n == common::NULL_VALUE_32) - tab = tmp_table; // table name not contained in item - must be the result - // temp_table - - if (base_table.IsNullID()) { - DEBUG_ASSERT(cq->ExistsInTempTable(tab, tmp_table)); - if (item->type() == Item_tianmufield::get_tianmuitem_type() && - IsAggregationItem(dynamic_cast(item)->OriginalItem())) { - return ((Item_tianmufield *)item)->varID[0].col; - } - vc = VirtualColumnAlreadyExists(tmp_table, tab, col); - if (vc.first == common::NULL_VALUE_32) { - vc.first = tmp_table.n; - cq->CreateVirtualColumn(vc.second, tmp_table, tab, col); - phys2virt.insert(std::make_pair(std::make_pair(tab.n, col.n), vc)); - } else { - int attr = GetAddColumnId(AttrID(vc.second), tmp_table, oper, distinct); - if (attr != common::NULL_VALUE_32) { - if (group_by) // do not add column - not needed duplicate - return attr; - // vc.n = col_to_vc[attr]; - } else if (group_by && oper == common::ColOperation::GROUP_BY && - (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::LISTING, distinct)) != - common::NULL_VALUE_32) { - // modify existing column - CQChangeAddColumnLIST2GROUP_BY(tmp_table, attr); - return attr; - } else if (group_by && oper == common::ColOperation::LISTING && - (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::GROUP_BY, distinct)) != - common::NULL_VALUE_32) { - // don;t add unnecessary column to select list - return attr; - } - } - } else { - std::pair phys_vc = VirtualColumnAlreadyExists(base_table, tab, col); - if (phys_vc.first == common::NULL_VALUE_32) { - return common::NULL_VALUE_32; - } - vc = VirtualColumnAlreadyExists(tmp_table, TabID(phys_vc.first), AttrID(phys_vc.first)); - if (vc.first == common::NULL_VALUE_32) { - vc.first = tmp_table.n; - int at_id = field_alias2num[TabIDColAlias(base_table.n, item->item_name.ptr())]; - cq->CreateVirtualColumn(vc.second, tmp_table, TabID(phys_vc.first), AttrID(at_id)); - phys2virt.insert(std::make_pair(std::make_pair(phys_vc.first, at_id), vc)); - } else { - int attr = GetAddColumnId(AttrID(vc.second), tmp_table, oper, distinct); - if (attr != common::NULL_VALUE_32) { - if (group_by) // do not add column - not needed duplicate - return attr; - } else if (group_by && oper == common::ColOperation::GROUP_BY && - (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::LISTING, distinct)) != - common::NULL_VALUE_32) { - CQChangeAddColumnLIST2GROUP_BY(tmp_table, attr); - return attr; - } else if (group_by && oper == common::ColOperation::LISTING && - (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::GROUP_BY, distinct)) != - common::NULL_VALUE_32) { - return attr; - } - } - } - - if (!item->item_name.ptr() && item->type() == Item::SUM_FUNC_ITEM) { - cq->AddColumn(at, tmp_table, CQTerm(vc.second), oper, - group_by ? nullptr : ((Item_field *)(((Item_sum *)item)->get_arg(0)))->item_name.ptr(), distinct); - } else { - if (item->type() == Item::SUM_FUNC_ITEM && ((Item_sum *)item)->sum_func() == Item_sum::GROUP_CONCAT_FUNC) { - // pass the seprator to construct the special instruction - char *ptr = ((Item_func_group_concat *)item)->get_separator()->c_ptr(); - SI si; - si.separator.assign(ptr, std::strlen(ptr)); - si.order = ((Item_func_group_concat *)item)->direction(); - cq->AddColumn(at, tmp_table, CQTerm(vc.second), oper, group_by ? nullptr : item->item_name.ptr(), distinct, &si); - } else { - cq->AddColumn(at, tmp_table, CQTerm(vc.second), oper, group_by ? nullptr : item->item_name.ptr(), distinct); - } - } - if (!group_by && item->item_name.ptr()) - field_alias2num[TabIDColAlias(tmp_table.n, alias ? alias : item->item_name.ptr())] = at.n; - return at.n; -} - -int Query::AddColumnForMysqlExpression(MysqlExpression *mysql_expression, const TabID &tmp_table, const char *alias, - const common::ColOperation oper, const bool distinct, - bool group_by /*= false*/) { - AttrID at, vc; - vc.n = VirtualColumnAlreadyExists(tmp_table, mysql_expression); - if (vc.n == common::NULL_VALUE_32) { - cq->CreateVirtualColumn(vc, tmp_table, mysql_expression, - (oper == common::ColOperation::DELAYED ? tmp_table : TabID(common::NULL_VALUE_32))); - tab_id2expression.insert(std::make_pair(tmp_table, std::make_pair(vc.n, mysql_expression))); - } else { - mysql_expression->RemoveUnusedVarID(); - int attr = GetAddColumnId(vc, tmp_table, oper, distinct); - if (attr != common::NULL_VALUE_32) { - if (group_by) // do not add column - not needed duplicate - return attr; - // vc.n = col_to_vc[attr]; - } else if (group_by && oper == common::ColOperation::GROUP_BY && - (attr = GetAddColumnId(vc, tmp_table, common::ColOperation::LISTING, distinct)) != - common::NULL_VALUE_32) { - // modify existing column - CQChangeAddColumnLIST2GROUP_BY(tmp_table, attr); - return attr; - } else if (group_by && oper == common::ColOperation::LISTING && - (attr = GetAddColumnId(vc, tmp_table, common::ColOperation::GROUP_BY, distinct)) != - common::NULL_VALUE_32) { - // don;t add unnecessary column to select list - return attr; - } - } - - // if (parametrized) - // cq->AddColumn(at, tmp_table, CQTerm(vc.n), DELAYED, group_by ? nullptr : - // alias, distinct); - // else - cq->AddColumn(at, tmp_table, CQTerm(vc.n), oper, group_by ? nullptr : alias, distinct); - if (!group_by && alias) - field_alias2num[TabIDColAlias(tmp_table.n, alias)] = at.n; - return at.n; -} - -bool Query::IsLocalColumn(Item *item, const TabID &tmp_table) { - DEBUG_ASSERT(IsFieldItem(item) || IsAggregationItem(item)); - AttrID col; - TabID tab; - if (!FieldUnmysterify(item, tab, col)) - return false; - return cq->ExistsInTempTable(tab, tmp_table); -} - -QueryRouteTo Query::Compile(CompiledQuery *compiled_query, SELECT_LEX *selects_list, SELECT_LEX *last_distinct, - TabID *res_tab, bool ignore_limit, Item *left_expr_for_subselect, - common::Operator *oper_for_subselect, bool ignore_minmax, bool for_subq_in_where) { - MEASURE_FET("Query::Compile(...)"); - // at this point all tables are in RCBase engine, so we can proceed with the - // query - - /*Item_func - | - --Item_int_func <- arguments are kept in an array accessible through arguments() - | - --Item_bool_func - | | - | ---Item_cond <- arguments are kept in a list accessible through argument_list() - | | | - | | ---Item_cond_and <- when negated OR of negated items is created - | | | - | | ---Item_cond_or <- when negated AND of negated items is created - | | | - | | ---Item_cond_xor - | | - | ---Item_equal <- arguments are kept in a list accessible through argument_list() - | | + const_item (accessible through get_const() ) - | | (multiple equality) - | | - | ---Item_func_not - | | (???) - | | - | ---Item func_isnull <- when negated IS NOT NULL is created - | - --Item_func_opt_neg <- arguments are kept in an array accessible through arguments(), if negated - | | this information is kept additionally (in a field named 'negated') - | | - | | - | ---Item_func_in - | | - | | - | ---Item_func_between - | - | - --Item_bool_func2 - | - | - ---Item_bool_rowready_func2 <-arguments are kept in an array accessible through arguments(), if negated - | an object of a corresponding class is created - | (e.q. ~Item_func_lt => Item_func_ge) - | - ----Item_func_eq - | - | - ----Item_func_ne - | - | - ----Item_func_ge - | - | - ----Item_func_le - | - | - ----Item_func_gt - | - | - ----Item_func_lt - | - | - ----Item_func_equal <- This is mystery so far - There are 3 equality functions: - Item_equal -> multiple equality (many fields and optional additional constant value) - Item_func_equal -> ??? - Item_func_eq -> pairwise equality - */ - - bool union_all = (last_distinct == nullptr); - TabID prev_result; - - SQL_I_List *global_order = nullptr; - int col_count = 0; - int64_t global_limit_value = -1; - int64_t global_offset_value = -1; - - // local copy of current cq, to be restored on exit - CompiledQuery *saved_cq = cq; - cq = compiled_query; - - if ((selects_list->join) && - (selects_list != selects_list->join->unit->global_parameters())) { // only in case of unions this is set - SetLimit(selects_list->join->unit->global_parameters(), 0, global_offset_value, (int64_t &)global_limit_value); - global_order = &(selects_list->join->unit->global_parameters()->order_list); - } - - for (SELECT_LEX *sl = selects_list; sl; sl = sl->next_select()) { - int64_t limit_value = -1; - int64_t offset_value = -1; - /* - Increase the identification of whether to create a JOIN object, - which is used to release the JOIN object later. - See #669 for the problems solved. - */ - bool ifNewJoinForTianmu = false; - if (!sl->join) { - sl->add_active_options(SELECT_NO_UNLOCK); - JOIN *join = new JOIN(sl->master_unit()->thd, sl); - - if (!join) { - sl->cleanup(0); - return QueryRouteTo::kToTianmu; - } - ifNewJoinForTianmu = true; - sl->set_join(join); - } - - if (QueryRouteTo::kToMySQL == JudgeErrors(sl)) - return QueryRouteTo::kToMySQL; - - SetLimit(sl, sl == selects_list ? 0 : sl->join->unit->global_parameters(), offset_value, limit_value); - List *fields = &sl->fields_list; - - Item *conds = (ifNewJoinForTianmu || !sl->join->where_cond) ? sl->where_cond() : sl->join->where_cond; - - ORDER *order = sl->order_list.first; - - // if (order) global_order = 0; //we want to zero global order (which - // seems to be always present) if we find a local order by clause - // The above is not necessary since global_order is set only in case of - // real UNIONs - - ORDER *group = sl->group_list.first; - Item *having = sl->having_cond(); - List *join_list = sl->join_list; - bool zero_result = sl->join->zero_result_cause != nullptr; - - // The exists subquery determines whether a value exists during the query optimization phase - // result is not set to zero only when a matching value is found in the query optimization phase - // When a field has an index, the optimization phase scans the table through the index - // The primary key implementation of the current column storage engine - // has a problem with the primary key index to scan the table for data - // Remove the following temporary practices after primary key indexing is complete - if (zero_result) { - if (Item::Type::SUBSELECT_ITEM == (conds->type())) { - zero_result = false; - } else { - Item_cond *item_cond = dynamic_cast(conds); - if (item_cond) { - List_iterator_fast li(*item_cond->argument_list()); - Item *item; - while ((item = li++)) { - if (item && Item::Type::SUBSELECT_ITEM == (item->type())) { - zero_result = false; - break; - } - } - } - } - } - - // When join_list has no elements and field has sp, tmp table is used and de-duplicated - // Use use_tmp_when_no_join when AddJoins - bool use_tmp_when_no_join = false; - if (!join_list->elements) { - List_iterator_fast li(*fields); - for (Item *item = li++; item; item = li++) { - if ((item->type() == Item::Type::FUNC_ITEM) && - (down_cast(item)->functype() == Item_func::Functype::FUNC_SP) && (!sl->is_distinct())) { - sl->add_active_options(SELECT_DISTINCT); - sl->join->select_distinct = TRUE; - use_tmp_when_no_join = true; - break; - } - } - } - - Item *field_for_subselect; - Item *cond_to_reinsert = nullptr; - List *list_to_reinsert = nullptr; - - TabID tmp_table; - try { - // partial optimization of LOJ conditions, JOIN::optimize(part=3) - // necessary due to already done basic transformation of conditions - // see comments in sql_select.cc:JOIN::optimize() - if (IsLOJ(join_list)) - sl->join->optimize(OptimizePhase::Finish_LOJ_Transform); - - if (left_expr_for_subselect) - if (!ClearSubselectTransformation(*oper_for_subselect, field_for_subselect, conds, having, cond_to_reinsert, - list_to_reinsert, left_expr_for_subselect)) - throw CompilationError(); - - if (having && !group) // we cannot handle the case of a having without a group by - throw CompilationError(); - - // handle table list - TABLE_LIST *tables = sl->leaf_tables ? sl->leaf_tables : (TABLE_LIST *)sl->table_list.first; - for (TABLE_LIST *table_ptr = tables; table_ptr; table_ptr = table_ptr->next_leaf) { - if (!table_ptr->is_view_or_derived()) { - if (!Engine::IsTianmuTable(table_ptr->table)) - throw CompilationError(); - std::string path = TablePath(table_ptr); - if (path2num.find(path) == path2num.end()) { - path2num[path] = NumOfTabs(); - AddTable(m_conn->GetTableByPath(path)); - TIANMU_LOG(LogCtl_Level::DEBUG, "add query table: %s", path.c_str()); - } - } - } - - // handle join & join cond - std::vector left_tables, right_tables; - bool first_table = true; - if (QueryRouteTo::kToMySQL == AddJoins(*join_list, tmp_table, left_tables, right_tables, - (res_tab != nullptr && res_tab->n != 0), first_table, for_subq_in_where, - use_tmp_when_no_join)) - throw CompilationError(); - - // handle fields - List field_list_for_subselect; - if (left_expr_for_subselect && field_for_subselect) { - field_list_for_subselect.push_back(field_for_subselect); - fields = &field_list_for_subselect; - } - bool aggr_used = false; - if (sl->has_sj_nests && group != nullptr) { - // handle semi-join fields (use on group by) - if (QueryRouteTo::kToMySQL == AddSemiJoinFiled(*fields, *join_list, tmp_table)) - throw CompilationError(); - } else { - // handle normal fields - if (QueryRouteTo::kToMySQL == - AddFields(*fields, tmp_table, TabID(), group != nullptr, col_count, ignore_minmax, aggr_used)) - throw CompilationError(); - if (QueryRouteTo::kToMySQL == AddGroupByFields(group, tmp_table, TabID())) - throw CompilationError(); - bool group_by_clause = group != nullptr || sl->join->select_distinct || aggr_used || sl->has_sj_nests; - if (QueryRouteTo::kToMySQL == AddOrderByFields(order, tmp_table, TabID(), group_by_clause)) - throw CompilationError(); - } - - // handle where cond - CondID cond_id; - if (QueryRouteTo::kToMySQL == BuildConditions(conds, cond_id, cq, tmp_table, CondType::WHERE_COND, zero_result)) - throw CompilationError(); - - cq->AddConds(tmp_table, cond_id, CondType::WHERE_COND); - - // handle having cond - cond_id = CondID(); - if (QueryRouteTo::kToMySQL == BuildConditions(having, cond_id, cq, tmp_table, CondType::HAVING_COND)) - throw CompilationError(); - - cq->AddConds(tmp_table, cond_id, CondType::HAVING_COND); - cq->ApplyConds(tmp_table); - - // handle group by & order by after semi-join - if (sl->has_sj_nests) { - if (group != nullptr) { - cq->Mode(tmp_table, TMParameter::TM_DISTINCT); - TabID new_tmp_table; - cq->TmpTable(new_tmp_table, tmp_table, false); - if (QueryRouteTo::kToMySQL == - AddFields(*fields, new_tmp_table, tmp_table, group != nullptr, col_count, ignore_minmax, aggr_used)) - throw CompilationError(); - if (QueryRouteTo::kToMySQL == AddGroupByFields(group, new_tmp_table, tmp_table)) - throw CompilationError(); - if (QueryRouteTo::kToMySQL == AddOrderByFields(order, new_tmp_table, tmp_table, - group != nullptr || sl->join->select_distinct || aggr_used)) - throw CompilationError(); - tmp_table = new_tmp_table; - } else { - cq->Mode(tmp_table, TMParameter::TM_DISTINCT); - } - } - } catch (...) { - // restore original values of class fields (necessary if this method is - // called recursively) - cq = saved_cq; - if (cond_to_reinsert && list_to_reinsert) - list_to_reinsert->push_back(cond_to_reinsert); - if (ifNewJoinForTianmu) - sl->cleanup(true); - return QueryRouteTo::kToMySQL; - } - - if (sl->join->select_distinct) - cq->Mode(tmp_table, TMParameter::TM_DISTINCT); - if (!ignore_limit && limit_value >= 0 && !sl->has_sj_nests) - cq->Mode(tmp_table, TMParameter::TM_TOP, offset_value, limit_value); - - if (sl == selects_list) { - prev_result = tmp_table; - if (global_order && !selects_list->next_select()) { // trivial union with one select and - // ext. order by - tmp_table = TabID(); - cq->Union(prev_result, prev_result, tmp_table, true); - } - } else - cq->Union(prev_result, prev_result, tmp_table, union_all); - if (sl == last_distinct) - union_all = true; - if (cond_to_reinsert && list_to_reinsert) - list_to_reinsert->push_back(cond_to_reinsert); - if (ifNewJoinForTianmu) - sl->cleanup(true); - } - - cq->BuildTableIDStepsMap(); - - if (QueryRouteTo::kToMySQL == AddGlobalOrderByFields(global_order, prev_result, col_count)) - return QueryRouteTo::kToMySQL; - - if (!ignore_limit && global_limit_value >= 0) - cq->Mode(prev_result, TMParameter::TM_TOP, global_offset_value, global_limit_value); - - if (res_tab != nullptr) - *res_tab = prev_result; - else - cq->Result(prev_result); - cq = saved_cq; - return QueryRouteTo::kToTianmu; -} - -JoinType Query::GetJoinTypeAndCheckExpr(uint outer_join, Item *on_expr) { - if (outer_join) - ASSERT(on_expr != 0, "on_expr shouldn't be null when outer_join != 0"); - - JoinType join_type; - - if ((outer_join & JOIN_TYPE_LEFT) && (outer_join & JOIN_TYPE_RIGHT)) - join_type = JoinType::JO_FULL; - else if (outer_join & JOIN_TYPE_LEFT) - join_type = JoinType::JO_LEFT; - else if (outer_join & JOIN_TYPE_RIGHT) - join_type = JoinType::JO_RIGHT; - else - join_type = JoinType::JO_INNER; - - return join_type; -} - -bool Query::IsLOJ(List *join) { - TABLE_LIST *join_ptr{nullptr}; - List_iterator li(*join); - while ((join_ptr = li++)) { - JoinType join_type = GetJoinTypeAndCheckExpr(join_ptr->outer_join, join_ptr->join_cond()); - if (join_ptr->join_cond() && (join_type == JoinType::JO_LEFT || join_type == JoinType::JO_RIGHT)) - return true; - } - return false; -} -} // namespace core -} // namespace Tianmu +/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +#include + +#include "common/mysql_gate.h" +#include "core/engine.h" +#include "core/mysql_expression.h" +#include "core/query.h" +#include "core/transaction.h" +#include "optimizer/compile/compilation_tools.h" +#include "optimizer/compile/compiled_query.h" + +namespace Tianmu { +namespace core { +QueryRouteTo TableUnmysterify(TABLE_LIST *tab, const char *&database_name, const char *&table_name, + const char *&table_alias, const char *&table_path) { + ASSERT_MYSQL_STRING(tab->table->s->db); + ASSERT_MYSQL_STRING(tab->table->s->table_name); + ASSERT_MYSQL_STRING(tab->table->s->path); + + database_name = tab->table->s->db.str; + if (tab->referencing_view) + table_name = tab->referencing_view->table_name; + else + table_name = tab->table->s->table_name.str; + table_alias = tab->alias; + table_path = tab->table->s->path.str; + + return QueryRouteTo::kToTianmu; +} + +QueryRouteTo JudgeErrors(SELECT_LEX *sl) { + if (!sl->join) { + return QueryRouteTo::kToMySQL; + } + + /* gone with mysql5.6 + if(sl->join && sl->join->procedure) { + my_message(ER_SYNTAX_ERROR, "Tianmu specific error: No PROCEDURE + syntax supported", MYF(0)); throw ReturnMeToMySQLWithError(); + } + */ + + if (sl->offset_limit) + if (sl->offset_limit->type() != Item::INT_ITEM /*|| sl->offset_limit->val_int()*/) { + my_message(ER_SYNTAX_ERROR, "Tianmu specific error: Only numerical OFFSET supported", MYF(0)); + throw ReturnMeToMySQLWithError(); + } + + if (sl->select_limit) + if (sl->select_limit->type() != Item::INT_ITEM) { + my_message(ER_SYNTAX_ERROR, "Tianmu specific error: Only numerical LIMIT supported", MYF(0)); + throw ReturnMeToMySQLWithError(); + } + if (sl->olap == ROLLUP_TYPE) { + /*my_message(ER_SYNTAX_ERROR, "Tianmu specific error: WITH ROLLUP not + supported", MYF(0)); throw ReturnMeToMySQLWithError();*/ + return QueryRouteTo::kToMySQL; + } + + return QueryRouteTo::kToTianmu; +} + +void SetLimit(SELECT_LEX *sl, SELECT_LEX *gsl, int64_t &offset_value, int64_t &limit_value) { + if (sl->select_limit && (!gsl || sl->select_limit != gsl->select_limit)) { + limit_value = sl->select_limit->val_int(); + if (limit_value == UINT_MAX) { /* this value seems to be sometimes + automatically set by MYSQL to UINT_MAX*/ + limit_value = -1; // no limit set + offset_value = -1; + }; + }; + + if (limit_value) + offset_value = 0; + + if (sl->offset_limit && (!gsl || sl->offset_limit != gsl->offset_limit)) + offset_value = sl->offset_limit->val_int(); +} + +// Used in Query::Compile() to break compilation in the middle and make cleanup +// before returning +class CompilationError {}; + +QueryRouteTo Query::FieldUnmysterify(Item *item, const char *&database_name, const char *&table_name, + const char *&table_alias, const char *&table_path, const TABLE *&table_ptr, + const char *&field_name, const char *&field_alias) { + table_alias = EMPTY_TABLE_CONST_INDICATOR; + database_name = nullptr; + table_name = nullptr; + table_path = nullptr; + table_ptr = nullptr; + field_name = nullptr; + field_alias = nullptr; + + item = UnRef(item); + + Item_field *ifield; + switch (static_cast(item->type())) { + case static_cast(Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM): + ifield = dynamic_cast(item)->OriginalItem(); + if (IsAggregationItem(ifield)) { + Item_sum *is = (Item_sum *)ifield; + if (is->get_arg_count() > 1) + return QueryRouteTo::kToMySQL; + Item *tmp_item = UnRef(is->get_arg(0)); + if (tmp_item->type() == Item::FIELD_ITEM) + ifield = (Item_field *)tmp_item; + else if (static_cast(tmp_item->type()) == + static_cast(Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM)) + ifield = dynamic_cast(tmp_item)->OriginalItem(); + else { + return QueryRouteTo::kToMySQL; + } + } + break; + case Item::FIELD_ITEM: // regular select + ifield = (Item_field *)item; + break; + + case Item::SUM_FUNC_ITEM: { // min(k), max(k), count(), avg(k), sum + Item_sum *is = (Item_sum *)item; + if (is->get_arg_count() > 1) { + return QueryRouteTo::kToMySQL; + } + Item *tmp_item = UnRef(is->get_arg(0)); + if (tmp_item->type() == Item::FIELD_ITEM) + ifield = (Item_field *)tmp_item; + else if (static_cast(tmp_item->type()) == + static_cast(Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM)) /* *CAUTION* comparision of + enumerators from different + enums */ + ifield = dynamic_cast(tmp_item)->OriginalItem(); + else + return QueryRouteTo::kToMySQL; + break; + } + case Item::FUNC_ITEM: // complex expressions + // if(WrapMysqlExpression(item, ¬_a_table_column) == + // WrapStatus::SUCCESS) + return QueryRouteTo::kToTianmu; + return QueryRouteTo::kToMySQL; + default: + // if(WrapMysqlExpression(item, ¬_a_table_column) == + // WrapStatus::SUCCESS) + return QueryRouteTo::kToTianmu; + return QueryRouteTo::kToMySQL; + }; + + /* + * By MW. Related to bug 1073. + * + * For views, 'table_alias' must be created as a concatenation + * of original view(s) name(s) and the table name + * - currently it's just the table name, which leads to ambiguity and errors + * when the same table is used in another place in the query. + * Note that there can be several nested views. + * + * To retrieve name(s) of the view(s) from which the current 'ifield' comes + * you may try the following expression: + * + * ifield->cached_table->table_list->belong_to_view->alias or + * ...->table_name or + * ifield->cached_table->table_list->referencing_view->alias or + * ...->table_name + * + * Here, 'belong_to_view' and 'referencing_view' are different + * if there are nested views. + * + * Probably ifield->cached_table could be also used to find + * 'database_name', 'table_name' and 'table_path' + * in a simpler way than currently. + */ + + Field *f = ifield->result_field; + + ASSERT_MYSQL_STRING(f->table->s->db); + ASSERT_MYSQL_STRING(f->table->s->table_name); + ASSERT_MYSQL_STRING(f->table->s->path); + + table_ptr = f->table; + table_alias = ifield->table_name; + database_name = f->table->s->db.str; + table_name = GetTableName(ifield); + table_path = f->table->s->path.str; + field_name = f->field_name; + field_alias = ifield->item_name.ptr(); + + return QueryRouteTo::kToTianmu; +} + +bool Query::FieldUnmysterify(Item *item, TabID &tab, AttrID &col) { + Item_field *ifield; + if (item->type() == Item_tianmufield::get_tianmuitem_type()) { + ifield = dynamic_cast(item)->OriginalItem(); + if (IsAggregationItem(ifield)) { + Item_sum *is = (Item_sum *)ifield; + if (is->get_arg_count() > 1) + return false; + Item *tmp_item = UnRef(is->get_arg(0)); + if (tmp_item->type() == Item::FIELD_ITEM) + ifield = (Item_field *)tmp_item; + else if (tmp_item->type() == Item_tianmufield::get_tianmuitem_type()) + ifield = dynamic_cast(tmp_item)->OriginalItem(); + else if (tmp_item->type() == Item::FUNC_ITEM) { + Item_tianmufield *tianmui = dynamic_cast(item); + tab.n = tianmui->varID[0].tab; + col.n = tianmui->varID[0].tab; + return true; + } else + return false; + } + } else if (item->type() == Item::SUM_FUNC_ITEM) { // min(k), max(k), count(), avg(k), sum(), + // group_concat() + Item_sum *is = (Item_sum *)item; + if (is->get_arg_count() > 1) { + int dir = 0; + if (((Item_sum *)item)->sum_func() == Item_sum::GROUP_CONCAT_FUNC) { + dir = ((Item_func_group_concat *)item)->direction(); + } + + // only pass 1 group 1 order by case, which is the only case Tianmu + // supported + if (dir == 0 || is->get_arg_count() != 2) + return false; + } + Item *tmp_item = UnRef(is->get_arg(0)); + if (tmp_item->type() == Item::FIELD_ITEM) + ifield = (Item_field *)tmp_item; + else if (tmp_item->type() == Item_tianmufield::get_tianmuitem_type()) + ifield = dynamic_cast(tmp_item)->OriginalItem(); + else + return false; + } else if (item->type() == Item::FIELD_ITEM) + ifield = (Item_field *)item; + else + return false; + + if (!ifield->table_name) { + return false; + // union results have no name, but refer to the temp table + // if(field_alias2num.find(TabIDColAlias((*table_alias2index)[ifield->table_name], + // ifield->item_name.ptr())) == field_alias2num.end()) + // return false; + // col.n = + // field_alias2num[TabIDColAlias((*table_alias2index)[ifield->table_name], + // ifield->item_name.ptr())]; + // tab.n = common::NULL_VALUE_32; + // return true; + } + const char *table_name = GetTableName(ifield); + std::string ext_alias = + std::string(table_name ? table_name : "") + std::string(":") + std::string(ifield->table_name); + auto it = table_alias2index_ptr.lower_bound(ext_alias); + auto it_end = table_alias2index_ptr.upper_bound(ext_alias); + if (it == table_alias2index_ptr.end()) + return false; + for (; it != it_end; it++) { + TABLE *mysql_table = it->second.second; + tab = TabID(it->second.first); + if (ifield->field->table != mysql_table) + continue; + + // FIXME: is this correct? + if (!mysql_table->pos_in_table_list->is_view_or_derived()) { + // Physical table in FROM - TianmuTable + int field_num; + for (field_num = 0; mysql_table->field[field_num]; field_num++) + if (mysql_table->field[field_num]->field_name == ifield->result_field->field_name) + break; + if (!mysql_table->field[field_num]) + continue; + col = AttrID(field_num); + return true; + } else { + // subselect in FROM - TempTable + if (field_alias2num.find(TabIDColAlias(tab.n, ifield->result_field->field_name)) == field_alias2num.end()) + continue; + col.n = field_alias2num[TabIDColAlias(tab.n, ifield->result_field->field_name)]; + return true; + } + } + return false; +} + +QueryRouteTo Query::AddJoins(List &join, TabID &tmp_table, std::vector &left_tables, + std::vector &right_tables, bool in_subquery, bool &first_table /*= true*/, + bool for_subq_in_where /*false*/, bool use_tmp_when_no_join /*false*/) { + if (!join.elements) { + // Use use_tmp_when_no_join when AddJoins + // The caller decides that the scenario is When join_list has no elements and field has sp + if (use_tmp_when_no_join) { + // The index of the subscript [-1] indicates + // that the first physical table is used as the temporary table. + // The subscript value operation in + // TMP_TABLE is required in combination with Query::Preexecute. + TabID tab(-1); + left_tables.push_back(tab); + cq->TmpTable(tmp_table, tab, TableSubType::NORMAL, for_subq_in_where); + return QueryRouteTo::kToTianmu; + } + + // no tables in table list in this select + return QueryRouteTo::kToMySQL; + } + + // on first call first_table = true. It indicates if it is the first table to + // be added is_left is true iff it is nested left join which needs to be + // flatten (all tables regardless of their join type need to be left-joined) + TABLE_LIST *join_ptr; + List_iterator li(join); + std::vector reversed; + + // if the table list was empty altogether, we wouldn't even enter + // Compilation(...) it must be sth. like `select 1 from t1 union select 2` and + // we are in the second select in the union + + reversed.reserve(join.elements); + while ((join_ptr = li++) != nullptr) reversed.push_back(join_ptr); + size_t size = reversed.size(); + for (unsigned int i = 0; i < size; i++) { + join_ptr = reversed[size - i - 1]; + if (join_ptr->nested_join) { + std::vector local_left, local_right; + if (QueryRouteTo::kToMySQL == AddJoins(join_ptr->nested_join->join_list, tmp_table, local_left, local_right, + in_subquery, first_table, for_subq_in_where)) + return QueryRouteTo::kToMySQL; + JoinType join_type = GetJoinTypeAndCheckExpr(join_ptr->outer_join, join_ptr->join_cond()); + CondID cond_id; + if (QueryRouteTo::kToMySQL == BuildCondsIfPossible(join_ptr->join_cond(), cond_id, tmp_table, join_type)) + return QueryRouteTo::kToMySQL; + left_tables.insert(left_tables.end(), right_tables.begin(), right_tables.end()); + local_left.insert(local_left.end(), local_right.begin(), local_right.end()); + if (join_ptr->outer_join) + right_tables = local_left; + else + left_tables.insert(left_tables.end(), local_left.begin(), local_left.end()); + if (join_ptr->join_cond() && join_ptr->outer_join) { + cq->LeftJoinOn(tmp_table, left_tables, right_tables, cond_id); + left_tables.insert(left_tables.end(), right_tables.begin(), right_tables.end()); + right_tables.clear(); + } else if (join_ptr->join_cond() && !join_ptr->outer_join) + cq->InnerJoinOn(tmp_table, left_tables, right_tables, cond_id); + } else { + DEBUG_ASSERT(join_ptr->table && "We require that the table is defined if it is not a nested join"); + const char *database_name = 0; + const char *table_name = 0; + const char *table_alias = 0; + const char *table_path = 0; + TabID tab(0); + if (join_ptr->is_view_or_derived()) { + if (QueryRouteTo::kToMySQL == + Compile(cq, join_ptr->derived_unit()->first_select(), join_ptr->derived_unit()->union_distinct, &tab)) + return QueryRouteTo::kToMySQL; + table_alias = join_ptr->alias; + } else { + if (QueryRouteTo::kToMySQL == TableUnmysterify(join_ptr, database_name, table_name, table_alias, table_path)) + return QueryRouteTo::kToMySQL; + int tab_num = path2num[table_path]; // number of a table on a list in + // `this` QUERY object + int id = t[tab_num]->GetID(); + cq->TableAlias(tab, TabID(tab_num), table_name, id); + } + std::string ext_alias = std::string(table_name ? table_name : "") + std::string(":") + std::string(table_alias); + table_alias2index_ptr.insert(std::make_pair(ext_alias, std::make_pair(tab.n, join_ptr->table))); + if (first_table) { + left_tables.push_back(tab); + DEBUG_ASSERT(!join_ptr->join_cond() && + "It is not possible to join the first table with the LEFT " + "direction"); + cq->TmpTable(tmp_table, tab, TableSubType::NORMAL, for_subq_in_where); + first_table = false; + } else { + cq->Join(tmp_table, tab); + JoinType join_type = GetJoinTypeAndCheckExpr(join_ptr->outer_join, join_ptr->join_cond()); + // if(join_type == JoinType::JO_LEFT && join_ptr->join_cond() && + // dynamic_cast(join_ptr->join_cond())) + // return QueryRouteTo::kToMySQL; + CondID cond_id; + if (QueryRouteTo::kToMySQL == BuildCondsIfPossible(join_ptr->join_cond(), cond_id, tmp_table, join_type)) + return QueryRouteTo::kToMySQL; + if (join_ptr->join_cond() && join_ptr->outer_join) { + right_tables.push_back(tab); + cq->LeftJoinOn(tmp_table, left_tables, right_tables, cond_id); + left_tables.push_back(tab); + right_tables.clear(); + } else if (join_ptr->join_cond() && !join_ptr->outer_join) { + right_tables.push_back(tab); + cq->InnerJoinOn(tmp_table, left_tables, right_tables, cond_id); + left_tables.push_back(tab); + right_tables.clear(); + } else + left_tables.push_back(tab); + // if(join_ptr->on_expr) + // cq->SetLOJOuterDim(tmp_table, tab, i); + } + } + } + return QueryRouteTo::kToTianmu; +} + +QueryRouteTo Query::AddFields(List &fields, TabID const &tmp_table, TabID const &base_table, + bool const group_by_clause, int &num_of_added_fields, bool ignore_minmax, + bool &aggregation_used) { + List_iterator_fast li(fields); + Item *item; + int added = 0; + item = li++; + while (item) { + WrapStatus ws; + common::ColOperation oper; + bool distinct; + if (QueryRouteTo::kToMySQL == OperationUnmysterify(item, oper, distinct, group_by_clause)) + return QueryRouteTo::kToMySQL; + + if (IsAggregationItem(item)) + aggregation_used = true; + + // in case of transformed subquery sometimes we need to revert back + // transformation to MIN/MAX + if (ignore_minmax && (oper == common::ColOperation::MIN || oper == common::ColOperation::MAX)) + oper = common::ColOperation::LISTING; + + // select PHYSICAL COLUMN or AGGREGATION over PHYSICAL COLUMN + if ((IsFieldItem(item) || IsAggregationOverFieldItem(item)) && + (IsLocalColumn(item, tmp_table) || (!base_table.IsNullID() && IsLocalColumn(item, base_table)))) + AddColumnForPhysColumn(item, tmp_table, base_table, oper, distinct, false, item->item_name.ptr()); + // REF to FIELD_ITEM + else if (item->type() == Item::REF_ITEM) { + item = UnRef(item); + continue; + } + // if ((UnRef(item)->type() == Item_tianmufield::enumTIANMUFiledItem::TIANMUFIELD_ITEM || + // UnRef(item)->type() == Item_tianmufield::FIELD_ITEM) && + // IsLocalColumn(UnRef(item), tmp_table)) + // AddColumnForPhysColumn(UnRef(item), tmp_table, oper, distinct, false, false); + // else { + // // + // } + else if (IsAggregationItem(item) && (((Item_sum *)item)->get_arg(0))->type() == Item::REF_ITEM && + (UnRef(((Item_sum *)item)->get_arg(0))->type() == Item_tianmufield::get_tianmuitem_type() || + (UnRef(((Item_sum *)item)->get_arg(0))->type() == Item_tianmufield::FIELD_ITEM)) && + IsLocalColumn(UnRef(((Item_sum *)item)->get_arg(0)), tmp_table)) + // AGGR on REF to FIELD_ITEM + AddColumnForPhysColumn(UnRef(((Item_sum *)item)->get_arg(0)), tmp_table, TabID(), oper, distinct, false, + item->item_name.ptr()); + else if (IsAggregationItem(item)) { + // select AGGREGATION over EXPRESSION + Item_sum *item_sum = (Item_sum *)item; + if (item_sum->get_arg_count() > 1 || HasAggregation(item_sum->get_arg(0))) + return QueryRouteTo::kToMySQL; + if (IsCountStar(item_sum)) { // count(*) doesn't need any virtual column + AttrID at; + cq->AddColumn(at, tmp_table, CQTerm(), oper, item_sum->item_name.ptr(), false); + field_alias2num[TabIDColAlias(tmp_table.n, item_sum->item_name.ptr())] = at.n; + } else { + MysqlExpression *expr; + ws = WrapMysqlExpression(item_sum->get_arg(0), tmp_table, expr, false, false); + if (ws == WrapStatus::FAILURE) + return QueryRouteTo::kToMySQL; + AddColumnForMysqlExpression(expr, tmp_table, + ignore_minmax ? item_sum->get_arg(0)->item_name.ptr() : item_sum->item_name.ptr(), + oper, distinct); + } + } else if (item->type() == Item::SUBSELECT_ITEM) { + CQTerm term; + AttrID at; + if (Item2CQTerm(item, term, tmp_table, + /*group_by_clause ? HAVING_FILTER :*/ CondType::WHERE_COND) == QueryRouteTo::kToMySQL) + return QueryRouteTo::kToMySQL; + cq->AddColumn(at, tmp_table, term, common::ColOperation::LISTING, item->item_name.ptr(), distinct); + field_alias2num[TabIDColAlias(tmp_table.n, item->item_name.ptr())] = at.n; + } else { + // select EXPRESSION + if (HasAggregation(item)) { + oper = common::ColOperation::DELAYED; + aggregation_used = true; + } + MysqlExpression *expr(nullptr); + ws = WrapMysqlExpression(item, tmp_table, expr, false, oper == common::ColOperation::DELAYED); + if (ws == WrapStatus::FAILURE) + return QueryRouteTo::kToMySQL; + if (!item->item_name.ptr()) { + Item_func_conv_charset *item_conv = dynamic_cast(item); + if (item_conv) { + Item **ifunc_args = item_conv->arguments(); + AddColumnForMysqlExpression(expr, tmp_table, ifunc_args[0]->item_name.ptr(), oper, distinct); + } else { + AddColumnForMysqlExpression(expr, tmp_table, item->item_name.ptr(), oper, distinct); + } + } else + AddColumnForMysqlExpression(expr, tmp_table, item->item_name.ptr(), oper, distinct); + } + added++; + item = li++; + } + num_of_added_fields = added; + return QueryRouteTo::kToTianmu; +} + +// todo(dfx): handle more query scenarios +QueryRouteTo Query::AddSemiJoinFiled(List &fields, List &join, const TabID &tmp_table) { + List_iterator_fast field_li(fields); + Item *item; + item = field_li++; + while (item) { + WrapStatus ws; + common::ColOperation oper; + bool distinct; + if (QueryRouteTo::kToMySQL == OperationUnmysterify(item, oper, distinct, 0)) + return QueryRouteTo::kToMySQL; + if (!IsFieldItem(item)) { + item = field_li++; + continue; + } + AddColumnForPhysColumn(item, tmp_table, TabID(), oper, distinct, false, item->item_name.ptr()); + item = field_li++; + } + + TABLE_LIST *join_ptr; + List_iterator li(join); + std::vector reversed; + while ((join_ptr = li++) != nullptr) { + reversed.push_back(join_ptr); + } + size_t size = reversed.size(); + for (unsigned int i = 0; i < size; i++) { + join_ptr = reversed[size - i - 1]; + if (join_ptr->nested_join) { + List_iterator_fast outer_field_li(join_ptr->nested_join->sj_outer_exprs); + Item *outer_item; + outer_item = outer_field_li++; + while (outer_item) { + WrapStatus ws; + common::ColOperation oper; + bool distinct; + if (QueryRouteTo::kToMySQL == OperationUnmysterify(outer_item, oper, distinct, 0)) + return QueryRouteTo::kToMySQL; + if (!IsFieldItem(outer_item)) { + outer_item = outer_field_li++; + continue; + } + AddColumnForPhysColumn(outer_item, tmp_table, TabID(), oper, distinct, false, outer_item->item_name.ptr()); + outer_item = outer_field_li++; + } + } + } + return QueryRouteTo::kToTianmu; +} + +QueryRouteTo Query::AddGroupByFields(ORDER *group_by, const TabID &tmp_table, const TabID &base_table) { + for (; group_by; group_by = group_by->next) { + if (group_by->direction != ORDER::ORDER_ASC) { + my_message(ER_SYNTAX_ERROR, + "Tianmu specific error: Using DESC after GROUP BY clause not " + "allowed. Use " + "ORDER BY to order the result", + MYF(0)); + throw ReturnMeToMySQLWithError(); + } + + Item *item = *(group_by->item); + item = UnRef(item); + // group by PHYSICAL COLUMN + if ((IsFieldItem(item) || (IsAggregationItem(item) && IsFieldItem(((Item_sum *)item)->get_arg(0)))) && + (IsLocalColumn(item, tmp_table) || (!base_table.IsNullID() && IsLocalColumn(item, base_table)))) { + AddColumnForPhysColumn(item, tmp_table, base_table, common::ColOperation::GROUP_BY, false, true); + } else if (item->type() == Item::SUBSELECT_ITEM) { + CQTerm term; + AttrID at; + if (Item2CQTerm(item, term, tmp_table, CondType::WHERE_COND) == QueryRouteTo::kToMySQL) + return QueryRouteTo::kToMySQL; + cq->AddColumn(at, tmp_table, term, common::ColOperation::GROUP_BY, 0); + // field_alias2num[TabIDColAlias(tmp_table.n, + // item->item_name.ptr())] = + // at.n; + } else { // group by COMPLEX EXPRESSION + MysqlExpression *expr = 0; + if (WrapStatus::FAILURE == WrapMysqlExpression(item, tmp_table, expr, true, true)) + return QueryRouteTo::kToMySQL; + AddColumnForMysqlExpression(expr, tmp_table, item->item_name.ptr(), common::ColOperation::GROUP_BY, false, true); + } + } + return QueryRouteTo::kToTianmu; +} + +QueryRouteTo Query::AddOrderByFields(ORDER *order_by, TabID const &tmp_table, TabID const &base_table, + int const group_by_clause) { + for (; order_by; order_by = order_by->next) { + std::pair vc; + Item *item = *(order_by->item); + CQTerm my_term; + QueryRouteTo result{QueryRouteTo::kToMySQL}; + // at first we need to check if we don't have non-deterministic expression + // (e.g., rand()) in such case we should order by output column in TempTable + if (!IsFieldItem(item) && !IsAggregationItem(item) && !IsDeterministic(item) && + item->type() != Item::SUBSELECT_ITEM) { + MysqlExpression *expr = nullptr; + WrapStatus ws = WrapMysqlExpression(item, tmp_table, expr, false, false); + if (ws == WrapStatus::FAILURE) + return QueryRouteTo::kToMySQL; + DEBUG_ASSERT(!expr->IsDeterministic()); + int col_num = AddColumnForMysqlExpression(expr, tmp_table, nullptr, common::ColOperation::LISTING, false, true); + vc = VirtualColumnAlreadyExists(tmp_table, tmp_table, AttrID(-col_num - 1)); + if (vc.first == common::NULL_VALUE_32) { + vc.first = tmp_table.n; + cq->CreateVirtualColumn(vc.second, tmp_table, tmp_table, AttrID(col_num)); + phys2virt.insert(std::make_pair(std::make_pair(tmp_table.n, -col_num - 1), vc)); + } + cq->Add_Order(tmp_table, AttrID(vc.second), (order_by->direction != ORDER::ORDER_ASC)); + continue; + } + if (group_by_clause) { + if (item->type() == Item::FUNC_ITEM) { + MysqlExpression *expr = nullptr; + bool delayed = false; + if (HasAggregation(item)) { + delayed = true; + } + + WrapStatus ws = WrapMysqlExpression(item, tmp_table, expr, false, delayed); + if (ws == WrapStatus::FAILURE) + return QueryRouteTo::kToMySQL; + DEBUG_ASSERT(expr->IsDeterministic()); + int col_num = AddColumnForMysqlExpression( + expr, tmp_table, nullptr, delayed ? common::ColOperation::DELAYED : common::ColOperation::LISTING, false, + true); + vc = VirtualColumnAlreadyExists(tmp_table, tmp_table, AttrID(-col_num - 1)); + if (vc.first == common::NULL_VALUE_32) { + vc.first = tmp_table.n; + cq->CreateVirtualColumn(vc.second, tmp_table, tmp_table, AttrID(col_num)); + phys2virt.insert(std::make_pair(std::make_pair(tmp_table.n, -col_num - 1), vc)); + } + cq->Add_Order(tmp_table, AttrID(vc.second), (order_by->direction != ORDER::ORDER_ASC)); + continue; + // we can reuse transformation done in case of HAVING + // result = Item2CQTerm(item, my_term, tmp_table, CondType::HAVING_COND); + } else { + AttrID at; + result = Item2CQTerm(item, my_term, tmp_table, CondType::HAVING_COND, false, nullptr, nullptr, base_table); + if (item->type() == Item::SUBSELECT_ITEM) { + // create a materialized column with subsel results for the ordering + cq->AddColumn(at, tmp_table, my_term, common::ColOperation::DELAYED, nullptr, false); + vc = VirtualColumnAlreadyExists(tmp_table, tmp_table, at); + if (vc.first == common::NULL_VALUE_32) { + vc.first = tmp_table.n; + cq->CreateVirtualColumn(vc.second, tmp_table, tmp_table, at); + phys2virt.insert(std::make_pair(std::pair(tmp_table.n, at.n), vc)); + } + } else // a naked column + vc.second = my_term.vc_id; + // cq->Add_Order(tmp_table, AttrID(vc.second), !(order_by->asc)); + } + + } else { + result = Item2CQTerm(item, my_term, tmp_table, CondType::WHERE_COND); + vc.second = my_term.vc_id; + } + if (result != QueryRouteTo::kToTianmu) + return QueryRouteTo::kToMySQL; + cq->Add_Order(tmp_table, AttrID(vc.second), order_by->direction != ORDER::ORDER_ASC); + } + return QueryRouteTo::kToTianmu; +} + +QueryRouteTo Query::AddGlobalOrderByFields(SQL_I_List *global_order, const TabID &tmp_table, int max_col) { + if (!global_order) + return QueryRouteTo::kToTianmu; + + ORDER *order_by; + for (uint i = 0; i < global_order->elements; i++) { + order_by = (i == 0 ? (ORDER *)(global_order->first) : order_by->next); + // the way to traverse 'global_order' list maybe is not very orthodox, but + // it works + + if (order_by == nullptr) + return QueryRouteTo::kToMySQL; + + int col_num = common::NULL_VALUE_32; + if ((*(order_by->item))->type() == Item::INT_ITEM) { + col_num = int((*(order_by->item))->val_int()); + if (col_num < 1 || col_num > max_col) + return QueryRouteTo::kToMySQL; + col_num--; + col_num = -col_num - 1; // make it negative as are columns in TempTable + } else { + Item *item = *(order_by->item); + if (!item->item_name.ptr()) + return QueryRouteTo::kToMySQL; + bool found = false; + for (auto &it : field_alias2num) { + if (tmp_table.n == it.first.first && strcasecmp(it.first.second.c_str(), item->item_name.ptr()) == 0) { + col_num = it.second; + found = true; + break; + } + } + if (!found) + return QueryRouteTo::kToMySQL; + } + int attr; + cq->CreateVirtualColumn(attr, tmp_table, tmp_table, AttrID(col_num)); + phys2virt.insert(std::make_pair(std::make_pair(tmp_table.n, col_num), std::make_pair(tmp_table.n, attr))); + cq->Add_Order(tmp_table, AttrID(attr), order_by->direction != ORDER::ORDER_ASC); + } + + return QueryRouteTo::kToTianmu; +} + +Query::WrapStatus Query::WrapMysqlExpression(Item *item, const TabID &tmp_table, MysqlExpression *&expr, bool in_where, + bool aggr_used) { + // Check if the expression doesn't contain any strange items that we don't + // want to see. By the way, collect references to all Item_field objects. + std::set ifields; + MysqlExpression::Item2VarID item2varid; + if (!MysqlExpression::SanityAggregationCheck(item, ifields)) + return WrapStatus::FAILURE; + + // this large "if" can be removed to use common code, but many small "ifs" + // must be created then + if (in_where) { + // create a map: [Item_field pointer] -> VarID + for (auto &it : ifields) { + if (IsAggregationItem(it)) { + // a few checkings for aggregations + Item_sum *aggregation = (Item_sum *)it; + if (aggregation->get_arg_count() > 1) + return WrapStatus::FAILURE; + if (IsCountStar(aggregation)) // count(*) doesn't need any virtual column + return WrapStatus::FAILURE; + } + AttrID col, at; + TabID tab; + // find [tab] and [col] which identify column in TIANMU + if (!FieldUnmysterify(it, tab, col)) + return WrapStatus::FAILURE; + if (!cq->ExistsInTempTable(tab, tmp_table)) { + bool is_group_by; + TabID params_table = cq->FindSourceOfParameter(tab, tmp_table, is_group_by); + common::ColOperation oper; + bool distinct; + if (QueryRouteTo::kToMySQL == OperationUnmysterify(it, oper, distinct, true)) + return WrapStatus::FAILURE; + if (is_group_by && !IsParameterFromWhere(params_table)) { + col.n = AddColumnForPhysColumn(it, params_table, TabID(), oper, distinct, true); + item2varid[it] = VarID(params_table.n, col.n); + } else + item2varid[it] = VarID(tab.n, col.n); + } else { + // aggregation in WHERE not possible unless it is a parameter + DEBUG_ASSERT(!IsAggregationItem(it)); + item2varid[it] = VarID(tab.n, col.n); + } + } + } else { // !in_where + WrapStatus ws; + AttrID at, vc; + for (auto &it : ifields) { + if (IsAggregationItem(it)) { + Item_sum *aggregation = (Item_sum *)it; + if (aggregation->get_arg_count() > 1) + return WrapStatus::FAILURE; + + if (IsCountStar(aggregation)) { // count(*) doesn't need any virtual column + at.n = GetAddColumnId(AttrID(common::NULL_VALUE_32), tmp_table, common::ColOperation::COUNT, false); + if (at.n == common::NULL_VALUE_32) // doesn't exist yet + cq->AddColumn(at, tmp_table, CQTerm(), common::ColOperation::COUNT, nullptr, false); + } else { + common::ColOperation oper; + bool distinct; + if (QueryRouteTo::kToMySQL == OperationUnmysterify(aggregation, oper, distinct, true)) + return WrapStatus::FAILURE; + AttrID col; + TabID tab; + if (IsFieldItem(aggregation->get_arg(0)) && FieldUnmysterify(aggregation, tab, col) && + cq->ExistsInTempTable(tab, tmp_table)) { + // PHYSICAL COLUMN + at.n = AddColumnForPhysColumn(aggregation->get_arg(0), tmp_table, TabID(), oper, distinct, true); + } else { + // EXPRESSION + ws = WrapMysqlExpression(aggregation->get_arg(0), tmp_table, expr, in_where, false); + if (ws == WrapStatus::FAILURE) + return ws; + at.n = AddColumnForMysqlExpression(expr, tmp_table, aggregation->item_name.ptr(), oper, distinct, true); + } + } + item2varid[it] = VarID(tmp_table.n, at.n); + } else if (IsFieldItem(it)) { + AttrID col; + TabID tab; + if (!FieldUnmysterify(it, tab, col)) + return WrapStatus::FAILURE; + if (!cq->ExistsInTempTable(tab, tmp_table)) { + bool is_group_by; + TabID params_table = cq->FindSourceOfParameter(tab, tmp_table, is_group_by); + common::ColOperation oper; + bool distinct; + if (QueryRouteTo::kToMySQL == OperationUnmysterify(it, oper, distinct, true)) + return WrapStatus::FAILURE; + if (is_group_by && !IsParameterFromWhere(params_table)) { + col.n = AddColumnForPhysColumn(it, params_table, TabID(), oper, distinct, true); + item2varid[it] = VarID(params_table.n, col.n); + } else + item2varid[it] = VarID(tab.n, col.n); + } else if (aggr_used) { + common::ColOperation oper; + bool distinct; + if (QueryRouteTo::kToMySQL == OperationUnmysterify(it, oper, distinct, true)) + return WrapStatus::FAILURE; + at.n = AddColumnForPhysColumn(it, tmp_table, TabID(), oper, distinct, true); + item2varid[it] = VarID(tmp_table.n, at.n); + } else { + item2varid[it] = VarID(tab.n, col.n); + } + } else + DEBUG_ASSERT(0); // unknown item type? + } + } + gc_expressions.push_back(expr = new MysqlExpression(item, item2varid)); + return WrapStatus::SUCCESS; +} + +int Query::AddColumnForPhysColumn(Item *item, const TabID &tmp_table, TabID const &base_table, + const common::ColOperation oper, const bool distinct, bool group_by, + const char *alias) { + std::pair vc; + AttrID col, at; + TabID tab; + if (!FieldUnmysterify(item, tab, col)) + return common::NULL_VALUE_32; + if (tab.n == common::NULL_VALUE_32) + tab = tmp_table; // table name not contained in item - must be the result + // temp_table + + if (base_table.IsNullID()) { + DEBUG_ASSERT(cq->ExistsInTempTable(tab, tmp_table)); + if (item->type() == Item_tianmufield::get_tianmuitem_type() && + IsAggregationItem(dynamic_cast(item)->OriginalItem())) { + return ((Item_tianmufield *)item)->varID[0].col; + } + vc = VirtualColumnAlreadyExists(tmp_table, tab, col); + if (vc.first == common::NULL_VALUE_32) { + vc.first = tmp_table.n; + cq->CreateVirtualColumn(vc.second, tmp_table, tab, col); + phys2virt.insert(std::make_pair(std::make_pair(tab.n, col.n), vc)); + } else { + int attr = GetAddColumnId(AttrID(vc.second), tmp_table, oper, distinct); + if (attr != common::NULL_VALUE_32) { + if (group_by) // do not add column - not needed duplicate + return attr; + // vc.n = col_to_vc[attr]; + } else if (group_by && oper == common::ColOperation::GROUP_BY && + (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::LISTING, distinct)) != + common::NULL_VALUE_32) { + // modify existing column + CQChangeAddColumnLIST2GROUP_BY(tmp_table, attr); + return attr; + } else if (group_by && oper == common::ColOperation::LISTING && + (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::GROUP_BY, distinct)) != + common::NULL_VALUE_32) { + // don;t add unnecessary column to select list + return attr; + } + } + } else { + std::pair phys_vc = VirtualColumnAlreadyExists(base_table, tab, col); + if (phys_vc.first == common::NULL_VALUE_32) { + return common::NULL_VALUE_32; + } + vc = VirtualColumnAlreadyExists(tmp_table, TabID(phys_vc.first), AttrID(phys_vc.first)); + if (vc.first == common::NULL_VALUE_32) { + vc.first = tmp_table.n; + int at_id = field_alias2num[TabIDColAlias(base_table.n, item->item_name.ptr())]; + cq->CreateVirtualColumn(vc.second, tmp_table, TabID(phys_vc.first), AttrID(at_id)); + phys2virt.insert(std::make_pair(std::make_pair(phys_vc.first, at_id), vc)); + } else { + int attr = GetAddColumnId(AttrID(vc.second), tmp_table, oper, distinct); + if (attr != common::NULL_VALUE_32) { + if (group_by) // do not add column - not needed duplicate + return attr; + } else if (group_by && oper == common::ColOperation::GROUP_BY && + (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::LISTING, distinct)) != + common::NULL_VALUE_32) { + CQChangeAddColumnLIST2GROUP_BY(tmp_table, attr); + return attr; + } else if (group_by && oper == common::ColOperation::LISTING && + (attr = GetAddColumnId(AttrID(vc.second), tmp_table, common::ColOperation::GROUP_BY, distinct)) != + common::NULL_VALUE_32) { + return attr; + } + } + } + + if (!item->item_name.ptr() && item->type() == Item::SUM_FUNC_ITEM) { + cq->AddColumn(at, tmp_table, CQTerm(vc.second), oper, + group_by ? nullptr : ((Item_field *)(((Item_sum *)item)->get_arg(0)))->item_name.ptr(), distinct); + } else { + if (item->type() == Item::SUM_FUNC_ITEM && ((Item_sum *)item)->sum_func() == Item_sum::GROUP_CONCAT_FUNC) { + // pass the seprator to construct the special instruction + char *ptr = ((Item_func_group_concat *)item)->get_separator()->c_ptr(); + SpecialInstruction si; + si.separator.assign(ptr, std::strlen(ptr)); + si.order = ((Item_func_group_concat *)item)->direction(); + cq->AddColumn(at, tmp_table, CQTerm(vc.second), oper, group_by ? nullptr : item->item_name.ptr(), distinct, &si); + } else { + cq->AddColumn(at, tmp_table, CQTerm(vc.second), oper, group_by ? nullptr : item->item_name.ptr(), distinct); + } + } + if (!group_by && item->item_name.ptr()) + field_alias2num[TabIDColAlias(tmp_table.n, alias ? alias : item->item_name.ptr())] = at.n; + return at.n; +} + +int Query::AddColumnForMysqlExpression(MysqlExpression *mysql_expression, const TabID &tmp_table, const char *alias, + const common::ColOperation oper, const bool distinct, + bool group_by /*= false*/) { + AttrID at, vc; + vc.n = VirtualColumnAlreadyExists(tmp_table, mysql_expression); + if (vc.n == common::NULL_VALUE_32) { + cq->CreateVirtualColumn(vc, tmp_table, mysql_expression, + (oper == common::ColOperation::DELAYED ? tmp_table : TabID(common::NULL_VALUE_32))); + tab_id2expression.insert(std::make_pair(tmp_table, std::make_pair(vc.n, mysql_expression))); + } else { + mysql_expression->RemoveUnusedVarID(); + int attr = GetAddColumnId(vc, tmp_table, oper, distinct); + if (attr != common::NULL_VALUE_32) { + if (group_by) // do not add column - not needed duplicate + return attr; + // vc.n = col_to_vc[attr]; + } else if (group_by && oper == common::ColOperation::GROUP_BY && + (attr = GetAddColumnId(vc, tmp_table, common::ColOperation::LISTING, distinct)) != + common::NULL_VALUE_32) { + // modify existing column + CQChangeAddColumnLIST2GROUP_BY(tmp_table, attr); + return attr; + } else if (group_by && oper == common::ColOperation::LISTING && + (attr = GetAddColumnId(vc, tmp_table, common::ColOperation::GROUP_BY, distinct)) != + common::NULL_VALUE_32) { + // don;t add unnecessary column to select list + return attr; + } + } + + // if (parametrized) + // cq->AddColumn(at, tmp_table, CQTerm(vc.n), DELAYED, group_by ? nullptr : + // alias, distinct); + // else + cq->AddColumn(at, tmp_table, CQTerm(vc.n), oper, group_by ? nullptr : alias, distinct); + if (!group_by && alias) + field_alias2num[TabIDColAlias(tmp_table.n, alias)] = at.n; + return at.n; +} + +bool Query::IsLocalColumn(Item *item, const TabID &tmp_table) { + DEBUG_ASSERT(IsFieldItem(item) || IsAggregationItem(item)); + AttrID col; + TabID tab; + if (!FieldUnmysterify(item, tab, col)) + return false; + return cq->ExistsInTempTable(tab, tmp_table); +} + +QueryRouteTo Query::Compile(CompiledQuery *compiled_query, SELECT_LEX *selects_list, SELECT_LEX *last_distinct, + TabID *res_tab, bool ignore_limit, Item *left_expr_for_subselect, + common::Operator *oper_for_subselect, bool ignore_minmax, bool for_subq_in_where) { + MEASURE_FET("Query::Compile(...)"); + // at this point all tables are in RCBase engine, so we can proceed with the + // query + + /*Item_func + | + --Item_int_func <- arguments are kept in an array accessible through arguments() + | + --Item_bool_func + | | + | ---Item_cond <- arguments are kept in a list accessible through argument_list() + | | | + | | ---Item_cond_and <- when negated OR of negated items is created + | | | + | | ---Item_cond_or <- when negated AND of negated items is created + | | | + | | ---Item_cond_xor + | | + | ---Item_equal <- arguments are kept in a list accessible through argument_list() + | | + const_item (accessible through get_const() ) + | | (multiple equality) + | | + | ---Item_func_not + | | (???) + | | + | ---Item func_isnull <- when negated IS NOT NULL is created + | + --Item_func_opt_neg <- arguments are kept in an array accessible through arguments(), if negated + | | this information is kept additionally (in a field named 'negated') + | | + | | + | ---Item_func_in + | | + | | + | ---Item_func_between + | + | + --Item_bool_func2 + | + | + ---Item_bool_rowready_func2 <-arguments are kept in an array accessible through arguments(), if negated + | an object of a corresponding class is created + | (e.q. ~Item_func_lt => Item_func_ge) + | + ----Item_func_eq + | + | + ----Item_func_ne + | + | + ----Item_func_ge + | + | + ----Item_func_le + | + | + ----Item_func_gt + | + | + ----Item_func_lt + | + | + ----Item_func_equal <- This is mystery so far + There are 3 equality functions: + Item_equal -> multiple equality (many fields and optional additional constant value) + Item_func_equal -> ??? + Item_func_eq -> pairwise equality + */ + + bool union_all = (last_distinct == nullptr); + TabID prev_result; + + SQL_I_List *global_order = nullptr; + int col_count = 0; + int64_t global_limit_value = -1; + int64_t global_offset_value = -1; + + // local copy of current cq, to be restored on exit + CompiledQuery *saved_cq = cq; + cq = compiled_query; + + if ((selects_list->join) && + (selects_list != selects_list->join->unit->global_parameters())) { // only in case of unions this is set + SetLimit(selects_list->join->unit->global_parameters(), 0, global_offset_value, (int64_t &)global_limit_value); + global_order = &(selects_list->join->unit->global_parameters()->order_list); + } + + for (SELECT_LEX *sl = selects_list; sl; sl = sl->next_select()) { + int64_t limit_value = -1; + int64_t offset_value = -1; + /* + Increase the identification of whether to create a JOIN object, + which is used to release the JOIN object later. See #669 for the problems solved. + */ + bool ifNewJoinForTianmu = false; + if (!sl->join) { + sl->add_active_options(SELECT_NO_UNLOCK); + JOIN *join = new JOIN(sl->master_unit()->thd, sl); + + if (!join) { + sl->cleanup(0); + return QueryRouteTo::kToTianmu; + } + ifNewJoinForTianmu = true; + sl->set_join(join); + } + + if (QueryRouteTo::kToMySQL == JudgeErrors(sl)) + return QueryRouteTo::kToMySQL; + + SetLimit(sl, sl == selects_list ? 0 : sl->join->unit->global_parameters(), offset_value, limit_value); + List *fields = &sl->fields_list; + + Item *conds = (ifNewJoinForTianmu || !sl->join->where_cond) ? sl->where_cond() : sl->join->where_cond; + + ORDER *order = sl->order_list.first; + + // if (order) global_order = 0; //we want to zero global order (which + // seems to be always present) if we find a local order by clause + // The above is not necessary since global_order is set only in case of real UNIONs + + ORDER *group = sl->group_list.first; + Item *having = sl->having_cond(); + List *join_list = sl->join_list; + bool zero_result = sl->join->zero_result_cause != nullptr; + + // The exists subquery determines whether a value exists during the query optimization phase + // result is not set to zero only when a matching value is found in the query optimization phase + // When a field has an index, the optimization phase scans the table through the index + // The primary key implementation of the current column storage engine has a problem with the primary key + // index to scan the table for data Remove the following temporary practices after primary key indexing is complete + if (zero_result) { + if (Item::Type::SUBSELECT_ITEM == (conds->type())) { + zero_result = false; + } else { + Item_cond *item_cond = dynamic_cast(conds); + if (item_cond) { + List_iterator_fast li(*item_cond->argument_list()); + Item *item; + while ((item = li++)) { + if (item && Item::Type::SUBSELECT_ITEM == (item->type())) { + zero_result = false; + break; + } + } + } + } + } + + // When join_list has no elements and field has sp, tmp table is used and de-duplicated + // Use use_tmp_when_no_join when AddJoins + bool use_tmp_when_no_join = false; + if (!join_list->elements) { + List_iterator_fast li(*fields); + for (Item *item = li++; item; item = li++) { + if ((item->type() == Item::Type::FUNC_ITEM) && + ((down_cast(item)->functype() == Item_func::Functype::FUNC_SP) || + (down_cast(item)->functype() == Item_func::Functype::SUSERVAR_FUNC)) && + (!sl->is_distinct())) { + sl->add_active_options(SELECT_DISTINCT); + sl->join->select_distinct = TRUE; + use_tmp_when_no_join = true; + break; + } // else if (item->type() == Item::Type::) + } + } + + Item *field_for_subselect; + Item *cond_to_reinsert = nullptr; + List *list_to_reinsert = nullptr; + + TabID tmp_table; + try { + if (left_expr_for_subselect) + if (!ClearSubselectTransformation(*oper_for_subselect, field_for_subselect, conds, having, cond_to_reinsert, + list_to_reinsert, left_expr_for_subselect)) + throw CompilationError(); + + if (having && !group) // we cannot handle the case of a having without a group by + throw CompilationError(); + + // handle table list + TABLE_LIST *tables = sl->leaf_tables ? sl->leaf_tables : (TABLE_LIST *)sl->table_list.first; + for (TABLE_LIST *table_ptr = tables; table_ptr; table_ptr = table_ptr->next_leaf) { + if (!table_ptr->is_view_or_derived()) { + if (!Engine::IsTianmuTable(table_ptr->table)) + throw CompilationError(); + + std::string path = TablePath(table_ptr); + if (path2num.find(path) == path2num.end()) { + path2num[path] = NumOfTabs(); + AddTable(m_conn->GetTableByPath(path)); + TIANMU_LOG(LogCtl_Level::DEBUG, "add query table: %s", path.c_str()); + } + } + } + + if (!sl->leaf_table_count && !use_tmp_when_no_join) { // process select xxx or select xxx from dual. + TabID tab(-NumOfTabs() - 1); + cq->TmpTable(tmp_table, tab, TableSubType::DUAL, false); + use_tmp_when_no_join = true; + } else { // handle join & join cond, which has table(s). + std::vector left_tables, right_tables; + bool first_table = true; + if (QueryRouteTo::kToMySQL == AddJoins(*join_list, tmp_table, left_tables, right_tables, + (res_tab != nullptr && res_tab->n != 0), first_table, for_subq_in_where, + use_tmp_when_no_join)) + throw CompilationError(); + } + + // handle fields + List field_list_for_subselect; + if (left_expr_for_subselect && field_for_subselect) { + field_list_for_subselect.push_back(field_for_subselect); + fields = &field_list_for_subselect; + } + bool aggr_used = false; + if (sl->has_sj_nests && group != nullptr) { + // handle semi-join fields (use on group by) + if (QueryRouteTo::kToMySQL == AddSemiJoinFiled(*fields, *join_list, tmp_table)) + throw CompilationError(); + } else { + // handle normal fields + if (QueryRouteTo::kToMySQL == + AddFields(*fields, tmp_table, TabID(), group != nullptr, col_count, ignore_minmax, aggr_used)) + throw CompilationError(); + if (QueryRouteTo::kToMySQL == AddGroupByFields(group, tmp_table, TabID())) + throw CompilationError(); + bool group_by_clause = group != nullptr || sl->join->select_distinct || aggr_used || sl->has_sj_nests; + if (QueryRouteTo::kToMySQL == AddOrderByFields(order, tmp_table, TabID(), group_by_clause)) + throw CompilationError(); + } + + // handle where cond + CondID cond_id; + (BuildConditions(conds, cond_id, cq, tmp_table, CondType::WHERE_COND, zero_result) == QueryRouteTo::kToMySQL) + ? throw CompilationError() + : cq->AddConds(tmp_table, cond_id, CondType::WHERE_COND); + + // handle having cond + cond_id = CondID(); + (BuildConditions(having, cond_id, cq, tmp_table, CondType::HAVING_COND) == QueryRouteTo::kToMySQL) + ? throw CompilationError() + : cq->AddConds(tmp_table, cond_id, CondType::HAVING_COND); + + // apply the condition to tmp_table. + cq->ApplyConds(tmp_table); + + // handle group by & order by after semi-join + if (sl->has_sj_nests) { + if (group != nullptr) { + cq->Mode(tmp_table, TMParameter::TM_DISTINCT); + TabID new_tmp_table; + cq->TmpTable(new_tmp_table, tmp_table, TableSubType::NORMAL, false); + + // process all fields. + (AddFields(*fields, new_tmp_table, tmp_table, group != nullptr, col_count, ignore_minmax, aggr_used) == + QueryRouteTo::kToMySQL) + ? throw CompilationError() + : TIANMU_LOG(LogCtl_Level::DEBUG, "AddFields process success, temp_table: %d.", tmp_table.n); + // process group by clause. + (AddGroupByFields(group, new_tmp_table, tmp_table) == QueryRouteTo::kToMySQL) + ? throw CompilationError() + : TIANMU_LOG(LogCtl_Level::DEBUG, "AddGroupByFields process success, temp_table: %d", tmp_table.n); + // process order by clause. + (AddOrderByFields(order, new_tmp_table, tmp_table, + group != nullptr || sl->join->select_distinct || aggr_used) == QueryRouteTo::kToMySQL) + ? throw CompilationError() + : TIANMU_LOG(LogCtl_Level::DEBUG, "AddGroupByFields process success, tmp_table: %d", tmp_table.n); + tmp_table = new_tmp_table; + } else { + cq->Mode(tmp_table, TMParameter::TM_DISTINCT); + } + } + } catch (...) { + // restore original values of class fields (necessary if this method is called recursively) + cq = saved_cq; + if (cond_to_reinsert && list_to_reinsert) + list_to_reinsert->push_back(cond_to_reinsert); + if (ifNewJoinForTianmu) + sl->cleanup(true); + return QueryRouteTo::kToMySQL; + } + + if (sl->join->select_distinct) + cq->Mode(tmp_table, TMParameter::TM_DISTINCT); + if (!ignore_limit && limit_value >= 0 && !sl->has_sj_nests) + cq->Mode(tmp_table, TMParameter::TM_TOP, offset_value, limit_value); + + if (sl == selects_list) { + prev_result = tmp_table; + if (global_order && !selects_list->next_select()) { // trivial union with one select and ext. order by + tmp_table = TabID(); + cq->Union(prev_result, prev_result, tmp_table, true); + } + } else + cq->Union(prev_result, prev_result, tmp_table, union_all); + + if (sl == last_distinct) + union_all = true; + + if (cond_to_reinsert && list_to_reinsert) + list_to_reinsert->push_back(cond_to_reinsert); + + if (ifNewJoinForTianmu) + sl->cleanup(true); + } + + cq->BuildTableIDStepsMap(); + + if (QueryRouteTo::kToMySQL == AddGlobalOrderByFields(global_order, prev_result, col_count)) + return QueryRouteTo::kToMySQL; + + if (!ignore_limit && global_limit_value >= 0) + cq->Mode(prev_result, TMParameter::TM_TOP, global_offset_value, global_limit_value); + + if (res_tab != nullptr) + *res_tab = prev_result; + else + cq->Result(prev_result); + cq = saved_cq; + return QueryRouteTo::kToTianmu; +} + +JoinType Query::GetJoinTypeAndCheckExpr(uint outer_join, Item *on_expr) { + if (outer_join) + ASSERT(on_expr != 0, "on_expr shouldn't be null when outer_join != 0"); + + JoinType join_type; + + if ((outer_join & JOIN_TYPE_LEFT) && (outer_join & JOIN_TYPE_RIGHT)) + join_type = JoinType::JO_FULL; + else if (outer_join & JOIN_TYPE_LEFT) + join_type = JoinType::JO_LEFT; + else if (outer_join & JOIN_TYPE_RIGHT) + join_type = JoinType::JO_RIGHT; + else + join_type = JoinType::JO_INNER; + + return join_type; +} + +bool Query::IsLOJ(List *join) { + TABLE_LIST *join_ptr{nullptr}; + List_iterator li(*join); + while ((join_ptr = li++)) { + JoinType join_type = GetJoinTypeAndCheckExpr(join_ptr->outer_join, join_ptr->join_cond()); + if (join_ptr->join_cond() && (join_type == JoinType::JO_LEFT || join_type == JoinType::JO_RIGHT)) + return true; + } + return false; +} + +} // namespace core +} // namespace Tianmu diff --git a/storage/tianmu/core/quick_math.h b/storage/tianmu/core/quick_math.h index 2582631b5..971944818 100644 --- a/storage/tianmu/core/quick_math.h +++ b/storage/tianmu/core/quick_math.h @@ -22,7 +22,7 @@ #include "common/assert.h" #include "common/common_definitions.h" -#include "core/bin_tools.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/table_share.cpp b/storage/tianmu/core/table_share.cpp index d586b142a..eb09cf1c1 100644 --- a/storage/tianmu/core/table_share.cpp +++ b/storage/tianmu/core/table_share.cpp @@ -26,9 +26,14 @@ namespace Tianmu { namespace core { TableShare::TableShare(const fs::path &table_path, const TABLE_SHARE *table_share) : no_cols(table_share->fields), table_path(table_path) { - system::TianmuFile ftbl; - ftbl.OpenReadOnly(table_path / common::TABLE_DESC_FILE); - ftbl.ReadExact(&meta, sizeof(meta)); + s = const_cast(table_share); + try { + system::TianmuFile ftbl; + ftbl.OpenReadOnly(table_path / common::TABLE_DESC_FILE); + ftbl.ReadExact(&meta, sizeof(meta)); + } catch (common::TianmuError &e) { + throw common::DatabaseException("Failed to open: " + table_path.string() + " error:" + e.Message()); + } if (meta.magic != common::FILE_MAGIC) throw common::DatabaseException("Bad format of table definition in " + table_path.string() + ": bad signature!"); diff --git a/storage/tianmu/core/table_share.h b/storage/tianmu/core/table_share.h index 35b2bc940..5e62dbc35 100644 --- a/storage/tianmu/core/table_share.h +++ b/storage/tianmu/core/table_share.h @@ -20,7 +20,7 @@ #include "common/common_definitions.h" #include "common/defs.h" -#include "core/column_share.h" +#include "vc/column_share.h" #include #include @@ -35,7 +35,7 @@ struct TABLE_META { uint64_t magic = common::FILE_MAGIC; uint32_t ver = common::TABLE_DATA_VERSION; uint32_t id; - uint32_t pss = 16; + uint32_t pss = common::MAX_PSS; }; class TableShare final { @@ -67,6 +67,9 @@ class TableShare final { // MySQL lock THR_LOCK thr_lock; + // TABLE share in sql. + TABLE_SHARE *s; + private: TABLE_META meta; size_t no_cols; diff --git a/storage/tianmu/core/temp_table.cpp b/storage/tianmu/core/temp_table.cpp index 5f83a5c2c..116efb6f4 100644 --- a/storage/tianmu/core/temp_table.cpp +++ b/storage/tianmu/core/temp_table.cpp @@ -17,20 +17,20 @@ #include -#include "core/aggregation_algorithm.h" #include "core/cached_buffer.h" -#include "core/column_bin_encoder.h" -#include "core/condition_encoder.h" #include "core/engine.h" -#include "core/group_distinct_table.h" #include "core/mysql_expression.h" #include "core/parameterized_filter.h" #include "core/query.h" -#include "core/rsi_cmap.h" #include "core/temp_table.h" #include "core/transaction.h" #include "core/value_set.h" +#include "index/rsi_cmap.h" +#include "optimizer/aggregation_algorithm.h" +#include "optimizer/condition_encoder.h" +#include "optimizer/group_distinct_table.h" #include "system/fet.h" +#include "vc/column_bin_encoder.h" #include "vc/const_column.h" #include "vc/const_expr_column.h" #include "vc/expr_column.h" @@ -88,7 +88,8 @@ TempTable::Attr::Attr(const Attr &a) : PhysicalColumn(a) { } TempTable::Attr::Attr(CQTerm t, common::ColOperation m, uint32_t power, bool dis, char *a, int dim, - common::ColumnType type, uint scale, uint no_digits, bool notnull, DTCollation collation, SI *si1) + common::ColumnType type, uint scale, uint no_digits, bool notnull, DTCollation collation, + SpecialInstruction *si1) : mode(m), distinct(dis), term(t), dim(dim), not_complete(true) { ct.Initialize(type, notnull, common::PackFmt::DEFAULT, no_digits, scale, collation); orig_precision = no_digits; @@ -936,7 +937,7 @@ void TempTable::Attr::SetNewPageSize(uint new_page_size) { } TempTable::TempTable(const TempTable &t, bool is_vc_owner) - : filter(t.filter), output_mind(t.output_mind), is_vc_owner(is_vc_owner), m_conn(t.m_conn) { + : filter(t.filter), output_mind(t.output_mind), is_vc_owner(is_vc_owner), m_conn(t.m_conn), sub_type(t.sub_type) { no_obj = t.no_obj; materialized = t.materialized; aliases = t.aliases; @@ -954,9 +955,11 @@ TempTable::TempTable(const TempTable &t, bool is_vc_owner) force_full_materialize = t.force_full_materialize; no_materialized = t.no_materialized; no_global_virt_cols = int(t.virt_cols.size()); + for (uint i = 0; i < t.attrs.size(); i++) { attrs.push_back(new Attr(*t.attrs[i])); } + is_sent = t.is_sent; mem_scale = t.mem_scale; rough_is_empty = t.rough_is_empty; @@ -981,9 +984,10 @@ TempTable::~TempTable() { } void TempTable::TranslateBackVCs() { - for (int i = 0; i < no_global_virt_cols; i++) + for (int i = 0; i < no_global_virt_cols; i++) { if (virt_cols[i] && static_cast(virt_cols[i]->IsSingleColumn())) static_cast(virt_cols[i])->TranslateSourceColumns(attr_back_translation); + } } std::shared_ptr TempTable::CreateMaterializedCopy(bool translate_order, @@ -1000,14 +1004,17 @@ std::shared_ptr TempTable::CreateMaterializedCopy(bool translate_orde copy_buf.push_back(attrs[i]->buffer); attrs[i]->buffer = nullptr; } + if (no_global_virt_cols != -1) { // this is a TempTable copy for (uint i = no_global_virt_cols; i < virt_cols.size(); i++) { delete virt_cols[i]; virt_cols[i] = nullptr; } + virt_cols.resize(no_global_virt_cols); } + std::shared_ptr working_copy = Create(*this, in_subq); // Original VCs of this will be copied to // working_copy, and then deleted in its // destructor @@ -1029,6 +1036,7 @@ std::shared_ptr TempTable::CreateMaterializedCopy(bool translate_orde filter.mind_->AddDimension_cross(no_obj); if (virt_cols.size() < attrs.size()) virt_cols.resize(attrs.size()); + fill(virt_cols.begin(), virt_cols.end(), (vcolumn::VirtualColumn *)nullptr); for (uint i = 0; i < attrs.size(); i++) { vcolumn::VirtualColumn *new_vc = @@ -1037,9 +1045,9 @@ std::shared_ptr TempTable::CreateMaterializedCopy(bool translate_orde attrs[i]->term.vc = new_vc; attrs[i]->dim = 0; } + if (translate_order) { - order_by.clear(); // translation needed: virt_cols should point to - // working_copy as a data source + order_by.clear(); // translation needed: virt_cols should point to working_copy as a data source for (uint i = 0; i < working_copy->virt_cols.size(); i++) { vcolumn::VirtualColumn *orig_vc = working_copy->virt_cols[i]; // if(in_subq && orig_vc->IsSingleColumn()) @@ -1064,6 +1072,7 @@ std::shared_ptr TempTable::CreateMaterializedCopy(bool translate_orde } } } + for (uint i = 0; i < working_copy->order_by.size(); i++) { SortDescriptor sord; sord.vc = working_copy->order_by[i].vc; @@ -1076,21 +1085,19 @@ std::shared_ptr TempTable::CreateMaterializedCopy(bool translate_orde // find which working_copy->vc is used in ordering for (uint j = 0; j < working_copy->virt_cols.size(); j++) { if (/*working_copy->*/ order_by[i].vc == working_copy->virt_cols[j]) { - // order_by[i].vc = working_copy->virt_cols[j]; - MoveVC(j, working_copy->virt_cols, - virt_cols); // moving vc - now it is back in this + MoveVC(j, working_copy->virt_cols, virt_cols); // moving vc - now it is back in this break; } } } } + no_global_virt_cols = (int)virt_cols.size(); return working_copy; // must be deleted by DeleteMaterializedCopy() } void TempTable::DeleteMaterializedCopy(std::shared_ptr &old_t) // delete the external table and remove - // VC pointers, make this fully - // materialized + // VC pointers, make this fully materialized { MEASURE_FET("TempTable::DeleteMaterializedCopy(...)"); for (uint i = 0; i < attrs.size(); i++) { // Make sure VCs are deleted before the source table is deleted @@ -1098,6 +1105,7 @@ void TempTable::DeleteMaterializedCopy(std::shared_ptr &old_t) // de delete virt_cols[i]; virt_cols[i] = nullptr; } + old_t.reset(); } @@ -1107,6 +1115,7 @@ void TempTable::MoveVC(int colnum, std::vector &from, to.push_back(vc); from[colnum] = nullptr; std::vector vv = vc->GetChildren(); + for (size_t i = 0; i < vv.size(); i++) MoveVC(vv[i], from, to); } @@ -1209,7 +1218,7 @@ void TempTable::SetMode(TMParameter mode, int64_t mode_param1, int64_t mode_para } } -int TempTable::AddColumn(CQTerm e, common::ColOperation mode, char *alias, bool distinct, SI si) { +int TempTable::AddColumn(CQTerm e, common::ColOperation mode, char *alias, bool distinct, SpecialInstruction &si) { if (alias) no_cols++; common::ColumnType type = common::ColumnType::UNK; // type of column @@ -1315,25 +1324,31 @@ void TempTable::Union(TempTable *t, int all) { DEBUG_ASSERT(NumOfDisplaybleAttrs() == t->NumOfDisplaybleAttrs()); if (NumOfDisplaybleAttrs() != t->NumOfDisplaybleAttrs()) throw common::NotImplementedException("UNION of tables with different number of columns."); + if (this->IsParametrized() || t->IsParametrized()) throw common::NotImplementedException("Materialize: not implemented union of parameterized queries."); + tianmu_control_.lock(m_conn->GetThreadID()) << "UNION: materializing components." << system::unlock; this->Materialize(); t->Materialize(); + if ((!t->NumOfObj() && all) || (!this->NumOfObj() && !t->NumOfObj())) // no objects = no union return; - Filter first_f(NumOfObj(), p_power), first_mask(NumOfObj(), - p_power); // mask of objects to be added to the final result set + // mask of objects to be added to the final result set + Filter first_f(NumOfObj(), p_power), first_mask(NumOfObj(), p_power); Filter sec_f(t->NumOfObj(), p_power), sec_mask(t->NumOfObj(), p_power); first_mask.Set(); sec_mask.Set(); + if (!all) { tianmu_control_.lock(m_conn->GetThreadID()) << "UNION: excluding repetitions." << system::unlock; Filter first_f(NumOfObj(), p_power); first_f.Set(); + Filter sec_f(t->NumOfObj(), p_power); sec_f.Set(); + GroupDistinctTable dist_table(p_power); using vc_ptr_t = std::shared_ptr; std::vector first_vcs; @@ -1348,19 +1363,23 @@ void TempTable::Union(TempTable *t, int all) { vc_ptr_t(new vcolumn::SingleColumn(GetDisplayableAttrP(i), &output_mind, 0, -i - 1, this, 0))); sec_vcs.push_back( vc_ptr_t(new vcolumn::SingleColumn(t->GetDisplayableAttrP(i), t->GetOutputMultiIndexP(), 1, -i - 1, t, 0))); + encoder.push_back(ColumnBinEncoder()); - bool encoder_created; - if (NumOfObj() == 0) - encoder_created = encoder[i].PrepareEncoder(sec_vcs[i].get()); - else if (t->NumOfObj() == 0) - encoder_created = encoder[i].PrepareEncoder(first_vcs[i].get()); - else + + bool encoder_created{false}; + if (NumOfObj() && t->NumOfObj()) encoder_created = encoder[i].PrepareEncoder(first_vcs[i].get(), sec_vcs[i].get()); + else { + encoder_created = NumOfObj() ? encoder[i].PrepareEncoder(first_vcs[i].get()) + : ((t->NumOfObj()) ? encoder[i].PrepareEncoder(sec_vcs[i].get()) : false); + } + if (!encoder_created) { std::stringstream ss; ss << "UNION of non-matching columns (column no " << i << ") ."; throw common::NotImplementedException(ss.str()); } + encoder[i].SetPrimaryOffset(size); size += encoder[i].GetPrimarySize(); } @@ -1374,53 +1393,68 @@ void TempTable::Union(TempTable *t, int all) { do { first_mit.Rewind(); dist_table.Clear(); + while (first_mit.IsValid()) { int64_t pos = **first_mit; if (first_f.Get(pos)) { - for (uint i = 0; i < encoder.size(); i++) encoder[i].Encode(input_buf, first_mit); + for (uint i = 0; i < encoder.size(); i++) { + encoder[i].Encode(input_buf, first_mit); + } + GDTResult res = dist_table.Add(input_buf); if (res == GDTResult::GDT_EXISTS) first_mask.ResetDelayed(pos); - if (res != GDTResult::GDT_FULL) // note: if v is omitted here, it will also be - // omitted in sec! + if (res != GDTResult::GDT_FULL) // note: if v is omitted here, it will also be omitted in sec! first_f.ResetDelayed(pos); } + ++first_mit; if (m_conn->Killed()) throw common::KilledException(); } + sec_mit.Rewind(); while (sec_mit.IsValid()) { int64_t pos = **sec_mit; if (sec_f.Get(pos)) { - for (uint i = 0; i < encoder.size(); i++) encoder[i].Encode(input_buf, sec_mit, sec_vcs[i].get()); + for (uint i = 0; i < encoder.size(); i++) { + encoder[i].Encode(input_buf, sec_mit, sec_vcs[i].get()); + } + GDTResult res = dist_table.Add(input_buf); if (res == GDTResult::GDT_EXISTS) sec_mask.ResetDelayed(pos); if (res != GDTResult::GDT_FULL) sec_f.ResetDelayed(pos); } + ++sec_mit; if (m_conn->Killed()) throw common::KilledException(); } + first_f.Commit(); - sec_f.Commit(); first_mask.Commit(); + + sec_f.Commit(); sec_mask.Commit(); } while (!first_f.IsEmpty() || !sec_f.IsEmpty()); } delete[] input_buf; } + int64_t first_no_obj = first_mask.NumOfOnes(); int64_t sec_no_obj = sec_mask.NumOfOnes(); int64_t new_no_obj = first_no_obj + sec_no_obj; + tianmu_control_.lock(m_conn->GetThreadID()) << "UNION: generating result (" << new_no_obj << " rows)." << system::unlock; + uint new_page_size = CalculatePageSize(new_no_obj); for (uint i = 0; i < NumOfDisplaybleAttrs(); i++) { Attr *first_attr = GetDisplayableAttrP(i); Attr *sec_attr = t->GetDisplayableAttrP(i); + ColumnType new_type = GetUnionType(first_attr->Type(), sec_attr->Type()); if (first_attr->Type() == sec_attr->Type() && first_mask.IsFull() && first_no_obj && sec_no_obj && first_attr->Type().GetPrecision() >= sec_attr->Type().GetPrecision()) { @@ -1439,35 +1473,39 @@ void TempTable::Union(TempTable *t, int all) { } continue; } + + // generates the output attrs. Attr *new_attr = new Attr(CQTerm(), common::ColOperation::LISTING, p_power, false, first_attr->alias, 0, new_type.GetTypeName(), new_type.GetScale(), new_type.GetPrecision(), new_type.NotNull(), new_type.GetCollation()); new_attr->page_size = new_page_size; new_attr->CreateBuffer(new_no_obj, m_conn); + if (first_attr->TypeName() == common::ColumnType::NUM && sec_attr->TypeName() == common::ColumnType::NUM && first_attr->Type().GetScale() != sec_attr->Type().GetScale()) { uint max_scale = new_attr->Type().GetScale(); + // copy attr from first table to new_attr double multiplier = types::PowOfTen(max_scale - first_attr->Type().GetScale()); FilterOnesIterator first_fi(&first_mask, p_power); for (int64_t j = 0; j < first_no_obj; j++) { int64_t pos = *first_fi; ++first_fi; - if (!first_attr->IsNull(pos)) - new_attr->SetValueInt64(j, first_attr->GetNotNullValueInt64(pos) * (int64_t)multiplier); - else - new_attr->SetValueInt64(j, common::NULL_VALUE_64); + + int64_t val = (!first_attr->IsNull(pos)) ? (first_attr->GetNotNullValueInt64(pos) * (int64_t)multiplier) + : common::NULL_VALUE_64; + new_attr->SetValueInt64(j, val); } + // copy attr from second table to new_attr multiplier = types::PowOfTen(max_scale - sec_attr->Type().GetScale()); FilterOnesIterator sec_fi(&sec_mask, p_power); for (int64_t j = 0; j < sec_no_obj; j++) { int64_t pos = *sec_fi; ++sec_fi; - if (!sec_attr->IsNull(pos)) - new_attr->SetValueInt64(first_no_obj + j, sec_attr->GetNotNullValueInt64(pos) * (int64_t)multiplier); - else - new_attr->SetValueInt64(first_no_obj + j, common::NULL_VALUE_64); + int64_t val = (!sec_attr->IsNull(pos)) ? (sec_attr->GetNotNullValueInt64(pos) * (int64_t)multiplier) + : common::NULL_VALUE_64; + new_attr->SetValueInt64(first_no_obj + j, val); } } else if (ATI::IsStringType(new_attr->TypeName())) { types::BString s; @@ -1477,6 +1515,7 @@ void TempTable::Union(TempTable *t, int all) { new_attr->SetValueString(j, s); ++first_fi; } + FilterOnesIterator sec_fi(&sec_mask, p_power); for (int64_t j = 0; j < sec_no_obj; j++) { sec_attr->GetValueString(s, *sec_fi); @@ -1488,6 +1527,7 @@ void TempTable::Union(TempTable *t, int all) { for (int64_t j = 0; j < first_no_obj; j++) { int64_t pos = *first_fi; ++first_fi; + if (first_attr->IsNull(pos)) new_attr->SetValueInt64(j, common::NULL_VALUE_64); else if (first_attr->Type().IsFloat()) @@ -1497,10 +1537,12 @@ void TempTable::Union(TempTable *t, int all) { new_attr->SetValueInt64(j, *(int64_t *)&v); } } + FilterOnesIterator sec_fi(&sec_mask, p_power); for (int64_t j = 0; j < sec_no_obj; j++) { int64_t pos = *sec_fi; ++sec_fi; + if (sec_attr->IsNull(pos)) new_attr->SetValueInt64(first_no_obj + j, common::NULL_VALUE_64); else if (sec_attr->Type().IsFloat()) @@ -1510,44 +1552,48 @@ void TempTable::Union(TempTable *t, int all) { new_attr->SetValueInt64(first_no_obj + j, *(int64_t *)&v); } } - } else { + } else { // other types. // copy attr from first table to new_attr double multiplier = types::PowOfTen(new_attr->Type().GetScale() - first_attr->Type().GetScale()); FilterOnesIterator first_fi(&first_mask, p_power); for (int64_t j = 0; j < first_no_obj; j++) { int64_t pos = *first_fi; ++first_fi; + if (first_attr->IsNull(pos)) new_attr->SetValueInt64(j, common::NULL_VALUE_64); - else if (multiplier == 1.0) // do not multiply by 1.0, as it causes - // precision problems on bigint + else if (multiplier == 1.0) // do not multiply by 1.0, as it causes precision problems on bigint new_attr->SetValueInt64(j, first_attr->GetNotNullValueInt64(pos)); else new_attr->SetValueInt64(j, (int64_t)(first_attr->GetNotNullValueInt64(pos) * multiplier)); } + multiplier = types::PowOfTen(new_attr->Type().GetScale() - sec_attr->Type().GetScale()); FilterOnesIterator sec_fi(&sec_mask, p_power); for (int64_t j = 0; j < sec_no_obj; j++) { int64_t pos = *sec_fi; ++sec_fi; + if (sec_attr->IsNull(pos)) new_attr->SetValueInt64(first_no_obj + j, common::NULL_VALUE_64); - else if (multiplier == 1.0) // do not multiply by 1.0, as it causes - // precision problems on bigint + else if (multiplier == 1.0) // do not multiply by 1.0, as it causes precision problems on bigint new_attr->SetValueInt64(first_no_obj + j, sec_attr->GetNotNullValueInt64(pos)); else new_attr->SetValueInt64(first_no_obj + j, (int64_t)(sec_attr->GetNotNullValueInt64(pos) * multiplier)); } } + attrs[GetDisplayableAttrIndex(i)] = new_attr; displayable_attr[i] = new_attr; delete first_attr; } + SetNumOfMaterialized(new_no_obj); // this->no_obj = new_no_obj; // this->Display(); output_mind.Clear(); output_mind.AddDimension_cross(no_obj); + return; } void TempTable::Union(TempTable *t, [[maybe_unused]] int all, ResultSender *sender, int64_t &g_offset, @@ -1682,13 +1728,17 @@ types::TianmuValueObject TempTable::GetValueObject(int64_t obj, uint attr) { uint TempTable::CalculatePageSize(int64_t _no_obj) { int64_t new_no_obj = _no_obj == -1 ? no_obj : _no_obj; uint size_of_one_record = 0; - for (uint i = 0; i < attrs.size(); i++) - if (attrs[i]->TypeName() == common::ColumnType::BIN || attrs[i]->TypeName() == common::ColumnType::BYTE || - attrs[i]->TypeName() == common::ColumnType::VARBYTE || attrs[i]->TypeName() == common::ColumnType::LONGTEXT || - attrs[i]->TypeName() == common::ColumnType::STRING || attrs[i]->TypeName() == common::ColumnType::VARCHAR) - size_of_one_record += attrs[i]->Type().GetInternalSize() + 4; // 4 bytes describing length + + // for (uint i = 0; i < attrs.size(); i++) { + for (auto attr : attrs) { + if (attr->TypeName() == common::ColumnType::BIN || attr->TypeName() == common::ColumnType::BYTE || + attr->TypeName() == common::ColumnType::VARBYTE || attr->TypeName() == common::ColumnType::LONGTEXT || + attr->TypeName() == common::ColumnType::STRING || attr->TypeName() == common::ColumnType::VARCHAR) + size_of_one_record += attr->Type().GetInternalSize() + 4; // 4 bytes describing length else - size_of_one_record += attrs[i]->Type().GetInternalSize(); + size_of_one_record += attr->Type().GetInternalSize(); + } + uint raw_size = (uint)new_no_obj; if (size_of_one_record < 1) size_of_one_record = 1; @@ -1888,11 +1938,12 @@ std::shared_ptr TempTable::Create(const TempTable &t, bool in_subq) { return tnew; } -std::shared_ptr TempTable::Create(JustATable *const t, int alias, Query *q, bool for_subq) { +std::shared_ptr TempTable::Create(JustATable *const t, int alias, Query *q, TableSubType sub_type, + bool for_subq) { if (for_subq) return std::shared_ptr(new TempTableForSubquery(t, alias, q)); else - return std::shared_ptr(new TempTable(t, alias, q)); + return std::shared_ptr(new TempTable(t, alias, q, sub_type)); } ColumnType TempTable::GetUnionType(ColumnType type1, ColumnType type2) { @@ -1911,15 +1962,6 @@ ColumnType TempTable::GetUnionType(ColumnType type1, ColumnType type2) { return t; } if (type1.IsFixed() && type2.IsFixed() && type1.GetScale() != type2.GetScale()) { - uint max_scale = type1.GetScale() > type2.GetScale() ? type1.GetScale() : type2.GetScale(); - uint max_ints = (type1.GetPrecision() - type1.GetScale()) > (type2.GetPrecision() - type2.GetScale()) - ? (type1.GetPrecision() - type1.GetScale()) - : (type2.GetPrecision() - type2.GetScale()); - if (max_ints + max_scale > 18) { - std::stringstream ss; - ss << "UNION of non-matching columns (column no " << 0 << ") ."; - throw common::NotImplementedException(ss.str()); - } return type1.GetScale() > type2.GetScale() ? type1 : type2; } if (type1.GetInternalSize() < type2.GetInternalSize()) @@ -1956,6 +1998,7 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { sender->SetAffectRows(no_obj); CreateDisplayableAttrP(); CalculatePageSize(); + int64_t offset = 0; // controls the first object to be materialized int64_t limit = -1; // if(limit>=0) -> for(row = offset; row < offset + // limit; row++) .... @@ -1970,6 +2013,7 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { mode.param2 = -1; mode.param1 = 0; } + int64_t local_offset = 0; // controls the first object to be materialized in a given algorithm int64_t local_limit = -1; if (materialized && (order_by.size() > 0 || limits_present) && no_obj) { @@ -1982,19 +2026,21 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { local_limit = local_limit < 0 ? 0 : local_limit; } else local_limit = no_obj; + if (exists_only) { - if (local_limit == 0) // else no change needed - no_obj = 0; + no_obj = (local_limit == 0) ? 0 : no_obj; return; } if (order_by.size() != 0 && no_obj > 1) { std::shared_ptr temporary_source_table = CreateMaterializedCopy(true, in_subq); // true: translate definition of ordering + OrderByAndMaterialize(order_by, local_limit, local_offset); DeleteMaterializedCopy(temporary_source_table); } else if (limits_present) ApplyOffset(local_limit, local_offset); + order_by.clear(); return; } @@ -2005,9 +2051,11 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { bool table_distinct = this->mode.distinct; bool distinct_on_materialized = false; - for (uint i = 0; i < NumOfAttrs(); i++) + for (uint i = 0; i < NumOfAttrs(); i++) { if (attrs[i]->mode != common::ColOperation::LISTING) group_by = true; + } + if (table_distinct && group_by) { distinct_on_materialized = true; table_distinct = false; @@ -2019,54 +2067,57 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { bool no_rows_too_large = filter.mind_->TooManyTuples(); no_obj = -1; // no_obj not calculated yet - wait for better moment - VerifyAttrsSizes(); // resize attr[i] buffers basing on the current - // multiindex state + VerifyAttrsSizes(); // resize attr[i] buffers basing on the current multiindex state - // the case when there is no grouping of attributes, check also DISTINCT - // modifier of TT + // the case when there is no grouping of attributes, check also DISTINCT modifier of TT if (!group_by && !table_distinct) { - DEBUG_ASSERT(!distinct_on_materialized); // should by false here, otherwise must be - // added to conditions below + DEBUG_ASSERT(!distinct_on_materialized); // should by false here, otherwise must be added to conditions below if (limits_present) { - if (no_rows_too_large && order_by.size() == 0) - no_obj = offset + limit; // offset + limit in the worst case + // offset + limit in the worst case : or normal case. + if (sub_type == TableSubType::CONST || sub_type == TableSubType::DUAL) + no_obj = 1; else - no_obj = filter.mind_->NumOfTuples(); + no_obj = (no_rows_too_large && order_by.size() == 0) ? (offset + limit) : filter.mind_->NumOfTuples(); + if (no_obj <= offset) { no_obj = 0; materialized = true; order_by.clear(); return; } + local_offset = offset; local_limit = std::min(limit, (int64_t)no_obj - offset); local_limit = local_limit < 0 ? 0 : local_limit; } else { - no_obj = filter.mind_->NumOfTuples(); + if (sub_type == TableSubType::CONST || sub_type == TableSubType::DUAL) + no_obj = 1; + else { + no_obj = filter.mind_->NumOfTuples(); + } local_limit = no_obj; } + if (exists_only) { order_by.clear(); return; } + output_mind.Clear(); output_mind.AddDimension_cross(local_limit); // an artificial dimension for result CalculatePageSize(); // recalculate, as no_obj might changed - // perform order by: in this case it can be done on source tables, not on - // the result + // perform order by: in this case it can be done on source tables, not on the result bool materialized_by_ordering = false; - if (CanOrderSources()) - // false if no sorting used + if (CanOrderSources()) // false if no sorting used materialized_by_ordering = this->OrderByAndMaterialize(order_by, local_limit, local_offset, sender); + if (!materialized_by_ordering) { // not materialized yet? // materialize without aggregations. If ordering then do not send result - if (order_by.size() == 0) - FillMaterializedBuffers(local_limit, local_offset, sender, lazy); - else // in case of order by we need to materialize all rows to be next - // ordered - FillMaterializedBuffers(no_obj, 0, nullptr, lazy); + // or in case of order by we need to materialize all rows to be next ordered + (order_by.size() == 0) ? FillMaterializedBuffers(local_limit, local_offset, sender, lazy) + : FillMaterializedBuffers(no_obj, 0, nullptr, lazy); } } else { // GROUP BY or DISTINCT - compute aggregations @@ -2076,13 +2127,14 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { if (exists_only) local_limit = 1; } + if (HasHavingConditions() && in_subq) having_conds[0].tree->Simplify(true); ResultSender *local_sender = (distinct_on_materialized || order_by.size() > 0 ? nullptr : sender); AggregationAlgorithm aggr(this); - aggr.Aggregate(table_distinct, local_limit, local_offset, - local_sender); // this->tree (HAVING) used inside + aggr.Aggregate(table_distinct, local_limit, local_offset, local_sender); // this->tree (HAVING) used inside + if (no_obj == 0) { order_by.clear(); return; @@ -2109,18 +2161,20 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { } } else local_limit = no_obj; + if (exists_only) local_limit = 1; + std::shared_ptr temporary_source_table = CreateMaterializedCopy(false, in_subq); ResultSender *local_sender = (order_by.size() > 0 ? nullptr : sender); AggregationAlgorithm aggr(this); - aggr.Aggregate(true, local_limit, local_offset, - local_sender); // true => select-level distinct + aggr.Aggregate(true, local_limit, local_offset, local_sender); // true => select-level distinct DeleteMaterializedCopy(temporary_source_table); output_mind.Clear(); output_mind.AddDimension_cross(no_obj); // an artificial dimension for result - } // end of distinct part + } + // ORDER BY, if not sorted until now if (order_by.size() != 0) { if (limits_present) { @@ -2135,17 +2189,21 @@ void TempTable::Materialize(bool in_subq, ResultSender *sender, bool lazy) { } } else local_limit = no_obj; + if (no_obj > 1 && !exists_only) { - std::shared_ptr temporary_source_table = - CreateMaterializedCopy(true, in_subq); // true: translate definition of ordering + // true: translate definition of ordering + std::shared_ptr temporary_source_table = CreateMaterializedCopy(true, in_subq); OrderByAndMaterialize(order_by, local_limit, local_offset, sender); DeleteMaterializedCopy(temporary_source_table); } + order_by.clear(); output_mind.Clear(); output_mind.AddDimension_cross(no_obj); // an artificial dimension for result } + materialized = true; + return; } // here we deal with both signed/unsigned, the exact values will be converted on send results phase. @@ -2159,33 +2217,45 @@ void TempTable::RecordIterator::PrepareValues() { if (v == common::NULL_VALUE_32) dataTypes[att]->SetToNull(); else - ((types::TianmuNum *)dataTypes[att].get())->Assign(v, 0, false, attrt_tmp); + (dynamic_cast(dataTypes[att].get()))->Assign(v, 0, false, attrt_tmp); } else if (attrt_tmp == common::ColumnType::SMALLINT) { short &v = (*(AttrBuffer *)table->GetDisplayableAttrP(att)->buffer)[_currentRNo]; if (v == common::NULL_VALUE_SH) dataTypes[att]->SetToNull(); else - ((types::TianmuNum *)dataTypes[att].get())->Assign(v, 0, false, attrt_tmp); + (dynamic_cast(dataTypes[att].get()))->Assign(v, 0, false, attrt_tmp); } else if (attrt_tmp == common::ColumnType::BYTEINT) { char &v = (*(AttrBuffer *)table->GetDisplayableAttrP(att)->buffer)[_currentRNo]; if (v == common::NULL_VALUE_C) dataTypes[att]->SetToNull(); else - ((types::TianmuNum *)dataTypes[att].get())->Assign(v, 0, false, attrt_tmp); + (dynamic_cast(dataTypes[att].get()))->Assign(v, 0, false, attrt_tmp); } else if (ATI::IsRealType(attrt_tmp)) { double &v = (*(AttrBuffer *)table->GetDisplayableAttrP(att)->buffer)[_currentRNo]; if (v == NULL_VALUE_D) dataTypes[att]->SetToNull(); else - ((types::TianmuNum *)dataTypes[att].get())->Assign(v); + (dynamic_cast(dataTypes[att].get()))->Assign(v); } else if (attrt_tmp == common::ColumnType::NUM || attrt_tmp == common::ColumnType::BIGINT || attrt_tmp == common::ColumnType::BIT) { int64_t &v = (*(AttrBuffer *)table->GetDisplayableAttrP(att)->buffer)[_currentRNo]; if (v == common::NULL_VALUE_64) dataTypes[att]->SetToNull(); - else - ((types::TianmuNum *)dataTypes[att].get()) - ->Assign(v, table->GetDisplayableAttrP(att)->Type().GetScale(), false, attrt_tmp); + else { + if (dataTypes[att].get()->GetValueType() == types::ValueTypeEnum::NUMERIC_TYPE) + (dynamic_cast(dataTypes[att].get())) + ->Assign(v, table->GetDisplayableAttrP(att)->Type().GetScale(), false, attrt_tmp); + if (dataTypes[att].get()->GetValueType() == types::ValueTypeEnum::STRING_TYPE) { + std::ostringstream stringStream; + stringStream << v; + std::string copyOfStr = stringStream.str(); + + char *vstr_p = const_cast(copyOfStr.c_str()); + types::BString bs(vstr_p, strlen(vstr_p), true); + (dynamic_cast(dataTypes[att].get()))->PersistentCopy(bs); + } + // process bstring type. + } } else if (ATI::IsDateTimeType(attrt_tmp)) { int64_t &v = (*(AttrBuffer *)table->GetDisplayableAttrP(att)->buffer)[_currentRNo]; if (v == common::NULL_VALUE_64) diff --git a/storage/tianmu/core/temp_table.h b/storage/tianmu/core/temp_table.h index 05b142e90..91112e256 100644 --- a/storage/tianmu/core/temp_table.h +++ b/storage/tianmu/core/temp_table.h @@ -21,18 +21,18 @@ #include #include "common/common_definitions.h" -#include "core/cq_term.h" -#include "core/descriptor.h" #include "core/just_a_table.h" -#include "core/mi_updating_iterator.h" -#include "core/multi_index.h" #include "core/mysql_expression.h" -#include "core/pack_orderer.h" #include "core/parameterized_filter.h" -#include "core/physical_column.h" -#include "core/sorter_wrapper.h" +#include "data/pack_orderer.h" #include "exporter/data_exporter.h" +#include "index/multi_index.h" +#include "optimizer/compile/cq_term.h" +#include "optimizer/compile/descriptor.h" +#include "optimizer/iterators/mi_updating_iterator.h" #include "system/large_buffer.h" +#include "util/sorter_wrapper.h" +#include "vc/physical_column.h" namespace Tianmu { namespace core { @@ -46,7 +46,7 @@ class SortDescriptor; class Transaction; // Sepecial Instruction -struct SI { +struct SpecialInstruction { std::string separator; // group_concat separator ORDER::enum_order order; }; @@ -57,7 +57,7 @@ class TempTable : public JustATable { public: class Attr final : public PhysicalColumn { public: - SI si; + SpecialInstruction si; void *buffer; // buffer to values of attribute, if materialized int64_t no_obj; // number of objects in the buffer uint32_t no_power; // number of objects in the buffer @@ -75,7 +75,7 @@ class TempTable : public JustATable { Attr(CQTerm t, common::ColOperation m, uint32_t power, bool distinct = false, char *alias = nullptr, int dim = -1, common::ColumnType type = common::ColumnType::INT, uint scale = 0, uint precision = 10, bool notnull = true, - DTCollation collation = DTCollation(), SI *si1 = nullptr); + DTCollation collation = DTCollation(), SpecialInstruction *si1 = nullptr); Attr(const Attr &); Attr &operator=(const Attr &); int operator==(const Attr &); @@ -187,7 +187,7 @@ class TempTable : public JustATable { protected: TempTable(const TempTable &, bool is_vc_owner); - TempTable(JustATable *const, int alias, Query *q); + TempTable(JustATable *const, int alias, Query *q, TableSubType subtype = TableSubType::NORMAL); std::shared_ptr CreateMaterializedCopy(bool translate_order, bool in_subq); // move all buffers to a newly created @@ -209,7 +209,7 @@ class TempTable : public JustATable { void AddLeftConds(Condition *cond, std::vector &dims1, std::vector &dims2); void SetMode(TMParameter mode, int64_t mode_param1 = 0, int64_t mode_param2 = -1); void JoinT(JustATable *t, int alias, JoinType jt); - int AddColumn(CQTerm, common::ColOperation, char *alias, bool distinct, SI si); + int AddColumn(CQTerm, common::ColOperation, char *alias, bool distinct, SpecialInstruction &si); void AddOrder(vcolumn::VirtualColumn *vc, int direction); void Union(TempTable *, int); void Union(TempTable *, int, ResultSender *sender, int64_t &g_offset, int64_t &g_limit); @@ -253,6 +253,7 @@ class TempTable : public JustATable { no_materialized = n; } TType TableType() const override { return TType::TEMP_TABLE; } // type of JustATable - TempTable + TableSubType getSubType() { return sub_type; } // the sub type of TempTable uint NumOfAttrs() const override { return (uint)attrs.size(); } uint NumOfDisplaybleAttrs() const override { return no_cols; } // no. of columns with defined alias bool IsDisplayAttr(int i) { return attrs[i]->alias != nullptr; } @@ -393,9 +394,10 @@ class TempTable : public JustATable { bool CanCondPushDown() { return can_cond_push_down; }; protected: - int64_t no_obj; + int64_t no_obj; // no. of objs.(or rows.) uint32_t p_power; // pack power uint no_cols; // no. of output columns, i.e., with defined alias + TableSubType sub_type; // table sub type. TableMode mode; // based on { TM_DISTINCT, TM_TOP, TM_EXISTS } std::vector attrs; // vector of output columns, each column contains // a buffer with values @@ -456,7 +458,8 @@ class TempTable : public JustATable { void Display(std::ostream &out = std::cout); // output to console static std::shared_ptr Create(const TempTable &, bool in_subq); - static std::shared_ptr Create(JustATable *const, int alias, Query *q, bool for_subquery = false); + static std::shared_ptr Create(JustATable *const, int alias, Query *q, TableSubType sub_type, + bool for_subquery = false); bool IsSent() { return is_sent; } void SetIsSent() { is_sent = true; } common::Tribool RoughIsEmpty() { return rough_is_empty; } diff --git a/storage/tianmu/core/temp_table_com.cpp b/storage/tianmu/core/temp_table_com.cpp index b2ffc0fd5..ed10fd311 100644 --- a/storage/tianmu/core/temp_table_com.cpp +++ b/storage/tianmu/core/temp_table_com.cpp @@ -15,9 +15,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/filter.h" #include "core/query.h" #include "core/temp_table.h" +#include "executor/filter.h" #include "vc/const_column.h" #include "vc/const_expr_column.h" @@ -28,8 +28,12 @@ namespace Tianmu { namespace core { -TempTable::TempTable(JustATable *t, int alias, Query *q) - : mem_scale(-1), filter(t->Getpackpower()), output_mind(t->Getpackpower()), m_conn(current_txn_) { +TempTable::TempTable(JustATable *t, int alias, Query *q, TableSubType subtype) + : mem_scale(-1), + sub_type(subtype), + filter(t->Getpackpower()), + output_mind(t->Getpackpower()), + m_conn(current_txn_) { p_power = t->Getpackpower(); filter.table_ = this; tables.push_back(t); @@ -43,16 +47,16 @@ TempTable::TempTable(JustATable *t, int alias, Query *q) else ((TempTable *)t)->Materialize(false, nullptr, false); - filter.mind_->AddDimension_cross(t->NumOfObj()); + uint64_t tuple_nums = (subtype == TableSubType::CONST || subtype == TableSubType::DUAL) ? 1 : t->NumOfObj(); + filter.mind_->AddDimension_cross(tuple_nums); } else { filter.mind_->AddDimension_cross(t->NumOfObj()); } if (filter.mind_->TooManyTuples()) - no_obj = common::NULL_VALUE_64; // a big, improper number, which we hope to - // be changed after conditions are applied + no_obj = common::NULL_VALUE_64; // a big, improper number, which we hope to be changed after conditions are applied else - no_obj = filter.mind_->NumOfTuples(); + no_obj = (sub_type == TableSubType::DUAL || sub_type == TableSubType::CONST) ? 1 : filter.mind_->NumOfTuples(); no_cols = 0; no_global_virt_cols = 0; diff --git a/storage/tianmu/core/temp_table_low.cpp b/storage/tianmu/core/temp_table_low.cpp index 2c6b20827..5319e051d 100644 --- a/storage/tianmu/core/temp_table_low.cpp +++ b/storage/tianmu/core/temp_table_low.cpp @@ -23,16 +23,16 @@ #include "common/assert.h" #include "common/data_format.h" #include "core/engine.h" -#include "core/pack_guardian.h" -#include "core/sorter_wrapper.h" #include "core/temp_table.h" #include "core/transaction.h" +#include "data/pack_guardian.h" #include "exporter/data_exporter.h" #include "system/fet.h" #include "system/io_parameters.h" #include "system/tianmu_system.h" #include "system/txt_utils.h" #include "types/value_parser4txt.h" +#include "util/sorter_wrapper.h" #include "util/thread_pool.h" #include "vc/expr_column.h" #include "vc/virtual_column.h" @@ -98,15 +98,6 @@ bool TempTable::OrderByAndMaterialize( SorterWrapper(*(filter.mind_), limit + offset), SorterWrapper(*(filter.mind_), limit + offset), SorterWrapper(*(filter.mind_), limit + offset), SorterWrapper(*(filter.mind_), limit + offset), SorterWrapper(*(filter.mind_), limit + offset), SorterWrapper(*(filter.mind_), limit + offset)}; - /* - std::vector v_sw; - if(task_num != 1) { - for(int i = 0; i < task_num; i++) { - SorterWrapper tmpsubsorted_table(*(filter.mind_), limit + offset); - v_sw.push_back(tmpsubsorted_table); - } - } - */ int sort_order = 0; for (auto &j : attrs) { @@ -142,6 +133,7 @@ bool TempTable::OrderByAndMaterialize( vc_for_prefetching.push_back(ord[i].vc); } } + if (task_num == 1) sorted_table.InitSorter(*(filter.mind_), true); else @@ -151,16 +143,22 @@ bool TempTable::OrderByAndMaterialize( sorted_table.GetSorter()->Name()); task_num = 1; } + // Put data std::vector po(filter.mind_->NumOfDimensions()); if (task_num == 1) { sorted_table.SortRoughly(po); } + MIIterator it(filter.mind_, all_dims, po); int64_t local_row = 0; bool continue_now = true; ord.clear(); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + if (task_num == 1) { while (it.IsValid() && continue_now) { if (m_conn->Killed()) @@ -213,8 +211,8 @@ bool TempTable::OrderByAndMaterialize( utils::result_set res; for (int i = 0; i < task_num; i++) - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&TempTable::TaskPutValueInST, this, &taskIterator[i], - current_txn_, &subsorted_table[i])); + res.insert(eng->query_thread_pool.add_task(&TempTable::TaskPutValueInST, this, &taskIterator[i], current_txn_, + &subsorted_table[i])); if (filter.mind_->m_conn->Killed()) throw common::KilledException("Query killed by user"); @@ -288,8 +286,8 @@ bool TempTable::OrderByAndMaterialize( ++offset_done; global_row++; } while (valid && global_row < limit + offset && - !(sender && local_row >= tianmu_sysvar_result_sender_rows)); // a limit for - // streaming buffer + !(sender && local_row >= tianmu_sysvar_result_sender_rows)); // a limit for streaming buffer + // Note: what about SetNumOfMaterialized()? Only no_obj is set now. if (sender) { TempTable::RecordIterator iter = begin(); @@ -381,6 +379,10 @@ void TempTable::FillMaterializedBuffers(int64_t local_limit, int64_t local_offse // row - a row number in orig. tables // no_obj - a number of rows to be actually sent (offset already omitted) // start_row, page_end - in terms of orig. tables + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + while (it.IsValid() && row < no_obj + local_offset) { /* go thru all rows */ bool outer_iterator_updated = false; MIIterator page_start(it); @@ -391,7 +393,9 @@ void TempTable::FillMaterializedBuffers(int64_t local_limit, int64_t local_offse if (page_end > no_obj + local_offset) page_end = no_obj + local_offset; - for (uint i = 0; i < NumOfAttrs(); i++) attrs[i]->CreateBuffer(page_end - start_row, m_conn, pagewise); + for (uint i = 0; i < NumOfAttrs(); i++) { + attrs[i]->CreateBuffer(page_end - start_row, m_conn, pagewise); + } auto &attr = attrs[0]; if (attr->NeedFill()) { @@ -404,11 +408,12 @@ void TempTable::FillMaterializedBuffers(int64_t local_limit, int64_t local_offse outer_iterator_updated = true; } } + utils::result_set res; for (uint i = 1; i < attrs.size(); i++) { if (!skip_parafilloutput[i]) { - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&TempTable::FillbufferTask, this, attrs[i], - current_txn_, &page_start, start_row, page_end)); + res.insert(eng->query_thread_pool.add_task(&TempTable::FillbufferTask, this, attrs[i], current_txn_, + &page_start, start_row, page_end)); } } res.get_all_with_except(); @@ -525,34 +530,35 @@ std::vector TempTable::GetATIs(bool orig) { } #define STRING_LENGTH_THRESHOLD 512 -void TempTable::VerifyAttrsSizes() // verifies attr[i].field_size basing on the - // current multiindex contents +void TempTable::VerifyAttrsSizes() // verifies attr[i].field_size basing on the current multiindex contents { - for (uint i = 0; i < attrs.size(); i++) - if (ATI::IsStringType(attrs[i]->TypeName())) { - // reduce string size when column defined too large to reduce allocated - // temp memory - if (attrs[i]->term.vc->MaxStringSize() < STRING_LENGTH_THRESHOLD) { - attrs[i]->OverrideStringSize(attrs[i]->term.vc->MaxStringSize()); - } else { - vcolumn::VirtualColumn *vc = attrs[i]->term.vc; - int max_length = attrs[i]->term.vc->MaxStringSize(); - if (dynamic_cast(vc)) { - auto &var_map = dynamic_cast(vc)->GetVarMap(); - for (auto &it : var_map) { - PhysicalColumn *column = it.GetTabPtr()->GetColumn(it.col_ndx); - ColumnType ct = column->Type(); - uint precision = ct.GetPrecision(); - if (precision >= STRING_LENGTH_THRESHOLD) { - uint actual_size = column->MaxStringSize() * ct.GetCollation().collation->mbmaxlen; - if (actual_size < precision) - max_length += (actual_size - precision); - } + for (uint i = 0; i < attrs.size(); i++) { + if (!ATI::IsStringType(attrs[i]->TypeName())) // and 'IsTxtType' or 'IsCharType' ? + continue; + + // reduce string size when column defined too large to reduce allocated + // temp memory + if (attrs[i]->term.vc->MaxStringSize() < STRING_LENGTH_THRESHOLD) { + attrs[i]->OverrideStringSize(attrs[i]->term.vc->MaxStringSize()); + } else { + vcolumn::VirtualColumn *vc = attrs[i]->term.vc; + int max_length = attrs[i]->term.vc->MaxStringSize(); + if (dynamic_cast(vc)) { + auto &var_map = dynamic_cast(vc)->GetVarMap(); + for (auto &it : var_map) { + PhysicalColumn *column = it.GetTabPtr()->GetColumn(it.col_ndx); + ColumnType ct = column->Type(); + uint precision = ct.GetPrecision(); + if (precision >= STRING_LENGTH_THRESHOLD) { + uint actual_size = column->MaxStringSize() * ct.GetCollation().collation->mbmaxlen; + if (actual_size < precision) + max_length += (actual_size - precision); } } - attrs[i]->OverrideStringSize(max_length); } + attrs[i]->OverrideStringSize(max_length); } + } } void TempTable::FillbufferTask(Attr *attr, Transaction *txn, MIIterator *page_start, int64_t start_row, diff --git a/storage/tianmu/core/temp_table_roughquery.cpp b/storage/tianmu/core/temp_table_roughquery.cpp index cee8adf97..0a3e2e054 100644 --- a/storage/tianmu/core/temp_table_roughquery.cpp +++ b/storage/tianmu/core/temp_table_roughquery.cpp @@ -21,9 +21,9 @@ */ #include "core/engine.h" -#include "core/mi_iterator.h" -#include "core/pack_orderer.h" #include "core/temp_table.h" +#include "data/pack_orderer.h" +#include "optimizer/iterators/mi_iterator.h" #include "vc/single_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/tianmu_table.cpp b/storage/tianmu/core/tianmu_table.cpp index 114fe4cf4..386f0c536 100644 --- a/storage/tianmu/core/tianmu_table.cpp +++ b/storage/tianmu/core/tianmu_table.cpp @@ -23,11 +23,10 @@ #include "common/common_definitions.h" #include "common/exception.h" #include "core/engine.h" -#include "core/pack_guardian.h" #include "core/table_share.h" -#include "core/tianmu_attr.h" #include "core/tianmu_table.h" #include "core/transaction.h" +#include "data/pack_guardian.h" #include "handler/ha_tianmu.h" #include "loader/load_parser.h" #include "log_event.h" @@ -38,6 +37,7 @@ #include "types/value_parser4txt.h" #include "util/bitset.h" #include "util/timer.h" +#include "vc/tianmu_attr.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -103,7 +103,18 @@ void TianmuTable::GetValueFromField(Field *f, Value &v, size_t col) { break; } case MYSQL_TYPE_TIME: - case MYSQL_TYPE_TIME2: + case MYSQL_TYPE_TIME2: { + MYSQL_TIME my_time; + std::memset(&my_time, 0, sizeof(my_time)); + f->get_time(&my_time); + types::DT dt = {}; + dt.time_hour = my_time.hour; + dt.minute = my_time.minute; + dt.second = my_time.second; + dt.neg = my_time.neg; + v.SetInt(dt.val); + break; + } case MYSQL_TYPE_DATE: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_NEWDATE: @@ -209,30 +220,10 @@ class DelayedInsertParser final { ptr += str_len; } break; case common::PackType::INT: { - if (attr->Type().Lookup()) { - uint32_t len = *(uint32_t *)ptr; - ptr += sizeof(uint32_t); - types::BString s(len == 0 ? "" : ptr, len); - int64_t *buf = reinterpret_cast(vc.Prepare(sizeof(int64_t))); - *buf = attr->EncodeValue_T(s, true); - vc.ExpectedSize(sizeof(int64_t)); - ptr += len; - } else { - int64_t *buf = reinterpret_cast(vc.Prepare(sizeof(int64_t))); - *buf = *(int64_t *)ptr; - - // if (attr->GetIfAutoInc()) { - // if (*buf == 0) // Value of auto inc column was not assigned by user - // *buf = attr->AutoIncNext(); - // if (static_cast(*buf) > attr->GetAutoInc()) { - // if (*buf > 0 || ((attr->TypeName() == common::ColumnType::BIGINT) && - // attr->GetIfUnsigned())) - // attr->SetAutoInc(*buf); - // } - // } - vc.ExpectedSize(sizeof(int64_t)); - ptr += sizeof(int64_t); - } + int64_t *buf = reinterpret_cast(vc.Prepare(sizeof(int64_t))); + *buf = *(int64_t *)ptr; + vc.ExpectedSize(sizeof(int64_t)); + ptr += sizeof(int64_t); } break; default: break; @@ -280,10 +271,10 @@ class DelayedUpdateParser final { std::shared_ptr index) : attrs(attrs), update_rows(update_rows), index_table(std::move(index)) {} - uint GetRows(std::vector> &update_cols_buf) { + uint GetRows(std::vector>> &update_cols_buf) { update_cols_buf.reserve(attrs.size()); for (int i = 0; i < attrs.size(); i++) { - update_cols_buf.emplace_back(std::unordered_map()); + update_cols_buf.emplace_back(std::unordered_map>()); } uint update_row_num = update_rows->size(); for (auto &[row_id, row] : *update_rows) { @@ -291,7 +282,7 @@ class DelayedUpdateParser final { DeltaRecordHeadForUpdate rec_head; row_ptr = rec_head.recordDecode(row_ptr); for (uint col_id = 0; col_id < attrs.size(); col_id++) { - core::Value val; + std::shared_ptr val = std::make_shared(); if (!rec_head.update_mask_[col_id]) { continue; } @@ -304,29 +295,21 @@ class DelayedUpdateParser final { switch (attr->GetPackType()) { case common::PackType::STR: { uint32_t str_len = rec_head.field_len_[col_id]; - val.SetString(const_cast(row_ptr), str_len); + val->SetString(const_cast(row_ptr), str_len); update_cols_buf[col_id].emplace(row_id, val); row_ptr += str_len; } break; case common::PackType::INT: { - if (attr->Type().Lookup()) { - uint32_t len = *(uint32_t *)row_ptr; - row_ptr += sizeof(uint32_t); - types::BString s(len == 0 ? "" : row_ptr, len); - int64_t int_val = attr->EncodeValue_T(s, true); - row_ptr += len; - } else { - int64_t int_val = *(int64_t *)row_ptr; - if (attr->GetIfAutoInc()) { - if (int_val == 0) // Value of auto inc column was not assigned by user - int_val = attr->AutoIncNext(); - if (static_cast(int_val) > attr->GetAutoInc()) - attr->SetAutoInc(int_val); - } - val.SetInt(int_val); - update_cols_buf[col_id].emplace(row_id, val); - row_ptr += sizeof(int64_t); + int64_t int_val = *(int64_t *)row_ptr; + if (attr->GetIfAutoInc()) { + if (int_val == 0) // Value of auto inc column was not assigned by user + int_val = attr->AutoIncNext(); + if (static_cast(int_val) > attr->GetAutoInc()) + attr->SetAutoInc(int_val); } + val->SetInt(int_val); + update_cols_buf[col_id].emplace(row_id, val); + row_ptr += sizeof(int64_t); } break; default: break; @@ -353,20 +336,30 @@ uint32_t TianmuTable::GetTableId(const fs::path &dir) { } void TianmuTable::CreateNew(const std::shared_ptr &opt) { - uint32_t tid = ha_tianmu_engine_->GetNextTableId(); + DBUG_ENTER("TianmuTable::CreateNew"); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + ASSERT(eng); + + // phase 1: Get the Next table id from tianmu.id file. + uint32_t tid = eng->GetNextTableId(); auto &path(opt->path); uint32_t no_attrs = opt->atis.size(); uint64_t auto_inc_value = opt->create_info->auto_increment_value; - fs::create_directory(path); + if (!fs::create_directory(path)) + throw common::DatabaseException("Create Directory " + path.string() + " failed!"); + DBUG_EXECUTE_IF("TIANMU_CREATE_TABLE_PHASE1", { DBUG_VOID_RETURN; }); TABLE_META meta{common::FILE_MAGIC, common::TABLE_DATA_VERSION, tid, opt->pss}; + // phase 2: create "TABLE_DESC" file. system::TianmuFile ftbl; ftbl.OpenCreateEmpty(path / common::TABLE_DESC_FILE); ftbl.WriteExact(&meta, sizeof(meta)); ftbl.Flush(); ftbl.Close(); + DBUG_EXECUTE_IF("TIANMU_CREATE_TABLE_PHASE2_FAILED", { DBUG_VOID_RETURN; }); + // phase 3: create version file. "V.trxid" auto zero = common::TABLE_VERSION_PREFIX + common::TX_ID(0).ToString(); std::ofstream ofs(path / zero); common::TX_ID zid(0); @@ -374,12 +367,18 @@ void TianmuTable::CreateNew(const std::shared_ptr &opt) { ofs.write(reinterpret_cast(&zid), sizeof(zid)); } ofs.flush(); + DBUG_EXECUTE_IF("TIANMU_CREATE_TABLE_PHASE3_FAILED", { DBUG_VOID_RETURN; }); + // phase 4: create the symbol link of `VERSION`. fs::create_symlink(zero, path / common::TABLE_VERSION_FILE); + DBUG_EXECUTE_IF("TIANMU_CREATE_TABLE_PHASE4_FAILED", { DBUG_VOID_RETURN; }); + // phase 5: create 'columns' directories. auto column_path = path / common::COLUMN_DIR; fs::create_directories(column_path); + DBUG_EXECUTE_IF("TIANMU_CREATE_TABLE_PHASE5_FAILED", { DBUG_VOID_RETURN; }); + // phase 6: create all columns directories with col id. for (size_t idx = 0; idx < no_attrs; idx++) { auto dir = Engine::GetNextDataDir(); dir /= std::to_string(tid) + "." + std::to_string(idx); @@ -394,6 +393,8 @@ void TianmuTable::CreateNew(const std::shared_ptr &opt) { // TIANMU_LOG(LogCtl_Level::INFO, "Column %zu at %s", idx, dir.c_str()); } TIANMU_LOG(LogCtl_Level::INFO, "Create table %s, ID = %u", opt->path.c_str(), tid); + + DBUG_VOID_RETURN; } void TianmuTable::Alter(const std::string &table_path, std::vector &new_cols, std::vector &old_cols, @@ -414,7 +415,11 @@ void TianmuTable::Alter(const std::string &table_path, std::vector &new f.OpenReadOnly(tab_dir / common::TABLE_DESC_FILE); f.ReadExact(&meta, sizeof(meta)); } - meta.id = ha_tianmu_engine_->GetNextTableId(); // only table id is updated + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + meta.id = eng->GetNextTableId(); // only table id is updated { system::TianmuFile tempf; @@ -498,7 +503,10 @@ TianmuTable::TianmuTable(std::string const &p, TableShare *s, Transaction *tx) : if (!index::NormalizeName(table_name, normalized_path)) { throw common::Exception("Normalization wrong of table " + share->Path()); } - m_delta = ha_kvstore_->FindDeltaTable(normalized_path); + + Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + m_delta = eng->getStore()->FindDeltaTable(normalized_path); } void TianmuTable::LockPackInfoForUse() { @@ -587,8 +595,11 @@ void TianmuTable::CommitVersion() { utils::result_set res; bool no_except = true; - for (auto &attr : m_attrs) - res.insert(ha_tianmu_engine_->load_thread_pool.add_task(&TianmuAttr::SaveVersion, attr.get())); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + for (auto &attr : m_attrs) res.insert(eng->load_thread_pool.add_task(&TianmuAttr::SaveVersion, attr.get())); std::vector changed_columns; changed_columns.reserve(m_attrs.size()); @@ -606,6 +617,7 @@ void TianmuTable::CommitVersion() { TIANMU_LOG(LogCtl_Level::ERROR, "An unknown system exception error caught."); } } + if (!no_except) { throw common::Exception("Parallel save attribute failed."); } @@ -663,6 +675,7 @@ void TianmuTable::CommitVersion() { if (fd < 0) { throw std::system_error(errno, std::system_category(), "open() " + p.string()); } + int ret = ::fsync(fd); if (ret != 0) { throw std::system_error(errno, std::system_category(), "fsync() " + p.string()); @@ -880,19 +893,21 @@ void TianmuTable::Field2VC(Field *f, loader::ValueCache &vc, size_t col) { my_time_t secs_utc = current_txn_->Thd()->variables.time_zone->TIME_to_gmt_sec(&my_time, &myb); common::GMTSec2GMTTime(&my_time, secs_utc); } - types::DT dt = {}; - dt.year = my_time.year; - dt.month = my_time.month; - dt.day = my_time.day; - dt.hour = my_time.hour; - dt.minute = my_time.minute; - dt.second = my_time.second; + types::DT dt(my_time); *reinterpret_cast(vc.Prepare(sizeof(int64_t))) = dt.val; vc.ExpectedSize(sizeof(int64_t)); } break; case MYSQL_TYPE_TIME: - case MYSQL_TYPE_TIME2: + case MYSQL_TYPE_TIME2: { + MYSQL_TIME my_time; + std::memset(&my_time, 0, sizeof(my_time)); + f->get_time(&my_time); + types::DT dt(my_time); + + *reinterpret_cast(vc.Prepare(sizeof(int64_t))) = dt.val; + vc.ExpectedSize(sizeof(int64_t)); + } break; case MYSQL_TYPE_DATE: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_NEWDATE: @@ -901,13 +916,7 @@ void TianmuTable::Field2VC(Field *f, loader::ValueCache &vc, size_t col) { MYSQL_TIME my_time; std::memset(&my_time, 0, sizeof(my_time)); f->get_time(&my_time); - types::DT dt = {}; - dt.year = my_time.year; - dt.month = my_time.month; - dt.day = my_time.day; - dt.hour = my_time.hour; - dt.minute = my_time.minute; - dt.second = my_time.second; + types::DT dt(my_time); *reinterpret_cast(vc.Prepare(sizeof(int64_t))) = dt.val; vc.ExpectedSize(sizeof(int64_t)); @@ -965,7 +974,10 @@ int TianmuTable::Insert(TABLE *table) { vcs[i].Commit(); } - std::shared_ptr tab = ha_tianmu_engine_->GetTableIndex(share->Path()); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + std::shared_ptr tab = eng->GetTableIndex(share->Path()); if (tab) { std::vector fields; std::vector cols = tab->KeyCols(); @@ -978,18 +990,27 @@ int TianmuTable::Insert(TABLE *table) { return HA_ERR_FOUND_DUPP_KEY; } } + + utils::result_set res; for (uint i = 0; i < NumOfAttrs(); i++) { - m_attrs[i]->LoadData(&vcs[i]); + res.insert(eng->load_thread_pool.add_task(&TianmuAttr::LoadData, m_attrs[i].get(), &vcs[i], current_txn_)); } + res.get_all_with_except(); return 0; } int TianmuTable::Update(TABLE *table, uint64_t row_id, const uchar *old_data, uchar *new_data) { - // todo(dfx): move to before for loop, need test my_bitmap_map *org_bitmap2 = dbug_tmp_use_all_columns(table, table->read_set); std::shared_ptr defer(nullptr, [org_bitmap2, table](...) { dbug_tmp_restore_column_map(table->read_set, org_bitmap2); }); utils::result_set res; + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + // uinsg check_unique_constraint(table) to check whether it has unique constr on this table; + // now, tianmu only support PK, the unique constraint is not supported now. + // the vfield is not in our consideration. and should not has any triggers on it. for (uint col_id = 0; col_id < table->s->fields; col_id++) { if (!bitmap_is_set(table->write_set, col_id)) { continue; @@ -1004,18 +1025,19 @@ int TianmuTable::Update(TABLE *table, uint64_t row_id, const uchar *old_data, uc if (field->is_null_in_record(new_data)) { core::Value old_v, new_v; UpdateGetOldNewValue(table, col_id, old_v, new_v); - res.insert(ha_tianmu_engine_->delete_or_update_thread_pool.add_task( - &core::TianmuTable::UpdateItem, this, row_id, col_id, old_v, new_v, current_txn_)); + res.insert(eng->delete_or_update_thread_pool.add_task(&core::TianmuTable::UpdateItem, this, row_id, col_id, + old_v, new_v, current_txn_)); continue; } } + auto o_ptr = field->ptr - table->record[0] + old_data; auto n_ptr = field->ptr - table->record[0] + new_data; if (field->is_null_in_record(old_data) || std::memcmp(o_ptr, n_ptr, field->pack_length()) != 0) { core::Value old_v, new_v; UpdateGetOldNewValue(table, col_id, old_v, new_v); - res.insert(ha_tianmu_engine_->delete_or_update_thread_pool.add_task(&core::TianmuTable::UpdateItem, this, row_id, - col_id, old_v, new_v, current_txn_)); + res.insert(eng->delete_or_update_thread_pool.add_task(&core::TianmuTable::UpdateItem, this, row_id, col_id, old_v, + new_v, current_txn_)); } } res.get_all_with_except(); @@ -1024,10 +1046,14 @@ int TianmuTable::Update(TABLE *table, uint64_t row_id, const uchar *old_data, uc int TianmuTable::Delete(TABLE *table, uint64_t row_id) { utils::result_set res; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (uint i = 0; i < table->s->fields; i++) { - res.insert(ha_tianmu_engine_->delete_or_update_thread_pool.add_task(&core::TianmuTable::DeleteItem, this, row_id, i, - current_txn_)); + res.insert( + eng->delete_or_update_thread_pool.add_task(&core::TianmuTable::DeleteItem, this, row_id, i, current_txn_)); } + res.get_all_with_except(); return 0; } @@ -1072,6 +1098,8 @@ uint64_t TianmuTable::ProceedNormal(system::IOParameters &iop) { uint to_prepare; uint no_of_rows_returned; utils::Timer timer; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); do { to_prepare = share->PackSize() - (m_attrs[0]->NumOfObj() % share->PackSize()); @@ -1081,8 +1109,8 @@ uint64_t TianmuTable::ProceedNormal(system::IOParameters &iop) { if (parser.GetNoRow() > 0) { utils::result_set res; for (uint att = 0; att < m_attrs.size(); ++att) { - res.insert(ha_tianmu_engine_->load_thread_pool.add_task(&TianmuAttr::LoadData, m_attrs[att].get(), - &value_buffers[att], current_txn_)); + res.insert(eng->load_thread_pool.add_task(&TianmuAttr::LoadData, m_attrs[att].get(), &value_buffers[att], + current_txn_)); } res.get_all(); } @@ -1443,8 +1471,10 @@ uint64_t TianmuTable::ProcessDelayed(system::IOParameters &iop) { std::string str(basename(const_cast(iop.Path()))); auto vec = reinterpret_cast> *>(std::stol(str)); - DelayedInsertParser parser(m_attrs, vec, share->PackSize(), ha_tianmu_engine_->GetTableIndex(share->Path()), - current_txn_); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + DelayedInsertParser parser(m_attrs, vec, share->PackSize(), eng->GetTableIndex(share->Path()), current_txn_); long no_loaded_rows = 0; uint to_prepare, no_of_rows_returned; @@ -1458,8 +1488,7 @@ uint64_t TianmuTable::ProcessDelayed(system::IOParameters &iop) { if (real_loaded_rows > 0) { utils::result_set res; for (uint att = 0; att < m_attrs.size(); ++att) { - res.insert(ha_tianmu_engine_->load_thread_pool.add_task(&TianmuAttr::LoadData, m_attrs[att].get(), &vcs[att], - current_txn_)); + res.insert(eng->load_thread_pool.add_task(&TianmuAttr::LoadData, m_attrs[att].get(), &vcs[att], current_txn_)); } res.get_all(); @@ -1491,18 +1520,23 @@ void TianmuTable::DeleteToDelta(uint64_t row_id, std::unique_ptr buf, ui return m_delta->AddRecord(current_txn_, row_id, std::move(buf), size); } -void TianmuTable::InsertIndexForDelta(TABLE *table, uint64_t row_id) { - std::shared_ptr tab = ha_tianmu_engine_->GetTableIndex(share->Path()); +int TianmuTable::InsertIndexForDelta(TABLE *table, uint64_t row_id) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + std::shared_ptr tab = eng->GetTableIndex(share->Path()); if (tab) { std::vector fields; GetKeys(table, fields, tab); if (tab->InsertIndex(current_txn_, fields, row_id) == common::ErrorCode::DUPP_KEY) { TIANMU_LOG(LogCtl_Level::INFO, "Insert duplicate key on row %d, key: %s", row_id, fields[0].data()); - throw common::DupKeyException("Insert duplicate key on row: " + std::to_string(row_id) + - ", pk: " + std::to_string(*(uint64_t *)(fields[0].data()))); + /*throw common::DupKeyException("Insert duplicate key on row: " + std::to_string(row_id) + + ", pk: " + std::to_string(*(uint64_t *)(fields[0].data())));*/ + return HA_ERR_FOUND_DUPP_KEY; } } + return 0; } void TianmuTable::UpdateIndexForDelta(TABLE *table, uint64_t row_id, uint64_t col) { @@ -1512,7 +1546,10 @@ void TianmuTable::UpdateIndexForDelta(TABLE *table, uint64_t row_id, uint64_t co } void TianmuTable::DeleteIndexForDelta(TABLE *table, uint64_t row_id) { - std::shared_ptr tab = ha_tianmu_engine_->GetTableIndex(share->Path()); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + std::shared_ptr tab = eng->GetTableIndex(share->Path()); if (tab) { std::vector fields; GetKeys(table, fields, tab); @@ -1538,6 +1575,8 @@ uint64_t TianmuTable::MergeDeltaTable(system::IOParameters &iop) { uint64 expected_count = m_delta->CountRecords() < tianmu_sysvar_merge_rocks_expected_count ? m_delta->CountRecords() : tianmu_sysvar_merge_rocks_expected_count; + + uint64_t total_load_num = 0, total_read_cnt = 0, total_read_bytes = 0; { // combine prefix key uchar key_buf[sizeof(uint32_t)]; @@ -1557,14 +1596,18 @@ uint64_t TianmuTable::MergeDeltaTable(system::IOParameters &iop) { index::be_to_uint64(reinterpret_cast(iter->key().data()) + sizeof(uint32_t))); } #endif + while (expected_count > 0 && iter->Valid() && iter->key().starts_with(prefix)) { auto key = iter->key(); uint64_t row_id = index::be_to_uint64(reinterpret_cast(key.data()) + sizeof(uint32_t)); auto value = iter->value(); + std::unique_ptr buf(new char[value.size()]); std::memcpy(buf.get(), value.data(), value.size()); + auto type = *reinterpret_cast(buf.get()); auto load_num = *reinterpret_cast(buf.get() + sizeof(RecordType)); + if (type == RecordType::kInsert) { insert_records.emplace_back(std::move(buf)); } else if (type == RecordType::kUpdate) { @@ -1574,45 +1617,53 @@ uint64_t TianmuTable::MergeDeltaTable(system::IOParameters &iop) { } else { TIANMU_LOG(LogCtl_Level::ERROR, "record type (%d) cannot be processed, delete this record!", type); } + m_tx->KVTrans().SingleDeleteData(cf_handle, iter->key()); // todo(dfx): change to DeleteRange + expected_count -= load_num; - m_delta->merge_id.fetch_add(load_num); - m_delta->stat.read_cnt++; - m_delta->stat.read_bytes += value.size(); - if (insert_records.size() >= static_cast(tianmu_sysvar_insert_max_buffered)) { - insert_num += AsyncParseInsertRecords(&iop, &insert_records); - } - if (update_records.size() >= static_cast(tianmu_sysvar_insert_max_buffered)) { - update_num += AsyncParseUpdateRecords(&iop, &update_records); - } - if (delete_records.size() >= static_cast(tianmu_sysvar_insert_max_buffered)) { - delete_num += AsyncParseDeleteRecords(delete_records); - } + total_load_num += load_num; + total_read_cnt++; + total_read_bytes += value.size(); + iter->Next(); } } + clock_gettime(CLOCK_REALTIME, &t2); + if (!insert_records.empty()) { insert_num += AsyncParseInsertRecords(&iop, &insert_records); } + if (!update_records.empty()) { update_num += AsyncParseUpdateRecords(&iop, &update_records); } + if (!delete_records.empty()) { delete_num += AsyncParseDeleteRecords(delete_records); } + if (t2.tv_sec - t1.tv_sec > 15) { TIANMU_LOG(LogCtl_Level::WARN, "Latency of rowstore %s larger than 15s, compact manually.", share->Path().c_str()); - ha_kvstore_->GetRdb()->CompactRange(rocksdb::CompactRangeOptions(), m_delta->GetCFHandle(), nullptr, nullptr); + Engine *eng = reinterpret_cast(tianmu_hton->data); + eng->getStore()->GetRdb()->CompactRange(rocksdb::CompactRangeOptions(), m_delta->GetCFHandle(), nullptr, nullptr); } + m_delta->merge_id.fetch_add(total_load_num); + m_delta->stat.read_cnt += total_read_cnt; + m_delta->stat.read_bytes += total_read_bytes; + return insert_num + update_num + delete_num; } int TianmuTable::AsyncParseInsertRecords(system::IOParameters *iop, std::vector> *insert_vec) { struct timespec t1, t2; clock_gettime(CLOCK_REALTIME, &t1); - auto index_table = ha_tianmu_engine_->GetTableIndex(share->Path()); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + auto index_table = eng->GetTableIndex(share->Path()); DelayedInsertParser parser(m_attrs, insert_vec, share->PackSize(), index_table, m_tx); uint64_t loaded_row_num = 0; @@ -1621,21 +1672,25 @@ int TianmuTable::AsyncParseInsertRecords(system::IOParameters *iop, std::vector< to_prepare = share->PackSize() - (int)(m_attrs[0]->NumOfObj() % share->PackSize()); std::vector vcs; no_of_rows_returned = parser.GetRows(to_prepare, vcs); + size_t real_loaded_rows = vcs[0].NumOfValues(); no_dup_rows += (no_of_rows_returned - real_loaded_rows); + if (real_loaded_rows > 0) { utils::result_set res; for (uint att = 0; att < m_attrs.size(); ++att) { - res.insert( - ha_tianmu_engine_->load_thread_pool.add_task(&TianmuAttr::LoadData, m_attrs[att].get(), &vcs[att], m_tx)); + res.insert(eng->load_thread_pool.add_task(&TianmuAttr::LoadData, m_attrs[att].get(), &vcs[att], m_tx)); } + res.get_all(); loaded_row_num += real_loaded_rows; if (mysql_bin_log.is_open()) binlog_insert2load_block(vcs, real_loaded_rows, *iop); } } while (no_of_rows_returned == to_prepare); + clock_gettime(CLOCK_REALTIME, &t2); + if (loaded_row_num > 0 && mysql_bin_log.is_open()) if (binlog_insert2load_log_event(*iop) != 0) { TIANMU_LOG(LogCtl_Level::ERROR, "Write insert to load binlog fail!"); @@ -1645,8 +1700,9 @@ int TianmuTable::AsyncParseInsertRecords(system::IOParameters *iop, std::vector< if ((t2.tv_sec - t1.tv_sec > 15) && index_table) { TIANMU_LOG(LogCtl_Level::WARN, "Latency of index table %s larger than 15s, compact manually.", share->Path().c_str()); - ha_kvstore_->GetRdb()->CompactRange(rocksdb::CompactRangeOptions(), index_table->rocksdb_key_->get_cf(), nullptr, - nullptr); + Engine *eng = reinterpret_cast(tianmu_hton->data); + eng->getStore()->GetRdb()->CompactRange(rocksdb::CompactRangeOptions(), index_table->rocksdb_key_->get_cf(), + nullptr, nullptr); } return loaded_row_num; } @@ -1654,39 +1710,50 @@ int TianmuTable::AsyncParseUpdateRecords(system::IOParameters *iop, std::map> *update_records) { struct timespec t1, t2; clock_gettime(CLOCK_REALTIME, &t1); - auto index_table = ha_tianmu_engine_->GetTableIndex(share->Path()); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + auto index_table = eng->GetTableIndex(share->Path()); DelayedUpdateParser parser(m_attrs, update_records, index_table); - std::vector> update_cols_buf; + std::vector>> update_cols_buf; + int returned_row_num = parser.GetRows(update_cols_buf); if (returned_row_num > 0) { utils::result_set res; for (uint att = 0; att < m_attrs.size(); ++att) { if (!update_cols_buf[att].empty()) { - res.insert(ha_tianmu_engine_->delete_or_update_thread_pool.add_task( - &TianmuAttr::UpdateBatchData, m_attrs[att].get(), current_txn_, update_cols_buf[att])); + res.insert(eng->delete_or_update_thread_pool.add_task(&TianmuAttr::UpdateBatchData, m_attrs[att].get(), + current_txn_, update_cols_buf[att])); } } - res.get_all_with_except(); + res.get_all(); } + clock_gettime(CLOCK_REALTIME, &t2); if ((t2.tv_sec - t1.tv_sec > 15) && index_table) { TIANMU_LOG(LogCtl_Level::WARN, "Latency of index table %s larger than 15s, compact manually.", share->Path().c_str()); - ha_kvstore_->GetRdb()->CompactRange(rocksdb::CompactRangeOptions(), index_table->rocksdb_key_->get_cf(), nullptr, - nullptr); + eng->getStore()->GetRdb()->CompactRange(rocksdb::CompactRangeOptions(), index_table->rocksdb_key_->get_cf(), + nullptr, nullptr); } + return returned_row_num; } int TianmuTable::AsyncParseDeleteRecords(std::vector &delete_records) { if (!delete_records.empty()) { utils::result_set res; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (uint att = 0; att < m_attrs.size(); ++att) { - res.insert(ha_tianmu_engine_->delete_or_update_thread_pool.add_task( - &TianmuAttr::DeleteBatchData, m_attrs[att].get(), current_txn_, delete_records)); + res.insert(eng->delete_or_update_thread_pool.add_task(&TianmuAttr::DeleteBatchData, m_attrs[att].get(), + current_txn_, delete_records)); } - res.get_all_with_except(); + res.get_all(); } + return delete_records.size(); } diff --git a/storage/tianmu/core/tianmu_table.h b/storage/tianmu/core/tianmu_table.h index b28e107d9..368532dc9 100644 --- a/storage/tianmu/core/tianmu_table.h +++ b/storage/tianmu/core/tianmu_table.h @@ -23,9 +23,9 @@ #include "common/common_definitions.h" #include "core/delta_table.h" #include "core/just_a_table.h" -#include "core/tianmu_attr.h" #include "index/tianmu_table_index.h" #include "util/fs.h" +#include "vc/tianmu_attr.h" namespace Tianmu { @@ -140,7 +140,7 @@ class TianmuTable final : public JustATable { void UpdateToDelta(uint64_t row_id, std::unique_ptr buf, uint32_t size); void DeleteToDelta(uint64_t row_id, std::unique_ptr buf, uint32_t size); - void InsertIndexForDelta(TABLE *table, uint64_t row_id); + int InsertIndexForDelta(TABLE *table, uint64_t row_id); void UpdateIndexForDelta(TABLE *table, uint64_t row_id, uint64_t col); void DeleteIndexForDelta(TABLE *table, uint64_t row_id); diff --git a/storage/tianmu/core/transaction.cpp b/storage/tianmu/core/transaction.cpp index dd7e5be6a..a57495fb2 100644 --- a/storage/tianmu/core/transaction.cpp +++ b/storage/tianmu/core/transaction.cpp @@ -17,11 +17,11 @@ #include "core/transaction.h" -#include "core/dpn.h" #include "core/tianmu_table.h" -#include "core/tools.h" +#include "data/dpn.h" #include "system/file_system.h" #include "util/fs.h" +#include "util/tools.h" namespace Tianmu { // current transaction, thread local var. diff --git a/storage/tianmu/core/value_matching_hashtable.cpp b/storage/tianmu/core/value_matching_hashtable.cpp index 643aa5e2f..d585ef3c1 100644 --- a/storage/tianmu/core/value_matching_hashtable.cpp +++ b/storage/tianmu/core/value_matching_hashtable.cpp @@ -17,7 +17,7 @@ #include "value_matching_hashtable.h" -#include "core/bin_tools.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/value_matching_table.h b/storage/tianmu/core/value_matching_table.h index 02e2e7dbc..872c4a8bc 100644 --- a/storage/tianmu/core/value_matching_table.h +++ b/storage/tianmu/core/value_matching_table.h @@ -18,9 +18,9 @@ #define TIANMU_CORE_VALUE_MATCHING_TABLE_H_ #pragma once -#include "core/bin_tools.h" -#include "core/filter.h" +#include "executor/filter.h" #include "mm/traceable_object.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/value_or_null.cpp b/storage/tianmu/core/value_or_null.cpp index ee3943c6b..6ee27f557 100644 --- a/storage/tianmu/core/value_or_null.cpp +++ b/storage/tianmu/core/value_or_null.cpp @@ -23,31 +23,39 @@ namespace Tianmu { namespace core { + void ValueOrNull::SetBString(const types::BString &tianmu_s) { Clear(); if (!tianmu_s.IsNull()) { null = false; if (tianmu_s.IsPersistent()) { string_owner = true; - sp = new char[tianmu_s.len_ + 1]; - std::memcpy(sp, tianmu_s.val_, tianmu_s.len_); - sp[tianmu_s.len_] = 0; + sp = new (std::nothrow) char[tianmu_s.len_ + 1]; + if (sp) { + std::memset(sp, '\0', tianmu_s.len_ + 1); + std::memcpy(sp, tianmu_s.val_, tianmu_s.len_); + } } else { sp = tianmu_s.val_; string_owner = false; } + len = tianmu_s.len_; } } void ValueOrNull::MakeStringOwner() { - if (!sp || string_owner) + if (!sp || !len || string_owner) return; - char *tmp = new char[len + 1]; - std::memcpy(tmp, sp, len); - tmp[len] = 0; - sp = tmp; - string_owner = true; + + char *tmp = new (std::nothrow) char[len + 1]; + if (tmp) { + std::memset(tmp, '\0', len + 1); + std::memcpy(tmp, sp, len); + + sp = tmp; + string_owner = true; + } } std::optional ValueOrNull::ToString() const { @@ -63,36 +71,55 @@ void ValueOrNull::GetBString(types::BString &tianmu_s) const { tianmu_s = rcs_null; } else { // copy either from sp or x - if (sp) - tianmu_s = types::BString(sp, len, true); - else - tianmu_s = types::TianmuNum(x).ToBString(); + tianmu_s = (sp) ? types::BString(sp, len, true) : types::TianmuNum(x).ToBString(); tianmu_s.MakePersistent(); } } ValueOrNull::ValueOrNull(ValueOrNull const &von) - : x(von.x), len(von.len), string_owner(von.string_owner), null(von.null) { - if (string_owner) { - sp = new char[len + 1]; - std::memcpy(sp, von.sp, len); - sp[len] = 0; + : x(von.x), len(von.len), string_owner(von.string_owner), null(von.null), unsigned_flag_(von.unsigned_flag_) { + if (string_owner && von.sp && len > 0) { + sp = new (std::nothrow) char[len + 1]; + + if (sp) { + std::memset(sp, '\0', len + 1); + std::memcpy(sp, von.sp, len); + } else { + string_owner = false; + sp = von.sp; + } } else { sp = von.sp; } } ValueOrNull &ValueOrNull::operator=(ValueOrNull const &von) { - if (&von != this) { - ValueOrNull tmp(von); - Swap(tmp); + if (this == &von) + return *this; + + if (von.string_owner && von.sp) { + sp = new (std::nothrow) char[von.len + 1]; + if (sp) { + std::memset(sp, '\0', von.len + 1); + std::memcpy(sp, von.sp, von.len); + len = von.len; + } + } else { + sp = von.sp; } + + string_owner = von.string_owner; + null = von.null; + x = von.x; + return (*this); } -ValueOrNull::ValueOrNull(types::TianmuNum const &tianmu_n) : x(tianmu_n.GetValueInt64()), null(tianmu_n.IsNull()) {} +ValueOrNull::ValueOrNull(types::TianmuNum const &tianmu_n) + : x(tianmu_n.GetValueInt64()), null(tianmu_n.IsNull()), unsigned_flag_(tianmu_n.GetUnsignedFlag()) {} -ValueOrNull::ValueOrNull(types::TianmuDateTime const &tianmu_dt) : x(tianmu_dt.GetInt64()), null(tianmu_dt.IsNull()) {} +ValueOrNull::ValueOrNull(types::TianmuDateTime const &tianmu_dt) + : x(tianmu_dt.GetInt64()), null(tianmu_dt.IsNull()), unsigned_flag_(true) {} ValueOrNull::ValueOrNull(types::BString const &tianmu_s) : x(common::NULL_VALUE_64), @@ -111,7 +138,9 @@ void ValueOrNull::Swap(ValueOrNull &von) { std::swap(sp, von.sp); std::swap(len, von.len); std::swap(string_owner, von.string_owner); + std::swap(unsigned_flag_, von.unsigned_flag_); } } + } // namespace core } // namespace Tianmu diff --git a/storage/tianmu/core/value_or_null.h b/storage/tianmu/core/value_or_null.h index fa3a35518..e41574604 100644 --- a/storage/tianmu/core/value_or_null.h +++ b/storage/tianmu/core/value_or_null.h @@ -58,6 +58,8 @@ class ValueOrNull final { bool NotNull() const { return !null; } size_t StrLen() const { return len; } int64_t Get64() const { return x; } + bool GetUnsignedFlag() const { return unsigned_flag_; } + void SetUnsignedFlag(bool is_unsigned) { unsigned_flag_ = is_unsigned; } void SetFixed(int64_t v) { Clear(); @@ -95,26 +97,42 @@ class ValueOrNull final { */ void GetBString(types::BString &tianmu_s) const; std::optional ToString() const; + void Clear_SP() { + if (string_owner && sp) { + delete[] sp; + sp = nullptr; - private: - int64_t x; // 8-byte value of an expression; interpreted as int64_t or double - char *sp = nullptr; // != 0 if string value assigned - uint len = 0; // string length; used only for ValueType::VT_STRING - bool string_owner = false; // if true, destructor must deallocate sp - bool null; + string_owner = false; + null = true; + len = 0; + } + } + private: void Swap(ValueOrNull &von); void Clear() { - if (string_owner) + if (string_owner && sp) { delete[] sp; - sp = nullptr; - string_owner = false; + sp = nullptr; + + string_owner = false; + } + null = true; x = common::NULL_VALUE_64; len = 0; + unsigned_flag_ = false; } + + private: + int64_t x; // 8-byte value of an expression; interpreted as int64_t or double + bool unsigned_flag_ = false; // check if x is unsigned or not + char *sp = nullptr; // != 0 if string value assigned + uint len = 0; // string length; used only for ValueType::VT_STRING + bool string_owner = false; // if true, destructor must deallocate sp + bool null; }; } // namespace core } // namespace Tianmu -#endif // TIANMU_CORE_VALUE_OR_NULL_H_ \ No newline at end of file +#endif // TIANMU_CORE_VALUE_OR_NULL_H_ diff --git a/storage/tianmu/core/value_set.cpp b/storage/tianmu/core/value_set.cpp index f1370cad5..8c9c50bf3 100644 --- a/storage/tianmu/core/value_set.cpp +++ b/storage/tianmu/core/value_set.cpp @@ -15,11 +15,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #include "common/common_definitions.h" -#include "core/filter.h" -#include "core/tianmu_attr_typeinfo.h" +#include "executor/filter.h" #include "types/text_stat.h" #include "types/tianmu_num.h" #include "util/hash64.h" +#include "vc/tianmu_attr_typeinfo.h" #include "value_set.h" diff --git a/storage/tianmu/core/dpn.h b/storage/tianmu/data/dpn.h similarity index 96% rename from storage/tianmu/core/dpn.h rename to storage/tianmu/data/dpn.h index cff50d80f..032ef5996 100644 --- a/storage/tianmu/core/dpn.h +++ b/storage/tianmu/data/dpn.h @@ -73,14 +73,13 @@ struct DPN final { private: // a tagged pointer, 16 bits as ref count. - // Only read-only dpn uses it for ref counting; local dpn is managed only by - // one write session + // Only read-only dpn uses it for ref counting; local dpn is managed only by one write session std::atomic_ulong tagged_ptr; public: bool CAS(uint64_t &expected, uint64_t desired) { return tagged_ptr.compare_exchange_weak(expected, desired); } - uint64_t GetPackPtr() const { return tagged_ptr.load(); } - void SetPackPtr(uint64_t v) { tagged_ptr.store(v); } + uint64_t GetRefCount() const { return tagged_ptr.load(); } + void SetRefCount(uint64_t v) { tagged_ptr.store(v); } /* Because the delete bitmap is in the pack, when there are deleted records in the pack, diff --git a/storage/tianmu/core/pack.cpp b/storage/tianmu/data/pack.cpp similarity index 86% rename from storage/tianmu/core/pack.cpp rename to storage/tianmu/data/pack.cpp index 2e0126d8c..368d5a636 100644 --- a/storage/tianmu/core/pack.cpp +++ b/storage/tianmu/data/pack.cpp @@ -15,16 +15,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/pack.h" +#include "data/pack.h" #include "compress/bit_stream_compressor.h" #include "compress/num_compressor.h" -#include "core/bin_tools.h" -#include "core/column_share.h" #include "core/data_cache.h" -#include "core/tools.h" #include "core/value.h" #include "loader/value_cache.h" #include "system/tianmu_file.h" +#include "util/bin_tools.h" +#include "util/tools.h" +#include "vc/column_share.h" namespace Tianmu { namespace core { @@ -32,6 +32,8 @@ Pack::Pack(DPN *dpn, PackCoordinate pc, ColumnShare *col_share) : col_share_(col bitmap_size_ = (1 << col_share->pss) / 8; nulls_ptr_ = std::make_unique(bitmap_size_ / sizeof(uint32_t)); deletes_ptr_ = std::make_unique(bitmap_size_ / sizeof(uint32_t)); + std::memset(nulls_ptr_.get(), 0, bitmap_size_); + std::memset(deletes_ptr_.get(), 0, bitmap_size_); // nulls MUST be initialized in the constructor, there are 3 cases in total: // 1. All values are nullptr. It is initialized here by InitNull(); // 2. All values are uniform. Then it would be all zeros already. @@ -41,6 +43,11 @@ Pack::Pack(DPN *dpn, PackCoordinate pc, ColumnShare *col_share) : col_share_(col m_coord.co.pack = pc; } +// Number of bits in bytes +const uint kBitsInBytes = 8; +// Fill in values to prevent boundary errors +const uint kPadding = kBitsInBytes - 1; + Pack::Pack(const Pack &ap, const PackCoordinate &pc) : mm::TraceableObject(ap), col_share_(ap.col_share_), dpn_(ap.dpn_) { m_coord.ID = COORD_TYPE::PACK; @@ -79,13 +86,8 @@ bool Pack::ShouldNotCompress() const { bool Pack::CompressedBitMap(mm::MMGuard &comp_buf, uint &comp_buf_size, std::unique_ptr &ptr_buf, uint32_t &dpn_num1) { - // Number of bits in bytes - int bitsInBytes = 8; - // Fill in values to prevent boundary errors - int padding = bitsInBytes - 1; // Because the maximum size of dpn_->numofrecords is 65536, the buffer used by bitmaps is also limited - comp_buf_size = ((dpn_->numOfRecords + padding) / bitsInBytes); - + comp_buf_size = ((dpn_->numOfRecords + kPadding) / kBitsInBytes); comp_buf = mm::MMGuard( static_cast(alloc((comp_buf_size + sizeof(ushort)) * sizeof(char), mm::BLOCK_TYPE::BLOCK_TEMPORARY)), *this); @@ -98,11 +100,16 @@ bool Pack::CompressedBitMap(mm::MMGuard &comp_buf, uint &comp_buf_size, s TIANMU_LOG(LogCtl_Level::ERROR, "buffer overrun by BitstreamCompressor (N f)."); ASSERT(0, "ERROR: buffer overrun by BitstreamCompressor (N f)."); } + return CheckCompressRes(comp_buf, comp_buf_size, ptr_buf, res); +} + +bool Pack::CheckCompressRes(mm::MMGuard &comp_buf, uint &comp_buf_size, std::unique_ptr &ptr_buf, + CprsErr res) { if (res == CprsErr::CPRS_SUCCESS) return true; else if (res == CprsErr::CPRS_ERR_BUF) { comp_buf = mm::MMGuard(reinterpret_cast(ptr_buf.get()), *this, false); - comp_buf_size = ((dpn_->numOfRecords + padding) / bitsInBytes); + comp_buf_size = ((dpn_->numOfRecords + kPadding) / kBitsInBytes); return false; } else { throw common::DatabaseException("Compression of nulls or deletes failed for column " + diff --git a/storage/tianmu/core/pack.h b/storage/tianmu/data/pack.h similarity index 95% rename from storage/tianmu/core/pack.h rename to storage/tianmu/data/pack.h index f57f1a109..efdfd991d 100644 --- a/storage/tianmu/core/pack.h +++ b/storage/tianmu/data/pack.h @@ -18,11 +18,11 @@ #define TIANMU_CORE_PACK_H_ #pragma once -#include "core/dpn.h" -#include "core/tools.h" +#include "data/dpn.h" #include "mm/mm_guard.h" #include "mm/traceable_object.h" #include "types/tianmu_data_types.h" +#include "util/tools.h" namespace Tianmu { namespace system { @@ -34,8 +34,7 @@ class Value; // table of modes: // 0 - trivial data: all values are derivable from the statistics, or nulls -// only, -// the pack physically doesn't exist, only statistics +// only, the pack physically doesn't exist, only statistics // 1 - unloaded (on disc) // 2 - loaded to memory // 3 - no data yet, empty pack @@ -103,16 +102,16 @@ class Pack : public mm::TraceableObject { PackCoordinate GetPackCoordinate() const { return m_coord.co.pack; } void SetDPN(DPN *new_dpn) { dpn_ = new_dpn; } - // Compress bitmap - bool CompressedBitMap(mm::MMGuard &comp_buf, uint &comp_buf_size, std::unique_ptr &ptr_buf, - uint32_t &dpn_num1); - protected: Pack(DPN *dpn, PackCoordinate pc, ColumnShare *col_share); Pack(const Pack &ap, const PackCoordinate &pc); virtual std::pair Compress() = 0; virtual void Destroy() = 0; + bool CompressedBitMap(mm::MMGuard &comp_buf, uint &comp_buf_size, std::unique_ptr &ptr_buf, + uint32_t &dpn_num1); + bool CheckCompressRes(mm::MMGuard &comp_buf, uint &comp_buf_size, std::unique_ptr &ptr_buf, + CprsErr res); bool ShouldNotCompress() const; bool IsModeNullsCompressed() const { return dpn_->null_compressed; } bool IsModeDeletesCompressed() const { return dpn_->delete_compressed; } diff --git a/storage/tianmu/core/pack_guardian.cpp b/storage/tianmu/data/pack_guardian.cpp similarity index 96% rename from storage/tianmu/core/pack_guardian.cpp rename to storage/tianmu/data/pack_guardian.cpp index fbd98d342..90c668bef 100644 --- a/storage/tianmu/core/pack_guardian.cpp +++ b/storage/tianmu/data/pack_guardian.cpp @@ -1,318 +1,319 @@ -/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. - Use is subject to license terms - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA -*/ - -#include - -#include "pack_guardian.h" - -#include "core/just_a_table.h" -#include "core/mi_iterator.h" -#include "vc/virtual_column.h" - -namespace Tianmu { -namespace core { -void VCPackGuardian::Initialize(int no_th) { - UnlockAll(); - last_pack_.clear(); - - guardian_threads_ = no_th; - - int no_dims = -1; - for (auto const &iter : my_vc_.GetVarMap()) - if (iter.dim > no_dims) - no_dims = iter.dim; // find the maximal number of dimension used - no_dims++; - if (no_dims > 0) { // else constant - last_pack_.reserve(no_dims); - for (int i = 0; i < no_dims; ++i) last_pack_.emplace_back(guardian_threads_, common::NULL_VALUE_32); - } - initialized_ = true; -} - -/* - * ResizeLastPack handles last_pack_ overflow under multi-threads group by - */ -void VCPackGuardian::ResizeLastPack(int taskNum) { - if (!initialized_) - return; - - for (auto &v : last_pack_) v.resize(taskNum, common::NULL_VALUE_32); - - guardian_threads_ = taskNum; -} - -void VCPackGuardian::LockPackrow(const MIIterator &mit) { - switch (current_strategy_) { - case GUARDIAN_LOCK_STRATEGY::LOCK_ONE: - return LockPackrowOnLockOne(mit); - case GUARDIAN_LOCK_STRATEGY::LOCK_ONE_THREAD: - return LockPackrowOnLockOneByThread(mit); - default: - TIANMU_LOG(LogCtl_Level::ERROR, "LockPackrow fail, unkown current_strategy_: %d", - static_cast(current_strategy_)); - ASSERT(0, "VCPackGuardian::LockPackrow fail, unkown current_strategy_: " + static_cast(current_strategy_)); - } -} - -// 1. Use the pthread thread identifier of glibc as a thread unique identifier. -// Internal encapsulation is no longer used -// 2. A single worker thread holds only one pack of vc of a particular dim -// 3. During each LockPackrow, hold packs are identified by the pthread ID. -// If the read pack is different from the held pack, the corresponding pack is released -void VCPackGuardian::LockPackrowOnLockOneByThread(const MIIterator &mit) { - const auto &var_map = my_vc_.GetVarMap(); - if (var_map.empty()) { - return; - } - - uint64_t thread_id = pthread_self(); - - TypeLockOne::iterator iter_thread; - - { - std::scoped_lock lock(mx_thread_); - iter_thread = last_pack_thread_.find(thread_id); - } - - bool has_myself_thread = last_pack_thread_.end() != iter_thread; - - for (auto iter = var_map.cbegin(); iter != var_map.cend(); iter++) { - int cur_dim = iter->dim; - int col_index = iter->col_ndx; - int cur_pack = mit.GetCurPackrow(cur_dim); - - if (!iter->GetTabPtr()) { - continue; - } - - JustATable *tab = iter->GetTabPtr().get(); - - if (has_myself_thread) { - auto iter_dim = iter_thread->second.find(cur_dim); - if (iter_thread->second.end() != iter_dim) { - auto iter_index = iter_dim->second.find(col_index); - if (iter_dim->second.end() != iter_index) { - int last_pack = iter_index->second; - if (last_pack == cur_pack) { - continue; - } - - iter_dim->second.erase(col_index); - tab->UnlockPackFromUse(col_index, last_pack); - } - } - } - - try { - tab->LockPackForUse(col_index, cur_pack); - } catch (...) { - TIANMU_LOG(LogCtl_Level::ERROR, - "LockPackrowOnLockOneByThread LockPackForUse fail, cur_dim: %d col_index: %d cur_pack: %d", cur_dim, - col_index, cur_pack); - - if (has_myself_thread) { - auto it = var_map.begin(); - for (; it != iter; ++it) { - int cur_dim = iter->dim; - int col_index = iter->col_ndx; - auto iter_dim = iter_thread->second.find(cur_dim); - if (iter_thread->second.end() == iter_dim) { - continue; - } - - int it_cur_pack = mit.GetCurPackrow(it->dim); - auto it_iter_pack = iter_dim->second.find(col_index); - if (iter_dim->second.end() == it_iter_pack) { - continue; - } - - tab->UnlockPackFromUse(it->col_ndx, it_cur_pack); - } - } - - UnlockAll(); - throw; - } - } - - for (auto iter = var_map.cbegin(); iter != var_map.cend(); iter++) { - if (!iter->GetTabPtr()) { - continue; - } - - int cur_dim = iter->dim; - int col_index = iter->col_ndx; - int cur_pack = mit.GetCurPackrow(cur_dim); - - { - if (has_myself_thread) { - auto iter_dim = iter_thread->second.find(cur_dim); - if (iter_thread->second.end() != iter_dim) { - auto iter_index = iter_dim->second.find(col_index); - if (iter_dim->second.end() != iter_index) { - int last_pack = iter_index->second; - if (last_pack == cur_pack) { - continue; - } - } - } - } - } - - if (!has_myself_thread) { - std::unordered_map> pack_value; - auto &lock_dim = pack_value[cur_dim]; - lock_dim[col_index] = cur_pack; - - { - std::scoped_lock lock(mx_thread_); - last_pack_thread_[thread_id] = std::move(pack_value); - } - } else { - auto &lock_thread = last_pack_thread_[thread_id]; - auto &lock_dim = lock_thread[cur_dim]; - lock_dim[col_index] = cur_pack; - } - } -} - -void VCPackGuardian::LockPackrowOnLockOne(const MIIterator &mit) { - int threadId = mit.GetTaskId(); - int taskNum = mit.GetTaskNum(); - { - std::scoped_lock g(mx_thread_); - if (!initialized_) { - Initialize(taskNum); - } - if (initialized_ && (taskNum > guardian_threads_)) { - // recheck to make sure last_pack_ is not overflow - ResizeLastPack(taskNum); - } - } - for (auto iter = my_vc_.GetVarMap().cbegin(); iter != my_vc_.GetVarMap().cend(); iter++) { - int cur_dim = iter->dim; - if (last_pack_[cur_dim][threadId] != mit.GetCurPackrow(cur_dim)) { - JustATable *tab = iter->GetTabPtr().get(); - if (last_pack_[cur_dim][threadId] != common::NULL_VALUE_32) - tab->UnlockPackFromUse(iter->col_ndx, last_pack_[cur_dim][threadId]); - try { - tab->LockPackForUse(iter->col_ndx, mit.GetCurPackrow(cur_dim)); - } catch (...) { - TIANMU_LOG(LogCtl_Level::ERROR, - "LockPackrowOnLockOne LockPackForUse fail, cur_dim: %d threadId: %d cur_pack: %d", cur_dim, threadId, - mit.GetCurPackrow(cur_dim)); - // unlock packs which are partially locked for this packrow - auto it = my_vc_.GetVarMap().begin(); - for (; it != iter; ++it) { - int cur_dim = it->dim; - if (last_pack_[cur_dim][threadId] != mit.GetCurPackrow(cur_dim) && - last_pack_[cur_dim][threadId] != common::NULL_VALUE_32) - it->GetTabPtr()->UnlockPackFromUse(it->col_ndx, mit.GetCurPackrow(cur_dim)); - } - - for (++iter; iter != my_vc_.GetVarMap().end(); ++iter) { - int cur_dim = iter->dim; - if (last_pack_[cur_dim][threadId] != mit.GetCurPackrow(cur_dim) && - last_pack_[cur_dim][threadId] != common::NULL_VALUE_32) - iter->GetTabPtr()->UnlockPackFromUse(iter->col_ndx, last_pack_[cur_dim][threadId]); - } - - for (auto const &iter : my_vc_.GetVarMap()) last_pack_[iter.dim][threadId] = common::NULL_VALUE_32; - throw; - } - } - } - for (auto const &iter : my_vc_.GetVarMap()) - last_pack_[iter.dim][threadId] = mit.GetCurPackrow(iter.dim); // must be in a separate loop, otherwise - // for "a + b" will not lock b -} - -void VCPackGuardian::UnlockAll() { - switch (current_strategy_) { - case GUARDIAN_LOCK_STRATEGY::LOCK_ONE: - return UnlockAllOnLockOne(); - case GUARDIAN_LOCK_STRATEGY::LOCK_ONE_THREAD: - return UnlockAllOnLockOneByThread(); - default: - TIANMU_LOG(LogCtl_Level::ERROR, "UnlockAll fail, unkown current_strategy_: %d", - static_cast(current_strategy_)); - ASSERT(0, "VCPackGuardian::UnlockAll fail, unkown current_strategy_: " + static_cast(current_strategy_)); - } -} - -void VCPackGuardian::UnlockAllOnLockOne() { - if (!initialized_) - return; - for (auto const &iter : my_vc_.GetVarMap()) { - for (int i = 0; i < guardian_threads_; ++i) - if (last_pack_[iter.dim][i] != common::NULL_VALUE_32 && iter.GetTabPtr()) - iter.GetTabPtr()->UnlockPackFromUse(iter.col_ndx, last_pack_[iter.dim][i]); - } - for (auto const &iter : my_vc_.GetVarMap()) { - for (int i = 0; i < guardian_threads_; ++i) - last_pack_[iter.dim][i] = common::NULL_VALUE_32; // must be in a separate loop, otherwise - // for "a + b" will not unlock b - } -} - -void VCPackGuardian::UnlockAllOnLockOneByThread() { - if (last_pack_thread_.empty()) { - return; - } - - const auto &var_map = my_vc_.GetVarMap(); - if (var_map.empty()) { - return; - } - - uint64_t thread_id = pthread_self(); - auto iter_thread = last_pack_thread_.find(thread_id); - if (last_pack_thread_.end() == iter_thread) { - return; - } - - for (auto const &iter : var_map) { - if (!iter.GetTabPtr()) { - continue; - } - - int cur_dim = iter.dim; - int col_index = iter.col_ndx; - - auto iter_pack = iter_thread->second.find(cur_dim); - if (iter_pack == iter_thread->second.end()) { - continue; - } - - auto iter_val = iter_pack->second.find(col_index); - if (iter_val == iter_pack->second.end()) { - continue; - } - - int cur_pack = iter_val->second; - iter_pack->second.erase(col_index); - iter.GetTabPtr()->UnlockPackFromUse(col_index, cur_pack); - } - - { - std::scoped_lock lock(mx_thread_); - last_pack_thread_.erase(thread_id); - } -} - -} // namespace core -} // namespace Tianmu +/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +#include + +#include "pack_guardian.h" + +#include "core/just_a_table.h" +#include "optimizer/iterators/mi_iterator.h" +#include "vc/virtual_column.h" + +namespace Tianmu { +namespace core { +void VCPackGuardian::Initialize(int no_th) { + UnlockAll(); + last_pack_.clear(); + + guardian_threads_ = no_th; + + int no_dims = -1; + for (auto const &iter : my_vc_.GetVarMap()) + if (iter.dim > no_dims) + no_dims = iter.dim; // find the maximal number of dimension used + no_dims++; + if (no_dims > 0) { // else constant + last_pack_.reserve(no_dims); + for (int i = 0; i < no_dims; ++i) last_pack_.emplace_back(guardian_threads_, common::NULL_VALUE_32); + } + initialized_ = true; +} + +/* + * ResizeLastPack handles last_pack_ overflow under multi-threads group by + */ +void VCPackGuardian::ResizeLastPack(int taskNum) { + if (!initialized_) + return; + + for (auto &v : last_pack_) v.resize(taskNum, common::NULL_VALUE_32); + + guardian_threads_ = taskNum; +} + +void VCPackGuardian::LockPackrow(const MIIterator &mit) { + switch (current_strategy_) { + case GUARDIAN_LOCK_STRATEGY::LOCK_ONE: + return LockPackrowOnLockOne(mit); + case GUARDIAN_LOCK_STRATEGY::LOCK_ONE_THREAD: + return LockPackrowOnLockOneByThread(mit); + default: + TIANMU_LOG(LogCtl_Level::ERROR, "LockPackrow fail, unkown current_strategy_: %d", + static_cast(current_strategy_)); + ASSERT(0, "VCPackGuardian::LockPackrow fail, unkown current_strategy_: " + static_cast(current_strategy_)); + } +} + +// 1. Use the pthread thread identifier of glibc as a thread unique identifier. +// Internal encapsulation is no longer used +// 2. A single worker thread holds only one pack of vc of a particular dim +// 3. During each LockPackrow, hold packs are identified by the pthread ID. +// If the read pack is different from the held pack, the corresponding pack is released +void VCPackGuardian::LockPackrowOnLockOneByThread(const MIIterator &mit) { + const auto &var_map = my_vc_.GetVarMap(); + if (var_map.empty()) { + return; + } + + uint64_t thread_id = pthread_self(); + + TypeLockOne::iterator iter_thread; + + { + std::scoped_lock lock(mx_thread_); + iter_thread = last_pack_thread_.find(thread_id); + } + + bool has_myself_thread = last_pack_thread_.end() != iter_thread; + + for (auto iter = var_map.cbegin(); iter != var_map.cend(); iter++) { + int cur_dim = iter->dim; + int col_index = iter->col_ndx; + int cur_pack = mit.GetCurPackrow(cur_dim); + + if (!iter->GetTabPtr()) { + continue; + } + + JustATable *tab = iter->GetTabPtr().get(); + + if (has_myself_thread) { + auto iter_dim = iter_thread->second.find(cur_dim); + if (iter_thread->second.end() != iter_dim) { + auto iter_index = iter_dim->second.find(col_index); + if (iter_dim->second.end() != iter_index) { + int last_pack = iter_index->second; + if (last_pack == cur_pack) { + continue; + } + + iter_dim->second.erase(col_index); + tab->UnlockPackFromUse(col_index, last_pack); + } + } + } + + try { + tab->LockPackForUse(col_index, cur_pack); + } catch (...) { + TIANMU_LOG(LogCtl_Level::ERROR, + "LockPackrowOnLockOneByThread LockPackForUse fail, cur_dim: %d col_index: %d cur_pack: %d", cur_dim, + col_index, cur_pack); + + if (has_myself_thread) { + auto it = var_map.begin(); + for (; it != iter; ++it) { + int cur_dim = iter->dim; + int col_index = iter->col_ndx; + auto iter_dim = iter_thread->second.find(cur_dim); + if (iter_thread->second.end() == iter_dim) { + continue; + } + + int it_cur_pack = mit.GetCurPackrow(it->dim); + auto it_iter_pack = iter_dim->second.find(col_index); + if (iter_dim->second.end() == it_iter_pack) { + continue; + } + + tab->UnlockPackFromUse(it->col_ndx, it_cur_pack); + } + } + + UnlockAll(); + throw; + } + } + + for (auto iter = var_map.cbegin(); iter != var_map.cend(); iter++) { + if (!iter->GetTabPtr()) { + continue; + } + + int cur_dim = iter->dim; + int col_index = iter->col_ndx; + int cur_pack = mit.GetCurPackrow(cur_dim); + + { + if (has_myself_thread) { + auto iter_dim = iter_thread->second.find(cur_dim); + if (iter_thread->second.end() != iter_dim) { + auto iter_index = iter_dim->second.find(col_index); + if (iter_dim->second.end() != iter_index) { + int last_pack = iter_index->second; + if (last_pack == cur_pack) { + continue; + } + } + } + } + } + + if (!has_myself_thread) { + std::unordered_map> pack_value; + auto &lock_dim = pack_value[cur_dim]; + lock_dim[col_index] = cur_pack; + + { + std::scoped_lock lock(mx_thread_); + last_pack_thread_[thread_id] = std::move(pack_value); + } + } else { + std::scoped_lock lock(mx_thread_); + auto &lock_thread = last_pack_thread_[thread_id]; + auto &lock_dim = lock_thread[cur_dim]; + lock_dim[col_index] = cur_pack; + } + } +} + +void VCPackGuardian::LockPackrowOnLockOne(const MIIterator &mit) { + int threadId = mit.GetTaskId(); + int taskNum = mit.GetTaskNum(); + { + std::scoped_lock g(mx_thread_); + if (!initialized_) { + Initialize(taskNum); + } + if (initialized_ && (taskNum > guardian_threads_)) { + // recheck to make sure last_pack_ is not overflow + ResizeLastPack(taskNum); + } + } + for (auto iter = my_vc_.GetVarMap().cbegin(); iter != my_vc_.GetVarMap().cend(); iter++) { + int cur_dim = iter->dim; + if (last_pack_[cur_dim][threadId] != mit.GetCurPackrow(cur_dim)) { + JustATable *tab = iter->GetTabPtr().get(); + if (last_pack_[cur_dim][threadId] != common::NULL_VALUE_32) + tab->UnlockPackFromUse(iter->col_ndx, last_pack_[cur_dim][threadId]); + try { + tab->LockPackForUse(iter->col_ndx, mit.GetCurPackrow(cur_dim)); + } catch (...) { + TIANMU_LOG(LogCtl_Level::ERROR, + "LockPackrowOnLockOne LockPackForUse fail, cur_dim: %d threadId: %d cur_pack: %d", cur_dim, threadId, + mit.GetCurPackrow(cur_dim)); + // unlock packs which are partially locked for this packrow + auto it = my_vc_.GetVarMap().begin(); + for (; it != iter; ++it) { + int cur_dim = it->dim; + if (last_pack_[cur_dim][threadId] != mit.GetCurPackrow(cur_dim) && + last_pack_[cur_dim][threadId] != common::NULL_VALUE_32) + it->GetTabPtr()->UnlockPackFromUse(it->col_ndx, mit.GetCurPackrow(cur_dim)); + } + + for (++iter; iter != my_vc_.GetVarMap().end(); ++iter) { + int cur_dim = iter->dim; + if (last_pack_[cur_dim][threadId] != mit.GetCurPackrow(cur_dim) && + last_pack_[cur_dim][threadId] != common::NULL_VALUE_32) + iter->GetTabPtr()->UnlockPackFromUse(iter->col_ndx, last_pack_[cur_dim][threadId]); + } + + for (auto const &iter : my_vc_.GetVarMap()) last_pack_[iter.dim][threadId] = common::NULL_VALUE_32; + throw; + } + } + } + for (auto const &iter : my_vc_.GetVarMap()) + last_pack_[iter.dim][threadId] = mit.GetCurPackrow(iter.dim); // must be in a separate loop, otherwise + // for "a + b" will not lock b +} + +void VCPackGuardian::UnlockAll() { + switch (current_strategy_) { + case GUARDIAN_LOCK_STRATEGY::LOCK_ONE: + return UnlockAllOnLockOne(); + case GUARDIAN_LOCK_STRATEGY::LOCK_ONE_THREAD: + return UnlockAllOnLockOneByThread(); + default: + TIANMU_LOG(LogCtl_Level::ERROR, "UnlockAll fail, unkown current_strategy_: %d", + static_cast(current_strategy_)); + ASSERT(0, "VCPackGuardian::UnlockAll fail, unkown current_strategy_: " + static_cast(current_strategy_)); + } +} + +void VCPackGuardian::UnlockAllOnLockOne() { + if (!initialized_) + return; + for (auto const &iter : my_vc_.GetVarMap()) { + for (int i = 0; i < guardian_threads_; ++i) + if (last_pack_[iter.dim][i] != common::NULL_VALUE_32 && iter.GetTabPtr()) + iter.GetTabPtr()->UnlockPackFromUse(iter.col_ndx, last_pack_[iter.dim][i]); + } + for (auto const &iter : my_vc_.GetVarMap()) { + for (int i = 0; i < guardian_threads_; ++i) + last_pack_[iter.dim][i] = common::NULL_VALUE_32; // must be in a separate loop, otherwise + // for "a + b" will not unlock b + } +} + +void VCPackGuardian::UnlockAllOnLockOneByThread() { + if (last_pack_thread_.empty()) { + return; + } + + const auto &var_map = my_vc_.GetVarMap(); + if (var_map.empty()) { + return; + } + + uint64_t thread_id = pthread_self(); + auto iter_thread = last_pack_thread_.find(thread_id); + if (last_pack_thread_.end() == iter_thread) { + return; + } + + for (auto const &iter : var_map) { + if (!iter.GetTabPtr()) { + continue; + } + + int cur_dim = iter.dim; + int col_index = iter.col_ndx; + + auto iter_pack = iter_thread->second.find(cur_dim); + if (iter_pack == iter_thread->second.end()) { + continue; + } + + auto iter_val = iter_pack->second.find(col_index); + if (iter_val == iter_pack->second.end()) { + continue; + } + + int cur_pack = iter_val->second; + iter_pack->second.erase(col_index); + iter.GetTabPtr()->UnlockPackFromUse(col_index, cur_pack); + } + + { + std::scoped_lock lock(mx_thread_); + last_pack_thread_.erase(thread_id); + } +} + +} // namespace core +} // namespace Tianmu diff --git a/storage/tianmu/core/pack_guardian.h b/storage/tianmu/data/pack_guardian.h similarity index 100% rename from storage/tianmu/core/pack_guardian.h rename to storage/tianmu/data/pack_guardian.h diff --git a/storage/tianmu/core/pack_int.cpp b/storage/tianmu/data/pack_int.cpp similarity index 85% rename from storage/tianmu/core/pack_int.cpp rename to storage/tianmu/data/pack_int.cpp index 0f4294d0a..6f73dd53f 100644 --- a/storage/tianmu/core/pack_int.cpp +++ b/storage/tianmu/data/pack_int.cpp @@ -15,27 +15,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/pack_int.h" +#include "data/pack_int.h" #include #include #include "compress/bit_stream_compressor.h" #include "compress/num_compressor.h" -#include "core/bin_tools.h" -#include "core/column_share.h" #include "core/value.h" #include "loader/value_cache.h" #include "system/tianmu_file.h" +#include "util/bin_tools.h" +#include "vc/column_share.h" namespace Tianmu { namespace core { PackInt::PackInt(DPN *dpn, PackCoordinate pc, ColumnShare *s) : Pack(dpn, pc, s) { is_real_ = ATI::IsRealType(s->ColType().GetTypeName()); - if (dpn_->NotTrivial()) { system::TianmuFile f; f.OpenReadOnly(s->DataFile()); + + ASSERT(dpn_->dataAddress != DPN_INVALID_ADDR); f.Seek(dpn_->dataAddress, SEEK_SET); LoadDataFromFile(&f); } @@ -44,7 +45,7 @@ PackInt::PackInt(DPN *dpn, PackCoordinate pc, ColumnShare *s) : Pack(dpn, pc, s) PackInt::PackInt(const PackInt &apn, const PackCoordinate &pc) : Pack(apn, pc), is_real_(apn.is_real_) { data_.value_type_ = apn.data_.value_type_; if (apn.data_.value_type_ > 0) { - ASSERT(apn.data_.ptr_ != nullptr); + ASSERT(apn.data_.ptr_ != nullptr, "path:" + col_share_->DataFile()); data_.ptr_ = alloc(data_.value_type_ * apn.dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); std::memcpy(data_.ptr_, apn.data_.ptr_, data_.value_type_ * apn.dpn_->numOfRecords); } @@ -168,6 +169,7 @@ void PackInt::ExpandOrShrink(uint64_t maxv, int64_t delta) { auto new_vt = GetValueSize(maxv); if (new_vt != data_.value_type_ || delta != 0) { auto tmp = alloc(new_vt * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + std::memset(tmp, 0, new_vt * dpn_->numOfRecords); xf[{data_.value_type_, new_vt}](data_.ptr_, data_.ptr_int8_ + (data_.value_type_ * dpn_->numOfRecords), tmp, delta); dealloc(data_.ptr_); data_.ptr_ = tmp; @@ -177,7 +179,8 @@ void PackInt::ExpandOrShrink(uint64_t maxv, int64_t delta) { void PackInt::UpdateValueFloat(size_t locationInPack, const Value &v) { if (IsNull(locationInPack)) { - ASSERT(v.HasValue()); + if (!v.HasValue()) + return; // update null to non-null dpn_->synced = false; @@ -192,12 +195,14 @@ void PackInt::UpdateValueFloat(size_t locationInPack, const Value &v) { dpn_->min_d = d; dpn_->max_d = d; data_.value_type_ = 8; - data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); - std::memset(data_.ptr_, 0, data_.value_type_ * dpn_->numOfRecords); + if (data_.empty()) { + data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + std::memset(data_.ptr_, 0, data_.value_type_ * dpn_->numOfRecords); + } SetValD(locationInPack, d); } else { dpn_->numOfNulls--; - ASSERT(data_.ptr_ != nullptr); + ASSERT(data_.ptr_ != nullptr, "path:" + col_share_->DataFile()); SetValD(locationInPack, d); @@ -211,14 +216,15 @@ void PackInt::UpdateValueFloat(size_t locationInPack, const Value &v) { // update an original non-null value if (data_.empty()) { - ASSERT(dpn_->Uniform()); + ASSERT(dpn_->Uniform(), "path:" + col_share_->DataFile()); data_.value_type_ = 8; data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); for (uint i = 0; i < dpn_->numOfRecords; i++) SetValD(i, dpn_->min_d); } auto oldv = GetValDouble(locationInPack); - ASSERT(oldv <= dpn_->max_d); + ASSERT(oldv <= dpn_->max_d, + col_share_->DataFile() + " oldv=" + std::to_string(oldv) + ", dpn_->max_d=" + std::to_string(dpn_->max_d)); // get max/min **without** the value to update auto newmax = std::numeric_limits::min(); @@ -238,12 +244,16 @@ void PackInt::UpdateValueFloat(size_t locationInPack, const Value &v) { dpn_->numOfNulls++; // easy mode dpn_->sum_d -= oldv; + if ((oldv == dpn_->min_d || oldv == dpn_->max_d) && dpn_->min_d != dpn_->max_d) { + dpn_->min_d = newmin; + dpn_->max_d = newmax; + } return; } // update non-null to another nonull auto newv = v.GetDouble(); - ASSERT(oldv != newv); + ASSERT(oldv != newv, "path:" + col_share_->DataFile()); newmin = std::min(newmin, newv); newmax = std::max(newmax, newv); @@ -264,11 +274,13 @@ void PackInt::UpdateValue(size_t locationInPack, const Value &v) { UpdateValueFixed(locationInPack, v); // release buffer if the pack becomes trivial - if (dpn_->Trivial()) { + if (dpn_->NullOnly() || dpn_->Uniform()) { dealloc(data_.ptr_); data_.ptr_ = nullptr; data_.value_type_ = 0; - dpn_->dataAddress = DPN_INVALID_ADDR; + if (dpn_->numOfDeleted == 0) { + dpn_->dataAddress = DPN_INVALID_ADDR; + } } } @@ -280,17 +292,21 @@ void PackInt::DeleteByRow(size_t locationInPack) { if (!IsNull(locationInPack)) { if (is_real_) { if (data_.empty()) { - ASSERT(dpn_->Uniform()); + ASSERT(dpn_->Uniform(), "path:" + col_share_->DataFile()); data_.value_type_ = 8; data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); for (uint i = 0; i < dpn_->numOfRecords; i++) SetValD(i, dpn_->min_d); } + auto oldv = GetValDouble(locationInPack); + ASSERT(oldv <= dpn_->max_d, + col_share_->DataFile() + " oldv=" + std::to_string(oldv) + ", dpn_->max_d=" + std::to_string(dpn_->max_d)); - ASSERT(oldv <= dpn_->max_d); + SetNull(locationInPack); + dpn_->numOfNulls++; dpn_->sum_d -= oldv; - if (oldv == dpn_->min_d || oldv == dpn_->max_d) { + if ((oldv == dpn_->min_d || oldv == dpn_->max_d) && dpn_->min_d != dpn_->max_d) { // get max/min **without** the value to update auto newmax = std::numeric_limits::min(); auto newmin = std::numeric_limits::max(); @@ -303,21 +319,31 @@ void PackInt::DeleteByRow(size_t locationInPack) { newmin = val; } } - dpn_->min_d = newmin; - dpn_->max_d = newmax; + if (!dpn_->NullOnly()) { + dpn_->min_d = newmin; + dpn_->max_d = newmax; + } } } else { if (data_.empty()) { - ASSERT(dpn_->Uniform()); + ASSERT(dpn_->Uniform(), "path:" + col_share_->DataFile()); data_.value_type_ = GetValueSize(dpn_->max_i - dpn_->min_i); data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); std::memset(data_.ptr_, 0, data_.value_type_ * dpn_->numOfRecords); } + auto oldv = GetValInt(locationInPack); oldv += dpn_->min_i; - ASSERT(oldv <= dpn_->max_i); + + ASSERT(oldv <= dpn_->max_i, + col_share_->DataFile() + " oldv=" + std::to_string(oldv) + ", dpn_->max_i=" + std::to_string(dpn_->max_i)); + + SetNull(locationInPack); + SetVal64(locationInPack, 0); + dpn_->numOfNulls++; dpn_->sum_i -= oldv; - if (oldv == dpn_->min_i || oldv == dpn_->max_i) { + + if ((oldv == dpn_->min_i || oldv == dpn_->max_i) && dpn_->min_i != dpn_->max_i) { // get max/min **without** the value to update auto newmax = std::numeric_limits::min(); auto newmin = std::numeric_limits::max(); @@ -330,23 +356,29 @@ void PackInt::DeleteByRow(size_t locationInPack) { newmin = val; } } - ExpandOrShrink(newmax - newmin, dpn_->min_i - newmin); - dpn_->min_i = newmin; - dpn_->max_i = newmax; + if (!dpn_->NullOnly()) { + ExpandOrShrink(newmax - newmin, dpn_->min_i - newmin); + dpn_->min_i = newmin; + dpn_->max_i = newmax; + } } } - SetNull(locationInPack); - dpn_->numOfNulls++; } SetDeleted(locationInPack); dpn_->numOfDeleted++; + // release buffer if the pack becomes trivial + if (dpn_->NullOnly() || dpn_->Uniform()) { + dealloc(data_.ptr_); + data_.ptr_ = nullptr; + data_.value_type_ = 0; + } } void PackInt::UpdateValueFixed(size_t locationInPack, const Value &v) { if (IsNull(locationInPack)) { - ASSERT(v.HasValue()); - - // update null to non-null + if (!v.HasValue()) + return; + // update null to non-null dpn_->synced = false; UnsetNull(locationInPack); @@ -359,13 +391,14 @@ void PackInt::UpdateValueFixed(size_t locationInPack, const Value &v) { dpn_->max_i = l; data_.value_type_ = 1; - data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); - // for fixed number, it is sufficient to simply zero the data_ - std::memset(data_.ptr_, 0, data_.value_type_ * dpn_->numOfRecords); + if (data_.empty()) { + data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + std::memset(data_.ptr_, 0, data_.value_type_ * dpn_->numOfRecords); + } dpn_->numOfNulls--; SetVal64(locationInPack, l - dpn_->min_i); } else { - ASSERT(data_.ptr_ != nullptr); + ASSERT(data_.ptr_ != nullptr, "path:" + col_share_->DataFile()); dpn_->numOfNulls--; if (l >= dpn_->min_i && l <= dpn_->max_i) { @@ -376,31 +409,22 @@ void PackInt::UpdateValueFixed(size_t locationInPack, const Value &v) { return; } - decltype(data_.value_type_) new_vt; int64_t delta = 0; if (l < dpn_->min_i) { delta = dpn_->min_i - l; dpn_->min_i = l; - new_vt = GetValueSize(dpn_->max_i - dpn_->min_i); } else { // so l > dpn_->max dpn_->max_i = l; - new_vt = GetValueSize(dpn_->max_i - dpn_->min_i); - } - if (new_vt != data_.value_type_ || delta != 0) { - auto tmp = alloc(new_vt * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); - xf[{data_.value_type_, new_vt}](data_.ptr_, data_.ptr_int8_ + (data_.value_type_ * dpn_->numOfRecords), tmp, - delta); - dealloc(data_.ptr_); - data_.ptr_ = tmp; - data_.value_type_ = new_vt; } + + ExpandOrShrink(dpn_->max_i - dpn_->min_i, delta); SetVal64(locationInPack, l - dpn_->min_i); } } else { // update an original non-null value if (data_.empty()) { - ASSERT(dpn_->Uniform()); + ASSERT(dpn_->Uniform(), "path:" + col_share_->DataFile()); data_.value_type_ = GetValueSize(dpn_->max_i - dpn_->min_i); data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); std::memset(data_.ptr_, 0, data_.value_type_ * dpn_->numOfRecords); @@ -408,7 +432,8 @@ void PackInt::UpdateValueFixed(size_t locationInPack, const Value &v) { auto oldv = GetValInt(locationInPack); oldv += dpn_->min_i; - ASSERT(oldv <= dpn_->max_i); + ASSERT(oldv <= dpn_->max_i, + col_share_->DataFile() + " oldv=" + std::to_string(oldv) + ", dpn_->max_i=" + std::to_string(dpn_->max_i)); // get max/min **without** the value to update int64_t newmax = std::numeric_limits::min(); @@ -427,13 +452,18 @@ void PackInt::UpdateValueFixed(size_t locationInPack, const Value &v) { if (!v.HasValue()) { // update non-null to null SetNull(locationInPack); + SetVal64(locationInPack, 0); dpn_->numOfNulls++; // easy mode dpn_->sum_i -= oldv; - if (!dpn_->NullOnly()) - ExpandOrShrink(newmax - newmin, 0); - + if (!dpn_->NullOnly()) { + if ((oldv == dpn_->min_i || oldv == dpn_->max_i) && dpn_->min_i != dpn_->max_i) { + ExpandOrShrink(newmax - newmin, dpn_->min_i - newmin); + dpn_->min_i = newmin; + dpn_->max_i = newmax; + } + } return; } @@ -463,17 +493,11 @@ void PackInt::LoadValuesDouble(const loader::ValueCache *vc, const std::optional auto new_min = std::min(vc->MinDouble(), dpn_->min_d); auto new_max = std::max(vc->MaxDouble(), dpn_->max_d); auto new_nr = dpn_->numOfRecords + vc->NumOfValues(); - if (dpn_->Trivial()) { - ASSERT(data_.ptr_ == nullptr); - data_.value_type_ = sizeof(double); - data_.ptr_ = alloc(data_.value_type_ * new_nr, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); - if (dpn_->Uniform()) { - std::fill_n(reinterpret_cast(data_.ptr_), new_nr, dpn_->min_d); - } - } else { - // expanding existing pack data_ - ASSERT(data_.ptr_ != nullptr); - data_.ptr_ = rc_realloc(data_.ptr_, data_.value_type_ * new_nr, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + data_.value_type_ = sizeof(double); + + data_.ptr_ = rc_realloc(data_.ptr_, data_.value_type_ * new_nr, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + if (dpn_->Uniform()) { + std::fill_n(reinterpret_cast(data_.ptr_), new_nr, dpn_->min_d); } dpn_->synced = false; @@ -520,13 +544,16 @@ void PackInt::LoadValuesFixed(const loader::ValueCache *vc, const std::optional< auto new_vt = GetValueSize(new_max - new_min); auto new_nr = dpn_->numOfRecords + vc->NumOfValues(); - ASSERT(new_vt >= data_.value_type_); + ASSERT(new_vt >= data_.value_type_, col_share_->DataFile() + ", new_vt=:" + std::to_string(new_vt) + + " , data_.value_type_:" + std::to_string(data_.value_type_)); auto delta = dpn_->min_i - new_min; - if (dpn_->Trivial()) { - ASSERT(data_.ptr_ == nullptr); + if (dpn_->NullOnly() || dpn_->Uniform()) { + if (data_.ptr_) + dealloc(data_.ptr_); data_.ptr_ = alloc(new_vt * new_nr, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + std::memset(data_.ptr_, 0, new_vt * new_nr); if (dpn_->Uniform()) { switch (new_vt) { case 8: @@ -548,8 +575,10 @@ void PackInt::LoadValuesFixed(const loader::ValueCache *vc, const std::optional< } } else { // expanding existing pack data_ - ASSERT(data_.ptr_ != nullptr); + ASSERT(data_.ptr_ != nullptr, "path:" + col_share_->DataFile()); + auto tmp_ptr = alloc(new_vt * new_nr, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + std::memset(tmp_ptr, 0, new_vt * new_nr); xf[{data_.value_type_, new_vt}](data_.ptr_, data_.ptr_int8_ + (data_.value_type_ * dpn_->numOfRecords), tmp_ptr, delta); dealloc(data_.ptr_); @@ -564,10 +593,11 @@ void PackInt::LoadValuesFixed(const loader::ValueCache *vc, const std::optional< if (vc->NotNull(i)) { AppendValue(*(reinterpret_cast(const_cast(vc->GetDataBytesPointer(i)))) - new_min); } else { - if (nv.has_value()) + if (nv.has_value()) { AppendValue(nv->i - new_min); - else + } else { AppendNull(); + } if (vc->IsDelete(i)) { if (!IsNull(dpn_->numOfRecords - 1)) { SetNull(dpn_->numOfRecords - 1); @@ -578,6 +608,7 @@ void PackInt::LoadValuesFixed(const loader::ValueCache *vc, const std::optional< } } } + // sum has already been updated outside dpn_->min_i = new_min; dpn_->max_i = new_max; @@ -596,24 +627,29 @@ PackInt::~PackInt() { void PackInt::LoadDataFromFile(system::Stream *fcurfile) { FunctionExecutor fe([this]() { Lock(); }, [this]() { Unlock(); }); - data_.value_type_ = GetValueSize(dpn_->max_i - dpn_->min_i); + if (dpn_->NullOnly() || dpn_->Uniform()) + data_.value_type_ = 0; + else + data_.value_type_ = GetValueSize(dpn_->max_i - dpn_->min_i); + if (IsModeNoCompression()) { - if (dpn_->numOfNulls) { + if (dpn_->numOfNulls > 0) { fcurfile->ReadExact(nulls_ptr_.get(), bitmap_size_); } - if (dpn_->numOfDeleted) { + if (dpn_->numOfDeleted > 0) { fcurfile->ReadExact(deletes_ptr_.get(), bitmap_size_); } - ASSERT(data_.value_type_ * dpn_->numOfRecords != 0); - data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); - fcurfile->ReadExact(data_.ptr_, data_.value_type_ * dpn_->numOfRecords); + if (data_.value_type_ * dpn_->numOfRecords > 0) { + data_.ptr_ = alloc(data_.value_type_ * dpn_->numOfRecords, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + fcurfile->ReadExact(data_.ptr_, data_.value_type_ * dpn_->numOfRecords); + } dpn_->synced = false; } else { UniquePtr uptr = alloc_ptr(dpn_->dataLength + 1, mm::BLOCK_TYPE::BLOCK_COMPRESSED); fcurfile->ReadExact(uptr.get(), dpn_->dataLength); dpn_->synced = true; { - ASSERT(!IsModeNoCompression()); + ASSERT(!IsModeNoCompression(), "path:" + col_share_->DataFile()); uint *cur_buf = static_cast(uptr.get()); if (data_.ptr_ == nullptr && data_.value_type_ > 0) @@ -695,9 +731,9 @@ void PackInt::Save() { if (ShouldNotCompress()) { SetModeNoCompression(); dpn_->dataLength = 0; - if (dpn_->numOfNulls) + if (dpn_->numOfNulls > 0) dpn_->dataLength += bitmap_size_; - if (dpn_->numOfDeleted) + if (dpn_->numOfDeleted > 0) dpn_->dataLength += bitmap_size_; dpn_->dataLength += data_.value_type_ * dpn_->numOfRecords; } else { @@ -708,23 +744,32 @@ void PackInt::Save() { col_share_->alloc_seg(dpn_); system::TianmuFile f; - f.OpenCreate(col_share_->DataFile()); + bool need_sync = false; + if (!f.Exists(col_share_->DataFile())) { + need_sync = true; + } + + if (f.OpenCreate(col_share_->DataFile()) == -1) + return; + if (need_sync && f.Flush() == -1) + return; + f.Seek(dpn_->dataAddress, SEEK_SET); if (ShouldNotCompress()) SaveUncompressed(&f); else f.WriteExact(uptr.get(), dpn_->dataLength); - ASSERT(f.Tell() == off_t(dpn_->dataAddress + dpn_->dataLength)); + ASSERT(f.Tell() == off_t(dpn_->dataAddress + dpn_->dataLength), "path:" + col_share_->DataFile()); f.Close(); dpn_->synced = true; } void PackInt::SaveUncompressed(system::Stream *f) { - if (dpn_->numOfNulls) + if (dpn_->numOfNulls > 0) f->WriteExact(nulls_ptr_.get(), bitmap_size_); - if (dpn_->numOfDeleted) + if (dpn_->numOfDeleted > 0) f->WriteExact(deletes_ptr_.get(), bitmap_size_); if (data_.ptr_) f->WriteExact(data_.ptr_, data_.value_type_ * dpn_->numOfRecords); @@ -797,8 +842,7 @@ std::pair PackInt::Compress() { } if (maxv != 0) { - // ASSERT(last_set + 1 == dpn_->numOfRecords - dpn_->numOfNulls, "Expression evaluation - // failed!"); + // ASSERT(last_set + 1 == dpn_->numOfRecords - dpn_->numOfNulls, "Expression evaluation failed!"); if (data_.value_type_ == 1) { compress::NumCompressor nc; tmp_cb_len = (dpn_->numOfRecords - dpn_->numOfNulls) * sizeof(uchar) + 20; diff --git a/storage/tianmu/core/pack_int.h b/storage/tianmu/data/pack_int.h similarity index 90% rename from storage/tianmu/core/pack_int.h rename to storage/tianmu/data/pack_int.h index 46d116ea8..2e8769cd2 100644 --- a/storage/tianmu/core/pack_int.h +++ b/storage/tianmu/data/pack_int.h @@ -18,8 +18,8 @@ #define TIANMU_CORE_PACK_INT_H_ #pragma once -#include "core/pack.h" #include "core/value.h" +#include "data/pack.h" namespace Tianmu { @@ -72,19 +72,23 @@ class PackInt final : public Pack { } void AppendNull() { - SetNull(dpn_->numOfRecords); - dpn_->numOfNulls++; dpn_->numOfRecords++; + if (likely(NotNull(dpn_->numOfRecords - 1))) { + SetNull(dpn_->numOfRecords - 1); + } + dpn_->numOfNulls++; } void SetValD(uint n, double v) { dpn_->synced = false; - ASSERT(n < dpn_->numOfRecords); + ASSERT(n < dpn_->numOfRecords, + "n: " + std::to_string(n) + " ,dpn->numOfRecords: " + std::to_string(dpn_->numOfRecords)); ASSERT(is_real_); data_.ptr_double_[n] = v; } void SetVal64(uint n, uint64_t v) { dpn_->synced = false; - ASSERT(n < dpn_->numOfRecords); + ASSERT(n < dpn_->numOfRecords, + "n: " + std::to_string(n) + " ,dpn->numOfRecords: " + std::to_string(dpn_->numOfRecords)); switch (data_.value_type_) { case 8: data_.ptr_int64_[n] = v; @@ -124,6 +128,8 @@ class PackInt final : public Pack { void RemoveNullsAndCompress(compress::NumCompressor &nc, char *tmp_comp_buffer, uint &tmp_cb_len, uint64_t &maxv); + // void alloc_data_ptr(uint32_t recordNum); + bool is_real_ = false; struct { int64_t operator[](size_t n) const { @@ -150,7 +156,7 @@ class PackInt final : public Pack { uint32_t *ptr_int32_; uint64_t *ptr_int64_; double *ptr_double_; - void *ptr_; + void *ptr_ = nullptr; }; } data_ = {}; }; diff --git a/storage/tianmu/core/pack_orderer.cpp b/storage/tianmu/data/pack_orderer.cpp similarity index 99% rename from storage/tianmu/core/pack_orderer.cpp rename to storage/tianmu/data/pack_orderer.cpp index 8b94e27b4..d47ca812e 100644 --- a/storage/tianmu/core/pack_orderer.cpp +++ b/storage/tianmu/data/pack_orderer.cpp @@ -17,7 +17,7 @@ #include "pack_orderer.h" -#include "core/mi_iterator.h" +#include "optimizer/iterators/mi_iterator.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/pack_orderer.h b/storage/tianmu/data/pack_orderer.h similarity index 100% rename from storage/tianmu/core/pack_orderer.h rename to storage/tianmu/data/pack_orderer.h diff --git a/storage/tianmu/core/pack_str.cpp b/storage/tianmu/data/pack_str.cpp similarity index 85% rename from storage/tianmu/core/pack_str.cpp rename to storage/tianmu/data/pack_str.cpp index d59dc3f62..3834e790b 100644 --- a/storage/tianmu/core/pack_str.cpp +++ b/storage/tianmu/data/pack_str.cpp @@ -24,9 +24,6 @@ #include "compress/num_compressor.h" #include "compress/part_dict.h" #include "compress/text_compressor.h" -#include "core/bin_tools.h" -#include "core/column_share.h" -#include "core/tools.h" #include "core/value.h" #include "loader/value_cache.h" #include "lz4.h" @@ -34,9 +31,14 @@ #include "system/stream.h" #include "system/tianmu_file.h" #include "system/txt_utils.h" +#include "util/bin_tools.h" +#include "util/tools.h" +#include "vc/column_share.h" namespace Tianmu { namespace core { +const uint kDeleteOrNullBitmap = 2; + PackStr::PackStr(DPN *dpn, PackCoordinate pc, ColumnShare *col_share) : Pack(dpn, pc, col_share) { auto t = col_share->ColType().GetTypeName(); @@ -46,7 +48,8 @@ PackStr::PackStr(DPN *dpn, PackCoordinate pc, ColumnShare *col_share) : Pack(dpn data_.len_mode = sizeof(uint16_t); try { - data_.index = (char **)alloc(sizeof(char *) * (1 << col_share->pss), mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + data_.index = + reinterpret_cast(alloc(sizeof(char *) * (1 << col_share_->pss), mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED)); data_.lens = alloc((data_.len_mode * (1 << col_share->pss)), mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); std::memset(data_.lens, 0, data_.len_mode * (1 << col_share->pss)); @@ -102,22 +105,22 @@ void PackStr::LoadDataFromFile(system::Stream *f) { if (IsModeNoCompression()) { LoadUncompressed(f); - } else if (col_share_->ColType().GetFmt() == common::PackFmt::TRIE) { - LoadCompressedTrie(f); + //} else if (col_share_->ColType().GetFmt() == common::PackFmt::TRIE) { + // LoadCompressedTrie(f); } else { LoadCompressed(f); } } void PackStr::Destroy() { - if (pack_str_state_ == PackStrtate::kPackArray) { - for (auto &it : data_.v) { - dealloc(it.ptr); - } - } else { - marisa_trie_.clear(); - compressed_data_.reset(nullptr); + for (auto &it : data_.v) { + dealloc(it.ptr); } + data_.v.clear(); + + marisa_trie_.clear(); + compressed_data_.reset(nullptr); + dealloc(data_.index); data_.index = nullptr; dealloc(data_.lens); @@ -155,10 +158,14 @@ size_t PackStr::CalculateMaxLen() const { void PackStr::TransformIntoArray() { if (pack_str_state_ == PackStrtate::kPackArray) return; - data_.lens = alloc((data_.len_mode * (1 << col_share_->pss)), mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); - std::memset(data_.lens, 0, data_.len_mode * (1 << col_share_->pss)); - data_.index = - reinterpret_cast(alloc(sizeof(char *) * (1 << col_share_->pss), mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED)); + if (data_.lens == nullptr) { + data_.lens = alloc((data_.len_mode * (1 << col_share_->pss)), mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED); + std::memset(data_.lens, 0, data_.len_mode * (1 << col_share_->pss)); + } + if (data_.index == nullptr) { + data_.index = + reinterpret_cast(alloc(sizeof(char *) * (1 << col_share_->pss), mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED)); + } data_.v.push_back( {reinterpret_cast(alloc(data_.sum_len + 1, mm::BLOCK_TYPE::BLOCK_UNCOMPRESSED)), data_.sum_len, 0}); @@ -182,10 +189,15 @@ void PackStr::TransformIntoArray() { void PackStr::UpdateValue(size_t locationInPack, const Value &v) { if (IsDeleted(locationInPack)) // The deleted value should not be updated. return; - TransformIntoArray(); + // TransformIntoArray(); dpn_->synced = false; if (IsNull(locationInPack)) { + // In the delta layer, there may be situations where null + // values are updated with null values, so when encountering this situation, it is directly returned + if (!v.HasValue()) + return; + // update null to non-null // first non-null value? @@ -193,7 +205,6 @@ void PackStr::UpdateValue(size_t locationInPack, const Value &v) { dpn_->max_i = -1; } - ASSERT(v.HasValue()); UnsetNull(locationInPack); dpn_->numOfNulls--; auto &str = v.GetString(); @@ -215,10 +226,14 @@ void PackStr::UpdateValue(size_t locationInPack, const Value &v) { SetPtrSize(locationInPack, nullptr, 0); SetNull(locationInPack); dpn_->numOfNulls++; + if (dpn_->NullOnly()) { + data_.sum_len = 0; + } } else { // update non-null to another nonull auto vsize = GetValueBinary(locationInPack).size(); - ASSERT(data_.sum_len >= vsize); + ASSERT(data_.sum_len >= vsize, col_share_->DataFile() + ", data_.sum_len:" + std::to_string(data_.sum_len) + + ", vsize:" + std::to_string(vsize)); data_.sum_len -= vsize; auto &str = v.GetString(); if (str.size() <= vsize) { @@ -239,7 +254,7 @@ void PackStr::UpdateValue(size_t locationInPack, const Value &v) { void PackStr::DeleteByRow(size_t locationInPack) { if (IsDeleted(locationInPack)) return; - TransformIntoArray(); + // TransformIntoArray(); dpn_->synced = false; if (!IsNull(locationInPack)) { data_.sum_len -= GetValueBinary(locationInPack).size(); @@ -248,6 +263,9 @@ void PackStr::DeleteByRow(size_t locationInPack) { SetPtrSize(locationInPack, nullptr, 0); SetNull(locationInPack); dpn_->numOfNulls++; + if (dpn_->NullOnly()) { + data_.sum_len = 0; + } } SetDeleted(locationInPack); dpn_->numOfDeleted++; @@ -261,7 +279,7 @@ void PackStr::LoadValues(const loader::ValueCache *vc) { auto total = vc->NumOfValues(); - TransformIntoArray(); + // TransformIntoArray(); for (uint i = 0; i < total; i++) { if (vc->IsNull(i) && col_share_->ColType().IsNullable()) { @@ -369,8 +387,8 @@ std::pair PackStr::Compress() { reinterpret_cast(alloc(comp_len_buf_size / 4 * sizeof(uint), mm::BLOCK_TYPE::BLOCK_TEMPORARY)), *this); uint tmp_comp_len_buf_size = comp_len_buf_size - 8; compress::NumCompressor nc; - CprsErr res = nc.Compress(reinterpret_cast(comp_len_buf.get() + sizeof(ushort)), tmp_comp_len_buf_size, - nc_buffer.get(), onn, maxv); + CprsErr res = nc.Compress(reinterpret_cast(comp_len_buf.get() + 2), tmp_comp_len_buf_size, nc_buffer.get(), + onn, maxv); if (res != CprsErr::CPRS_SUCCESS) { throw common::InternalException("Compression of lengths of values failed for column " + std::to_string(pc_column(GetCoordinate().co.pack) + 1) + ", pack " + @@ -380,8 +398,8 @@ std::pair PackStr::Compress() { comp_len_buf_size = tmp_comp_len_buf_size + 8; } else { comp_len_buf_size = 8; - comp_len_buf = - mm::MMGuard(reinterpret_cast(alloc(sizeof(uint) * 2, mm::BLOCK_TYPE::BLOCK_TEMPORARY)), *this); + comp_len_buf = mm::MMGuard( + reinterpret_cast(alloc(sizeof(uint) * kDeleteOrNullBitmap, mm::BLOCK_TYPE::BLOCK_TEMPORARY)), *this); } *comp_len_buf.get() = comp_len_buf_size; @@ -397,7 +415,7 @@ std::pair PackStr::Compress() { mm::MMGuard comp_buf(reinterpret_cast(alloc(dlen, mm::BLOCK_TYPE::BLOCK_TEMPORARY)), *this); - if (data_.sum_len) { + if (data_.sum_len > 0) { int objs = (dpn_->numOfRecords - dpn_->numOfNulls) - zlo; mm::MMGuard tmp_index( @@ -428,9 +446,9 @@ std::pair PackStr::Compress() { dlen = 0; } - size_t comp_buf_size = (comp_null_buf_size > 0 ? sizeof(ushort) + comp_null_buf_size : 0); - comp_buf_size += (comp_delete_buf_size > 0 ? sizeof(ushort) + comp_delete_buf_size : 0); - comp_buf_size += comp_len_buf_size + sizeof(uint32_t) * 2 + dlen; + size_t comp_buf_size = comp_null_buf_size > 0 ? sizeof(ushort) + comp_null_buf_size : 0; + comp_buf_size += comp_delete_buf_size > 0 ? sizeof(ushort) + comp_delete_buf_size : 0; + comp_buf_size += comp_len_buf_size + sizeof(uint32_t) * kDeleteOrNullBitmap + dlen; UniquePtr compressed_buf = alloc_ptr(comp_buf_size, mm::BLOCK_TYPE::BLOCK_COMPRESSED); uchar *p = reinterpret_cast(compressed_buf.get()); @@ -482,6 +500,7 @@ void PackStr::CompressTrie() { dpn_->dataLength = bufsz; std::ostringstream oss; oss << marisa_trie_; + compressed_data_.reset(nullptr); compressed_data_ = alloc_ptr(bufsz, mm::BLOCK_TYPE::BLOCK_TEMPORARY); char *buf_ptr = static_cast(compressed_data_.get()); std::memcpy(buf_ptr, oss.str().data(), oss.str().length()); @@ -520,9 +539,9 @@ void PackStr::Save() { pc_table(GetCoordinate().co.pack), pc_column(GetCoordinate().co.pack), pc_dp(GetCoordinate().co.pack), data_.sum_len); SetModeNoCompression(); - dpn_->dataLength = bitmap_size_ * 2 + data_.sum_len + (data_.len_mode * (1 << col_share_->pss)); - } else if (col_share_->ColType().GetFmt() == common::PackFmt::TRIE) { - CompressTrie(); + dpn_->dataLength = bitmap_size_ * kDeleteOrNullBitmap + data_.sum_len + (data_.len_mode * (1 << col_share_->pss)); + // } else if (col_share_->ColType().GetFmt() == common::PackFmt::TRIE) { + // CompressTrie(); } else { auto res = Compress(); dpn_->dataLength = res.second; @@ -530,24 +549,34 @@ void PackStr::Save() { } } else { SetModeNoCompression(); - dpn_->dataLength = bitmap_size_ * 2 + data_.sum_len + (data_.len_mode * (1 << col_share_->pss)); + dpn_->dataLength = bitmap_size_ * kDeleteOrNullBitmap + data_.sum_len + (data_.len_mode * (1 << col_share_->pss)); } col_share_->alloc_seg(dpn_); system::TianmuFile f; - f.OpenCreate(col_share_->DataFile()); + bool need_sync = false; + if (!f.Exists(col_share_->DataFile())) { + need_sync = true; + } + + if (f.OpenCreate(col_share_->DataFile()) == -1) + return; + if (need_sync && f.Flush() == -1) + return; + f.Seek(dpn_->dataAddress, SEEK_SET); if (IsModeCompressionApplied()) { - if (pack_str_state_ == PackStrtate::kPackTrie) { - f.WriteExact(compressed_data_.get(), dpn_->dataLength); - } else { - f.WriteExact(compressed_buf.get(), dpn_->dataLength); - } + // if (pack_str_state_ == PackStrtate::kPackTrie) { + // f.WriteExact(compressed_data_.get(), dpn_->dataLength); + // } else { + f.WriteExact(compressed_buf.get(), dpn_->dataLength); + // } } else { SaveUncompressed(&f); } ASSERT(f.Tell() == off_t(dpn_->dataAddress + dpn_->dataLength), - std::to_string(dpn_->dataAddress) + ":" + std::to_string(dpn_->dataLength) + "/" + std::to_string(f.Tell())); + col_share_->DataFile() + ", " + std::to_string(dpn_->dataAddress) + ":" + std::to_string(dpn_->dataLength) + + "/" + std::to_string(f.Tell())); dpn_->synced = true; } @@ -555,8 +584,9 @@ void PackStr::SaveUncompressed(system::Stream *f) { f->WriteExact(nulls_ptr_.get(), bitmap_size_); f->WriteExact(deletes_ptr_.get(), bitmap_size_); f->WriteExact(data_.lens, (data_.len_mode * (1 << col_share_->pss))); - if (data_.v.empty()) + if (data_.v.empty() || dpn_->NullOnly()) { return; + } std::unique_ptr buff(new char[data_.sum_len]); char *ptr = buff.get(); @@ -566,13 +596,14 @@ void PackStr::SaveUncompressed(system::Stream *f) { ptr += GetSize(i); } } - ASSERT(ptr == buff.get() + data_.sum_len, - "lengh sum: " + std::to_string(data_.sum_len) + ", copied " + std::to_string(ptr - buff.get())); + + ASSERT(ptr == buff.get() + data_.sum_len, col_share_->DataFile() + " lengh sum: " + std::to_string(data_.sum_len) + + ", copied " + std::to_string(ptr - buff.get())); f->WriteExact(buff.get(), data_.sum_len); } void PackStr::LoadCompressed(system::Stream *f) { - ASSERT(IsModeCompressionApplied()); + ASSERT(IsModeCompressionApplied(), "path:" + col_share_->DataFile()); auto compressed_buf = alloc_ptr(dpn_->dataLength + 1, mm::BLOCK_TYPE::BLOCK_COMPRESSED); f->ReadExact(compressed_buf.get(), dpn_->dataLength); @@ -605,7 +636,7 @@ void PackStr::LoadCompressed(system::Stream *f) { } if (dpn_->numOfDeleted > 0) { - uint delete_buf_size = 0; + ushort delete_buf_size = 0; delete_buf_size = (*reinterpret_cast(cur_buf)); if (delete_buf_size > bitmap_size_) throw common::DatabaseException("Unexpected bytes found in data pack."); @@ -613,8 +644,9 @@ void PackStr::LoadCompressed(system::Stream *f) { std::memcpy(deletes_ptr_.get(), reinterpret_cast(cur_buf) + sizeof(ushort), delete_buf_size); else { compress::BitstreamCompressor bsc; - CprsErr res = bsc.Decompress(reinterpret_cast(deletes_ptr_.get()), delete_buf_size, - reinterpret_cast(cur_buf) + 2, dpn_->numOfRecords, dpn_->numOfDeleted); + CprsErr res = + bsc.Decompress(reinterpret_cast(deletes_ptr_.get()), delete_buf_size, + reinterpret_cast(cur_buf) + sizeof(ushort), dpn_->numOfRecords, dpn_->numOfDeleted); if (res != CprsErr::CPRS_SUCCESS) { throw common::DatabaseException("Decompression of deletes failed for column " + std::to_string(pc_column(GetCoordinate().co.pack) + 1) + ", pack " + @@ -632,8 +664,8 @@ void PackStr::LoadCompressed(system::Stream *f) { compress::NumCompressor nc; mm::MMGuard cn_ptr((uint *)alloc((1 << col_share_->pss) * sizeof(uint), mm::BLOCK_TYPE::BLOCK_TEMPORARY), *this); - CprsErr res = nc.Decompress(cn_ptr.get(), reinterpret_cast(cur_buf + 8), comp_len_buf_size - 8, - dpn_->numOfRecords - dpn_->numOfNulls, maxv); + CprsErr res = nc.Decompress(cn_ptr.get(), reinterpret_cast(cur_buf + sizeof(uint32_t) * 2), + comp_len_buf_size - sizeof(uint32_t) * 2, dpn_->numOfRecords - dpn_->numOfNulls, maxv); if (res != CprsErr::CPRS_SUCCESS) { std::stringstream msg_buf; msg_buf << "Decompression of lengths of std::string values failed for column " @@ -654,12 +686,13 @@ void PackStr::LoadCompressed(system::Stream *f) { cur_buf += comp_len_buf_size; auto dlen = *reinterpret_cast(cur_buf); - cur_buf += sizeof(dlen); + cur_buf += sizeof(uint32_t); data_.sum_len = *reinterpret_cast(cur_buf); cur_buf += sizeof(uint32_t); ASSERT(cur_buf + dlen == dpn_->dataLength + reinterpret_cast(compressed_buf.get()), - std::to_string(data_.sum_len) + "/" + std::to_string(dpn_->dataLength) + "/" + std::to_string(dlen)); + col_share_->DataFile() + " , " + std::to_string(data_.sum_len) + "/" + std::to_string(dpn_->dataLength) + "/" + + std::to_string(dlen)); int zlo = 0; for (uint obj = 0; obj < dpn_->numOfRecords; obj++) @@ -699,8 +732,8 @@ void PackStr::LoadCompressed(system::Stream *f) { } void PackStr::LoadCompressedTrie(system::Stream *f) { - ASSERT(IsModeCompressionApplied()); - + ASSERT(IsModeCompressionApplied(), "path:" + col_share_->DataFile()); + compressed_data_.reset(nullptr); compressed_data_ = alloc_ptr(dpn_->dataLength + 1, mm::BLOCK_TYPE::BLOCK_COMPRESSED); f->ReadExact(compressed_data_.get(), dpn_->dataLength); auto trie_length = dpn_->dataLength - (dpn_->numOfRecords * sizeof(unsigned short)) - 8; @@ -730,8 +763,8 @@ types::BString PackStr::GetValueBinary(int locationInPack) const { if (IsNull(locationInPack)) return types::BString(); DEBUG_ASSERT(locationInPack <= (int)dpn_->numOfRecords); - if (pack_str_state_ == PackStrtate::kPackTrie) - return GetStringValueTrie(locationInPack); + // if (pack_str_state_ == PackStrtate::kPackTrie) + // return GetStringValueTrie(locationInPack); size_t str_size; if (data_.len_mode == sizeof(ushort)) str_size = data_.lens16[locationInPack]; @@ -746,7 +779,7 @@ void PackStr::LoadUncompressed(system::Stream *f) { auto sz = dpn_->dataLength; f->ReadExact(nulls_ptr_.get(), bitmap_size_); f->ReadExact(deletes_ptr_.get(), bitmap_size_); - sz -= (bitmap_size_ * 2); + sz -= (bitmap_size_ * kDeleteOrNullBitmap); f->ReadExact(data_.lens, (data_.len_mode * (1 << col_share_->pss))); sz -= (data_.len_mode * (1 << col_share_->pss)); @@ -762,7 +795,8 @@ void PackStr::LoadUncompressed(system::Stream *f) { SetPtrSize(i, nullptr, 0); } } - ASSERT(data_.sum_len == sz, "bad pack! " + std::to_string(data_.sum_len) + "/" + std::to_string(sz)); + ASSERT(data_.sum_len == sz, + col_share_->DataFile() + " , " + "bad pack! " + std::to_string(data_.sum_len) + "/" + std::to_string(sz)); } bool PackStr::Lookup(const types::BString &pattern, uint16_t &id) { diff --git a/storage/tianmu/core/pack_str.h b/storage/tianmu/data/pack_str.h similarity index 98% rename from storage/tianmu/core/pack_str.h rename to storage/tianmu/data/pack_str.h index 32c0de922..61b4cfcca 100644 --- a/storage/tianmu/core/pack_str.h +++ b/storage/tianmu/data/pack_str.h @@ -20,7 +20,7 @@ #include -#include "core/pack.h" +#include "data/pack.h" #include "marisa.h" namespace Tianmu { @@ -128,9 +128,9 @@ class PackStr final : public Pack { struct { std::vector v; size_t sum_len; - char **index; + char **index = nullptr; union { - void *lens; + void *lens = nullptr; uint32_t *lens32; uint16_t *lens16; }; diff --git a/storage/tianmu/core/combined_iterator.cpp b/storage/tianmu/executor/combined_iterator.cpp similarity index 92% rename from storage/tianmu/core/combined_iterator.cpp rename to storage/tianmu/executor/combined_iterator.cpp index 309de24b8..e5227f4b7 100644 --- a/storage/tianmu/core/combined_iterator.cpp +++ b/storage/tianmu/executor/combined_iterator.cpp @@ -51,9 +51,6 @@ void CombinedIterator::Next() { } } else { base_iter_->Next(); - if (base_iter_->Valid()) { - TIANMU_LOG(LogCtl_Level::ERROR, "base pos: %d", base_iter_->Position()); - } } } @@ -85,8 +82,8 @@ bool CombinedIterator::Valid() const { return Position() != -1; } bool CombinedIterator::IsBase() const { return is_base_; } bool CombinedIterator::BaseCurrentRowIsInvalid() const { - if (base_iter_->CurrentRowIsDeleted() || InDeltaDeletedRow.find(base_iter_->Position()) != InDeltaDeletedRow.end() || - InDeltaUpdateRow.find(base_iter_->Position()) != InDeltaUpdateRow.end()) { + if (InDeltaDeletedRow.find(base_iter_->Position()) != InDeltaDeletedRow.end() || + InDeltaUpdateRow.find(base_iter_->Position()) != InDeltaUpdateRow.end() || base_iter_->CurrentRowIsDeleted()) { return true; } return false; diff --git a/storage/tianmu/core/combined_iterator.h b/storage/tianmu/executor/combined_iterator.h similarity index 96% rename from storage/tianmu/core/combined_iterator.h rename to storage/tianmu/executor/combined_iterator.h index fa0562c1a..c11e448ee 100644 --- a/storage/tianmu/core/combined_iterator.h +++ b/storage/tianmu/executor/combined_iterator.h @@ -22,9 +22,9 @@ #ifndef MYSQL_STORAGE_TIANMU_CORE_MERGE_ITERATOR_H_ #define MYSQL_STORAGE_TIANMU_CORE_MERGE_ITERATOR_H_ -#include "delta_table.h" -#include "tianmu_attr_typeinfo.h" -#include "tianmu_table.h" +#include "core/delta_table.h" +#include "core/tianmu_table.h" +#include "vc/tianmu_attr_typeinfo.h" // new iterator not Begin() and End() function; // only use Valid() to check iterator is valid. diff --git a/storage/tianmu/core/ctask.h b/storage/tianmu/executor/ctask.h similarity index 100% rename from storage/tianmu/core/ctask.h rename to storage/tianmu/executor/ctask.h diff --git a/storage/tianmu/core/filter.cpp b/storage/tianmu/executor/filter.cpp similarity index 99% rename from storage/tianmu/core/filter.cpp rename to storage/tianmu/executor/filter.cpp index 8f78bf86b..b59f6758b 100644 --- a/storage/tianmu/core/filter.cpp +++ b/storage/tianmu/executor/filter.cpp @@ -18,7 +18,7 @@ #include "filter.h" #include "common/assert.h" -#include "core/tools.h" +#include "util/tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/filter.h b/storage/tianmu/executor/filter.h similarity index 100% rename from storage/tianmu/core/filter.h rename to storage/tianmu/executor/filter.h diff --git a/storage/tianmu/core/filter_block.cpp b/storage/tianmu/executor/filter_block.cpp similarity index 99% rename from storage/tianmu/core/filter_block.cpp rename to storage/tianmu/executor/filter_block.cpp index 083e25e8f..dfd3d9887 100644 --- a/storage/tianmu/core/filter_block.cpp +++ b/storage/tianmu/executor/filter_block.cpp @@ -16,9 +16,9 @@ */ #include "common/assert.h" -#include "core/bin_tools.h" -#include "core/filter.h" -#include "core/tools.h" +#include "executor/filter.h" +#include "util/bin_tools.h" +#include "util/tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/filter_iterators.cpp b/storage/tianmu/executor/filter_iterators.cpp similarity index 99% rename from storage/tianmu/core/filter_iterators.cpp rename to storage/tianmu/executor/filter_iterators.cpp index 99ba7b68c..b8e96e0b7 100644 --- a/storage/tianmu/core/filter_iterators.cpp +++ b/storage/tianmu/executor/filter_iterators.cpp @@ -15,8 +15,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/filter.h" -#include "core/pack_orderer.h" +#include "data/pack_orderer.h" +#include "executor/filter.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/join_thread_table.cpp b/storage/tianmu/executor/join_thread_table.cpp similarity index 99% rename from storage/tianmu/core/join_thread_table.cpp rename to storage/tianmu/executor/join_thread_table.cpp index 91b18ecc8..910cfccab 100644 --- a/storage/tianmu/core/join_thread_table.cpp +++ b/storage/tianmu/executor/join_thread_table.cpp @@ -15,7 +15,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/join_thread_table.h" +#include "executor/join_thread_table.h" #include "base/util/spinlock.h" #include "common/assert.h" diff --git a/storage/tianmu/core/join_thread_table.h b/storage/tianmu/executor/join_thread_table.h similarity index 98% rename from storage/tianmu/core/join_thread_table.h rename to storage/tianmu/executor/join_thread_table.h index a13aae9b3..1debc86d2 100644 --- a/storage/tianmu/core/join_thread_table.h +++ b/storage/tianmu/executor/join_thread_table.h @@ -22,10 +22,10 @@ #include #include "common/assert.h" -#include "core/column_bin_encoder.h" -#include "core/filter.h" #include "core/hash_table.h" #include "core/temp_table.h" +#include "executor/filter.h" +#include "vc/column_bin_encoder.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/merge_operator.cpp b/storage/tianmu/executor/merge_operator.cpp similarity index 94% rename from storage/tianmu/core/merge_operator.cpp rename to storage/tianmu/executor/merge_operator.cpp index f7ba1a500..59cb20662 100644 --- a/storage/tianmu/core/merge_operator.cpp +++ b/storage/tianmu/executor/merge_operator.cpp @@ -19,7 +19,7 @@ // Created by dfx on 22-12-15. // -#include "core/merge_operator.h" +#include "executor/merge_operator.h" #include "core/delta_record_head.h" #include "core/delta_table.h" #include "util/mapped_circular_buffer.h" @@ -169,16 +169,7 @@ bool RecordMergeOperator::Merge(const rocksdb::Slice &key, const rocksdb::Slice return false; } } else if (existing_type == RecordType::kDelete) { - DeltaRecordHeadForDelete e_deleteRecord; - e_deleteRecord.recordDecode(e_ptr); - - DeltaRecordHeadForDelete deleteRecord; - deleteRecord.recordDecode(ptr); - - uint32_t n_load_num = e_deleteRecord.load_num_ + deleteRecord.load_num_; - DeltaRecordHeadForDelete n_deleteRecord(n_load_num); - n_ptr = n_deleteRecord.recordEncode(n_ptr); - *new_value = std::string(value_buff.get(), n_ptr - value_buff.get()); + *new_value = existing_value->ToString(); return true; } else { return false; diff --git a/storage/tianmu/core/merge_operator.h b/storage/tianmu/executor/merge_operator.h similarity index 100% rename from storage/tianmu/core/merge_operator.h rename to storage/tianmu/executor/merge_operator.h diff --git a/storage/tianmu/core/query_operator.h b/storage/tianmu/executor/query_operator.h similarity index 100% rename from storage/tianmu/core/query_operator.h rename to storage/tianmu/executor/query_operator.h diff --git a/storage/tianmu/core/task_executor.cpp b/storage/tianmu/executor/task_executor.cpp similarity index 93% rename from storage/tianmu/core/task_executor.cpp rename to storage/tianmu/executor/task_executor.cpp index f7ce86ccb..5238dd322 100644 --- a/storage/tianmu/core/task_executor.cpp +++ b/storage/tianmu/executor/task_executor.cpp @@ -19,7 +19,7 @@ #include "core/app_template.h" #include "core/future.h" -#include "core/task_executor.h" +#include "executor/task_executor.h" #ifndef DISABLE_USED_FOR_TIANMU #include "core/engine.h" @@ -98,7 +98,12 @@ void TaskExecutor::Exit() { void TaskExecutor::AddTask(std::unique_ptr task) { _app_template->AddTask(std::move(task)); } #ifndef DISABLE_USED_FOR_TIANMU -TaskExecutor *GetTaskExecutor() { return ha_tianmu_engine_->GetTaskExecutor(); } +TaskExecutor *GetTaskExecutor() { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + return eng->GetTaskExecutor(); +} #endif } // namespace core diff --git a/storage/tianmu/core/task_executor.h b/storage/tianmu/executor/task_executor.h similarity index 100% rename from storage/tianmu/core/task_executor.h rename to storage/tianmu/executor/task_executor.h diff --git a/storage/tianmu/exporter/data_exporter.cpp b/storage/tianmu/exporter/data_exporter.cpp index 06a29355b..d860e20cf 100644 --- a/storage/tianmu/exporter/data_exporter.cpp +++ b/storage/tianmu/exporter/data_exporter.cpp @@ -19,8 +19,8 @@ #include "common/assert.h" #include "core/engine.h" -#include "core/tianmu_attr.h" #include "system/large_buffer.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace exporter { @@ -34,8 +34,11 @@ void DataExporter::Init(std::shared_ptr buffer, std::vector this->attr_infos_ = result_deas; this->no_attrs_ = int(attr_infos_.size()); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (size_t i = 0; i < attr_infos_.size(); ++i) { - common::ColumnType f_at = ha_tianmu_engine_->GetCorrespondingType(fields[i]); + common::ColumnType f_at = eng->GetCorrespondingType(fields[i]); if (core::ATI::IsStringType(attr_infos_[i].Type()) && !core::ATI::IsStringType(f_at)) this->attr_infos_[i] = core::AttributeTypeInfo(f_at, attr_infos_[i].NotNull()); } diff --git a/storage/tianmu/exporter/data_exporter.h b/storage/tianmu/exporter/data_exporter.h index be112aec2..3829de792 100644 --- a/storage/tianmu/exporter/data_exporter.h +++ b/storage/tianmu/exporter/data_exporter.h @@ -19,10 +19,10 @@ #pragma once #include "common/common_definitions.h" -#include "core/bin_tools.h" #include "system/channel_out.h" #include "system/large_buffer.h" #include "system/txt_utils.h" +#include "util/bin_tools.h" namespace Tianmu { namespace exporter { diff --git a/storage/tianmu/handler/ha_tianmu.cpp b/storage/tianmu/handler/ha_tianmu.cpp index 93ab41786..f720432bb 100644 --- a/storage/tianmu/handler/ha_tianmu.cpp +++ b/storage/tianmu/handler/ha_tianmu.cpp @@ -26,18 +26,18 @@ #include "binlog.h" #include "common/assert.h" #include "common/exception.h" -#include "core/compilation_tools.h" -#include "core/compiled_query.h" #include "core/delta_record_head.h" #include "core/temp_table.h" -#include "core/tools.h" #include "core/transaction.h" #include "core/value.h" #include "ha_tianmu.h" #include "mm/initializer.h" +#include "optimizer/compile/compilation_tools.h" +#include "optimizer/compile/compiled_query.h" #include "system/configuration.h" #include "system/file_out.h" #include "util/fs.h" +#include "util/tools.h" #define MYSQL_SERVER 1 @@ -192,21 +192,23 @@ int ha_tianmu::external_lock(THD *thd, int lock_type) { if (thd->lex->sql_command == SQLCOM_LOCK_TABLES) DBUG_RETURN(HA_ERR_WRONG_COMMAND); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); try { if (lock_type == F_UNLCK) { if (thd->lex->sql_command == SQLCOM_UNLOCK_TABLES) current_txn_->ExplicitUnlockTables(); if (thd->killed) - ha_tianmu_engine_->Rollback(thd, true); + eng->Rollback(thd, true); if (current_txn_) { current_txn_->RemoveTable(share_); if (current_txn_->Empty()) { - ha_tianmu_engine_->ClearTx(thd); + eng->ClearTx(thd); } } } else { - auto tx = ha_tianmu_engine_->GetTx(thd); + auto tx = eng->GetTx(thd); if (thd->lex->sql_command == SQLCOM_LOCK_TABLES) tx->ExplicitLockTables(); @@ -219,6 +221,7 @@ int ha_tianmu::external_lock(THD *thd, int lock_type) { trans_register_ha(thd, true, tianmu_hton, nullptr); } } + ret = 0; } catch (std::exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), "Tianmu internal error", MYF(0)); @@ -230,7 +233,7 @@ int ha_tianmu::external_lock(THD *thd, int lock_type) { // destroy the tx on failure if (ret != 0) - ha_tianmu_engine_->ClearTx(thd); + eng->ClearTx(thd); DBUG_RETURN(ret); } @@ -356,16 +359,21 @@ inline bool has_dup_key(std::shared_ptr &indextab, TABL int ha_tianmu::write_row([[maybe_unused]] uchar *buf) { int ret = 1; DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + try { if (ha_thd()->lex->duplicates == DUP_UPDATE || ha_thd()->lex->duplicates == DUP_REPLACE) { // add DUP_REPLACE - if (auto indextab = ha_tianmu_engine_->GetTableIndex(table_name_)) { + if (auto indextab = eng->GetTableIndex(table_name_)) { if (size_t row; has_dup_key(indextab, table, row)) { dupkey_pos_ = row; DBUG_RETURN(HA_ERR_FOUND_DUPP_KEY); } } } - ret = ha_tianmu_engine_->InsertRow(table_name_, current_txn_, table, share_); + + ret = eng->InsertRow(table_name_, current_txn_, table, share_); } catch (common::OutOfMemoryException &e) { DBUG_RETURN(ER_LOCK_WAIT_TIMEOUT); } catch (common::DatabaseException &e) { @@ -381,7 +389,6 @@ int ha_tianmu::write_row([[maybe_unused]] uchar *buf) { } catch (common::DupKeyException &e) { ret = HA_ERR_FOUND_DUPP_KEY; TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught in Engine::AddInsertRecord: %s.", e.what()); - my_message(static_cast(common::ErrorCode::DUPP_KEY), e.what(), MYF(0)); } catch (common::Exception &e) { TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught in Engine::AddInsertRecord: %s.", e.what()); my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); @@ -392,6 +399,7 @@ int ha_tianmu::write_row([[maybe_unused]] uchar *buf) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), "An unknown system exception error caught.", MYF(0)); TIANMU_LOG(LogCtl_Level::ERROR, "An unknown system exception error caught."); } + DBUG_RETURN(ret); } @@ -411,7 +419,11 @@ int ha_tianmu::write_row([[maybe_unused]] uchar *buf) { Called from sql_select.cc, sql_acl.cc, sql_update.cc, and sql_insert.cc. */ int ha_tianmu::update_row(const uchar *old_data, uchar *new_data) { - DBUG_ENTER(__PRETTY_FUNCTION__); + DBUG_ENTER("ha_tianmu::update_row"); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int ret = HA_ERR_INTERNAL_ERROR; auto org_bitmap = dbug_tmp_use_all_columns(table, table->write_set); @@ -419,8 +431,8 @@ int ha_tianmu::update_row(const uchar *old_data, uchar *new_data) { [org_bitmap, this](...) { dbug_tmp_restore_column_map(table->write_set, org_bitmap); }); try { - ha_tianmu_engine_->UpdateRow(table_name_, table, share_, current_position_, old_data, new_data); - ha_tianmu_engine_->IncTianmuStatUpdate(); + eng->UpdateRow(table_name_, table, share_, current_position_, old_data, new_data); + eng->IncTianmuStatUpdate(); DBUG_RETURN(0); } catch (common::DatabaseException &e) { TIANMU_LOG(LogCtl_Level::ERROR, "Update exception: %s.", e.what()); @@ -436,6 +448,7 @@ int ha_tianmu::update_row(const uchar *old_data, uchar *new_data) { } catch (...) { TIANMU_LOG(LogCtl_Level::ERROR, "An unknown system exception error caught."); } + DBUG_RETURN(ret); } @@ -454,6 +467,10 @@ int ha_tianmu::update_row(const uchar *old_data, uchar *new_data) { */ int ha_tianmu::delete_row([[maybe_unused]] const uchar *buf) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int ret = HA_ERR_INTERNAL_ERROR; auto org_bitmap = dbug_tmp_use_all_columns(table, table->write_set); @@ -461,7 +478,7 @@ int ha_tianmu::delete_row([[maybe_unused]] const uchar *buf) { [org_bitmap, this](...) { dbug_tmp_restore_column_map(table->write_set, org_bitmap); }); try { - ha_tianmu_engine_->DeleteRow(table_name_, table, share_, current_position_); + eng->DeleteRow(table_name_, table, share_, current_position_); DBUG_RETURN(0); } catch (common::DatabaseException &e) { TIANMU_LOG(LogCtl_Level::ERROR, "Delete exception: %s.", e.what()); @@ -489,22 +506,31 @@ int ha_tianmu::delete_row([[maybe_unused]] const uchar *buf) { */ int ha_tianmu::delete_all_rows() { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int ret = 1; try { - ha_tianmu_engine_->TruncateTable(table_name_, ha_thd()); + eng->TruncateTable(table_name_, ha_thd()); ret = 0; } catch (std::exception &e) { TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught: %s", e.what()); } catch (...) { TIANMU_LOG(LogCtl_Level::ERROR, "An unknown system exception error caught."); } + DBUG_RETURN(ret); } int ha_tianmu::rename_table(const char *from, const char *to) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + try { - if (!ha_tianmu_engine_->RenameTable(current_txn_, from, to, ha_thd())) { + if (!eng->RenameTable(current_txn_, from, to, ha_thd())) { DBUG_RETURN(0); } else { DBUG_RETURN(1); @@ -573,6 +599,10 @@ void ha_tianmu::update_create_info(HA_CREATE_INFO *create_info) { */ int ha_tianmu::info(uint flag) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int ret = 1; try { std::scoped_lock guard(global_mutex_); @@ -581,10 +611,12 @@ int ha_tianmu::info(uint flag) { if (current_txn_ != nullptr) { tab = current_txn_->GetTableByPath(table_name_); } else - tab = ha_tianmu_engine_->GetTableRD(table_name_); + tab = eng->GetTableRD(table_name_); + stats.records = (ha_rows)(tab->NumOfValues() - tab->NumOfDeleted()); stats.data_file_length = 0; stats.mean_rec_length = 0; + if (stats.records > 0) { std::vector attr_info(tab->GetAttributesInfo()); uint no_attrs = tab->NumOfAttrs(); @@ -609,8 +641,9 @@ int ha_tianmu::info(uint flag) { if (current_txn_ != nullptr) { tab = current_txn_->GetTableByPath(table_name_); } else { - tab = ha_tianmu_engine_->GetTableRD(table_name_); + tab = eng->GetTableRD(table_name_); } + for (uint colno = 0; colno < tab->NumOfAttrs(); colno++) { auto attr = tab->GetAttr(colno); if (attr->GetIfAutoInc()) { @@ -618,6 +651,7 @@ int ha_tianmu::info(uint flag) { } } } + ret = 0; } catch (std::exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); @@ -645,6 +679,9 @@ my_bool tianmu_check_status([[maybe_unused]] void *param) { return 0; } int ha_tianmu::open(const char *name, [[maybe_unused]] int mode, [[maybe_unused]] uint test_if_locked) { DBUG_ENTER(__PRETTY_FUNCTION__); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + table_name_ = name; int ret = 1; @@ -654,16 +691,19 @@ int ha_tianmu::open(const char *name, [[maybe_unused]] int mode, [[maybe_unused] // Keeping the share together with mysql handler cache makes // more sense that would mean once a table is opened the TableShare // would be kept. - if (!(share_ = ha_tianmu_engine_->GetTableShare(table_share))) + if (!(share_ = eng->GetTableShare(table_share))) DBUG_RETURN(ret); thr_lock_data_init(&share_->thr_lock, &lock_, nullptr); share_->thr_lock.check_status = tianmu_check_status; + // have primary key, use table index if (table->s->primary_key != MAX_INDEXES) - ha_tianmu_engine_->AddTableIndex(name, table, ha_thd()); - ha_tianmu_engine_->AddTableDelta(table, share_); + eng->AddTableIndex(name, table, ha_thd()); + + eng->AddTableDelta(table, share_); ret = 0; + } catch (common::Exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), "Error from Tianmu engine", MYF(0)); TIANMU_LOG(LogCtl_Level::ERROR, "A tianmu exception is caught: %s", e.what()); @@ -703,6 +743,7 @@ int ha_tianmu::close() { int ha_tianmu::fill_row_by_id([[maybe_unused]] uchar *buf, uint64_t rowid) { DBUG_ENTER(__PRETTY_FUNCTION__); + int rc = HA_ERR_KEY_NOT_FOUND; try { auto tab = current_txn_->GetTableByPath(table_name_); @@ -719,6 +760,7 @@ int ha_tianmu::fill_row_by_id([[maybe_unused]] uchar *buf, uint64_t rowid) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught: %s", e.what()); } + DBUG_RETURN(rc); } @@ -743,12 +785,17 @@ int ha_tianmu::index_read([[maybe_unused]] uchar *buf, [[maybe_unused]] const uc [[maybe_unused]] uint key_len __attribute__((unused)), enum ha_rkey_function find_flag __attribute__((unused))) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int rc = HA_ERR_KEY_NOT_FOUND; try { table->status = STATUS_NOT_FOUND; - auto index = ha_tianmu_engine_->GetTableIndex(table_name_); + auto index = eng->GetTableIndex(table_name_); + if (index && (active_index == table_share->primary_key)) { - auto tab = ha_tianmu_engine_->GetTableRD(table_name_); + auto tab = eng->GetTableRD(table_name_); std::vector keys; tab->GetKeys(table, keys, index); @@ -758,17 +805,20 @@ int ha_tianmu::index_read([[maybe_unused]] uchar *buf, [[maybe_unused]] const uc current_position_ = rowid; rc = 0; } + if (!rc) table->status = 0; } else if (find_flag == HA_READ_AFTER_KEY || find_flag == HA_READ_KEY_OR_NEXT) { auto iter = current_txn_->KVTrans().KeyIter(); common::Operator op = (find_flag == HA_READ_AFTER_KEY) ? common::Operator::O_MORE : common::Operator::O_MORE_EQ; iter->ScanToKey(index, keys, op); + uint64_t rowid; if (iter->GetRowid(rowid) == common::ErrorCode::SUCCESS) { current_position_ = rowid; rc = 0; } + if (!rc) table->status = 0; } else { @@ -796,14 +846,20 @@ int ha_tianmu::index_read([[maybe_unused]] uchar *buf, [[maybe_unused]] const uc */ int ha_tianmu::index_next([[maybe_unused]] uchar *buf) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int rc = HA_ERR_END_OF_FILE; try { auto iter = current_txn_->KVTrans().KeyIter(); ++(*iter); + if (iter->IsValid()) { uint64_t rowid; iter->GetRowid(rowid); rc = fill_row_by_id(buf, rowid); + if (!rc) table->status = 0; } else { @@ -814,6 +870,7 @@ int ha_tianmu::index_next([[maybe_unused]] uchar *buf) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught: %s", e.what()); } + DBUG_RETURN(rc); } @@ -822,6 +879,7 @@ int ha_tianmu::index_next([[maybe_unused]] uchar *buf) { */ int ha_tianmu::index_prev([[maybe_unused]] uchar *buf) { DBUG_ENTER(__PRETTY_FUNCTION__); + int rc = HA_ERR_END_OF_FILE; try { auto iter = current_txn_->KVTrans().KeyIter(); @@ -851,9 +909,13 @@ int ha_tianmu::index_prev([[maybe_unused]] uchar *buf) { */ int ha_tianmu::index_first([[maybe_unused]] uchar *buf) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int rc = HA_ERR_END_OF_FILE; try { - auto index = ha_tianmu_engine_->GetTableIndex(table_name_); + auto index = eng->GetTableIndex(table_name_); if (index && current_txn_) { uint64_t rowid; auto iter = current_txn_->KVTrans().KeyIter(); @@ -883,9 +945,13 @@ int ha_tianmu::index_first([[maybe_unused]] uchar *buf) { */ int ha_tianmu::index_last([[maybe_unused]] uchar *buf) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int rc = HA_ERR_END_OF_FILE; try { - auto index = ha_tianmu_engine_->GetTableIndex(table_name_); + auto index = eng->GetTableIndex(table_name_); if (index && current_txn_) { uint64_t rowid; auto iter = current_txn_->KVTrans().KeyIter(); @@ -919,6 +985,9 @@ int ha_tianmu::index_last([[maybe_unused]] uchar *buf) { int ha_tianmu::rnd_init(bool scan) { DBUG_ENTER(__PRETTY_FUNCTION__); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int ret = 1; try { if (query_ && !result_ && table_ptr_->NumOfObj() != 0) { @@ -946,6 +1015,7 @@ int ha_tianmu::rnd_init(bool scan) { << system::unlock; TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught in push-down execution: %s", e.what()); } + query_.reset(); cq_.reset(); } else { @@ -953,12 +1023,13 @@ int ha_tianmu::rnd_init(bool scan) { iterator_ = std::make_unique((core::TianmuTable *)table_ptr_, GetAttrsUseIndicator(table), *filter_ptr_); } else { - std::shared_ptr rctp = ha_tianmu_engine_->GetTx(table->in_use)->GetTableByPath(table_name_); + std::shared_ptr rctp = eng->GetTx(table->in_use)->GetTableByPath(table_name_); table_ptr_ = rctp.get(); filter_ptr_.reset(); iterator_ = std::make_unique(rctp.get(), GetAttrsUseIndicator(table)); } } + ret = 0; blob_buffers_.resize(0); if (table_ptr_ != nullptr) @@ -1035,7 +1106,6 @@ void ha_tianmu::position([[maybe_unused]] const uchar *record) { if (table->in_use->slave_thread && table->s->primary_key != MAX_INDEXES) { /* Copy primary key as the row reference */ KEY *key_info = table->key_info + table->s->primary_key; - key_copy(ref, (uchar *)record, key_info, key_info->key_length); ref_length = key_info->key_length; active_index = table->s->primary_key; } else { @@ -1055,6 +1125,9 @@ void ha_tianmu::position([[maybe_unused]] const uchar *record) { int ha_tianmu::rnd_pos(uchar *buf, uchar *pos) { DBUG_ENTER(__PRETTY_FUNCTION__); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + int ret = HA_ERR_END_OF_FILE; try { if (table->in_use->slave_thread && table->s->primary_key != MAX_INDEXES) { @@ -1065,12 +1138,13 @@ int ha_tianmu::rnd_pos(uchar *buf, uchar *pos) { filter_ptr_->Reset(); filter_ptr_->Set(position); - auto tab_ptr = ha_tianmu_engine_->GetTx(table->in_use)->GetTableByPath(table_name_); + auto tab_ptr = eng->GetTx(table->in_use)->GetTableByPath(table_name_); iterator_ = std::make_unique(tab_ptr.get(), GetAttrsUseIndicator(table), *filter_ptr_); table_ptr_ = tab_ptr.get(); iterator_->SeekTo(position); table->status = 0; blob_buffers_.resize(table->s->fields); + if (fill_row(buf) == HA_ERR_END_OF_FILE) { table->status = STATUS_NOT_FOUND; DBUG_RETURN(ret); @@ -1102,6 +1176,15 @@ int ha_tianmu::extra(enum ha_extra_function operation) { cq_.reset(); query_.reset(); } + + extra_info = operation; + if (operation == HA_EXTRA_IGNORE_DUP_KEY || operation == HA_EXTRA_NO_IGNORE_DUP_KEY) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + ASSERT(eng); + if (eng) + eng->setExtra(extra_info); + } + DBUG_RETURN(0); } @@ -1112,7 +1195,11 @@ int ha_tianmu::start_stmt(THD *thd, thr_lock_type lock_type) { if (thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)) { trans_register_ha(thd, true, tianmu_hton, nullptr); } - current_txn_ = ha_tianmu_engine_->GetTx(thd); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + current_txn_ = eng->GetTx(thd); current_txn_->AddTableWRIfNeeded(share_); } } catch (std::exception &e) { @@ -1153,11 +1240,22 @@ my_bool ha_tianmu::register_query_cache_table(THD *thd, char *table_key, size_t int ha_tianmu::delete_table(const char *name) { DBUG_ENTER(__PRETTY_FUNCTION__); try { - if (!ha_tianmu_engine_->DeleteTable(name, ha_thd())) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + if (!eng->DeleteTable(name, ha_thd())) { DBUG_RETURN(0); } else { DBUG_RETURN(1); } + } catch (common::TianmuError &e) { + std::string errmsg = "TianmuError exception error caught. err:" + e.Message(); + my_message(static_cast(common::ErrorCode::FAILED), errmsg.c_str(), MYF(0)); + TIANMU_LOG(LogCtl_Level::ERROR, "TianmuError exception error caught. err." + e.Message()); + } catch (common::DatabaseException &e) { + std::string errmsg = "Database exception error caught. err:" + e.getExceptionMsg(); + my_message(static_cast(common::ErrorCode::FAILED), errmsg.c_str(), MYF(0)); + TIANMU_LOG(LogCtl_Level::ERROR, "Database exception error caught. err." + e.getExceptionMsg()); } catch (std::exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught: %s", e.what()); @@ -1194,6 +1292,7 @@ ha_rows ha_tianmu::records_in_range([[maybe_unused]] uint inx, [[maybe_unused]] */ int ha_tianmu::create(const char *name, TABLE *table_arg, [[maybe_unused]] HA_CREATE_INFO *create_info) { DBUG_ENTER(__PRETTY_FUNCTION__); + try { // fix issue 487: bug for create table #mysql50#q.q should return failure and actually return success const size_t table_name_len = strlen(name); @@ -1202,7 +1301,10 @@ int ha_tianmu::create(const char *name, TABLE *table_arg, [[maybe_unused]] HA_CR DBUG_RETURN(ER_WRONG_TABLE_NAME); } - ha_tianmu_engine_->CreateTable(name, table_arg, create_info); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + eng->CreateTable(name, table_arg, create_info); DBUG_RETURN(0); } catch (common::AutoIncException &e) { my_message(ER_WRONG_AUTO_KEY, e.what(), MYF(0)); @@ -1224,14 +1326,20 @@ int ha_tianmu::create(const char *name, TABLE *table_arg, [[maybe_unused]] HA_CR int ha_tianmu::truncate() { DBUG_ENTER(__PRETTY_FUNCTION__); + int ret = 1; try { - ha_tianmu_engine_->TruncateTable(table_name_, ha_thd()); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + eng->TruncateTable(table_name_, ha_thd()); ret = 0; } catch (std::exception &e) { TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught: %s", e.what()); + ret = 1; } catch (...) { TIANMU_LOG(LogCtl_Level::ERROR, "An unknown system exception error caught."); + ret = 1; } DBUG_RETURN(ret); } @@ -1258,15 +1366,19 @@ int ha_tianmu::fill_row(uchar *buf) { buffer.reset(new char[table->s->reclength]); std::memcpy(buffer.get(), table->record[0], table->s->reclength); } + if (iterator_->IsBase()) { - // judge whether this line has been deleted. - // if this line has been deleted, data will not be copied. + /* + Determine whether the current row is invalid in the base layer, + If it is invalid, directly return to the SQL layer that the current row has been deleted + */ if (iterator_->BaseCurrentRowIsInvalid()) { current_position_ = iterator_->Position(); iterator_->Next(); dbug_tmp_restore_column_map(table->write_set, org_bitmap); return HA_ERR_RECORD_DELETED; } + for (uint col_id = 0; col_id < table->s->fields; col_id++) { core::Engine::ConvertToField(table->field[col_id], *(iterator_->GetBaseData(col_id)), &blob_buffers_[col_id]); } @@ -1275,6 +1387,7 @@ int ha_tianmu::fill_row(uchar *buf) { if (!delta_record.empty()) { switch (core::DeltaRecordHead::GetRecordType(delta_record.data())) { case core::RecordType::kInsert: + // If the function change fails, it will be considered that the row change has been deleted. if (!core::Engine::DecodeInsertRecordToField(delta_record.data(), table->field)) { current_position_ = iterator_->Position(); iterator_->Next(); @@ -1283,6 +1396,11 @@ int ha_tianmu::fill_row(uchar *buf) { } break; case core::RecordType::kUpdate: + /* + Merge data from the base layer and delta layer. + At the same time, record the status of switching to the delta layer + When iterating the base layer data, it is judged as invalid for changing rows + */ current_txn_->GetTableByPath(table_name_)->FillRowByRowid(table, iterator_->Position()); core::Engine::DecodeUpdateRecordToField(delta_record.data(), table->field); iterator_->InDeltaUpdateRow.insert( @@ -1290,6 +1408,11 @@ int ha_tianmu::fill_row(uchar *buf) { break; case core::RecordType::kDelete: current_position_ = iterator_->Position(); + /* + If there is deleted data with a new row in the delta layer, + Just record it down, + When iterating the base layer data, it is judged as invalid for changing rows + */ iterator_->InDeltaDeletedRow.insert(std::unordered_map::value_type(current_position_, true)); iterator_->Next(); dbug_tmp_restore_column_map(table->write_set, org_bitmap); @@ -1320,13 +1443,17 @@ char *ha_tianmu::update_table_comment(const char *comment) { return ((char *)comment); // string too long } + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + // get size & ratio int64_t sum_c = 0, sum_u = 0; - std::vector attr_info = ha_tianmu_engine_->GetTableAttributesInfo(table_name_, table_share); + std::vector attr_info = eng->GetTableAttributesInfo(table_name_, table_share); for (uint j = 0; j < attr_info.size(); j++) { sum_c += attr_info[j].comp_size; sum_u += attr_info[j].uncomp_size; } + char buf[256] = {0}; double ratio = (sum_c > 0 ? double(sum_u) / double(sum_c) : 0); int count = std::sprintf(buf, "Overall compression ratio: %.3f, Raw size=%ld MB", ratio, sum_u >> 20); @@ -1409,9 +1536,12 @@ const Item *ha_tianmu::cond_push(const Item *a_cond) { Item const *ret = a_cond; Item *cond = const_cast(a_cond); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + try { if (!query_) { - std::shared_ptr rctp = ha_tianmu_engine_->GetTx(table->in_use)->GetTableByPath(table_name_); + std::shared_ptr rctp = eng->GetTx(table->in_use)->GetTableByPath(table_name_); table_ptr_ = rctp.get(); query_.reset(new core::Query(current_txn_)); cq_.reset(new core::CompiledQuery); @@ -1419,15 +1549,15 @@ const Item *ha_tianmu::cond_push(const Item *a_cond) { query_->AddTable(rctp); core::TabID t_out; - cq_->TableAlias(t_out, - core::TabID(0)); // we apply it to the only table in this query - cq_->TmpTable(tmp_table_, t_out); + cq_->TableAlias(t_out, core::TabID(0)); // we apply it to the only table in this query + cq_->TmpTable(tmp_table_, t_out, core::TableSubType::NORMAL); std::string ext_alias; if (table->pos_in_table_list->referencing_view) ext_alias = std::string(table->pos_in_table_list->referencing_view->table_name); else ext_alias = std::string(table->s->table_name.str); + ext_alias += std::string(":") + std::string(table->alias); query_->table_alias2index_ptr.insert(std::make_pair(ext_alias, std::make_pair(t_out.n, table))); @@ -1449,8 +1579,7 @@ const Item *ha_tianmu::cond_push(const Item *a_cond) { } if (result_) - return a_cond; // if result_ there is already a result command in - // compilation + return a_cond; // if result_ there is already a result command in compilation. std::unique_ptr tmp_cq(new core::CompiledQuery(*cq_)); core::CondID cond_id; @@ -1460,6 +1589,7 @@ const Item *ha_tianmu::cond_push(const Item *a_cond) { query_.reset(); return a_cond; } + tmp_cq->AddConds(tmp_table_, cond_id, core::CondType::WHERE_COND); tmp_cq->ApplyConds(tmp_table_); cq_.reset(tmp_cq.release()); @@ -1570,13 +1700,14 @@ enum_alter_inplace_result ha_tianmu::check_if_supported_inplace_alter([[maybe_un ha_alter_info->handler_flags & Alter_inplace_info::DROP_PK_INDEX) DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); // support alter table: mix add/drop key - sql_mode_t sql_mode = ha_thd()->slave_thread ? global_system_variables.sql_mode : ha_thd()->variables.sql_mode; + my_bool tianmu_no_key_error = + ha_thd()->slave_thread ? global_system_variables.tianmu_no_key_error : ha_thd()->variables.tianmu_no_key_error; if ((ha_alter_info->handler_flags & Alter_inplace_info::ADD_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::DROP_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::ADD_UNIQUE_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::RENAME_INDEX || ha_alter_info->handler_flags & Alter_inplace_info::DROP_UNIQUE_INDEX) && - (sql_mode & MODE_NO_KEY_ERROR)) + tianmu_no_key_error) DBUG_RETURN(HA_ALTER_INPLACE_NOT_SUPPORTED); DBUG_RETURN(HA_ALTER_ERROR); @@ -1586,17 +1717,25 @@ enum_alter_inplace_result ha_tianmu::check_if_supported_inplace_alter([[maybe_un bool ha_tianmu::inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha_alter_info) { DBUG_ENTER(__PRETTY_FUNCTION__); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + try { if (ha_alter_info->handler_flags & TIANMU_SUPPORTED_ALTER_TABLE_OPTIONS) { if (ha_alter_info->handler_flags & Alter_inplace_info::ALTER_STORED_COLUMN_TYPE) DBUG_RETURN(false); + if (ha_alter_info->create_info->used_fields & HA_CREATE_USED_DEFAULT_CHARSET) DBUG_RETURN(false); + if (ha_alter_info->create_info->used_fields & HA_CREATE_USED_COMMENT) DBUG_RETURN(false); + if (ha_alter_info->create_info->used_fields & HA_CREATE_USED_AUTO) { auto tab = current_txn_->GetTableByPath(table_name_); fs::path tab_dir = table_name_ + common::TIANMU_EXT; + for (uint i = 0; i < table_share->fields; i++) { if (table_share->field[i]->flags & AUTO_INCREMENT_FLAG) { system::TianmuFile fv, fw; @@ -1616,14 +1755,17 @@ bool ha_tianmu::inplace_alter_table(TABLE *altered_table, Alter_inplace_info *ha fw.Flush(); } } - ha_tianmu_engine_->cache.ReleaseTable(tab->GetID()); - ha_tianmu_engine_->UnRegisterTable(table_name_); + + eng->cache.ReleaseTable(tab->GetID()); + eng->UnRegisterTable(table_name_); DBUG_RETURN(false); } } else if (!(ha_alter_info->handler_flags & ~TIANMU_SUPPORTED_ALTER_ADD_DROP_ORDER)) { std::vector v_old(table_share->field, table_share->field + table_share->fields); std::vector v_new(altered_table->s->field, altered_table->s->field + altered_table->s->fields); - ha_tianmu_engine_->PrepareAlterTable(table_name_, v_new, v_old, ha_thd()); + + eng->PrepareAlterTable(table_name_, v_new, v_old, ha_thd()); + DBUG_RETURN(false); } else if (ha_alter_info->handler_flags == TIANMU_SUPPORTED_ALTER_COLUMN_NAME) { DBUG_RETURN(false); @@ -1891,13 +2033,10 @@ char *strmov_str(char *dst, const char *src) { static int tianmu_done_func([[maybe_unused]] void *p) { DBUG_ENTER(__PRETTY_FUNCTION__); - if (ha_tianmu_engine_) { - delete ha_tianmu_engine_; - ha_tianmu_engine_ = nullptr; - } - if (ha_kvstore_) { - delete ha_kvstore_; - ha_kvstore_ = nullptr; + if (tianmu_hton->data) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + delete eng; + tianmu_hton->data = nullptr; } DBUG_RETURN(0); @@ -1907,12 +2046,14 @@ int tianmu_panic_func([[maybe_unused]] handlerton *hton, enum ha_panic_function if (tianmu_bootstrap) return 0; - if (flag == HA_PANIC_CLOSE) { - delete ha_tianmu_engine_; - ha_tianmu_engine_ = nullptr; - delete ha_kvstore_; - ha_kvstore_ = nullptr; + assert(hton == tianmu_hton); + + if (flag == HA_PANIC_CLOSE && tianmu_hton->data) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + delete eng; + tianmu_hton->data = nullptr; } + return 0; } @@ -1921,7 +2062,10 @@ int tianmu_rollback([[maybe_unused]] handlerton *hton, THD *thd, bool all) { int ret = 1; try { - ha_tianmu_engine_->Rollback(thd, all); + assert(hton == tianmu_hton); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + eng->Rollback(thd, all); ret = 0; } catch (std::exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); @@ -1939,8 +2083,11 @@ int tianmu_close_connection(handlerton *hton, THD *thd) { int ret = 1; try { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng && hton == tianmu_hton); + tianmu_rollback(hton, thd, true); - ha_tianmu_engine_->ClearTx(thd); + eng->ClearTx(thd); ret = 0; } catch (std::exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); @@ -1958,10 +2105,12 @@ int tianmu_commit([[maybe_unused]] handlerton *hton, THD *thd, bool all) { int ret = 1; std::string error_message; + assert(hton == tianmu_hton); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); if (!(thd->no_errors != 0 || thd->killed || thd->transaction_rollback_request)) { try { - ha_tianmu_engine_->CommitTx(thd, all); + eng->CommitTx(thd, all); ret = 0; } catch (std::exception &e) { error_message = std::string("Error: ") + e.what(); @@ -1972,7 +2121,8 @@ int tianmu_commit([[maybe_unused]] handlerton *hton, THD *thd, bool all) { if (ret) { try { - ha_tianmu_engine_->Rollback(thd, all, true); + eng->Rollback(thd, all, true); + if (!error_message.empty()) { TIANMU_LOG(LogCtl_Level::ERROR, "%s", error_message.c_str()); my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), error_message.c_str(), MYF(0)); @@ -2038,6 +2188,7 @@ int tianmu_init_func(void *p) { tianmu_hton->commit = tianmu_commit; tianmu_hton->rollback = tianmu_rollback; tianmu_hton->show_status = tianmu_show_status; + tianmu_hton->data = nullptr; // When mysqld runs as bootstrap mode, we do not need to initialize // memmanager. @@ -2045,23 +2196,25 @@ int tianmu_init_func(void *p) { DBUG_RETURN(0); int ret = 1; - ha_tianmu_engine_ = nullptr; try { std::string log_file = mysql_home_ptr; log_setup(log_file + "/log/tianmu.log"); tianmu_control_.addOutput(new system::FileOut(log_file + "/log/trace.log")); tianmu_querylog_.addOutput(new system::FileOut(log_file + "/log/query.log")); + struct hostent *hent = nullptr; hent = gethostbyname(glob_hostname); if (hent) strmov_str(global_hostIP_, inet_ntoa(*(struct in_addr *)(hent->h_addr_list[0]))); + my_snprintf(global_serverinfo_, sizeof(global_serverinfo_), "\tServerIp:%s\tServerHostName:%s\tServerPort:%d", global_hostIP_, glob_hostname, mysqld_port); + // startup tianmu engine. - ha_tianmu_engine_ = new core::Engine(); - ret = ha_tianmu_engine_->Init(total_ha); - { + tianmu_hton->data = reinterpret_cast(new core::Engine()); + if (tianmu_hton->data) { + ret = reinterpret_cast(tianmu_hton->data)->Init(total_ha); TIANMU_LOG(LogCtl_Level::INFO, "\n" "------------------------------------------------------------" @@ -2102,7 +2255,11 @@ struct st_mysql_storage_engine tianmu_storage_engine = {MYSQL_HANDLERTON_INTERFA int get_DelayedBufferUsage_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *var, char *buff) { var->type = SHOW_CHAR; var->value = buff; - std::string str = ha_tianmu_engine_->DelayedBufferStat(); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + std::string str = eng->DelayedBufferStat(); std::memcpy(buff, str.c_str(), str.length() + 1); return 0; } @@ -2110,27 +2267,40 @@ int get_DelayedBufferUsage_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *v int get_RowStoreUsage_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *var, char *buff) { var->type = SHOW_CHAR; var->value = buff; - std::string str = ha_tianmu_engine_->DeltaStoreStat(); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + std::string str = eng->DeltaStoreStat(); std::memcpy(buff, str.c_str(), str.length() + 1); return 0; } int get_InsertPerMinute_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetIPM(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetIPM(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_QueryPerMinute_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetQPM(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetQPM(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_LoadPerMinute_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetLPM(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetLPM(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; @@ -2158,49 +2328,70 @@ int get_MemoryScale_StatusVar([[maybe_unused]] MYSQL_THD thd, struct st_mysql_sh } int get_InsertTotal_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetIT(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetIT(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_QueryTotal_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetQT(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetQT(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_LoadTotal_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetLT(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetLT(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_LoadDupTotal_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetLDT(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetLDT(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_LoadDupPerMinute_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetLDPM(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetLDPM(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_UpdateTotal_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetUT(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetUT(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; } int get_UpdatePerMinute_StatusVar([[maybe_unused]] MYSQL_THD thd, SHOW_VAR *outvar, char *tmp) { - *((int64_t *)tmp) = ha_tianmu_engine_->GetUPM(); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + *((int64_t *)tmp) = eng->GetUPM(); outvar->value = tmp; outvar->type = SHOW_LONG; return 0; @@ -2231,6 +2422,7 @@ int tianmu_throw_error_func([[maybe_unused]] MYSQL_THD thd, [[maybe_unused]] str static void update_func_str([[maybe_unused]] THD *thd, struct st_mysql_sys_var *var, void *tgt, const void *save) { char *old = *(char **)tgt; *(char **)tgt = *(char **)save; + if (var->flags & PLUGIN_VAR_MEMALLOC) { *(char **)tgt = my_strdup(PSI_NOT_INSTRUMENTED, *(char **)save, MYF(0)); my_free(old); @@ -2250,7 +2442,8 @@ extern void async_join_update(MYSQL_THD thd, struct st_mysql_sys_var *var, void #define STATUS_FUNCTION(name, show_type, member) \ int get_##name##_StatusVar([[maybe_unused]] MYSQL_THD thd, struct st_mysql_show_var *outvar, char *tmp) { \ - *((int64_t *)tmp) = ha_tianmu_engine_->cache.member(); \ + core::Engine *eng = reinterpret_cast(tianmu_hton->data); \ + *((int64_t *)tmp) = eng->cache.member(); \ outvar->value = tmp; \ outvar->type = show_type; \ return 0; \ @@ -2430,7 +2623,7 @@ static MYSQL_SYSVAR_BOOL(groupby_speedup, tianmu_sysvar_groupby_speedup, PLUGIN_ static MYSQL_SYSVAR_UINT(groupby_parallel_degree, tianmu_sysvar_groupby_parallel_degree, PLUGIN_VAR_INT, "group by parallel degree, number of worker threads", nullptr, nullptr, 8, 0, INT32_MAX, 0); static MYSQL_SYSVAR_ULONGLONG(groupby_parallel_rows_minimum, tianmu_sysvar_groupby_parallel_rows_minimum, - PLUGIN_VAR_LONGLONG, "group by parallel minimum rows", nullptr, nullptr, 655360, 655360, + PLUGIN_VAR_LONGLONG, "group by parallel minimum rows", nullptr, nullptr, 655360, 100, INT64_MAX, 0); static MYSQL_SYSVAR_UINT(slow_query_record_interval, tianmu_sysvar_slow_query_record_interval, PLUGIN_VAR_INT, "slow Query Threshold of recording tianmu logs, in seconds", nullptr, nullptr, 0, 0, INT32_MAX, @@ -2493,11 +2686,14 @@ static MYSQL_SYSVAR_UINT(result_sender_rows, tianmu_sysvar_result_sender_rows, P nullptr, nullptr, 65536, 1024, 131072, 0); void debug_update(MYSQL_THD thd, [[maybe_unused]] struct st_mysql_sys_var *var, void *var_ptr, const void *save) { - if (ha_tianmu_engine_) { - auto cur_conn = ha_tianmu_engine_->GetTx(thd); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + + if (eng) { + auto cur_conn = eng->GetTx(thd); // set debug_level for connection level cur_conn->SetDebugLevel(*((int *)save)); } + *((int *)var_ptr) = *((int *)save); } @@ -2505,8 +2701,11 @@ void trace_update(MYSQL_THD thd, [[maybe_unused]] struct st_mysql_sys_var *var, *((int *)var_ptr) = *((int *)save); // get global mysql_sysvar_control_trace tianmu_sysvar_controltrace = THDVAR(nullptr, control_trace); - if (ha_tianmu_engine_) { - core::Transaction *cur_conn = ha_tianmu_engine_->GetTx(thd); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + + if (eng) { + core::Transaction *cur_conn = eng->GetTx(thd); cur_conn->SetSessionTrace(*((int *)save)); ConfigureRCControl(); } @@ -2516,7 +2715,9 @@ void controlquerylog_update([[maybe_unused]] MYSQL_THD thd, [[maybe_unused]] str void *var_ptr, const void *save) { *((int *)var_ptr) = *((int *)save); int control = *((int *)var_ptr); - if (ha_tianmu_engine_) { + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + if (eng) { control ? tianmu_querylog_.setOn() : tianmu_querylog_.setOff(); } } @@ -2525,8 +2726,10 @@ void start_async_update([[maybe_unused]] MYSQL_THD thd, [[maybe_unused]] struct const void *save) { int percent = *((int *)save); *((int *)var_ptr) = percent; - if (ha_tianmu_engine_) { - ha_tianmu_engine_->ResetTaskExecutor(percent); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + if (eng) { + eng->ResetTaskExecutor(percent); } } diff --git a/storage/tianmu/handler/ha_tianmu.h b/storage/tianmu/handler/ha_tianmu.h index ccb0cfde6..4114cff32 100644 --- a/storage/tianmu/handler/ha_tianmu.h +++ b/storage/tianmu/handler/ha_tianmu.h @@ -155,6 +155,9 @@ class ha_tianmu final : public handler { int fill_row_by_id(uchar *buf, uint64_t rowid); void key_convert(const uchar *key, uint key_len, std::vector cols, std::vector &keys); + void setExtra(ha_extra_function extra) { extra_info = extra; } + ha_extra_function getExtra() { return extra_info; } + public: static const Alter_inplace_info::HA_ALTER_FLAGS TIANMU_SUPPORTED_ALTER_ADD_DROP_ORDER; static const Alter_inplace_info::HA_ALTER_FLAGS TIANMU_SUPPORTED_ALTER_COLUMN_NAME; @@ -182,6 +185,8 @@ class ha_tianmu final : public handler { std::unique_ptr cq_; bool result_ = false; std::vector> blob_buffers_; + + ha_extra_function extra_info; /*!< TRX_DUP_IGNORE | TRX_DUP_REPLACE */ }; } // namespace DBHandler diff --git a/storage/tianmu/core/index_table.cpp b/storage/tianmu/index/index_table.cpp similarity index 99% rename from storage/tianmu/core/index_table.cpp rename to storage/tianmu/index/index_table.cpp index f8f7575a2..e065db58a 100644 --- a/storage/tianmu/core/index_table.cpp +++ b/storage/tianmu/index/index_table.cpp @@ -17,8 +17,8 @@ #include "index_table.h" -#include "core/filter.h" #include "core/transaction.h" +#include "executor/filter.h" #include "system/tianmu_system.h" namespace Tianmu { diff --git a/storage/tianmu/core/index_table.h b/storage/tianmu/index/index_table.h similarity index 100% rename from storage/tianmu/core/index_table.h rename to storage/tianmu/index/index_table.h diff --git a/storage/tianmu/index/kv_store.cpp b/storage/tianmu/index/kv_store.cpp index 4990aed8e..e06270d05 100644 --- a/storage/tianmu/index/kv_store.cpp +++ b/storage/tianmu/index/kv_store.cpp @@ -18,7 +18,7 @@ #include "index/kv_store.h" #include "core/engine.h" -#include "core/merge_operator.h" +#include "executor/merge_operator.h" namespace Tianmu { namespace index { @@ -44,12 +44,14 @@ void KVStore::Init() { // set the DBOptions's params. auto rocksdb_datadir = kv_data_dir_ / ".index"; int max_compact_threads = std::thread::hardware_concurrency() / 4; + max_compact_threads = (max_compact_threads > 1) ? max_compact_threads : 1; db_option.max_background_compactions = max_compact_threads; db_option.max_subcompactions = max_compact_threads; db_option.env->SetBackgroundThreads(max_compact_threads, rocksdb::Env::Priority::LOW); db_option.statistics = rocksdb::CreateDBStatistics(); rocksdb::Status status = rocksdb::DB::ListColumnFamilies(db_option, rocksdb_datadir, &cf_names); + if (!status.ok() && ((status.subcode() == rocksdb::Status::kNone) || (status.subcode() == rocksdb::Status::kPathNotFound))) { TIANMU_LOG(LogCtl_Level::INFO, "First init rocksdb, create default cloum family"); @@ -327,7 +329,7 @@ std::string KVStore::generate_cf_name(uint index, TABLE *table) { void KVStore::create_rdbkey(TABLE *table, uint pos, std::shared_ptr &new_key_def, rocksdb::ColumnFamilyHandle *cf_handle) { // assign a new id for this index. - uint index_id = ha_kvstore_->GetNextIndexId(); + uint index_id = GetNextIndexId(); std::vector vcols; KEY *key_info = &table->key_info[pos]; @@ -371,7 +373,7 @@ common::ErrorCode KVStore::create_keys_and_cf(TABLE *table, std::shared_ptrGetCfHandle(cf_name); + rocksdb::ColumnFamilyHandle *cf_handle = GetCfHandle(cf_name); if (!cf_handle) { return common::ErrorCode::FAILED; @@ -393,9 +395,10 @@ bool IndexCompactFilter::Filter([[maybe_unused]] int level, const rocksdb::Slice GlobalId gl_index_id; gl_index_id.cf_id = cf_id_; gl_index_id.index_id = be_to_uint32(reinterpret_cast(key.data())); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); if (gl_index_id.index_id != prev_index_.index_id) { - should_delete_ = ha_kvstore_->IndexDroping(gl_index_id); + should_delete_ = store->IndexDroping(gl_index_id); prev_index_ = gl_index_id; } diff --git a/storage/tianmu/index/kv_store.h b/storage/tianmu/index/kv_store.h index 68006d50e..b9b5e0e3a 100644 --- a/storage/tianmu/index/kv_store.h +++ b/storage/tianmu/index/kv_store.h @@ -97,14 +97,14 @@ class KVStore final { // release the specific snapshot void ReleaseRdbSnapshot(const rocksdb::Snapshot *snapshot) { txn_db_->ReleaseSnapshot(snapshot); } // gets the column family name by table handler. - static std::string generate_cf_name(uint index, TABLE *table); + std::string generate_cf_name(uint index, TABLE *table); // creates a ith key of rocksdb table. - static void create_rdbkey(TABLE *table, uint pos, std::shared_ptr &new_key_def, - rocksdb::ColumnFamilyHandle *cf_handle); + void create_rdbkey(TABLE *table, uint pos, std::shared_ptr &new_key_def, + rocksdb::ColumnFamilyHandle *cf_handle); // create keys and column family for a rocksdb table. - static common::ErrorCode create_keys_and_cf(TABLE *table, std::shared_ptr rdb_tbl); + common::ErrorCode create_keys_and_cf(TABLE *table, std::shared_ptr rdb_tbl); // Returns index of primary key - static uint pk_index(const TABLE *const table, std::shared_ptr tbl_def); + uint pk_index(const TABLE *const table, std::shared_ptr tbl_def); private: // initializationed? diff --git a/storage/tianmu/index/kv_transaction.cpp b/storage/tianmu/index/kv_transaction.cpp index 304b3eac4..76d77469e 100644 --- a/storage/tianmu/index/kv_transaction.cpp +++ b/storage/tianmu/index/kv_transaction.cpp @@ -18,6 +18,7 @@ #include "index/kv_transaction.h" #include "common/common_definitions.h" +#include "core/engine.h" #include "index/kv_store.h" #include "kv_transaction.h" @@ -33,7 +34,8 @@ KVTransaction::~KVTransaction() { rocksdb::Status KVTransaction::Get(rocksdb::ColumnFamilyHandle *column_family, const rocksdb::Slice &key, std::string *value) { read_opts_.total_order_seek = false; - return index_batch_->GetFromBatchAndDB(ha_kvstore_->GetRdb(), read_opts_, column_family, key, value); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + return index_batch_->GetFromBatchAndDB(store->GetRdb(), read_opts_, column_family, key, value); } rocksdb::Status KVTransaction::Put(rocksdb::ColumnFamilyHandle *column_family, const rocksdb::Slice &key, @@ -53,13 +55,15 @@ rocksdb::Iterator *KVTransaction::GetIterator(rocksdb::ColumnFamilyHandle *const read_opts_.prefix_same_as_start = true; } - return index_batch_->NewIteratorWithBase(ha_kvstore_->GetRdb()->NewIterator(read_opts_, column_family)); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + return index_batch_->NewIteratorWithBase(store->GetRdb()->NewIterator(read_opts_, column_family)); } rocksdb::Status KVTransaction::GetData(rocksdb::ColumnFamilyHandle *column_family, const rocksdb::Slice &key, std::string *value) { read_opts_.total_order_seek = false; - return ha_kvstore_->GetRdb()->Get(read_opts_, column_family, key, value); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + return store->GetRdb()->Get(read_opts_, column_family, key, value); } rocksdb::Status KVTransaction::PutData(rocksdb::ColumnFamilyHandle *column_family, const rocksdb::Slice &key, @@ -80,17 +84,20 @@ rocksdb::Status KVTransaction::SingleDeleteData(rocksdb::ColumnFamilyHandle *col rocksdb::Iterator *KVTransaction::GetDataIterator(rocksdb::ReadOptions &ropts, rocksdb::ColumnFamilyHandle *const column_family) { - return ha_kvstore_->GetRdb()->NewIterator(ropts, column_family); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + return store->GetRdb()->NewIterator(ropts, column_family); } void KVTransaction::Acquiresnapshot() { + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); if (read_opts_.snapshot == nullptr) - read_opts_.snapshot = ha_kvstore_->GetRdbSnapshot(); + read_opts_.snapshot = store->GetRdbSnapshot(); } void KVTransaction::Releasesnapshot() { if (read_opts_.snapshot != nullptr) { - ha_kvstore_->ReleaseRdbSnapshot(read_opts_.snapshot); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + store->ReleaseRdbSnapshot(read_opts_.snapshot); read_opts_.snapshot = nullptr; } } @@ -100,15 +107,18 @@ bool KVTransaction::Commit() { // firstly, release the snapshot. Releasesnapshot(); rocksdb::WriteOptions write_opts; + // if we have data to commit, then do writing index data ops by KVWriteBatch. auto index_write_batch = index_batch_->GetWriteBatch(); - if (index_write_batch && index_write_batch->Count() > 0 && - !ha_kvstore_->KVWriteBatch(write_opts, index_write_batch)) { + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + + if (index_write_batch && index_write_batch->Count() > 0 && !store->KVWriteBatch(write_opts, index_write_batch)) { // write failed. res = false; } + // write the data. - if (res && data_batch_->Count() > 0 && !ha_kvstore_->KVWriteBatch(write_opts, data_batch_.get())) { + if (res && data_batch_->Count() > 0 && !store->KVWriteBatch(write_opts, data_batch_.get())) { // write failed. res = false; } diff --git a/storage/tianmu/core/mi_new_contents.cpp b/storage/tianmu/index/mi_new_contents.cpp similarity index 98% rename from storage/tianmu/core/mi_new_contents.cpp rename to storage/tianmu/index/mi_new_contents.cpp index 5689ef71c..62eafc7b4 100644 --- a/storage/tianmu/core/mi_new_contents.cpp +++ b/storage/tianmu/index/mi_new_contents.cpp @@ -15,12 +15,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "mi_new_contents.h" +#include "index/mi_new_contents.h" #include "core/dimension_group_virtual.h" -#include "core/joiner.h" -#include "core/mi_rough_sorter.h" -#include "core/multi_index.h" +#include "index/mi_rough_sorter.h" +#include "index/multi_index.h" +#include "optimizer/joiner.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/mi_new_contents.h b/storage/tianmu/index/mi_new_contents.h similarity index 100% rename from storage/tianmu/core/mi_new_contents.h rename to storage/tianmu/index/mi_new_contents.h diff --git a/storage/tianmu/core/mi_rough_sorter.cpp b/storage/tianmu/index/mi_rough_sorter.cpp similarity index 100% rename from storage/tianmu/core/mi_rough_sorter.cpp rename to storage/tianmu/index/mi_rough_sorter.cpp diff --git a/storage/tianmu/core/mi_rough_sorter.h b/storage/tianmu/index/mi_rough_sorter.h similarity index 99% rename from storage/tianmu/core/mi_rough_sorter.h rename to storage/tianmu/index/mi_rough_sorter.h index 2b4a8145b..5008e91ab 100644 --- a/storage/tianmu/core/mi_rough_sorter.h +++ b/storage/tianmu/index/mi_rough_sorter.h @@ -18,7 +18,7 @@ #define TIANMU_CORE_MI_ROUGH_SORTER_H_ #pragma once -#include "core/multi_index.h" +#include "index/multi_index.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/multi_index.cpp b/storage/tianmu/index/multi_index.cpp similarity index 92% rename from storage/tianmu/core/multi_index.cpp rename to storage/tianmu/index/multi_index.cpp index b63679bef..645939c03 100644 --- a/storage/tianmu/core/multi_index.cpp +++ b/storage/tianmu/index/multi_index.cpp @@ -1,483 +1,510 @@ -/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. - Use is subject to license terms - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA -*/ - -#include "multi_index.h" - -#include "core/group_distinct_table.h" -#include "core/joiner.h" -#include "core/mi_iterator.h" -#include "core/mi_new_contents.h" -#include "core/tools.h" - -namespace Tianmu { -namespace core { -#define MATERIAL_TUPLES_LIMIT 150000000000LL // = ~1 TB of cache needed for one dimension -#define MATERIAL_TUPLES_WARNING 2500000000LL // = 10-20 GB of cache for one dimension - -MultiIndex::MultiIndex(uint32_t power) : m_conn(current_txn_) { - // update Clear() on any change - p_power = power; - no_dimensions = 0; - no_tuples = 0; - no_tuples_too_big = false; - dim_size = nullptr; - group_for_dim = nullptr; - group_num_for_dim = nullptr; - iterator_lock = 0; - shallow_dim_groups = false; -} - -MultiIndex::MultiIndex(const MultiIndex &s) : m_conn(s.m_conn) { - p_power = s.p_power; - no_dimensions = s.no_dimensions; - no_tuples = s.no_tuples; - no_tuples_too_big = s.no_tuples_too_big; - if (no_dimensions > 0) { - dim_size = new int64_t[no_dimensions]; - group_for_dim = new DimensionGroup *[no_dimensions]; - group_num_for_dim = new int[no_dimensions]; - used_in_output = s.used_in_output; - can_be_distinct = s.can_be_distinct; - for (uint i = 0; i < s.dim_groups.size(); i++) dim_groups.push_back(s.dim_groups[i]->Clone(false)); - - for (int i = 0; i < no_dimensions; i++) dim_size[i] = s.dim_size[i]; - - FillGroupForDim(); - } else { - dim_size = nullptr; - group_for_dim = nullptr; - group_num_for_dim = nullptr; - } - iterator_lock = 0; - shallow_dim_groups = false; -} - -MultiIndex::MultiIndex(MultiIndex &s, bool shallow) : m_conn(s.m_conn) { - p_power = s.p_power; - no_dimensions = s.no_dimensions; - no_tuples = s.no_tuples; - no_tuples_too_big = s.no_tuples_too_big; - if (no_dimensions > 0) { - group_for_dim = new DimensionGroup *[no_dimensions]; - group_num_for_dim = new int[no_dimensions]; - dim_size = new int64_t[no_dimensions]; - used_in_output = s.used_in_output; - can_be_distinct = s.can_be_distinct; - for (uint i = 0; i < s.dim_groups.size(); i++) dim_groups.push_back(s.dim_groups[i]->Clone(shallow)); - - for (int i = 0; i < no_dimensions; i++) dim_size[i] = s.dim_size[i]; - - FillGroupForDim(); - } else { - dim_size = nullptr; - group_for_dim = nullptr; - group_num_for_dim = nullptr; - } - iterator_lock = 0; - shallow_dim_groups = shallow; -} - -MultiIndex::~MultiIndex() { - if (!shallow_dim_groups) { - for (uint i = 0; i < dim_groups.size(); i++) { - delete dim_groups[i]; - dim_groups[i] = nullptr; - } - } - delete[] dim_size; - delete[] group_for_dim; - delete[] group_num_for_dim; -} - -void MultiIndex::Clear() { - try { - for (uint i = 0; i < dim_groups.size(); i++) { - delete dim_groups[i]; - dim_groups[i] = nullptr; - } - } catch (...) { - DEBUG_ASSERT(!"exception from destructor"); - } - delete[] dim_size; - delete[] group_for_dim; - delete[] group_num_for_dim; - dim_groups.clear(); - no_dimensions = 0; - no_tuples = 0; - no_tuples_too_big = false; - dim_size = nullptr; - group_for_dim = nullptr; - group_num_for_dim = nullptr; - iterator_lock = 0; - can_be_distinct.clear(); - used_in_output.clear(); -} - -void MultiIndex::FillGroupForDim() { - MEASURE_FET("MultiIndex::FillGroupForDim(...)"); - int move_groups = 0; - for (uint i = 0; i < dim_groups.size(); i++) { // pack all holes - if (dim_groups[i] == nullptr) { - while (i + move_groups < dim_groups.size() && dim_groups[i + move_groups] == nullptr) move_groups++; - if (i + move_groups < dim_groups.size()) { - dim_groups[i] = dim_groups[i + move_groups]; - dim_groups[i + move_groups] = nullptr; - } else - break; - } - } - for (int i = 0; i < move_groups; i++) dim_groups.pop_back(); // clear nulls from the end - - for (int d = 0; d < no_dimensions; d++) { - group_for_dim[d] = nullptr; - group_num_for_dim[d] = -1; - } - - for (uint i = 0; i < dim_groups.size(); i++) { - for (int d = 0; d < no_dimensions; d++) - if (dim_groups[i]->DimUsed(d)) { - group_for_dim[d] = dim_groups[i]; - group_num_for_dim[d] = i; - } - } -} - -void MultiIndex::Empty(int dim_to_make_empty) { - if (dim_to_make_empty != -1) - group_for_dim[dim_to_make_empty]->Empty(); - else { - for (uint i = 0; i < dim_groups.size(); i++) dim_groups[i]->Empty(); - } - for (int i = 0; i < no_dimensions; i++) { - if (dim_to_make_empty == -1 || group_for_dim[dim_to_make_empty]->DimUsed(i)) { - can_be_distinct[i] = true; - used_in_output[i] = true; - } - } - no_tuples = 0; - no_tuples_too_big = false; -} - -void MultiIndex::AddDimension() { - no_dimensions++; - int64_t *ns = new int64_t[no_dimensions]; - DimensionGroup **ng = new DimensionGroup *[no_dimensions]; - int *ngn = new int[no_dimensions]; - for (int i = 0; i < no_dimensions - 1; i++) { - ns[i] = dim_size[i]; - ng[i] = group_for_dim[i]; - ngn[i] = group_num_for_dim[i]; - } - delete[] dim_size; - delete[] group_for_dim; - delete[] group_num_for_dim; - dim_size = ns; - group_for_dim = ng; - group_num_for_dim = ngn; - dim_size[no_dimensions - 1] = 0; - group_for_dim[no_dimensions - 1] = nullptr; - group_num_for_dim[no_dimensions - 1] = -1; - // Temporary code, for rare cases when we add a dimension after other joins - // (smk_33): - for (uint i = 0; i < dim_groups.size(); i++) dim_groups[i]->AddDimension(); - - return; // Note: other functions will use AddDimension() to enlarge tables -} - -void MultiIndex::AddDimension_cross(uint64_t size) { - AddDimension(); - int new_dim = no_dimensions - 1; - used_in_output.push_back(true); - if (no_dimensions > 1) - MultiplyNoTuples(size); - else - no_tuples = size; - DimensionGroupFilter *nf = nullptr; - if (size > 0) { - dim_size[new_dim] = size; - nf = new DimensionGroupFilter(new_dim, size, p_power); // redo - } else { // size == 0 => prepare a dummy dimension with empty filter - dim_size[new_dim] = 1; - nf = new DimensionGroupFilter(new_dim, dim_size[new_dim], p_power); // redo - nf->Empty(); - } - dim_groups.push_back(nf); - group_for_dim[new_dim] = nf; - group_num_for_dim[new_dim] = int(dim_groups.size() - 1); - can_be_distinct.push_back(true); // may be modified below - CheckIfVirtualCanBeDistinct(); -} - -void MultiIndex::MultiplyNoTuples(uint64_t factor) { - no_tuples = SafeMultiplication(no_tuples, factor); - if (no_tuples == static_cast(common::NULL_VALUE_64)) - no_tuples_too_big = true; -} - -void MultiIndex::CheckIfVirtualCanBeDistinct() // updates can_be_distinct table - // in case of virtual multiindex -{ - // check whether can_be_distinct can be true - // it is possible only when there are only 1-object dimensions - // and one multiobject (then the multiobject one can be distinct, the rest - // cannot) - if (no_dimensions > 1) { - int non_one_found = 0; - for (int i = 0; i < no_dimensions; i++) { - if (dim_size[i] > 1) - non_one_found++; - } - if (non_one_found == 1) { - for (int j = 0; j < no_dimensions; j++) - if (dim_size[j] == 1) - can_be_distinct[j] = false; - else - can_be_distinct[j] = true; - } - if (non_one_found > 1) - for (int j = 0; j < no_dimensions; j++) can_be_distinct[j] = false; - } -} - -void MultiIndex::LockForGetIndex(int dim) { - if (shallow_dim_groups) { - return; - } - group_for_dim[dim]->Lock(dim); -} - -void MultiIndex::UnlockFromGetIndex(int dim) { - if (shallow_dim_groups) { - return; - } - group_for_dim[dim]->Unlock(dim); -} - -uint64_t MultiIndex::DimSize(int dim) // the size of one dimension: material_no_tuples for materialized, - // NumOfOnes for virtual -{ - return group_for_dim[dim]->NumOfTuples(); -} - -void MultiIndex::LockAllForUse() { - if (shallow_dim_groups) { - return; - } - for (int dim = 0; dim < no_dimensions; dim++) LockForGetIndex(dim); -} - -void MultiIndex::UnlockAllFromUse() { - if (shallow_dim_groups) { - return; - } - for (int dim = 0; dim < no_dimensions; dim++) UnlockFromGetIndex(dim); -} - -void MultiIndex::MakeCountOnly(int64_t mat_tuples, DimensionVector &dims_to_materialize) { - MEASURE_FET("MultiIndex::MakeCountOnly(...)"); - MarkInvolvedDimGroups(dims_to_materialize); - for (int i = 0; i < NumOfDimensions(); i++) { - if (dims_to_materialize[i] && group_for_dim[i] != nullptr) { - // delete this group - int dim_group_to_delete = group_num_for_dim[i]; - for (int j = i; j < NumOfDimensions(); j++) - if (group_num_for_dim[j] == dim_group_to_delete) { - group_for_dim[j] = nullptr; - group_num_for_dim[j] = -1; - } - delete dim_groups[dim_group_to_delete]; - dim_groups[dim_group_to_delete] = nullptr; // these holes will be packed in FillGroupForDim() - } - } - DimensionGroupMaterialized *count_only_group = new DimensionGroupMaterialized(dims_to_materialize); - count_only_group->SetNumOfObj(mat_tuples); - dim_groups.push_back(count_only_group); - FillGroupForDim(); - UpdateNumOfTuples(); -} - -void MultiIndex::UpdateNumOfTuples() { - // assumptions: - // - no_material_tuples is correct, even if all t[...] are nullptr (forgotten). - // However, if all f[...] are not nullptr, then the index is set to IT_VIRTUAL - // and no_material_tuples = 0 - // - IT_MIXED or IT_VIRTUAL may be in fact IT_ORDERED (must be set properly on - // output) - // - if no_material_tuples > 0, then new index_type is not IT_VIRTUAL - no_tuples_too_big = false; - if (dim_groups.size() == 0) - no_tuples = 0; - else { - no_tuples = 1; - for (uint i = 0; i < dim_groups.size(); i++) { - dim_groups[i]->UpdateNumOfTuples(); - MultiplyNoTuples(dim_groups[i]->NumOfTuples()); - } - } -} - -int64_t MultiIndex::NumOfTuples(DimensionVector &dimensions, - bool fail_on_overflow) // for a given subset of dimensions -{ - std::vector dg = ListInvolvedDimGroups(dimensions); - if (dg.size() == 0) - return 0; - int64_t res = 1; - for (uint i = 0; i < dg.size(); i++) { - dim_groups[dg[i]]->UpdateNumOfTuples(); - res = SafeMultiplication(res, dim_groups[dg[i]]->NumOfTuples()); - } - if (res == common::NULL_VALUE_64 && fail_on_overflow) - throw common::OutOfMemoryException("Too many tuples. (1428)"); - return res; -} - -int MultiIndex::MaxNumOfPacks(int dim) // maximal (upper approx.) number of different nonempty data - // packs for the given dimension -{ - int max_packs = 0; - Filter *f = group_for_dim[dim]->GetFilter(dim); - if (f) { - for (size_t p = 0; p < f->NumOfBlocks(); p++) - if (!f->IsEmpty(p)) - max_packs++; - } else { - max_packs = int((dim_size[dim]) >> p_power) + 1; - if (group_for_dim[dim]->NumOfTuples() < max_packs) - max_packs = (int)group_for_dim[dim]->NumOfTuples(); - } - return max_packs; -} - -// Logical operations - -void MultiIndex::MIFilterAnd(MIIterator &mit, - Filter &fd) // limit the MultiIndex by excluding - // all tuples which are not present in - // fd, in order given by mit -{ - MEASURE_FET("MultiIndex::MIFilterAnd(...)"); - LockAllForUse(); - if (no_dimensions == 1 && group_for_dim[0]->GetFilter(0)) { - Filter *f = group_for_dim[0]->GetFilter(0); - FilterOnesIterator fit(f, p_power); - int64_t cur_pos = 0; - while (fit.IsValid()) { - if (!fd.Get(cur_pos)) - fit.ResetDelayed(); - ++fit; - cur_pos++; - } - f->Commit(); - UpdateNumOfTuples(); - UnlockAllFromUse(); - return; - } - - DimensionVector dim_used(mit.DimsUsed()); - MarkInvolvedDimGroups(dim_used); - int64_t new_no_tuples = fd.NumOfOnes(); - JoinTips tips(*this); - MINewContents new_mind(this, tips); - new_mind.SetDimensions(dim_used); - new_mind.Init(new_no_tuples); - mit.Rewind(); - int64_t f_pos = 0; - while (mit.IsValid()) { - if (fd.Get(f_pos)) { - for (int d = 0; d < no_dimensions; d++) - if (dim_used[d]) - new_mind.SetNewTableValue(d, mit[d]); - new_mind.CommitNewTableValues(); - } - ++mit; - f_pos++; - } - new_mind.Commit(new_no_tuples); - UpdateNumOfTuples(); - UnlockAllFromUse(); -} - -bool MultiIndex::MarkInvolvedDimGroups( - DimensionVector &v) // if any dimension is marked, then mark the rest of its group -{ - bool added = false; - for (int i = 0; i < no_dimensions; i++) { - if (!v[i]) { - for (int j = 0; j < no_dimensions; j++) { - if (v[j] && group_num_for_dim[i] == group_num_for_dim[j]) { - v[i] = true; - added = true; - break; - } - } - } - } - return added; -} - -std::vector MultiIndex::ListInvolvedDimGroups(DimensionVector &v) // List all internal numbers of groups touched - // by the set of dimensions -{ - std::vector res; - int cur_group_number; - for (int i = 0; i < no_dimensions; i++) { - if (v[i]) { - cur_group_number = group_num_for_dim[i]; - bool added = false; - for (uint j = 0; j < res.size(); j++) - if (res[j] == cur_group_number) { - added = true; - break; - } - if (!added) - res.push_back(cur_group_number); - } - } - return res; -} - -std::string MultiIndex::Display() { - std::vector ind_tab_no; - int it_count = 0; - for (uint i = 0; i < dim_groups.size(); i++) { - if (dim_groups[i]->Type() == DimensionGroup::DGType::DG_INDEX_TABLE) { - it_count++; - ind_tab_no.push_back(it_count); // calculate a number of a materialized dim. group - } else - ind_tab_no.push_back(0); - } - - std::string s; - s = "["; - for (int i = 0; i < no_dimensions; i++) { - if (!group_for_dim[i]->DimEnabled(i)) - s += "-"; - else if (group_for_dim[i]->Type() == DimensionGroup::DGType::DG_FILTER) - s += "f"; - else if (group_for_dim[i]->Type() == DimensionGroup::DGType::DG_INDEX_TABLE) - s += (ind_tab_no[group_num_for_dim[i]] > 9 ? 'T' : '0' + ind_tab_no[group_num_for_dim[i]]); - else if (group_for_dim[i]->Type() == DimensionGroup::DGType::DG_VIRTUAL) - s += (GetFilter(i) ? 'F' : 'v'); - else - s += "?"; - } - s += "]"; - return s; -} -} // namespace core -} // namespace Tianmu +/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +#include "multi_index.h" + +#include "index/mi_new_contents.h" +#include "optimizer/group_distinct_table.h" +#include "optimizer/iterators/mi_iterator.h" +#include "optimizer/joiner.h" +#include "util/tools.h" + +namespace Tianmu { +namespace core { + +#define MATERIAL_TUPLES_LIMIT 150000000000LL // = ~1 TB of cache needed for one dimension +#define MATERIAL_TUPLES_WARNING 2500000000LL // = 10-20 GB of cache for one dimension + +MultiIndex::MultiIndex(uint32_t power) : m_conn(current_txn_) { + // update Clear() on any change + p_power = power; + no_dimensions = 0; + no_tuples = 0; + no_tuples_too_big = false; + dim_size = nullptr; + group_for_dim = nullptr; + group_num_for_dim = nullptr; + iterator_lock = 0; + shallow_dim_groups = false; +} + +MultiIndex::MultiIndex(const MultiIndex &s) : m_conn(s.m_conn) { + p_power = s.p_power; + no_dimensions = s.no_dimensions; + no_tuples = s.no_tuples; + no_tuples_too_big = s.no_tuples_too_big; + + if (no_dimensions > 0) { + dim_size = new int64_t[no_dimensions]; + group_for_dim = new DimensionGroup *[no_dimensions]; + group_num_for_dim = new int[no_dimensions]; + used_in_output = s.used_in_output; + can_be_distinct = s.can_be_distinct; + + for (uint i = 0; i < s.dim_groups.size(); i++) dim_groups.push_back(s.dim_groups[i]->Clone(false)); + + for (int i = 0; i < no_dimensions; i++) dim_size[i] = s.dim_size[i]; + + FillGroupForDim(); + } else { + dim_size = nullptr; + group_for_dim = nullptr; + group_num_for_dim = nullptr; + } + + iterator_lock = 0; + shallow_dim_groups = false; +} + +MultiIndex::MultiIndex(MultiIndex &s, bool shallow) : m_conn(s.m_conn) { + p_power = s.p_power; + no_dimensions = s.no_dimensions; + no_tuples = s.no_tuples; + no_tuples_too_big = s.no_tuples_too_big; + + if (no_dimensions > 0) { + group_for_dim = new DimensionGroup *[no_dimensions]; + group_num_for_dim = new int[no_dimensions]; + dim_size = new int64_t[no_dimensions]; + used_in_output = s.used_in_output; + can_be_distinct = s.can_be_distinct; + for (uint i = 0; i < s.dim_groups.size(); i++) dim_groups.push_back(s.dim_groups[i]->Clone(shallow)); + + for (int i = 0; i < no_dimensions; i++) dim_size[i] = s.dim_size[i]; + + FillGroupForDim(); + } else { + dim_size = nullptr; + group_for_dim = nullptr; + group_num_for_dim = nullptr; + } + + iterator_lock = 0; + shallow_dim_groups = shallow; +} + +MultiIndex::~MultiIndex() { + if (!shallow_dim_groups) { + for (uint i = 0; i < dim_groups.size(); i++) { + delete dim_groups[i]; + dim_groups[i] = nullptr; + } + } + + delete[] dim_size; + delete[] group_for_dim; + delete[] group_num_for_dim; +} + +void MultiIndex::Clear() { + try { + for (uint i = 0; i < dim_groups.size(); i++) { + delete dim_groups[i]; + dim_groups[i] = nullptr; + } + } catch (...) { + DEBUG_ASSERT(!"exception from destructor"); + } + + delete[] dim_size; + delete[] group_for_dim; + delete[] group_num_for_dim; + + dim_groups.clear(); + no_dimensions = 0; + no_tuples = 0; + no_tuples_too_big = false; + dim_size = nullptr; + group_for_dim = nullptr; + group_num_for_dim = nullptr; + iterator_lock = 0; + + can_be_distinct.clear(); + used_in_output.clear(); +} + +void MultiIndex::FillGroupForDim() { + MEASURE_FET("MultiIndex::FillGroupForDim(...)"); + int move_groups = 0; + for (uint i = 0; i < dim_groups.size(); i++) { // pack all holes + if (dim_groups[i] == nullptr) { + while (i + move_groups < dim_groups.size() && dim_groups[i + move_groups] == nullptr) move_groups++; + + if (i + move_groups < dim_groups.size()) { + dim_groups[i] = dim_groups[i + move_groups]; + dim_groups[i + move_groups] = nullptr; + } else + break; + } + } + + for (int i = 0; i < move_groups; i++) dim_groups.pop_back(); // clear nulls from the end + + for (int d = 0; d < no_dimensions; d++) { + group_for_dim[d] = nullptr; + group_num_for_dim[d] = -1; + } + + for (uint i = 0; i < dim_groups.size(); i++) { + for (int d = 0; d < no_dimensions; d++) + if (dim_groups[i]->DimUsed(d)) { + group_for_dim[d] = dim_groups[i]; + group_num_for_dim[d] = i; + } + } +} + +void MultiIndex::Empty(int dim_to_make_empty) { + if (dim_to_make_empty != -1) + group_for_dim[dim_to_make_empty]->Empty(); + else { + for (uint i = 0; i < dim_groups.size(); i++) dim_groups[i]->Empty(); + } + + for (int i = 0; i < no_dimensions; i++) { + if (dim_to_make_empty == -1 || group_for_dim[dim_to_make_empty]->DimUsed(i)) { + can_be_distinct[i] = true; + used_in_output[i] = true; + } + } + + no_tuples = 0; + no_tuples_too_big = false; +} + +void MultiIndex::AddDimension() { + no_dimensions++; + int64_t *ns = new int64_t[no_dimensions]; + DimensionGroup **ng = new DimensionGroup *[no_dimensions]; + int *ngn = new int[no_dimensions]; + + for (int i = 0; i < no_dimensions - 1; i++) { + ns[i] = dim_size[i]; + ng[i] = group_for_dim[i]; + ngn[i] = group_num_for_dim[i]; + } + + delete[] dim_size; + delete[] group_for_dim; + delete[] group_num_for_dim; + + dim_size = ns; + group_for_dim = ng; + group_num_for_dim = ngn; + dim_size[no_dimensions - 1] = 0; + group_for_dim[no_dimensions - 1] = nullptr; + group_num_for_dim[no_dimensions - 1] = -1; + // Temporary code, for rare cases when we add a dimension after other joins + for (uint i = 0; i < dim_groups.size(); i++) dim_groups[i]->AddDimension(); + + return; // Note: other functions will use AddDimension() to enlarge tables +} + +void MultiIndex::AddDimension_cross(uint64_t size) { + AddDimension(); + int new_dim = no_dimensions - 1; + used_in_output.push_back(true); + + if (no_dimensions > 1) + MultiplyNoTuples(size); + else + no_tuples = size; + + DimensionGroupFilter *nf = nullptr; + if (size > 0) { + dim_size[new_dim] = size; + nf = new DimensionGroupFilter(new_dim, size, p_power); // redo + } else { // size == 0 => prepare a dummy dimension with empty filter + dim_size[new_dim] = 1; + nf = new DimensionGroupFilter(new_dim, dim_size[new_dim], p_power); // redo + nf->Empty(); + } + + dim_groups.push_back(nf); + group_for_dim[new_dim] = nf; + group_num_for_dim[new_dim] = int(dim_groups.size() - 1); + can_be_distinct.push_back(true); // may be modified below + CheckIfVirtualCanBeDistinct(); +} + +void MultiIndex::MultiplyNoTuples(uint64_t factor) { + no_tuples = SafeMultiplication(no_tuples, factor); + if (no_tuples == static_cast(common::NULL_VALUE_64)) + no_tuples_too_big = true; +} + +void MultiIndex::CheckIfVirtualCanBeDistinct() // updates can_be_distinct table + // in case of virtual multiindex +{ + // check whether can_be_distinct can be true it is possible only when there are only 1-object dimensions + // and one multiobject (then the multiobject one can be distinct, the rest cannot) + if (no_dimensions > 1) { + int non_one_found = 0; + for (int i = 0; i < no_dimensions; i++) { + if (dim_size[i] > 1) + non_one_found++; + } + + if (non_one_found == 1) { + for (int j = 0; j < no_dimensions; j++) { + can_be_distinct[j] = (dim_size[j] == 1) ? false : true; + } + } + + if (non_one_found > 1) + for (int j = 0; j < no_dimensions; j++) can_be_distinct[j] = false; + } +} + +void MultiIndex::LockForGetIndex(int dim) { + if (shallow_dim_groups) { + return; + } + group_for_dim[dim]->Lock(dim); +} + +void MultiIndex::UnlockFromGetIndex(int dim) { + if (shallow_dim_groups) { + return; + } + group_for_dim[dim]->Unlock(dim); +} + +uint64_t MultiIndex::DimSize(int dim) // the size of one dimension: material_no_tuples for materialized, + // NumOfOnes for virtual +{ + return group_for_dim[dim]->NumOfTuples(); +} + +void MultiIndex::LockAllForUse() { + if (shallow_dim_groups) { + return; + } + for (int dim = 0; dim < no_dimensions; dim++) LockForGetIndex(dim); +} + +void MultiIndex::UnlockAllFromUse() { + if (shallow_dim_groups) { + return; + } + for (int dim = 0; dim < no_dimensions; dim++) UnlockFromGetIndex(dim); +} + +void MultiIndex::MakeCountOnly(int64_t mat_tuples, DimensionVector &dims_to_materialize) { + MEASURE_FET("MultiIndex::MakeCountOnly(...)"); + MarkInvolvedDimGroups(dims_to_materialize); + + for (int i = 0; i < NumOfDimensions(); i++) { + if (dims_to_materialize[i] && group_for_dim[i] != nullptr) { + // delete this group + int dim_group_to_delete = group_num_for_dim[i]; + for (int j = i; j < NumOfDimensions(); j++) { + if (group_num_for_dim[j] == dim_group_to_delete) { + group_for_dim[j] = nullptr; + group_num_for_dim[j] = -1; + } + } + + delete dim_groups[dim_group_to_delete]; + dim_groups[dim_group_to_delete] = nullptr; // these holes will be packed in FillGroupForDim() + } + } + + DimensionGroupMaterialized *count_only_group = new DimensionGroupMaterialized(dims_to_materialize); + count_only_group->SetNumOfObj(mat_tuples); + dim_groups.push_back(count_only_group); + + FillGroupForDim(); + UpdateNumOfTuples(); +} + +void MultiIndex::UpdateNumOfTuples() { + // assumptions: + // - no_material_tuples is correct, even if all t[...] are nullptr (forgotten). + // However, if all f[...] are not nullptr, then the index is set to IT_VIRTUAL + // and no_material_tuples = 0 + // - IT_MIXED or IT_VIRTUAL may be in fact IT_ORDERED (must be set properly on + // output) + // - if no_material_tuples > 0, then new index_type is not IT_VIRTUAL + no_tuples_too_big = false; + no_tuples = (dim_groups.size() == 0) ? 0 : 1; + + for (uint i = 0; i < dim_groups.size(); i++) { + dim_groups[i]->UpdateNumOfTuples(); + MultiplyNoTuples(dim_groups[i]->NumOfTuples()); + } +} + +int64_t MultiIndex::NumOfTuples(DimensionVector &dimensions, + bool fail_on_overflow) // for a given subset of dimensions +{ + std::vector dg = ListInvolvedDimGroups(dimensions); + if (dg.size() == 0) + return 0; + + int64_t res = 1; + for (uint i = 0; i < dg.size(); i++) { + dim_groups[dg[i]]->UpdateNumOfTuples(); + res = SafeMultiplication(res, dim_groups[dg[i]]->NumOfTuples()); + } + + if (res == common::NULL_VALUE_64 && fail_on_overflow) + throw common::OutOfMemoryException("Too many tuples. (1428)"); + + return res; +} + +int MultiIndex::MaxNumOfPacks(int dim) // maximal (upper approx.) number of different nonempty data + // packs for the given dimension +{ + int max_packs = 0; + Filter *f = group_for_dim[dim]->GetFilter(dim); + if (f) { + for (size_t p = 0; p < f->NumOfBlocks(); p++) + if (!f->IsEmpty(p)) + max_packs++; + } else { + max_packs = int((dim_size[dim]) >> p_power) + 1; + if (group_for_dim[dim]->NumOfTuples() < max_packs) + max_packs = (int)group_for_dim[dim]->NumOfTuples(); + } + return max_packs; +} + +// Logical operations + +void MultiIndex::MIFilterAnd(MIIterator &mit, + Filter &fd) // limit the MultiIndex by excluding + // all tuples which are not present in + // fd, in order given by mit +{ + MEASURE_FET("MultiIndex::MIFilterAnd(...)"); + LockAllForUse(); + if (no_dimensions == 1 && group_for_dim[0]->GetFilter(0)) { + Filter *f = group_for_dim[0]->GetFilter(0); + FilterOnesIterator fit(f, p_power); + int64_t cur_pos = 0; + while (fit.IsValid()) { + if (!fd.Get(cur_pos)) + fit.ResetDelayed(); + + ++fit; + cur_pos++; + } + + f->Commit(); + UpdateNumOfTuples(); + UnlockAllFromUse(); + return; + } + + DimensionVector dim_used(mit.DimsUsed()); + MarkInvolvedDimGroups(dim_used); + int64_t new_no_tuples = fd.NumOfOnes(); + JoinTips tips(*this); + MINewContents new_mind(this, tips); + new_mind.SetDimensions(dim_used); + new_mind.Init(new_no_tuples); + mit.Rewind(); + int64_t f_pos = 0; + + while (mit.IsValid()) { + if (fd.Get(f_pos)) { + for (int d = 0; d < no_dimensions; d++) + if (dim_used[d]) + new_mind.SetNewTableValue(d, mit[d]); + new_mind.CommitNewTableValues(); + } + ++mit; + f_pos++; + } + + new_mind.Commit(new_no_tuples); + UpdateNumOfTuples(); + UnlockAllFromUse(); +} + +bool MultiIndex::MarkInvolvedDimGroups( + DimensionVector &v) // if any dimension is marked, then mark the rest of its group +{ + bool added = false; + for (int i = 0; i < no_dimensions; i++) { + if (!v[i]) { + for (int j = 0; j < no_dimensions; j++) { + if (v[j] && group_num_for_dim[i] == group_num_for_dim[j]) { + v[i] = true; + added = true; + break; + } + } + } + } + return added; +} + +std::vector MultiIndex::ListInvolvedDimGroups(DimensionVector &v) // List all internal numbers of groups touched + // by the set of dimensions +{ + std::vector res; + int cur_group_number; + for (int i = 0; i < no_dimensions; i++) { + if (v[i]) { + cur_group_number = group_num_for_dim[i]; + bool added = false; + for (uint j = 0; j < res.size(); j++) + if (res[j] == cur_group_number) { + added = true; + break; + } + if (!added) + res.push_back(cur_group_number); + } + } + return res; +} + +std::string MultiIndex::Display() { + std::vector ind_tab_no; + int it_count = 0; + for (uint i = 0; i < dim_groups.size(); i++) { + if (dim_groups[i]->Type() == DimensionGroup::DGType::DG_INDEX_TABLE) { + it_count++; + ind_tab_no.push_back(it_count); // calculate a number of a materialized dim. group + } else + ind_tab_no.push_back(0); + } + + std::string s; + s = "["; + for (int i = 0; i < no_dimensions; i++) { + if (!group_for_dim[i]->DimEnabled(i)) + s += "-"; + else if (group_for_dim[i]->Type() == DimensionGroup::DGType::DG_FILTER) + s += "f"; + else if (group_for_dim[i]->Type() == DimensionGroup::DGType::DG_INDEX_TABLE) + s += (ind_tab_no[group_num_for_dim[i]] > 9 ? 'T' : '0' + ind_tab_no[group_num_for_dim[i]]); + else if (group_for_dim[i]->Type() == DimensionGroup::DGType::DG_VIRTUAL) + s += (GetFilter(i) ? 'F' : 'v'); + else + s += "?"; + } + s += "]"; + return s; +} + +} // namespace core +} // namespace Tianmu diff --git a/storage/tianmu/core/multi_index.h b/storage/tianmu/index/multi_index.h similarity index 77% rename from storage/tianmu/core/multi_index.h rename to storage/tianmu/index/multi_index.h index aa867b6d9..5039acef9 100644 --- a/storage/tianmu/core/multi_index.h +++ b/storage/tianmu/index/multi_index.h @@ -1,191 +1,182 @@ -/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. - Use is subject to license terms - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA -*/ -#ifndef TIANMU_CORE_MULTI_INDEX_H_ -#define TIANMU_CORE_MULTI_INDEX_H_ -#pragma once - -#include "core/bin_tools.h" -#include "core/cq_term.h" -#include "core/dimension_group.h" -#include "core/filter.h" -#include "core/index_table.h" - -namespace Tianmu { -namespace core { -class MIIterator; - -class MultiIndex { - public: - MultiIndex(uint32_t power); // = PACK_DEFAUL - MultiIndex(const MultiIndex &s); - MultiIndex(MultiIndex &s, bool shallow); - ~MultiIndex(); - - void Clear(); // clear the multiindex completely (like destructor + Multiindex()) - - // Construction of the index - - // max_value - upper limit of indexes of newly added objects (e.g. number of - // all objects in a table to be joined) - void AddDimension_cross(uint64_t size); // calculate a cross product of the previous value of - // index and the full table (trivial filter) of 'size' - // objects - - // retrieve information - uint32_t ValueOfPower() { return p_power; } - int NumOfDimensions() const { return no_dimensions; } // number of dimensions - int64_t NumOfTuples() const { // number of all tuples - if (!no_tuples_too_big) - return no_tuples; - throw common::OutOfMemoryException("Too many tuples. (85)"); - return 0; - } - int64_t NumOfTuples(DimensionVector &dimensions, - bool fail_on_overflow = true); // for a given subset of dimensions - - bool ZeroTuples() { return (!no_tuples_too_big && no_tuples == 0); } - bool TooManyTuples() { return no_tuples_too_big; } - Filter *GetFilter(int dim) const // Get the pointer to a filter attached to a dimension. - // NOTE: will be nullptr in case of materialized MultiIndex! - { - return no_dimensions > 0 ? group_for_dim[dim]->GetFilter(dim) : nullptr; - } - Filter *GetUpdatableFilter(int dim) const // Get the pointer to a filter, if it may be changed. - // NOTE: will be nullptr in case of materialized - // MultiIndex! - { - return no_dimensions > 0 ? group_for_dim[dim]->GetUpdatableFilter(dim) : nullptr; - } - bool NullsExist(int dim) { - return no_dimensions > 0 ? group_for_dim[dim]->NullsPossible(dim) : false; - } // return true if there exist any 0 value (always false for virtual - // dimensions) - bool MarkInvolvedDimGroups(DimensionVector &v); // if any dimension is marked, then mark the - // rest of this class. Return true if anything - // new marked. - bool IsOrderable(int dim) { return no_dimensions > 0 ? group_for_dim[dim]->IsOrderable() : true; } - uint64_t DimSize(int dim); // the size of one dimension: NumOfOnes for virtual, - // number of materialized tuples for materialized - uint64_t OrigSize(int dim) { return dim_size[dim]; } - // the maximal size of one dimension (e.g. the size of a table, the maximal - // index possible) - // Locking - - void LockForGetIndex(int dim); // must precede GetIndex(...) - void UnlockFromGetIndex(int dim); - void LockAllForUse(); - void UnlockAllFromUse(); - - bool IteratorLock() { // register a normal iterator; false: already locked - // for updating - if (iterator_lock > -1) - iterator_lock++; - return (iterator_lock > -1); - } - bool IteratorUpdatingLock() { // register an updating iterator; false: - // already locked - if (iterator_lock == 0) { - iterator_lock = -1; - return true; - } - return false; - } - void IteratorUnlock() { - if (iterator_lock > 0) - iterator_lock--; - else - iterator_lock = 0; - } - - // operations on the index - - void MIFilterAnd(MIIterator &mit, - Filter &fd); // limit the MultiIndex by excluding all tuples - // which are not present in fd, in order given - // by mit - - bool CanBeDistinct(int dim) const { - return can_be_distinct[dim]; - } // true if ( distinct(orig. column) => distinct( result ) ), false if we - // cannot guarantee this - bool IsForgotten(int dim) { - return group_for_dim[dim] ? !group_for_dim[dim]->DimEnabled(dim) : false; - } // true if the dimension is forgotten (not valid for getting value) - bool IsUsedInOutput(int dim) { return used_in_output[dim]; } // true if the dimension is used in output columns - void SetUsedInOutput(int dim) { used_in_output[dim] = true; } - void ResetUsedInOutput(int dim) { used_in_output[dim] = false; } - void Empty(int dim_to_make_empty = -1); // make an index empty (delete all - // tuples) with the same dimensions - // if parameter is set, then do not delete any virtual filter except this one - void UpdateNumOfTuples(); // recalculate the number of tuples - void MakeCountOnly(int64_t mat_tuples, DimensionVector &dims_to_materialize); - // recalculate the number of tuples, assuming mat_tuples is the new - // material_no_tuples and the dimensions from the list are deleted - - int MaxNumOfPacks(int dim); // maximal (upper approx.) number of different - // nonempty data packs for the given dimension - std::string Display(); // MultiIndex structure: f - Filter, i - IndexTable - - Transaction &ConnInfo() const { return *m_conn; } - - Transaction *m_conn; - - friend class MINewContents; - friend class MIIterator; - - friend class MultiIndexBuilder; - - private: - void AddDimension(); // declare a new dimension (internal) - void CheckIfVirtualCanBeDistinct(); // updates can_be_distinct table in case - // of virtual multiindex - std::vector ListInvolvedDimGroups(DimensionVector &v); // List all internal numbers of - // groups touched by the set of - // dimensions - - int no_dimensions; - int64_t *dim_size; // the size of a dimension - uint64_t no_tuples; // actual number of tuples (also in case of virtual - // index); should be updated in any change of index - uint32_t p_power; - bool no_tuples_too_big; // this flag is set if a virtual number of tuples - // exceeds 2^64 - std::vector can_be_distinct; // true if the dimension contain only one copy of - // original rows, false if we cannot guarantee this - std::vector used_in_output; // true if given dimension is used for - // generation of output columns - - // DimensionGroup stuff - void FillGroupForDim(); - std::vector dim_groups; // all active dimension groups - DimensionGroup **group_for_dim; // pointers to elements of dim_groups, for - // faster dimension identification - int *group_num_for_dim; // an element number of dim_groups, for faster - // dimension identification - - // Some technical functions - void MultiplyNoTuples(uint64_t factor); // the same as "no_tuples*=factor", but set - // no_tuples_too_big whenever needed - - int iterator_lock; // 0 - unlocked, >0 - normal iterator exists, -1 - - // updating iterator exists - bool shallow_dim_groups; // Indicates whether dim_groups is a shallow copy -}; -} // namespace core -} // namespace Tianmu - -#endif // TIANMU_CORE_MULTI_INDEX_H_ +/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +*/ +#ifndef TIANMU_CORE_MULTI_INDEX_H_ +#define TIANMU_CORE_MULTI_INDEX_H_ +#pragma once + +#include "core/dimension_group.h" +#include "executor/filter.h" +#include "index/index_table.h" +#include "optimizer/compile/cq_term.h" +#include "util/bin_tools.h" + +namespace Tianmu { +namespace core { +class MIIterator; + +class MultiIndex { + public: + MultiIndex(uint32_t power); // = PACK_DEFAUL + MultiIndex(const MultiIndex &s); + MultiIndex(MultiIndex &s, bool shallow); + ~MultiIndex(); + + void Clear(); // clear the multiindex completely (like destructor + Multiindex()) + + // Construction of the index + + // max_value - upper limit of indexes of newly added objects (e.g. number of + // all objects in a table to be joined) + void AddDimension_cross(uint64_t size); // calculate a cross product of the previous value of + // index and the full table (trivial filter) of 'size' objects + + // retrieve information + uint32_t ValueOfPower() { return p_power; } + int NumOfDimensions() const { return no_dimensions; } // number of dimensions + int64_t NumOfTuples() const { // number of all tuples + if (!no_tuples_too_big) + return no_tuples; + throw common::OutOfMemoryException("Too many tuples. (85)"); + return 0; + } + + int64_t NumOfTuples(DimensionVector &dimensions, + bool fail_on_overflow = true); // for a given subset of dimensions + + bool ZeroTuples() { return (!no_tuples_too_big && no_tuples == 0); } + bool TooManyTuples() { return no_tuples_too_big; } + + Filter *GetFilter(int dim) const { // Get the pointer to a filter attached to a dimension. + // NOTE: will be nullptr in case of materialized MultiIndex! + return no_dimensions > 0 ? group_for_dim[dim]->GetFilter(dim) : nullptr; + } + + Filter *GetUpdatableFilter(int dim) const { // Get the pointer to a filter, if it may be changed. + // NOTE: will be nullptr in case of materialized MultiIndex! + return no_dimensions > 0 ? group_for_dim[dim]->GetUpdatableFilter(dim) : nullptr; + } + + bool NullsExist(int dim) { + return no_dimensions > 0 ? group_for_dim[dim]->NullsPossible(dim) : false; + } // return true if there exist any 0 value (always false for virtual dimensions) + + bool MarkInvolvedDimGroups(DimensionVector &v); // if any dimension is marked, then mark the rest of this class. + // Return true if anything new marked. + bool IsOrderable(int dim) { return no_dimensions > 0 ? group_for_dim[dim]->IsOrderable() : true; } + + uint64_t DimSize(int dim); // the size of one dimension: NumOfOnes for virtual, + // number of materialized tuples for materialized + uint64_t OrigSize(int dim) { return dim_size[dim]; } + // the maximal size of one dimension (e.g. the size of a table, the maximal + // index possible) + // Locking + + void LockForGetIndex(int dim); // must precede GetIndex(...) + void UnlockFromGetIndex(int dim); + void LockAllForUse(); + void UnlockAllFromUse(); + + bool IteratorLock() { // register a normal iterator; false: already locked for updating + if (iterator_lock > -1) + iterator_lock++; + return (iterator_lock > -1); + } + + bool IteratorUpdatingLock() { // register an updating iterator; false: already locked + if (iterator_lock == 0) { + iterator_lock = -1; + return true; + } + + return false; + } + + void IteratorUnlock() { (iterator_lock > 0) ? iterator_lock-- : iterator_lock = 0; } + + // operations on the index + void MIFilterAnd(MIIterator &mit, + Filter &fd); // limit the MultiIndex by excluding all tuples + // which are not present in fd, in order given + // by mit + + bool CanBeDistinct(int dim) const { + return can_be_distinct[dim]; + } // true if ( distinct(orig. column) => distinct( result ) ), false if we cannot guarantee this + + bool IsForgotten(int dim) { + return group_for_dim[dim] ? !group_for_dim[dim]->DimEnabled(dim) : false; + } // true if the dimension is forgotten (not valid for getting value) + bool IsUsedInOutput(int dim) { return used_in_output[dim]; } // true if the dimension is used in output columns + + void SetUsedInOutput(int dim) { used_in_output[dim] = true; } + void ResetUsedInOutput(int dim) { used_in_output[dim] = false; } + void Empty(int dim_to_make_empty = -1); // make an index empty (delete all tuples) with the same dimensions + // if parameter is set, then do not delete any virtual filter except this one + void UpdateNumOfTuples(); // recalculate the number of tuples + void MakeCountOnly(int64_t mat_tuples, DimensionVector &dims_to_materialize); + // recalculate the number of tuples, assuming mat_tuples is the new + // material_no_tuples and the dimensions from the list are deleted + + int MaxNumOfPacks(int dim); // maximal (upper approx.) number of different + // nonempty data packs for the given dimension + std::string Display(); // MultiIndex structure: f - Filter, i - IndexTable + + Transaction &ConnInfo() const { return *m_conn; } + + Transaction *m_conn; + friend class MINewContents; + friend class MIIterator; + friend class MultiIndexBuilder; + + private: + void AddDimension(); // declare a new dimension (internal) + void CheckIfVirtualCanBeDistinct(); // updates can_be_distinct table in case + // of virtual multiindex + std::vector ListInvolvedDimGroups(DimensionVector &v); // List all internal numbers of + // groups touched by the set of + // dimensions + + int no_dimensions; + int64_t *dim_size; // the size of a dimension + uint64_t no_tuples; // actual number of tuples (also in case of virtual + // index); should be updated in any change of index + uint32_t p_power; + bool no_tuples_too_big; // this flag is set if a virtual number of tuples exceeds 2^64 + + std::vector can_be_distinct; // true if the dimension contain only one copy of + // original rows, false if we cannot guarantee this + std::vector used_in_output; // true if given dimension is used for generation of output columns + + // DimensionGroup stuff + void FillGroupForDim(); + std::vector dim_groups; // all active dimension groups + DimensionGroup **group_for_dim; // pointers to elements of dim_groups, for + // faster dimension identification + int *group_num_for_dim; // an element number of dim_groups, for faster dimension identification + + // Some technical functions + void MultiplyNoTuples(uint64_t factor); // the same as "no_tuples*=factor", but set + // no_tuples_too_big whenever needed + + int iterator_lock; // 0 - unlocked, >0 - normal iterator exists, -1 - updating iterator exists + bool shallow_dim_groups; // Indicates whether dim_groups is a shallow copy +}; + +} // namespace core +} // namespace Tianmu + +#endif // TIANMU_CORE_MULTI_INDEX_H_ diff --git a/storage/tianmu/core/multi_index_builder.cpp b/storage/tianmu/index/multi_index_builder.cpp similarity index 98% rename from storage/tianmu/core/multi_index_builder.cpp rename to storage/tianmu/index/multi_index_builder.cpp index 5283d852c..cd2370c2a 100644 --- a/storage/tianmu/core/multi_index_builder.cpp +++ b/storage/tianmu/index/multi_index_builder.cpp @@ -18,9 +18,9 @@ #include "multi_index_builder.h" #include "core/dimension_group_multiple.h" -#include "core/joiner.h" -#include "core/mi_rough_sorter.h" -#include "core/multi_index.h" +#include "index/mi_rough_sorter.h" +#include "index/multi_index.h" +#include "optimizer/joiner.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/multi_index_builder.h b/storage/tianmu/index/multi_index_builder.h similarity index 93% rename from storage/tianmu/core/multi_index_builder.h rename to storage/tianmu/index/multi_index_builder.h index 5a5f4ac39..491420aef 100644 --- a/storage/tianmu/core/multi_index_builder.h +++ b/storage/tianmu/index/multi_index_builder.h @@ -22,13 +22,13 @@ #include #include -#include "core/bin_tools.h" -#include "core/cq_term.h" #include "core/dimension_group.h" -#include "core/filter.h" -#include "core/index_table.h" -#include "core/mi_rough_sorter.h" -#include "core/multi_index.h" +#include "executor/filter.h" +#include "index/index_table.h" +#include "index/mi_rough_sorter.h" +#include "index/multi_index.h" +#include "optimizer/compile/cq_term.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/index/rdb_meta_manager.cpp b/storage/tianmu/index/rdb_meta_manager.cpp index 54b78a38c..360da02da 100644 --- a/storage/tianmu/index/rdb_meta_manager.cpp +++ b/storage/tianmu/index/rdb_meta_manager.cpp @@ -31,7 +31,7 @@ #include "core/delta_table.h" #include "core/engine.h" -#include "core/merge_operator.h" +#include "executor/merge_operator.h" #include "index/kv_store.h" #include "index/rdb_utils.h" diff --git a/storage/tianmu/core/rough_multi_index.cpp b/storage/tianmu/index/rough_multi_index.cpp similarity index 99% rename from storage/tianmu/core/rough_multi_index.cpp rename to storage/tianmu/index/rough_multi_index.cpp index 07f7a8257..a2e303b9c 100644 --- a/storage/tianmu/core/rough_multi_index.cpp +++ b/storage/tianmu/index/rough_multi_index.cpp @@ -15,7 +15,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "rough_multi_index.h" +#include "index/rough_multi_index.h" #include "core/rough_value.h" namespace Tianmu { diff --git a/storage/tianmu/core/rough_multi_index.h b/storage/tianmu/index/rough_multi_index.h similarity index 97% rename from storage/tianmu/core/rough_multi_index.h rename to storage/tianmu/index/rough_multi_index.h index 100943ace..1e8bd7d96 100644 --- a/storage/tianmu/core/rough_multi_index.h +++ b/storage/tianmu/index/rough_multi_index.h @@ -18,9 +18,9 @@ #define TIANMU_CORE_ROUGH_MULTI_INDEX_H_ #pragma once -#include "core/bin_tools.h" -#include "core/cq_term.h" -#include "core/filter.h" +#include "executor/filter.h" +#include "optimizer/compile/cq_term.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/rsi_bloom.cpp b/storage/tianmu/index/rsi_bloom.cpp similarity index 98% rename from storage/tianmu/core/rsi_bloom.cpp rename to storage/tianmu/index/rsi_bloom.cpp index 79dda12d0..1e725b86f 100644 --- a/storage/tianmu/core/rsi_bloom.cpp +++ b/storage/tianmu/index/rsi_bloom.cpp @@ -15,8 +15,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/rsi_bloom.h" -#include "core/pack_str.h" +#include "index/rsi_bloom.h" +#include "data/pack_str.h" #include "system/tianmu_file.h" #include "system/tianmu_system.h" diff --git a/storage/tianmu/core/rsi_bloom.h b/storage/tianmu/index/rsi_bloom.h similarity index 98% rename from storage/tianmu/core/rsi_bloom.h rename to storage/tianmu/index/rsi_bloom.h index 4edf39ff5..290140cb1 100644 --- a/storage/tianmu/core/rsi_bloom.h +++ b/storage/tianmu/index/rsi_bloom.h @@ -20,7 +20,7 @@ #include "common/common_definitions.h" #include "core/bloom_block.h" -#include "core/rsi_index.h" +#include "index/rsi_index.h" #include "types/tianmu_data_types.h" namespace Tianmu { diff --git a/storage/tianmu/core/rsi_cmap.cpp b/storage/tianmu/index/rsi_cmap.cpp similarity index 99% rename from storage/tianmu/core/rsi_cmap.cpp rename to storage/tianmu/index/rsi_cmap.cpp index 2f63bf4a3..8067ec32f 100644 --- a/storage/tianmu/core/rsi_cmap.cpp +++ b/storage/tianmu/index/rsi_cmap.cpp @@ -15,8 +15,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/rsi_cmap.h" -#include "core/pack_str.h" +#include "index/rsi_cmap.h" +#include "data/pack_str.h" #include "system/tianmu_file.h" #include "system/tianmu_system.h" #include "util/fs.h" diff --git a/storage/tianmu/core/rsi_cmap.h b/storage/tianmu/index/rsi_cmap.h similarity index 99% rename from storage/tianmu/core/rsi_cmap.h rename to storage/tianmu/index/rsi_cmap.h index b6db2efdd..e56505ff6 100644 --- a/storage/tianmu/core/rsi_cmap.h +++ b/storage/tianmu/index/rsi_cmap.h @@ -19,7 +19,7 @@ #pragma once #include "common/common_definitions.h" -#include "core/rsi_index.h" +#include "index/rsi_index.h" #include "types/tianmu_data_types.h" namespace Tianmu { diff --git a/storage/tianmu/core/rsi_histogram.cpp b/storage/tianmu/index/rsi_histogram.cpp similarity index 99% rename from storage/tianmu/core/rsi_histogram.cpp rename to storage/tianmu/index/rsi_histogram.cpp index 7ee09967f..449cf8ace 100644 --- a/storage/tianmu/core/rsi_histogram.cpp +++ b/storage/tianmu/index/rsi_histogram.cpp @@ -17,8 +17,8 @@ #include -#include "core/pack.h" -#include "core/rsi_histogram.h" +#include "data/pack.h" +#include "index/rsi_histogram.h" #include "system/tianmu_file.h" #include "system/tianmu_system.h" diff --git a/storage/tianmu/core/rsi_histogram.h b/storage/tianmu/index/rsi_histogram.h similarity index 98% rename from storage/tianmu/core/rsi_histogram.h rename to storage/tianmu/index/rsi_histogram.h index acc0b3978..480e2a572 100644 --- a/storage/tianmu/core/rsi_histogram.h +++ b/storage/tianmu/index/rsi_histogram.h @@ -19,8 +19,8 @@ #pragma once #include "common/common_definitions.h" -#include "core/pack_int.h" -#include "core/rsi_index.h" +#include "data/pack_int.h" +#include "index/rsi_index.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/rsi_index.h b/storage/tianmu/index/rsi_index.h similarity index 96% rename from storage/tianmu/core/rsi_index.h rename to storage/tianmu/index/rsi_index.h index 6c5e0b563..c411fb37f 100644 --- a/storage/tianmu/core/rsi_index.h +++ b/storage/tianmu/index/rsi_index.h @@ -19,9 +19,9 @@ #pragma once #include "common/exception.h" -#include "core/bin_tools.h" -#include "core/dpn.h" +#include "data/dpn.h" #include "mm/traceable_object.h" +#include "util/bin_tools.h" #include "util/fs.h" namespace Tianmu { diff --git a/storage/tianmu/index/tianmu_table_index.cpp b/storage/tianmu/index/tianmu_table_index.cpp index 95dcf4e28..4e8db0112 100644 --- a/storage/tianmu/index/tianmu_table_index.cpp +++ b/storage/tianmu/index/tianmu_table_index.cpp @@ -27,16 +27,20 @@ namespace Tianmu { namespace index { +// Here, In future, tianmu maybe has uniquekey, secondary key, fulltext, etc. Therefore, a type of index should be +// added. But, now. we only have only one index: PK. TianmuTableIndex::TianmuTableIndex(const std::string &name, TABLE *table) { std::string fullname; // normalize the table name. NormalizeName(name, fullname); + // does the table exists now. - rocksdb_tbl_ = ha_kvstore_->FindTable(fullname); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + rocksdb_tbl_ = store->FindTable(fullname); TIANMU_LOG(LogCtl_Level::WARN, "normalize tablename %s, table_full_name %s!", name.c_str(), fullname.c_str()); keyid_ = table->s->primary_key; - rocksdb_key_ = rocksdb_tbl_->GetRdbTableKeys().at(KVStore::pk_index(table, rocksdb_tbl_)); + rocksdb_key_ = rocksdb_tbl_->GetRdbTableKeys().at(store->pk_index(table, rocksdb_tbl_)); // compatible version that primary key make up of one part if (table->key_info[keyid_].actual_key_parts == 1) index_of_columns_.push_back(table->key_info[keyid_].key_part[0].field->field_index); @@ -49,7 +53,9 @@ bool TianmuTableIndex::FindIndexTable(const std::string &name) { if (!NormalizeName(name, str)) { throw common::Exception("Normalization wrong of table " + name); } - if (ha_kvstore_->FindTable(str)) { + + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + if (store->FindTable(str)) { return true; } @@ -74,11 +80,12 @@ common::ErrorCode TianmuTableIndex::CreateIndexTable(const std::string &name, TA std::shared_ptr tbl = std::make_shared(str); tbl->GetRdbTableKeys().resize(table->s->keys); - if (KVStore::create_keys_and_cf(table, tbl) != common::ErrorCode::SUCCESS) { + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + if (store->create_keys_and_cf(table, tbl) != common::ErrorCode::SUCCESS) { return common::ErrorCode::FAILED; } - return ha_kvstore_->KVWriteTableMeta(tbl); + return store->KVWriteTableMeta(tbl); } common::ErrorCode TianmuTableIndex::DropIndexTable(const std::string &name) { @@ -87,8 +94,9 @@ common::ErrorCode TianmuTableIndex::DropIndexTable(const std::string &name) { throw common::Exception("Exception: table name " + name); } + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); // Find the table in the hash - return ha_kvstore_->KVDelTableMeta(str); + return store->KVDelTableMeta(str); } common::ErrorCode TianmuTableIndex::RefreshIndexTable(const std::string &name) { @@ -97,11 +105,14 @@ common::ErrorCode TianmuTableIndex::RefreshIndexTable(const std::string &name) { if (!NormalizeName(name, fullname)) { return common::ErrorCode::FAILED; } - rocksdb_tbl_ = ha_kvstore_->FindTable(fullname); + + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + rocksdb_tbl_ = store->FindTable(fullname); if (rocksdb_tbl_ == nullptr) { TIANMU_LOG(LogCtl_Level::WARN, "table %s init ddl error", fullname.c_str()); return common::ErrorCode::FAILED; } + rocksdb_key_ = rocksdb_tbl_->GetRdbTableKeys().at(keyid_); return common::ErrorCode::SUCCESS; } @@ -112,11 +123,13 @@ common::ErrorCode TianmuTableIndex::RenameIndexTable(const std::string &from, co if (!NormalizeName(from, sname)) { return common::ErrorCode::FAILED; } + if (!NormalizeName(to, dname)) { return common::ErrorCode::FAILED; } - return ha_kvstore_->KVRenameTableMeta(sname, dname); + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + return store->KVRenameTableMeta(sname, dname); } void TianmuTableIndex::TruncateIndexTable() { @@ -124,10 +137,12 @@ void TianmuTableIndex::TruncateIndexTable() { rocksdb::ReadOptions ropts; ropts.total_order_seek = true; uchar key_buf[INDEX_NUMBER_SIZE]; + KVStore *store = (reinterpret_cast(tianmu_hton->data))->getStore(); + for (auto &rocksdb_key_ : rocksdb_tbl_->GetRdbTableKeys()) { be_store_index(key_buf, rocksdb_key_->get_gl_index_id().index_id); auto cf = rocksdb_key_->get_cf(); - std::unique_ptr it(ha_kvstore_->GetScanIter(ropts, cf)); + std::unique_ptr it(store->GetScanIter(ropts, cf)); it->Seek({(const char *)key_buf, INDEX_NUMBER_SIZE}); while (it->Valid()) { @@ -135,7 +150,8 @@ void TianmuTableIndex::TruncateIndexTable() { if (!rocksdb_key_->covers_key(key)) { break; } - if (!ha_kvstore_->KVDeleteKey(wopts, cf, key)) { + + if (!store->KVDeleteKey(wopts, cf, key)) { throw common::Exception("Rdb delete key fail!"); } it->Next(); @@ -154,16 +170,12 @@ common::ErrorCode TianmuTableIndex::CheckUniqueness(core::Transaction *tx, const s = tx->KVTrans().Get(rocksdb_key_->get_cf(), pk_slice, &retrieved_value); } - if (!s.ok() && !s.IsNotFound()) { - TIANMU_LOG(LogCtl_Level::ERROR, "RockDb read fail:%s", s.getState()); - return common::ErrorCode::FAILED; - } - - if (s.ok()) { + if (s.ok()) { // means that there's another key existed. return common::ErrorCode::DUPP_KEY; - } - - return common::ErrorCode::SUCCESS; + } else if (s.IsNotFound()) { // not exist a key. + return common::ErrorCode::NOT_FOUND_KEY; + } else // failed. + return common::ErrorCode::FAILED; } common::ErrorCode TianmuTableIndex::InsertIndex(core::Transaction *tx, std::vector &fields, uint64_t row) { @@ -171,9 +183,13 @@ common::ErrorCode TianmuTableIndex::InsertIndex(core::Transaction *tx, std::vect rocksdb_key_->pack_key(key, fields, value); + // 1)inserts into a PK; 2) insert into without a PK. the return value of `CheckUniqueness` is as following: + // 1: common::ErrorCode::DUPP_KEY; 2: common::ErrorCode::NOT_FOUND_KEY; 3:common::ErrorCode::FAILED common::ErrorCode err_code = CheckUniqueness(tx, {(const char *)key.ptr(), key.length()}); - if (err_code != common::ErrorCode::SUCCESS) + if (idx_type_ == IndexType::INDEX_TYPE_PRIMARY && err_code == common::ErrorCode::DUPP_KEY) { // PK return err_code; + } else if (idx_type_ == IndexType::INDEX_TYPE_SECONDARY) { // do not need uniqueness constrain + } value.write_uint64(row); const auto cf = rocksdb_key_->get_cf(); @@ -182,27 +198,37 @@ common::ErrorCode TianmuTableIndex::InsertIndex(core::Transaction *tx, std::vect if (!s.ok()) { TIANMU_LOG(LogCtl_Level::ERROR, "RocksDB: insert key fail!"); err_code = common::ErrorCode::FAILED; - } + } else if (s.ok()) + err_code = common::ErrorCode::SUCCESS; + return err_code; } common::ErrorCode TianmuTableIndex::UpdateIndex(core::Transaction *tx, std::string &nkey, std::string &okey, uint64_t row) { - StringWriter value, packkey; - std::vector ofields, nfields; + StringWriter new_value, old_value, new_packke, old_packkey; + std::vector old_fields, new_fields; - ofields.emplace_back(okey); - nfields.emplace_back(nkey); + old_fields.emplace_back(okey); + new_fields.emplace_back(nkey); + + rocksdb_key_->pack_key(new_packke, new_fields, new_value); + rocksdb_key_->pack_key(old_packkey, old_fields, old_value); + + common::ErrorCode err_code = CheckUniqueness(tx, {(const char *)new_packke.ptr(), new_packke.length()}); - rocksdb_key_->pack_key(packkey, ofields, value); - common::ErrorCode err_code = CheckUniqueness(tx, {(const char *)packkey.ptr(), packkey.length()}); if (err_code == common::ErrorCode::DUPP_KEY) { - const auto cf = rocksdb_key_->get_cf(); - tx->KVTrans().Delete(cf, {(const char *)packkey.ptr(), packkey.length()}); - } else { - TIANMU_LOG(LogCtl_Level::WARN, "RockDb: don't have the key for update!"); + } else if (err_code == common::ErrorCode::NOT_FOUND_KEY || err_code == common::ErrorCode::SUCCESS) { + // gets the old index. then update it. + common::ErrorCode code = CheckUniqueness(tx, {(const char *)old_packkey.ptr(), old_packkey.length()}); + if (code != common::ErrorCode::SUCCESS) { + const auto cf = rocksdb_key_->get_cf(); + // delete old index then insert a new one. + rocksdb::Status ret_del = tx->KVTrans().Delete(cf, {(const char *)old_packkey.ptr(), old_packkey.length()}); + err_code = InsertIndex(tx, new_fields, row); + } } - err_code = InsertIndex(tx, nfields, row); + return err_code; } diff --git a/storage/tianmu/index/tianmu_table_index.h b/storage/tianmu/index/tianmu_table_index.h index 725a9efac..6cb427ced 100644 --- a/storage/tianmu/index/tianmu_table_index.h +++ b/storage/tianmu/index/tianmu_table_index.h @@ -23,6 +23,7 @@ #include "rocksdb/db.h" #include "common/common_definitions.h" +#include "index/rdb_meta_manager.h" #include "index/rdb_utils.h" namespace Tianmu { @@ -58,6 +59,7 @@ class TianmuTableIndex final { common::ErrorCode UpdateIndex(core::Transaction *tx, std::string &nkey, std::string &okey, uint64_t row); common::ErrorCode DeleteIndex(core::Transaction *tx, std::vector &fields, uint64_t row); common::ErrorCode GetRowByKey(core::Transaction *tx, std::vector &fields, uint64_t &row); + index::IndexType type() { return idx_type_; } public: std::shared_ptr rocksdb_tbl_; @@ -67,6 +69,8 @@ class TianmuTableIndex final { uint keyid_ = 0; private: + index::IndexType idx_type_ = index::IndexType::INDEX_TYPE_PRIMARY; + common::ErrorCode CheckUniqueness(core::Transaction *tx, const rocksdb::Slice &pk_slice); }; diff --git a/storage/tianmu/loader/load_parser.cpp b/storage/tianmu/loader/load_parser.cpp index 1288ab042..e83c11889 100644 --- a/storage/tianmu/loader/load_parser.cpp +++ b/storage/tianmu/loader/load_parser.cpp @@ -19,11 +19,11 @@ #include "binlog.h" #include "core/engine.h" -#include "core/tianmu_attr.h" #include "loader/value_cache.h" #include "log_event.h" #include "system/io_parameters.h" #include "util/timer.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace loader { @@ -51,7 +51,11 @@ LoadParser::LoadParser(TianmuAttrPtrVect_t &attrs, const system::IOParameters &i buf_end_ = cur_ptr_ + read_buffer_.BufSize(); timer.Print(__PRETTY_FUNCTION__); - tab_index_ = ha_tianmu_engine_->GetTableIndex("./" + io_param_.TableName()); + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + tab_index_ = eng->GetTableIndex("./" + io_param_.TableName()); } uint LoadParser::GetPackrow(uint no_of_rows, std::vector &value_buffers) { diff --git a/storage/tianmu/loader/parsing_strategy.cpp b/storage/tianmu/loader/parsing_strategy.cpp index c1a17e49d..e2d4f9b6c 100644 --- a/storage/tianmu/loader/parsing_strategy.cpp +++ b/storage/tianmu/loader/parsing_strategy.cpp @@ -20,13 +20,13 @@ #include #include #include -#include "core/tools.h" #include "core/transaction.h" #include "item_timefunc.h" #include "loader/value_cache.h" #include "system/io_parameters.h" #include "system/tianmu_system.h" #include "types/value_parser4txt.h" +#include "util/tools.h" namespace Tianmu { namespace loader { @@ -433,9 +433,12 @@ ParsingStrategy::ParseResult ParsingStrategy::GetOneRow(const char *const buf, s if (!first_row_prepared_) { std::string field_name(field->field_name); - str = new (thd_->mem_root) String(MAX_FIELD_WIDTH); - String *res = field->val_str(str); - DEBUG_ASSERT(res); + str = new (thd_->mem_root) String(); + if (!field->is_null()) { + str->real_alloc(MAX_FIELD_WIDTH); + String *res = field->val_str(str); + DEBUG_ASSERT(res); + } vec_field_Str_list_.push_back(str); vec_field_num_to_index_.push_back(0); map_field_name_to_index_[field_name] = i; @@ -711,8 +714,7 @@ void ParsingStrategy::GetValue(const char *value_ptr, size_t value_size, ushort auto function = types::ValueParserForText::GetParsingFuntion(ati); if (function(tmp_string, *reinterpret_cast(buffer.Prepare(sizeof(int64_t)))) == common::ErrorCode::FAILED) - throw common::FormatException(0, - col); // TODO: throw appropriate exception + throw common::FormatException(0, col); // TODO: throw appropriate exception buffer.ExpectedSize(sizeof(int64_t)); } } diff --git a/storage/tianmu/loader/parsing_strategy.h b/storage/tianmu/loader/parsing_strategy.h index 1a4c37d71..8609e1caa 100644 --- a/storage/tianmu/loader/parsing_strategy.h +++ b/storage/tianmu/loader/parsing_strategy.h @@ -19,8 +19,8 @@ #pragma once #include "common/data_format.h" -#include "core/tianmu_attr_typeinfo.h" #include "loader/value_cache.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace loader { diff --git a/storage/tianmu/mm/memory_handling_policy.cpp b/storage/tianmu/mm/memory_handling_policy.cpp index bf619d8f0..cf23bdbd0 100644 --- a/storage/tianmu/mm/memory_handling_policy.cpp +++ b/storage/tianmu/mm/memory_handling_policy.cpp @@ -22,10 +22,10 @@ #include "common/assert.h" #include "common/exception.h" #include "core/data_cache.h" -#include "core/pack.h" -#include "core/tools.h" #include "core/transaction.h" +#include "data/pack.h" #include "mm/huge_heap_policy.h" +#include "util/tools.h" #include "mm/mysql_heap_policy.h" #include "mm/numa_heap_policy.h" diff --git a/storage/tianmu/mm/reference_object.h b/storage/tianmu/mm/reference_object.h index f5e88dd69..c5190416f 100644 --- a/storage/tianmu/mm/reference_object.h +++ b/storage/tianmu/mm/reference_object.h @@ -19,8 +19,8 @@ #define TIANMU_MM_REFERENCE_OBJECT_H_ #pragma once -#include "core/tools.h" #include "mm/traceable_object.h" +#include "util/tools.h" namespace Tianmu { namespace mm { diff --git a/storage/tianmu/mm/release2q.cpp b/storage/tianmu/mm/release2q.cpp index 0fb71b07e..74ce4e748 100644 --- a/storage/tianmu/mm/release2q.cpp +++ b/storage/tianmu/mm/release2q.cpp @@ -19,7 +19,7 @@ #include #include "core/data_cache.h" -#include "core/pack.h" +#include "data/pack.h" #include "mm/reference_object.h" #include "mm/release_strategy.h" #include "mm/release_tracker.h" diff --git a/storage/tianmu/mm/tcm_heap_policy.cpp b/storage/tianmu/mm/tcm_heap_policy.cpp index 0826aba89..067bc3cb4 100644 --- a/storage/tianmu/mm/tcm_heap_policy.cpp +++ b/storage/tianmu/mm/tcm_heap_policy.cpp @@ -20,8 +20,8 @@ #include #include "common/assert.h" -#include "core/tools.h" #include "tcm/span.h" +#include "util/tools.h" namespace Tianmu { namespace mm { diff --git a/storage/tianmu/mm/traceable_object.cpp b/storage/tianmu/mm/traceable_object.cpp index 731054a16..e374ab7c3 100644 --- a/storage/tianmu/mm/traceable_object.cpp +++ b/storage/tianmu/mm/traceable_object.cpp @@ -19,9 +19,9 @@ #include "common/assert.h" #include "core/engine.h" -#include "core/pack.h" -#include "core/tools.h" +#include "data/pack.h" #include "mm/release_tracker.h" +#include "util/tools.h" #include "system/fet.h" #include "system/res_manager.h" @@ -226,7 +226,13 @@ void TraceableObject::DestructionLock() { m_lock_count++; } -int TraceableObject::MemorySettingsScale() { return ha_tianmu_engine_->getResourceManager()->GetMemoryScale(); } +int TraceableObject::MemorySettingsScale() { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + if (eng) + return eng->getResourceManager()->GetMemoryScale(); + else + return -1; +} void TraceableObject::deinitialize(bool detect_leaks) { if (TraceableType() != TO_TYPE::TO_INITIALIZER) { diff --git a/storage/tianmu/mm/traceable_object.h b/storage/tianmu/mm/traceable_object.h index b50dc8fcd..510458199 100644 --- a/storage/tianmu/mm/traceable_object.h +++ b/storage/tianmu/mm/traceable_object.h @@ -21,8 +21,8 @@ #include #include "common/assert.h" -#include "core/tools.h" #include "mm/memory_handling_policy.h" +#include "util/tools.h" namespace Tianmu { diff --git a/storage/tianmu/core/aggregation_algorithm.cpp b/storage/tianmu/optimizer/aggregation_algorithm.cpp similarity index 92% rename from storage/tianmu/core/aggregation_algorithm.cpp rename to storage/tianmu/optimizer/aggregation_algorithm.cpp index 0cabc8c2a..a80aa3374 100644 --- a/storage/tianmu/core/aggregation_algorithm.cpp +++ b/storage/tianmu/optimizer/aggregation_algorithm.cpp @@ -22,14 +22,15 @@ low-level mechanisms #include "aggregation_algorithm.h" -#include "core/ctask.h" #include "core/engine.h" -#include "core/mi_iterator.h" -#include "core/pack_guardian.h" #include "core/transaction.h" +#include "data/pack_guardian.h" +#include "executor/ctask.h" #include "mm/memory_statistics.h" +#include "optimizer/iterators/mi_iterator.h" #include "system/fet.h" #include "system/tianmu_system.h" +#include "vc/expr_column.h" namespace Tianmu { namespace core { @@ -48,9 +49,11 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t for (uint i = 0; i < t->NumOfAttrs(); i++) { // first pass: find all grouping attributes TempTable::Attr &cur_a = *(t->GetAttrP(i)); - if (cur_a.mode == common::ColOperation::DELAYED) // delayed column (e.g. complex exp. on - // aggregations) + + // delayed column (e.g. complex exp. on aggregations) + if (cur_a.mode == common::ColOperation::DELAYED) continue; + if ((just_distinct && cur_a.alias) || cur_a.mode == common::ColOperation::GROUP_BY) { if (cur_a.mode == common::ColOperation::GROUP_BY) group_by_found = true; @@ -62,10 +65,9 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t break; } } - if (already_added == false) { + if (!already_added) { int new_attr_number = gbw.NumOfGroupingAttrs(); - gbw.AddGroupingColumn(new_attr_number, i, - *(t->GetAttrP(i))); // GetAttrP(i) is needed + gbw.AddGroupingColumn(new_attr_number, i, *(t->GetAttrP(i))); // GetAttrP(i) is needed // approximate a number of groups if (upper_approx_of_groups < mind->NumOfTuples()) { @@ -80,8 +82,9 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t for (uint i = 0; i < t->NumOfAttrs(); i++) { // second pass: find all aggregated attributes TempTable::Attr &cur_a = *(t->GetAttrP(i)); - if (cur_a.mode == common::ColOperation::DELAYED) { // delayed column (e.g. complex exp. - // on aggregations) + + // delayed column (e.g. complex exp.on aggregations) + if (cur_a.mode == common::ColOperation::DELAYED) { MIDummyIterator m(1); cur_a.term.vc->LockSourcePacks(m); continue; @@ -109,9 +112,9 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t max_size = cur_a.term.vc->MaxStringSize(); min_v = cur_a.term.vc->RoughMin(); max_v = cur_a.term.vc->RoughMax(); - if (cur_a.distinct && cur_a.term.vc->IsDistinct() && cur_a.mode != common::ColOperation::LISTING) + if (cur_a.distinct && cur_a.term.vc->IsDistinct() && cur_a.mode != common::ColOperation::LISTING) { cur_a.distinct = false; // "distinct" not needed, as values are distinct anyway - else if (cur_a.distinct) { + } else if (cur_a.distinct) { max_no_of_distinct = cur_a.term.vc->GetApproxDistVals(false); // no nulls included if (tianmu_control_.isOn()) tianmu_control_.lock(m_conn->GetThreadID()) @@ -119,9 +122,12 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t << system::unlock; } } + + // special case: aggregations on empty result (should not + // be 0, because it triggers max. buffer settings) if (max_no_of_distinct == 0) - max_no_of_distinct = 1; // special case: aggregations on empty result (should not - // be 0, because it triggers max. buffer settings) + max_no_of_distinct = 1; + gbw.AddAggregatedColumn(i, cur_a, max_no_of_distinct, min_v, max_v, max_size); } } @@ -160,6 +166,19 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t gbw.AddAllAggregatedConstants(mit); gbw.AddAllCountStar(row, mit, mind->NumOfTuples()); all_done_in_one_row = true; + + { + for (int gr_a = gbw.NumOfGroupingAttrs(); gr_a < gbw.NumOfAttrs(); gr_a++) { + TempTable::Attr &cur_a = *(t->GetAttrP(gr_a)); + + if (cur_a.term.vc && dynamic_cast(cur_a.term.vc)) { + bool value_successfully_aggregated = gbw.PutAggregatedValue(gr_a, 0, mit, mit.Factor()); + if (!value_successfully_aggregated) { + gbw.DistinctlyOmitted(gr_a, 0); + } + } + } + } } // Special case 2, if applicable: SELECT COUNT(DISTINCT col) FROM .....; else if (gbw.IsCountDistinctOnly()) { int64_t count_distinct = t->GetAttrP(0)->term.vc->GetExactDistVals(); // multiindex checked inside @@ -169,8 +188,7 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t gbw.PutAggregatedValueForCount(0, row, count_distinct); all_done_in_one_row = true; } - } // Special case 3: SELECT MIN(col) FROM ..... or SELECT MAX(col) FROM - // .....; + } // Special case 3: SELECT MIN(col) FROM ..... or SELECT MAX(col) FROM ...; else if (t->GetWhereConds().Size() == 0 && ((gbw.IsMinOnly() && t->NumOfAttrs() == 1 && min_v != common::MINUS_INF_64) || (gbw.IsMaxOnly() && t->NumOfAttrs() == 1 && max_v != common::PLUS_INF_64))) { @@ -189,9 +207,9 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t t->GetAttrP(i)->page_size = 1; t->GetAttrP(i)->CreateBuffer(1); } - if (limit == -1 || (offset == 0 && limit >= 1)) { // limit is -1 (off), or a positive - // number, 0 means nothing should be - // displayed. + + // limit is -1 (off), or a positive number, 0 means nothing should be displayed. + if (limit == -1 || (offset == 0 && limit >= 1)) { --limit; AggregateFillOutput(gbw, row, offset); if (sender) { @@ -206,11 +224,13 @@ void AggregationAlgorithm::Aggregate(bool just_distinct, int64_t &limit, int64_t if (limit != -1) limit = local_limit; } - t->ClearMultiIndexP(); // cleanup (i.e. regarded as materialized, - // one-dimensional) + + // cleanup (i.e. regarded as materialized, one-dimensional) + t->ClearMultiIndexP(); + + // to prevent another execution of HAVING on DISTINCT+GROUP BY if (t->HasHavingConditions()) - t->ClearHavingConditions(); // to prevent another execution of HAVING on - // DISTINCT+GROUP BY + t->ClearHavingConditions(); } void AggregationAlgorithm::MultiDimensionalGroupByScan(GroupByWrapper &gbw, int64_t &limit, int64_t &offset, @@ -218,8 +238,7 @@ void AggregationAlgorithm::MultiDimensionalGroupByScan(GroupByWrapper &gbw, int6 [[maybe_unused]] bool limit_less_than_no_groups) { MEASURE_FET("TempTable::MultiDimensionalGroupByScan(...)"); bool first_pass = true; - // tuples are numbered according to tuple_left filter (not used, if tuple_left - // is null) + // tuples are numbered according to tuple_left filter (not used, if tuple_left is null) int64_t cur_tuple = 0; int64_t displayed_no_groups = 0; @@ -280,8 +299,7 @@ void AggregationAlgorithm::MultiDimensionalGroupByScan(GroupByWrapper &gbw, int6 gbw.AddAllGroupingConstants(mit); ag_worker.Init(mit); if (rewind_needed) - mit.Rewind(); // aggregated rows will be massively omitted packrow by - // packrow + mit.Rewind(); // aggregated rows will be massively omitted packrow by packrow rewind_needed = true; for (uint i = 0; i < t->NumOfAttrs(); i++) { // left as uninitialized (nullptr or 0) if (t->GetAttrP(i)->mode == common::ColOperation::DELAYED) { @@ -303,9 +321,7 @@ void AggregationAlgorithm::MultiDimensionalGroupByScan(GroupByWrapper &gbw, int6 ag_worker.DistributeAggreTaskAverage(mit, &mem_used); } else { thread_type = "sin"; - while (mit.IsValid()) { // need muti thread - // First stage - - // some distincts may be delayed + while (mit.IsValid()) { // need muti thread First stage - some distincts may be delayed if (m_conn->Killed()) throw common::KilledException(); @@ -353,8 +369,7 @@ void AggregationAlgorithm::MultiDimensionalGroupByScan(GroupByWrapper &gbw, int6 // all other possible rows (if any) t->CalculatePageSize(upper_groups); if (upper_groups > gbw.UpperApproxOfGroups()) - upper_groups = gbw.UpperApproxOfGroups(); // another upper limitation: not more - // than theoretical number of + upper_groups = gbw.UpperApproxOfGroups(); // another upper limitation: not more than theoretical number of // combinations MIDummyIterator m(1); @@ -553,8 +568,7 @@ AggregaGroupingResult AggregationAlgorithm::AggregatePackrow(GroupByWrapper &gbw if (require_locking_gr) { for (int gr_a = 0; gr_a < gbw.NumOfGroupingAttrs(); gr_a++) - gbw.LockPackAlways(gr_a, *mit); // note: ColumnNotOmitted checked - // inside + gbw.LockPackAlways(gr_a, *mit); // note: ColumnNotOmitted checked inside require_locking_gr = false; } if (require_locking_ag) { @@ -579,11 +593,14 @@ AggregaGroupingResult AggregationAlgorithm::AggregatePackrow(GroupByWrapper &gbw return AggregaGroupingResult::AGR_FINISH; // aggregation finished } } + if (skip_packrow) gbw.packrows_omitted++; else if (part_omitted) gbw.packrows_part_omitted++; - if (packrow_done) { // This packrow will not be needed any more + + // This packrow will not be needed any more + if (packrow_done) { gbw.TuplesResetBetween(cur_tuple, cur_tuple + packrow_length - 1); } @@ -592,10 +609,6 @@ AggregaGroupingResult AggregationAlgorithm::AggregatePackrow(GroupByWrapper &gbw return AggregaGroupingResult::AGR_OK; // success - roughly omitted } - // bool require_locking_ag = true; // a new packrow, - // so locking will be needed bool require_locking_gr = (uniform_pos == - // common::NULL_VALUE_64); // do not lock if the grouping row is uniform - while (mit->IsValid()) { // becomes invalid on pack end if (m_conn->Killed()) return AggregaGroupingResult::AGR_KILLED; // killed @@ -608,9 +621,11 @@ AggregaGroupingResult AggregationAlgorithm::AggregatePackrow(GroupByWrapper &gbw int64_t pos = 0; bool existed = true; - if (uniform_pos != common::NULL_VALUE_64) // either uniform because of KNs, or = 0, - // because there is no grouping columns - pos = uniform_pos; // existed == true, as above + + // either uniform because of KNs, or = 0, because there is no grouping columns + // existed == true, as above + if (uniform_pos != common::NULL_VALUE_64) + pos = uniform_pos; else { for (int gr_a = 0; gr_a < gbw.NumOfGroupingAttrs(); gr_a++) if (gbw.ColumnNotOmitted(gr_a)) @@ -618,10 +633,12 @@ AggregaGroupingResult AggregationAlgorithm::AggregatePackrow(GroupByWrapper &gbw existed = gbw.FindCurrentRow(pos); } - if (pos != common::NULL_VALUE_64) { // Any place left? If not, just omit - // the tuple. - gbw.TuplesReset(cur_tuple); // internally delayed for optimization - // purposes - must be committed at the end + // Any place left? If not, just omit the tuple. + // internally delayed for optimization + // purposes - must be committed at the end + if (pos != common::NULL_VALUE_64) { + gbw.TuplesReset(cur_tuple); + if (!existed) { aggregations_not_changeable = false; gbw.AddGroup(); // successfully added @@ -636,20 +653,21 @@ AggregaGroupingResult AggregationAlgorithm::AggregatePackrow(GroupByWrapper &gbw if (!aggregations_not_changeable) { // Lock packs if needed if (require_locking_ag) { - for (int gr_a = gbw.NumOfGroupingAttrs(); gr_a < gbw.NumOfAttrs(); gr_a++) - gbw.LockPack(gr_a, - *mit); // note: ColumnNotOmitted checked inside + for (int gr_a = gbw.NumOfGroupingAttrs(); gr_a < gbw.NumOfAttrs(); gr_a++) { + gbw.LockPack(gr_a, *mit); // note: ColumnNotOmitted checked inside + } require_locking_ag = false; } // Prepare packs for aggregated columns - for (int gr_a = gbw.NumOfGroupingAttrs(); gr_a < gbw.NumOfAttrs(); gr_a++) + for (int gr_a = gbw.NumOfGroupingAttrs(); gr_a < gbw.NumOfAttrs(); gr_a++) { if (gbw.ColumnNotOmitted(gr_a)) { bool value_successfully_aggregated = gbw.PutAggregatedValue(gr_a, pos, *mit, factor); if (!value_successfully_aggregated) { gbw.DistinctlyOmitted(gr_a, cur_tuple); } } + } } } } @@ -884,10 +902,12 @@ void AggregationAlgorithm::ParallelFillOutputWrapper(GroupByWrapper &gbw, int64_ vgbw.push_back(gbwtmp); } + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + utils::result_set res; for (auto &gb : vgbw) { - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&AggregationAlgorithm::TaskFillOutput, this, &gb, conn, - offset, limit)); + res.insert(eng->query_thread_pool.add_task(&AggregationAlgorithm::TaskFillOutput, this, &gb, conn, offset, limit)); } res.get_all_with_except(); } @@ -1009,9 +1029,11 @@ void AggregationWorkerEnt::DistributeAggreTaskAverage(MIIterator &mit, uint64_t packnum, threads_num, loopcnt, num, mod, mit.NumOfTuples()); utils::result_set res; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (int i = 0; i < loopcnt; ++i) { - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&AggregationWorkerEnt::PrepShardingCopy, this, &mit, - gb_main, &vGBW)); + res.insert(eng->query_thread_pool.add_task(&AggregationWorkerEnt::PrepShardingCopy, this, &mit, gb_main, &vGBW)); int pack_start = i * num; int pack_end = 0; @@ -1050,6 +1072,7 @@ void AggregationWorkerEnt::DistributeAggreTaskAverage(MIIterator &mit, uint64_t for (uint i = 0; i < vTask.size(); ++i) { if (dims.NoDimsUsed() == 0) dims.SetAll(); + auto &mii = taskIterator.emplace_back(mit, true); mii.SetTaskNum(vTask.size()); mii.SetTaskId(i); @@ -1057,8 +1080,8 @@ void AggregationWorkerEnt::DistributeAggreTaskAverage(MIIterator &mit, uint64_t for (size_t i = 0; i < vTask.size(); ++i) { GroupByWrapper *gbw = i == 0 ? gb_main : vGBW[i].get(); - res1.insert(ha_tianmu_engine_->query_thread_pool.add_task( - &AggregationWorkerEnt::TaskAggrePacks, this, &taskIterator[i], &dims, &mit, &vTask[i], gbw, conn, mem_used)); + res1.insert(eng->query_thread_pool.add_task(&AggregationWorkerEnt::TaskAggrePacks, this, &taskIterator[i], &dims, + &mit, &vTask[i], gbw, conn, mem_used)); } res1.get_all_with_except(); diff --git a/storage/tianmu/core/aggregation_algorithm.h b/storage/tianmu/optimizer/aggregation_algorithm.h similarity index 97% rename from storage/tianmu/core/aggregation_algorithm.h rename to storage/tianmu/optimizer/aggregation_algorithm.h index 91c760206..b6bddd03b 100644 --- a/storage/tianmu/core/aggregation_algorithm.h +++ b/storage/tianmu/optimizer/aggregation_algorithm.h @@ -19,11 +19,11 @@ #pragma once #include -#include "core/ctask.h" -#include "core/groupby_wrapper.h" -#include "core/mi_iterator.h" #include "core/query.h" #include "core/temp_table.h" +#include "executor/ctask.h" +#include "optimizer/groupby_wrapper.h" +#include "optimizer/iterators/mi_iterator.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/aggregator.h b/storage/tianmu/optimizer/aggregator.h similarity index 99% rename from storage/tianmu/core/aggregator.h rename to storage/tianmu/optimizer/aggregator.h index 5c64a7d71..17b7dc9df 100644 --- a/storage/tianmu/core/aggregator.h +++ b/storage/tianmu/optimizer/aggregator.h @@ -18,7 +18,7 @@ #define TIANMU_CORE_AGGREGATOR_H_ #pragma once -#include "core/column.h" +#include "vc/column.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/aggregator_advanced.cpp b/storage/tianmu/optimizer/aggregator_advanced.cpp similarity index 83% rename from storage/tianmu/core/aggregator_advanced.cpp rename to storage/tianmu/optimizer/aggregator_advanced.cpp index e5a933be5..e27b29532 100644 --- a/storage/tianmu/core/aggregator_advanced.cpp +++ b/storage/tianmu/optimizer/aggregator_advanced.cpp @@ -47,8 +47,7 @@ void AggregatorStat64::PutAggregatedValue(unsigned char *buf, int64_t v, int64_t } void AggregatorStatD::PutAggregatedValue(unsigned char *buf, int64_t v, int64_t factor) { - // efficient implementation from WIKI - // http://en.wikipedia.org/wiki/Standard_deviation + // efficient implementation from WIKI http://en.wikipedia.org/wiki/Standard_deviation stats_updated = false; if (v != common::NULL_VALUE_64) { if (NumOfObj(buf) == 0) { @@ -188,40 +187,54 @@ void AggregatorGroupConcat::PutAggregatedValue(unsigned char *buf, const types:: [[maybe_unused]] int64_t factor) { stats_updated = false; - auto it = lenmap.find(buf); - if (it == lenmap.end()) { - auto copylen = (v.len_ > gconcat_maxlen) ? gconcat_maxlen : v.len_; + auto it = lenmap_.find(buf); + if (it == lenmap_.end()) { + auto copylen = (v.len_ > gconcat_maxlen_) ? gconcat_maxlen_ : v.len_; std::memcpy(buf, v.val_, copylen); - lenmap.emplace(buf, copylen); + lenmap_.emplace(buf, copylen); } else { auto pos = it->second; - if (pos == gconcat_maxlen) + if (pos == gconcat_maxlen_) return; - if (pos < gconcat_maxlen) { - std::string src = si.separator + v.ToString(); // combine the delimeter and value - auto copylen = (pos + v.len_ + si.separator.length()) >= gconcat_maxlen ? (gconcat_maxlen - pos) - : (v.len_ + si.separator.length()); + if (pos < gconcat_maxlen_) { + std::string src = si_.separator + v.ToString(); // combine the delimeter and value + auto copylen = (pos + v.len_ + si_.separator.length()) >= gconcat_maxlen_ ? (gconcat_maxlen_ - pos) + : (v.len_ + si_.separator.length()); std::memcpy(buf + pos, src.c_str(), copylen); // append the separator it->second = it->second + copylen; // update the length of the buffer } else { TIANMU_LOG(LogCtl_Level::ERROR, "Internal error for AggregatorGroupConcat: buffer length is " "%d, which beyond threshold %d.", - pos, gconcat_maxlen); + pos, gconcat_maxlen_); } } } +// puts the group concat value into group_concator. +void AggregatorGroupConcat::PutAggregatedValue([[maybe_unused]] unsigned char *buf, [[maybe_unused]] int64_t v, + [[maybe_unused]] int64_t factor) { + return; +} + +// od the merge operations. +void AggregatorGroupConcat::Merge([[maybe_unused]] unsigned char *buf, [[maybe_unused]] unsigned char *src_buf) { + return; +} + +// the the values from group concator. +int64_t AggregatorGroupConcat::GetValue64([[maybe_unused]] unsigned char *buf) { return -1; } + types::BString AggregatorGroupConcat::GetValueT(unsigned char *buf) { - auto it = lenmap.find(buf); - if (it == lenmap.end()) { + auto it = lenmap_.find(buf); + if (it == lenmap_.end()) { // cases that grouping value is nullptr return types::BString(); } - int len = (it->second < gconcat_maxlen) ? it->second : gconcat_maxlen; + int len = (it->second < gconcat_maxlen_) ? it->second : gconcat_maxlen_; // TIANMU_LOG(LogCtl_Level::INFO, "GetValueT: buf %s, buf addr %x, len %d", buf, buf, // len); if (len == 0) { @@ -229,7 +242,7 @@ types::BString AggregatorGroupConcat::GetValueT(unsigned char *buf) { return res; } - if (si.order == ORDER::ORDER_NOT_RELEVANT) // NO order by logic + if (si_.order == ORDER::ORDER_NOT_RELEVANT) // NO order by logic { char *p = (char *)buf; types::BString res(p, len); @@ -246,32 +259,33 @@ types::BString AggregatorGroupConcat::GetValueT(unsigned char *buf) { // parse and split the buf while (pos != std::string::npos && static_cast(pos) < len) { - pos = tmpstr.find(si.separator, start_pos); + pos = tmpstr.find(si_.separator, start_pos); token = tmpstr.substr(start_pos, pos - start_pos); vstr.emplace_back(token); - start_pos = pos + si.separator.length(); + start_pos = pos + si_.separator.length(); } - if (si.order == ORDER::ORDER_DESC) { - if (ATI::IsStringType(attrtype)) + if (si_.order == ORDER::ORDER_DESC) { + if (ATI::IsStringType(attrtype_)) std::sort(vstr.begin(), vstr.end(), std::greater()); else // numeric std::sort(vstr.begin(), vstr.end(), [](const auto &a, const auto &b) { return std::stold(a) > std::stold(b); }); } else { - if (ATI::IsStringType(attrtype)) + if (ATI::IsStringType(attrtype_)) std::sort(vstr.begin(), vstr.end()); else // numeric std::sort(vstr.begin(), vstr.end(), [](const auto &a, const auto &b) { return std::stold(a) < std::stold(b); }); } std::ostringstream outbuf_stream; - std::copy(vstr.begin(), vstr.end(), std::ostream_iterator(outbuf_stream, si.separator.c_str())); + std::copy(vstr.begin(), vstr.end(), std::ostream_iterator(outbuf_stream, si_.separator.c_str())); // TIANMU_LOG(LogCtl_Level::DEBUG, "buf %s, tmpbuf1 %s, pos %d, len %d \n", buf, // outbuf_stream.str().c_str(), pos, len); types::BString res(outbuf_stream.str().c_str(), len, true); return res; } + } // namespace core } // namespace Tianmu diff --git a/storage/tianmu/core/aggregator_advanced.h b/storage/tianmu/optimizer/aggregator_advanced.h similarity index 91% rename from storage/tianmu/core/aggregator_advanced.h rename to storage/tianmu/optimizer/aggregator_advanced.h index 3a1b37f34..16a3e49c4 100644 --- a/storage/tianmu/core/aggregator_advanced.h +++ b/storage/tianmu/optimizer/aggregator_advanced.h @@ -20,8 +20,8 @@ #include -#include "core/aggregator.h" #include "core/temp_table.h" +#include "optimizer/aggregator.h" #include "util/log_ctl.h" namespace Tianmu { @@ -213,34 +213,28 @@ class AggregatorGroupConcat : public TIANMUAggregator { public: using TIANMUAggregator::PutAggregatedValue; AggregatorGroupConcat() = delete; - AggregatorGroupConcat(SI si, common::ColumnType type) : si(si), attrtype(type) {} + AggregatorGroupConcat(SpecialInstruction si, common::ColumnType type) : si_(si), attrtype_(type) {} AggregatorGroupConcat(const AggregatorGroupConcat &sec) - : TIANMUAggregator(sec), si(sec.si), gconcat_maxlen(sec.gconcat_maxlen), attrtype(sec.attrtype) {} + : TIANMUAggregator(sec), si_(sec.si_), gconcat_maxlen_(sec.gconcat_maxlen_), attrtype_(sec.attrtype_) {} TIANMUAggregator *Copy() override { return new AggregatorGroupConcat(*this); } - int BufferByteSize() override { return gconcat_maxlen; } + int BufferByteSize() override { return gconcat_maxlen_; } void Reset(unsigned char *buf) override { *((int64_t *)buf) = 0; } + void PutAggregatedValue([[maybe_unused]] unsigned char *buf, [[maybe_unused]] int64_t v, - [[maybe_unused]] int64_t factor) override { - TIANMU_ERROR("Internal error: invalid call for AggregatorGroupConcat"); - return; - } - void Merge([[maybe_unused]] unsigned char *buf, [[maybe_unused]] unsigned char *src_buf) override { - TIANMU_ERROR("Internal error: invalid call for AggregatorGroupConcat"); - return; - } + [[maybe_unused]] int64_t factor) override; void PutAggregatedValue(unsigned char *buf, const types::BString &v, int64_t factor) override; - int64_t GetValue64([[maybe_unused]] unsigned char *buf) override { - TIANMU_ERROR("Internal error: invalid call for AggregatorGroupConcat"); - return -1; - } + + void Merge([[maybe_unused]] unsigned char *buf, [[maybe_unused]] unsigned char *src_buf) override; + + int64_t GetValue64([[maybe_unused]] unsigned char *buf) override; types::BString GetValueT(unsigned char *buf) override; private: - const SI si{",", ORDER::ORDER_NOT_RELEVANT}; - const uint gconcat_maxlen = tianmu_group_concat_max_len; - std::map lenmap; // store aggregation column length - common::ColumnType attrtype = common::ColumnType::STRING; + const SpecialInstruction si_{",", ORDER::ORDER_NOT_RELEVANT}; + const uint gconcat_maxlen_ = tianmu_group_concat_max_len; + std::map lenmap_; // store aggregation column length + common::ColumnType attrtype_ = common::ColumnType::STRING; }; } // namespace core } // namespace Tianmu diff --git a/storage/tianmu/core/aggregator_basic.cpp b/storage/tianmu/optimizer/aggregator_basic.cpp similarity index 98% rename from storage/tianmu/core/aggregator_basic.cpp rename to storage/tianmu/optimizer/aggregator_basic.cpp index e1747647b..6016262a6 100644 --- a/storage/tianmu/core/aggregator_basic.cpp +++ b/storage/tianmu/optimizer/aggregator_basic.cpp @@ -24,15 +24,23 @@ namespace Tianmu { namespace core { void AggregatorSum64::PutAggregatedValue(unsigned char *buf, int64_t v, int64_t factor) { + std::scoped_lock scp_lk(aggr_mtx); + stats_updated = false; int64_t *p = (int64_t *)buf; if (*p == common::NULL_VALUE_64) { *p = 0; } - double overflow_check = double(*p) + double(v) * factor; + + long double overflow_check = double(*p) + double(v) * factor; if (overflow_check > std::numeric_limits::max() || - overflow_check < std::numeric_limits::min()) - throw common::NotImplementedException("Aggregation overflow."); + overflow_check < std::numeric_limits::min()) { + char str_buff[1024] = {'\0'}; + sprintf(str_buff, "Aggregation overflow for long double. over_check: %Lf", overflow_check); + + throw common::InternalException(str_buff); + } + *p += v * factor; } diff --git a/storage/tianmu/core/aggregator_basic.h b/storage/tianmu/optimizer/aggregator_basic.h similarity index 99% rename from storage/tianmu/core/aggregator_basic.h rename to storage/tianmu/optimizer/aggregator_basic.h index d82989b52..1e5c5d80d 100644 --- a/storage/tianmu/core/aggregator_basic.h +++ b/storage/tianmu/optimizer/aggregator_basic.h @@ -18,7 +18,8 @@ #define TIANMU_CORE_AGGREGATOR_BASIC_H_ #pragma once -#include "core/aggregator.h" +#include +#include "optimizer/aggregator.h" namespace Tianmu { namespace core { @@ -87,6 +88,7 @@ class AggregatorSum64 : public TIANMUAggregator { } private: + std::mutex aggr_mtx; int64_t pack_sum; int64_t pack_min; // min and max are used to check whether a pack may update // sum (i.e. both 0 means "no change") diff --git a/storage/tianmu/core/compilation_tools.cpp b/storage/tianmu/optimizer/compile/compilation_tools.cpp similarity index 99% rename from storage/tianmu/core/compilation_tools.cpp rename to storage/tianmu/optimizer/compile/compilation_tools.cpp index b3a66949b..3923e2676 100644 --- a/storage/tianmu/core/compilation_tools.cpp +++ b/storage/tianmu/optimizer/compile/compilation_tools.cpp @@ -15,11 +15,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "compilation_tools.h" -#include "core/compiled_query.h" +#include "optimizer/compile/compilation_tools.h" #include "core/engine.h" #include "core/mysql_expression.h" #include "core/value_set.h" +#include "optimizer/compile/compiled_query.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/compilation_tools.h b/storage/tianmu/optimizer/compile/compilation_tools.h similarity index 100% rename from storage/tianmu/core/compilation_tools.h rename to storage/tianmu/optimizer/compile/compilation_tools.h diff --git a/storage/tianmu/core/compiled_query.cpp b/storage/tianmu/optimizer/compile/compiled_query.cpp similarity index 96% rename from storage/tianmu/core/compiled_query.cpp rename to storage/tianmu/optimizer/compile/compiled_query.cpp index 2757a8974..890d974d4 100644 --- a/storage/tianmu/core/compiled_query.cpp +++ b/storage/tianmu/optimizer/compile/compiled_query.cpp @@ -437,16 +437,19 @@ void CompiledQuery::TableAlias(TabID &t_out, const TabID &n, const char *name, [ steps.push_back(s); } -void CompiledQuery::TmpTable(TabID &t_out, const TabID &t1, bool for_subq_in_where) { +void CompiledQuery::TmpTable(TabID &t_out, const TabID &t1, TableSubType subtype, bool for_subq_in_where) { CompiledQuery::CQStep s; if (for_subq_in_where) s.n1 = 1; else s.n1 = 0; + DEBUG_ASSERT(t1.n < 0 && NumOfTabs() > 0); s.type = StepType::TMP_TABLE; s.t1 = t_out = NextTabID(); // was s.t2!!! s.tables1.push_back(t1); + s.n2 = static_cast::type>(subtype); + steps_tmp_tables.push_back(s); steps.push_back(s); } @@ -604,7 +607,7 @@ void CompiledQuery::ApplyConds(const TabID &t1) { } void CompiledQuery::AddColumn(AttrID &a_out, const TabID &t1, CQTerm e1, common::ColOperation op, char const alias[], - bool distinct, SI *si) { + bool distinct, SpecialInstruction *si) { DEBUG_ASSERT(t1.n < 0 && NumOfTabs() > 0); CompiledQuery::CQStep s; s.type = StepType::ADD_COLUMN; @@ -614,14 +617,17 @@ void CompiledQuery::AddColumn(AttrID &a_out, const TabID &t1, CQTerm e1, common: s.cop = op; if (op == common::ColOperation::GROUP_CONCAT && si != nullptr) s.si = *si; + if (alias) { size_t const alias_ct(std::strlen(alias) + 1); s.alias = new char[alias_ct]; std::strcpy(s.alias, alias); } else s.alias = nullptr; + s.n1 = distinct ? 1 : 0; steps.push_back(s); + if (op == common::ColOperation::GROUP_BY) steps_group_by_cols.push_back(s); } diff --git a/storage/tianmu/core/compiled_query.h b/storage/tianmu/optimizer/compile/compiled_query.h similarity index 97% rename from storage/tianmu/core/compiled_query.h rename to storage/tianmu/optimizer/compile/compiled_query.h index 03e8ce992..c19abb144 100644 --- a/storage/tianmu/core/compiled_query.h +++ b/storage/tianmu/optimizer/compile/compiled_query.h @@ -21,9 +21,9 @@ #include #include "common/common_definitions.h" -#include "core/cq_term.h" #include "core/just_a_table.h" #include "core/temp_table.h" +#include "optimizer/compile/cq_term.h" namespace Tianmu { namespace core { @@ -77,9 +77,8 @@ class CompiledQuery final { std::vector virt_cols; std::vector tables1; std::vector tables2; - int64_t n1, n2; // additional parameter (e.g. descending order, TOP n, - // LIMIT n1..n2) - SI si; + int64_t n1, n2; // additional parameter (e.g. descending order, TOP n, LIMIT n1..n2) + SpecialInstruction si; CQStep() : type(StepType::TABLE_ALIAS), @@ -132,7 +131,7 @@ class CompiledQuery final { // Add a new step to the execution plan void TableAlias(TabID &t_out, const TabID &n, const char *tab_name = nullptr, int id = -1); - void TmpTable(TabID &t_out, const TabID &t1, bool for_subq = false); + void TmpTable(TabID &t_out, const TabID &t1, TableSubType subtype, bool for_subq = false); void CreateConds(CondID &c_out, const TabID &t1, CQTerm e1, common::Operator pr, CQTerm e2, CQTerm e3 = CQTerm(), bool is_or_subtree = false, char like_esc = '\\', bool can_cond_push = false); void CreateConds(CondID &c_out, const TabID &t1, const CondID &c1, bool is_or_subtree = false, @@ -151,7 +150,7 @@ class CompiledQuery final { void AddConds(const TabID &t1, const CondID &c1, CondType cond_type); void ApplyConds(const TabID &t1); void AddColumn(AttrID &a_out, const TabID &t1, CQTerm e1, common::ColOperation op, char const alias[] = 0, - bool distinct = false, SI *si = nullptr); + bool distinct = false, SpecialInstruction *si = nullptr); /*! \brief Create compilation step CREATE_VC for mysql expression * \param a_out - id of created virtual column diff --git a/storage/tianmu/optimizer/compile/compiler.cpp b/storage/tianmu/optimizer/compile/compiler.cpp new file mode 100644 index 000000000..54e2a9c1d --- /dev/null +++ b/storage/tianmu/optimizer/compile/compiler.cpp @@ -0,0 +1,35 @@ +/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +#include "optimizer/compile/compiler.h" + +namespace Tianmu { +namespace Optimizer { + +template +std::mutex CompilerF::mutex_; + +QueryPlan *Tianmu_compiler::Optimize(THD *thd, LEX *lex, Query_result *&result) { + QueryPlan *root = new QueryPlan(QueryPlanType::NONE, nullptr); + + return root; +} + +void Tianmu_compiler::Prepare(THD *thd, LEX *lex) {} + +} // namespace Optimizer +} // namespace Tianmu diff --git a/storage/tianmu/optimizer/compile/compiler.h b/storage/tianmu/optimizer/compile/compiler.h new file mode 100644 index 000000000..5bfb6886b --- /dev/null +++ b/storage/tianmu/optimizer/compile/compiler.h @@ -0,0 +1,73 @@ +/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. + Use is subject to license terms + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +/** + which is used as a compiler factory to gen a compiler and to compile the query into + quer plan. +*/ +#ifndef __OPTIMIZER_COMPILER_H__ +#define __OPTIMIZER_COMPILER_H__ + +#include "core/item_tianmu_field.h" +#include "core/mysql_expression.h" +#include "optimizer/joiner.h" +#include "optimizer/plan/query_plan.h" +#include "sql/ha_my_tianmu.h" +#include "vc/column_type.h" + +namespace Tianmu { +namespace Optimizer { + +#include + +template +class CompilerF { + public: + static CompilerT &instance() { + static CompilerT instance_; + return instance_; + } + + private: + CompilerF() = default; + CompilerF(const CompilerF &) = delete; + CompilerF &operator=(const CompilerF &) = delete; + ~CompilerF() = default; + + static std::mutex mutex_; +}; + +class Compiler {}; + +class Tianmu_compiler : public Compiler { + public: + Tianmu_compiler() {} + ~Tianmu_compiler() {} + + QueryPlan *Optimize(THD *thd, LEX *lex, Query_result *&result); + + private: + // Do some basic checks and logical trnasformation on Lex tree, which is permanent. + void Prepare(THD *thd, LEX *lex); + + // IN 8.0, will use `Query_block`. + SELECT_LEX *query_stmt_; +}; + +} // namespace Optimizer +} // namespace Tianmu +#endif diff --git a/storage/tianmu/core/cq_term.cpp b/storage/tianmu/optimizer/compile/cq_term.cpp similarity index 97% rename from storage/tianmu/core/cq_term.cpp rename to storage/tianmu/optimizer/compile/cq_term.cpp index a70ae7c4c..7349a1970 100644 --- a/storage/tianmu/core/cq_term.cpp +++ b/storage/tianmu/optimizer/compile/cq_term.cpp @@ -16,12 +16,12 @@ */ #include "common/common_definitions.h" -#include "core/bin_tools.h" -#include "core/query_operator.h" -#include "core/tianmu_attr.h" #include "core/value_set.h" +#include "executor/query_operator.h" #include "system/txt_utils.h" #include "types/value_parser4txt.h" +#include "util/bin_tools.h" +#include "vc/tianmu_attr.h" #include "vc/virtual_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/cq_term.h b/storage/tianmu/optimizer/compile/cq_term.h similarity index 100% rename from storage/tianmu/core/cq_term.h rename to storage/tianmu/optimizer/compile/cq_term.h diff --git a/storage/tianmu/core/descriptor.cpp b/storage/tianmu/optimizer/compile/descriptor.cpp similarity index 99% rename from storage/tianmu/core/descriptor.cpp rename to storage/tianmu/optimizer/compile/descriptor.cpp index dcf777d26..8b13a3007 100644 --- a/storage/tianmu/core/descriptor.cpp +++ b/storage/tianmu/optimizer/compile/descriptor.cpp @@ -17,13 +17,13 @@ #include "descriptor.h" -#include "core/compiled_query.h" -#include "core/condition_encoder.h" #include "core/parameterized_filter.h" #include "core/query.h" -#include "core/query_operator.h" #include "core/rough_value.h" #include "core/transaction.h" +#include "executor/query_operator.h" +#include "optimizer/compile/compiled_query.h" +#include "optimizer/condition_encoder.h" #include "vc/const_column.h" #include "vc/const_expr_column.h" #include "vc/expr_column.h" @@ -1909,12 +1909,16 @@ bool Descriptor::ExsitTmpTable() const { bool Descriptor::IsleftIndexSearch() const { if (!tianmu_sysvar_index_search || IsType_OrTree() || IsType_Between()) return false; + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + if (IsType_AttrValOrAttrValVal() && encoded) { auto col = static_cast(attr.vc); if (table && table->NumOfTables() == 1 && table->GetTableP(0)->TableType() == TType::TABLE && col->GetPhysical()->ColType() == PhysicalColumn::phys_col_t::kTianmuAttr) { auto path = (static_cast(table->GetTableP(0))->Path()); - auto indextab = ha_tianmu_engine_->GetTableIndex(path.replace_extension().string()); + auto indextab = eng->GetTableIndex(path.replace_extension().string()); uint32_t colid = static_cast(col->GetPhysical())->ColId(); if (indextab) { diff --git a/storage/tianmu/core/descriptor.h b/storage/tianmu/optimizer/compile/descriptor.h similarity index 97% rename from storage/tianmu/core/descriptor.h rename to storage/tianmu/optimizer/compile/descriptor.h index a8d73f217..ebde6a8a2 100644 --- a/storage/tianmu/core/descriptor.h +++ b/storage/tianmu/optimizer/compile/descriptor.h @@ -22,8 +22,8 @@ #include #include "common/common_definitions.h" -#include "core/cq_term.h" #include "core/dimension_group.h" +#include "optimizer/compile/cq_term.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/condition.cpp b/storage/tianmu/optimizer/condition.cpp similarity index 100% rename from storage/tianmu/core/condition.cpp rename to storage/tianmu/optimizer/condition.cpp diff --git a/storage/tianmu/core/condition.h b/storage/tianmu/optimizer/condition.h similarity index 94% rename from storage/tianmu/core/condition.h rename to storage/tianmu/optimizer/condition.h index 2465070b2..198de8092 100644 --- a/storage/tianmu/core/condition.h +++ b/storage/tianmu/optimizer/condition.h @@ -20,8 +20,8 @@ #include -#include "core/cq_term.h" -#include "core/descriptor.h" +#include "optimizer/compile/cq_term.h" +#include "optimizer/compile/descriptor.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/condition_encoder.cpp b/storage/tianmu/optimizer/condition_encoder.cpp similarity index 95% rename from storage/tianmu/core/condition_encoder.cpp rename to storage/tianmu/optimizer/condition_encoder.cpp index 04327c423..740467ef3 100644 --- a/storage/tianmu/core/condition_encoder.cpp +++ b/storage/tianmu/optimizer/condition_encoder.cpp @@ -16,18 +16,18 @@ */ #include "condition_encoder.h" -#include "core/cq_term.h" -#include "core/descriptor.h" #include "core/just_a_table.h" #include "core/query.h" -#include "core/tianmu_attr.h" #include "core/tianmu_table.h" #include "core/value_set.h" +#include "optimizer/compile/cq_term.h" +#include "optimizer/compile/descriptor.h" #include "vc/const_column.h" #include "vc/expr_column.h" #include "vc/in_set_column.h" #include "vc/single_column.h" #include "vc/subselect_column.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace core { @@ -238,6 +238,15 @@ void ConditionEncoder::TransformOtherThanINsOnNumerics() { bool v1_rounded = false, v2_rounded = false; static MIIterator mit(nullptr, pack_power); + // Will be used to construct value with signed/unsigned flag to valur_or_null later. + bool is_v1_unsigned = false, is_v2_unsigned = false; + if (nullptr != desc->val1.vc) { + is_v1_unsigned = desc->val1.vc->Type().GetUnsigned(); + } + if (nullptr != desc->val2.vc) { + is_v2_unsigned = desc->val2.vc->Type().GetUnsigned(); + } + vcolumn::MultiValColumn *mvc = 0; if (desc->val1.vc && (desc->val1.vc)->IsMultival()) { mvc = static_cast(desc->val1.vc); @@ -321,14 +330,20 @@ void ConditionEncoder::TransformOtherThanINsOnNumerics() { return; } - if (ISTypeOfEqualOperator(desc->op) || ISTypeOfNotEqualOperator(desc->op)) + if (ISTypeOfEqualOperator(desc->op) || ISTypeOfNotEqualOperator(desc->op)) { v2 = v1; + is_v2_unsigned = is_v1_unsigned; + } if (ISTypeOfLessOperator(desc->op)) { if (!ATI::IsRealType(AttrTypeName())) { if (v1 > common::MINUS_INF_64) v2 = v1 - 1; v1 = common::MINUS_INF_64; + if (is_v1_unsigned && static_cast(v1) > common::PLUS_INF_64) { // like where a >= 18446744073709551599; + is_v2_unsigned = true; + is_v1_unsigned = false; // as v1 = common::MINUS_INF_64 + } } else { if (*(double *)&v1 > common::MINUS_INF_DBL) v2 = (AttrTypeName() == common::ColumnType::REAL) ? DoubleMinusEpsilon(v1) : FloatMinusEpsilon(v1); @@ -350,9 +365,11 @@ void ConditionEncoder::TransformOtherThanINsOnNumerics() { if (ISTypeOfLessEqualOperator(desc->op)) { v2 = v1; - if (!ATI::IsRealType(AttrTypeName())) + is_v2_unsigned = is_v1_unsigned; // set v2 unsigned flag be the same with v1 + if (!ATI::IsRealType(AttrTypeName())) { v1 = common::MINUS_INF_64; - else + is_v1_unsigned = false; // v1 unsigned flag maybe true in case: where x <= 18446744073709551599. + } else v1 = *(int64_t *)&common::MINUS_INF_DBL; } @@ -364,20 +381,29 @@ void ConditionEncoder::TransformOtherThanINsOnNumerics() { } desc->sharp = false; - if (ISTypeOfNotEqualOperator(desc->op) || desc->op == common::Operator::O_NOT_BETWEEN) + if (ISTypeOfNotEqualOperator(desc->op) || desc->op == common::Operator::O_NOT_BETWEEN) { desc->op = common::Operator::O_NOT_BETWEEN; - else + } else { desc->op = common::Operator::O_BETWEEN; + //// After set between, check right args boundary, just like v1 above. deal with "where a between -22 and + /// 18446744073709551599" + if (is_v2_unsigned && static_cast(v2) > common::PLUS_INF_64) { + is_v2_unsigned = false; + v2 = common::PLUS_INF_64; + } + } desc->val1 = CQTerm(); desc->val1.vc = new vcolumn::ConstColumn( - ValueOrNull(types::TianmuNum(v1, attr->Type().GetScale(), ATI::IsRealType(AttrTypeName()), AttrTypeName())), + ValueOrNull(types::TianmuNum(v1, attr->Type().GetScale(), ATI::IsRealType(AttrTypeName()), AttrTypeName(), + is_v1_unsigned)), attr->Type()); desc->val1.vc_id = desc->table->AddVirtColumn(desc->val1.vc); desc->val2 = CQTerm(); desc->val2.vc = new vcolumn::ConstColumn( - ValueOrNull(types::TianmuNum(v2, attr->Type().GetScale(), ATI::IsRealType(AttrTypeName()), AttrTypeName())), + ValueOrNull(types::TianmuNum(v2, attr->Type().GetScale(), ATI::IsRealType(AttrTypeName()), AttrTypeName(), + is_v2_unsigned)), attr->Type()); desc->val2.vc_id = desc->table->AddVirtColumn(desc->val2.vc); } diff --git a/storage/tianmu/core/condition_encoder.h b/storage/tianmu/optimizer/condition_encoder.h similarity index 97% rename from storage/tianmu/core/condition_encoder.h rename to storage/tianmu/optimizer/condition_encoder.h index 0f64dd428..26546d023 100644 --- a/storage/tianmu/core/condition_encoder.h +++ b/storage/tianmu/optimizer/condition_encoder.h @@ -19,8 +19,8 @@ #pragma once #include "common/common_definitions.h" -#include "core/column_type.h" -#include "core/tianmu_attr.h" +#include "vc/column_type.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { diff --git a/storage/tianmu/core/group_distinct_cache.cpp b/storage/tianmu/optimizer/group_distinct_cache.cpp similarity index 100% rename from storage/tianmu/core/group_distinct_cache.cpp rename to storage/tianmu/optimizer/group_distinct_cache.cpp diff --git a/storage/tianmu/core/group_distinct_cache.h b/storage/tianmu/optimizer/group_distinct_cache.h similarity index 100% rename from storage/tianmu/core/group_distinct_cache.h rename to storage/tianmu/optimizer/group_distinct_cache.h diff --git a/storage/tianmu/core/group_distinct_table.cpp b/storage/tianmu/optimizer/group_distinct_table.cpp similarity index 99% rename from storage/tianmu/core/group_distinct_table.cpp rename to storage/tianmu/optimizer/group_distinct_table.cpp index c9baea2df..dc88ab196 100644 --- a/storage/tianmu/core/group_distinct_table.cpp +++ b/storage/tianmu/optimizer/group_distinct_table.cpp @@ -17,9 +17,9 @@ #include "group_distinct_table.h" -#include "core/mi_iterator.h" #include "core/transaction.h" #include "core/value_matching_hashtable.h" +#include "optimizer/iterators/mi_iterator.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/group_distinct_table.h b/storage/tianmu/optimizer/group_distinct_table.h similarity index 98% rename from storage/tianmu/core/group_distinct_table.h rename to storage/tianmu/optimizer/group_distinct_table.h index cb9d67c56..5a7ea9c95 100644 --- a/storage/tianmu/core/group_distinct_table.h +++ b/storage/tianmu/optimizer/group_distinct_table.h @@ -18,11 +18,11 @@ #define TIANMU_CORE_GROUP_DISTINCT_TABLE_H_ #pragma once -#include "core/bin_tools.h" #include "core/blocked_mem_table.h" -#include "core/column_bin_encoder.h" -#include "core/filter.h" #include "core/value_matching_table.h" +#include "executor/filter.h" +#include "util/bin_tools.h" +#include "vc/column_bin_encoder.h" #include "vc/virtual_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/group_table.cpp b/storage/tianmu/optimizer/group_table.cpp similarity index 99% rename from storage/tianmu/core/group_table.cpp rename to storage/tianmu/optimizer/group_table.cpp index 9248d90a8..3b0d32ce0 100644 --- a/storage/tianmu/core/group_table.cpp +++ b/storage/tianmu/optimizer/group_table.cpp @@ -18,10 +18,10 @@ #include "group_table.h" -#include "core/group_distinct_table.h" -#include "core/mi_iterator.h" #include "core/transaction.h" #include "core/value_matching_table.h" +#include "optimizer/group_distinct_table.h" +#include "optimizer/iterators/mi_iterator.h" #include "system/fet.h" namespace Tianmu { @@ -109,7 +109,7 @@ void GroupTable::AddGroupingColumn(vcolumn::VirtualColumn *vc) { void GroupTable::AddAggregatedColumn(vcolumn::VirtualColumn *vc, GT_Aggregation operation, bool distinct, common::ColumnType type, int size, int precision, DTCollation in_collation, - SI si) { + SpecialInstruction si) { GroupTable::ColTempDesc desc; desc.type = type; // put defaults first, then check in Initialize() what will // be actual result definition @@ -134,6 +134,7 @@ void GroupTable::AddAggregatedColumn(vcolumn::VirtualColumn *vc, GT_Aggregation default: size = 8; } + desc.vc = vc; desc.size = size; desc.precision = precision; @@ -448,9 +449,11 @@ void GroupTable::Merge(GroupTable &sec, Transaction *m_conn) { while (sec.vm_tab->RowValid()) { if (m_conn->Killed()) throw common::KilledException(); + sec_row = sec.vm_tab->GetCurrentRow(); if (grouping_and_UTF_width > 0) std::memcpy(input_buffer.data(), sec.vm_tab->GetGroupingRow(sec_row), grouping_and_UTF_width); + FindCurrentRow(row); // find the value on another position or add as a new one if (row != common::NULL_VALUE_64) { DEBUG_ASSERT(row != common::NULL_VALUE_64); @@ -566,9 +569,11 @@ bool GroupTable::PutAggregatedValue(int col, int64_t row, MIIterator &mit, int64 DEBUG_ASSERT(gdistinct[col]); if (vc[col]->IsNull(mit)) return true; // omit nulls + GDTResult res = gdistinct[col]->Add(row, mit); if (res == GDTResult::GDT_EXISTS) return true; // value found, do not aggregate it again + if (res == GDTResult::GDT_FULL) { // if (gdistinct[col]->AlreadyFull()) // not_full = false; // disable also the main grouping table (if it is a @@ -578,19 +583,21 @@ bool GroupTable::PutAggregatedValue(int col, int64_t row, MIIterator &mit, int64 } factor = 1; // ignore repetitions for distinct } + TIANMUAggregator *cur_aggr = aggregator[col]; if (factor == common::NULL_VALUE_64 && cur_aggr->FactorNeeded()) throw common::NotImplementedException("Aggregation overflow."); + if (as_string) { types::BString v; vc[col]->GetValueString(v, mit); cur_aggr->PutAggregatedValue(vm_tab->GetAggregationRow(row) + aggregated_col_offset[col], v, factor); } else { - // note: it is too costly to check nulls separately (e.g. for complex - // expressions) + // note: it is too costly to check nulls separately (e.g. for complex expressions) int64_t v = vc[col]->GetValueInt64(mit); if (v == common::NULL_VALUE_64 && cur_aggr->IgnoreNulls()) return true; + cur_aggr->PutAggregatedValue(vm_tab->GetAggregationRow(row) + aggregated_col_offset[col], v, factor); } return true; @@ -619,12 +626,12 @@ bool GroupTable::PutCachedValue(int col, GroupDistinctCache &cache, return true; // value found, do not aggregate it again if (res == GDTResult::GDT_FULL) { if (gdistinct[col]->AlreadyFull()) - not_full = false; // disable also the main grouping table (if it is a - // persistent rejection) + not_full = false; // disable also the main grouping table (if it is a persistent rejection) return false; // value not found in DISTINCT buffer, which is already full } int64_t row = gdistinct[col]->GroupNoFromInput(); // restore group number unsigned char *p = vm_tab->GetAggregationRow(row) + aggregated_col_offset[col]; + if (operation[col] == GT_Aggregation::GT_COUNT_NOT_NULL) aggregator[col]->PutAggregatedValue(p, 1); // factor = 1, because we are just after distinct else { @@ -635,6 +642,7 @@ bool GroupTable::PutCachedValue(int col, GroupDistinctCache &cache, } else { v = vc[col]->DecodeValue_S(gdistinct[col]->ValueFromInput()); } + aggregator[col]->PutAggregatedValue(p, v, 1); } else { int64_t v = gdistinct[col]->ValueFromInput(); @@ -649,6 +657,7 @@ void GroupTable::UpdateAttrStats(int col) // update the current statistics for MEASURE_FET("GroupTable::UpdateAttrStats(...)"); if (!aggregator[col]->StatisticsNeedsUpdate()) return; + bool stop_updating = false; aggregator[col]->ResetStatistics(); vm_tab->Rewind(); @@ -663,12 +672,13 @@ void GroupTable::UpdateAttrStats(int col) // update the current statistics for bool GroupTable::AttrMayBeUpdatedByPack(int col, MIIterator &mit) // get the current statistics for a column { if (vc[col]->Type().IsFloat() || vc[col]->Type().IsString()) - return true; // min/max not calculated properly for these types, see Mojo - // 782681 + return true; // min/max not calculated properly for these types, see Mojo 782681 + int64_t local_min = vc[col]->GetMinInt64(mit); int64_t local_max = vc[col]->GetMaxInt64(mit); if (encoder[col]->ImpossibleValues(local_min, local_max)) return false; + return true; } @@ -677,5 +687,6 @@ void GroupTable::InvalidateAggregationStatistics() { aggregator[i]->ResetStatistics(); } } + } // namespace core } // namespace Tianmu diff --git a/storage/tianmu/core/group_table.h b/storage/tianmu/optimizer/group_table.h similarity index 96% rename from storage/tianmu/core/group_table.h rename to storage/tianmu/optimizer/group_table.h index a39a07544..c101c8317 100644 --- a/storage/tianmu/core/group_table.h +++ b/storage/tianmu/optimizer/group_table.h @@ -18,15 +18,15 @@ #define TIANMU_CORE_GROUP_TABLE_H_ #pragma once -#include "core/aggregator_advanced.h" -#include "core/aggregator_basic.h" -#include "core/bin_tools.h" -#include "core/column_bin_encoder.h" -#include "core/filter.h" -#include "core/group_distinct_cache.h" -#include "core/group_distinct_table.h" #include "core/temp_table.h" #include "core/value_matching_table.h" +#include "executor/filter.h" +#include "optimizer/aggregator_advanced.h" +#include "optimizer/aggregator_basic.h" +#include "optimizer/group_distinct_cache.h" +#include "optimizer/group_distinct_table.h" +#include "util/bin_tools.h" +#include "vc/column_bin_encoder.h" namespace Tianmu { namespace core { @@ -61,7 +61,7 @@ class GroupTable : public mm::TraceableObject { void AddGroupingColumn(vcolumn::VirtualColumn *vc); void AddAggregatedColumn(vcolumn::VirtualColumn *vc, GT_Aggregation operation, bool distinct, common::ColumnType type, - int b_size, int precision, DTCollation in_collation, SI si); + int b_size, int precision, DTCollation in_collation, SpecialInstruction si); void AggregatedColumnStatistics(int ag_col, int64_t max_no_vals, int64_t min_v = common::MINUS_INF_64, int64_t max_v = common::PLUS_INF_64) { aggregated_desc[ag_col].max_no_values = max_no_vals; @@ -206,7 +206,7 @@ class GroupTable : public mm::TraceableObject { int64_t max_no_values; // upper approximation of a number of distinct // values (without null), 0 - don't know DTCollation collation; - SI si; + SpecialInstruction si; }; std::vector grouping_desc; // input fields description std::vector aggregated_desc; diff --git a/storage/tianmu/core/groupby_wrapper.cpp b/storage/tianmu/optimizer/groupby_wrapper.cpp similarity index 99% rename from storage/tianmu/core/groupby_wrapper.cpp rename to storage/tianmu/optimizer/groupby_wrapper.cpp index 241818764..b0cf4d11c 100644 --- a/storage/tianmu/core/groupby_wrapper.cpp +++ b/storage/tianmu/optimizer/groupby_wrapper.cpp @@ -17,7 +17,7 @@ #include "groupby_wrapper.h" -#include "core/tianmu_attr.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace core { @@ -271,6 +271,7 @@ void GroupByWrapper::Merge(GroupByWrapper &sec) { gt.Merge(sec.gt, m_conn); if (tuple_left) tuple_left->And(*(sec.tuple_left)); + packrows_omitted += sec.packrows_omitted; packrows_part_omitted += sec.packrows_part_omitted; diff --git a/storage/tianmu/core/groupby_wrapper.h b/storage/tianmu/optimizer/groupby_wrapper.h similarity index 90% rename from storage/tianmu/core/groupby_wrapper.h rename to storage/tianmu/optimizer/groupby_wrapper.h index 3bf5c5c0b..976f450da 100644 --- a/storage/tianmu/core/groupby_wrapper.h +++ b/storage/tianmu/optimizer/groupby_wrapper.h @@ -18,12 +18,12 @@ #define TIANMU_CORE_GROUPBY_WRAPPER_H_ #pragma once -#include "core/group_distinct_cache.h" -#include "core/group_table.h" -#include "core/pack_guardian.h" #include "core/temp_table.h" -#include "core/tools.h" +#include "data/pack_guardian.h" +#include "optimizer/group_distinct_cache.h" +#include "optimizer/group_table.h" #include "system/tianmu_system.h" +#include "util/tools.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -62,6 +62,7 @@ class GroupByWrapper final { GroupByWrapper(const GroupByWrapper &sec); GroupByWrapper &operator=(const GroupByWrapper &) = delete; ~GroupByWrapper(); + void Initialize(int64_t upper_approx_of_groups, bool parallel_allowed = true); void AddGroupingColumn(int attr_no, int orig_no, TempTable::Attr &a); void AddAggregatedColumn(int orig_no, TempTable::Attr &a, int64_t max_no_vals = 0, @@ -73,24 +74,26 @@ class GroupByWrapper final { void AddAllAggregatedConstants(MIIterator &mit); // set buffers for all constants in aggregations void AddAllCountStar(int64_t row, MIIterator &mit, int64_t val); // set all count(*) values to val, or to 0 in case of nulls + bool AggregatePackInOneGroup(int attr_no, MIIterator &mit, int64_t uniform_pos, int64_t rows_in_pack, int64_t factor); bool AttrMayBeUpdatedByPack(int i, MIIterator &mit); bool PackWillNotUpdateAggregation(int i, MIIterator &mit); // ...because min/max worse than already found bool DataWillNotUpdateAggregation(int i); // as above, for the whole dataset void InvalidateAggregationStatistics() { gt.InvalidateAggregationStatistics(); } void DefineAsEquivalent(int i, int j) { attr_mapping[i] = attr_mapping[j]; } + void PutGroupingValue(int gr_a, MIIterator &mit) { gt.PutGroupingValue(gr_a, mit); } bool PutAggregatedNull(int gr_a, int64_t pos); bool PutAggregatedValue(int gr_a, int64_t pos, MIIterator &mit, int64_t factor = 1); - // return value: true if value checked in, false if not (DISTINCT buffer - // overflow) functionalities around DISTINCT + // return value: true if value checked in, false if not (DISTINCT buffer overflow) functionalities around DISTINCT bool PutAggregatedValueForCount(int gr_a, int64_t pos, - int64_t factor); // a simplified version for counting only - bool PutAggregatedValueForMinMax(int gr_a, int64_t pos, - int64_t factor); // a simplified version for MIN or MAX - bool PutCachedValue(int gr_a); // current value from distinct cache - bool CacheValid(int gr_a); // true if there is a value cached for current row - void UpdateDistinctCaches(); // take into account which values are already counted + int64_t factor); // a simplified version for counting only + bool PutAggregatedValueForMinMax(int gr_a, int64_t pos, int64_t factor); // a simplified version for MIN or MAX + + bool PutCachedValue(int gr_a); // current value from distinct cache + + bool CacheValid(int gr_a); // true if there is a value cached for current row + void UpdateDistinctCaches(); // take into account which values are already counted void OmitInCache(int attr, int64_t obj_to_omit); void DistinctlyOmitted(int attr, int64_t obj); bool AnyOmittedByDistinct() { return distinct_watch.AnyOmitted(); } @@ -98,16 +101,17 @@ class GroupByWrapper final { int NumOfAttrs() { return no_attr; } int NumOfGroupingAttrs() { return no_grouping_attr; } + bool DistinctAggr(int col) { return gt.AttrDistinct(col); } - void Initialize(int64_t upper_approx_of_groups, bool parallel_allowed = true); int64_t NumOfGroups() { return no_groups; } void AddGroup() { no_groups++; } void ClearNoGroups() { no_groups = 0; } int64_t UpperApproxOfGroups() { return gt.UpperApproxOfGroups(); } - // a position in the current GroupTable, row==common::NULL_VALUE_64 if not - // found + + // a position in the current GroupTable, row==common::NULL_VALUE_64 if not found bool FindCurrentRow(int64_t &row) { return gt.FindCurrentRow(row); } int64_t GetValue64(int col, int64_t row) { return gt.GetValue64(col, row); } + // iteration through resulting rows void RewindRows() { gt.RewindRows(); } int64_t GetCurrentRow() { return gt.GetCurrentRow(); } @@ -120,16 +124,20 @@ class GroupByWrapper final { void Clear(); // reset all contents of the grouping table and statistics void ClearUsed() { gt.ClearUsed(); } - void ClearDistinctBuffers(); // reset distinct buffers and distinct cache - void RewindDistinctBuffers(); // reset distinct buffers, rewind distinct - // cache to use it contents + void ClearDistinctBuffers(); // reset distinct buffers and distinct cache + + void RewindDistinctBuffers(); // reset distinct buffers, rewind distinct cache to use it contents + void SetDistinctTuples(int64_t no_tuples) { distinct_watch.InitTuples(no_tuples, gt); } - bool IsFull() { return gt.IsFull(); } void SetAsFull() { gt.SetAsFull(); } - bool IsAllGroupsFound() { return no_more_groups; } void SetAllGroupsFound() { no_more_groups = true; } + + bool IsFull() { return gt.IsFull(); } + bool IsAllGroupsFound() { return no_more_groups; } void FillDimsUsed(DimensionVector &dims); // set true on all dimensions used + int AttrMapping(int a) { return attr_mapping[a]; } + bool IsCountOnly(int a = -1); // true, if an attribute is count(*)/count(const), or if // there is no columns except constants and count (when no // attr specified) @@ -139,6 +147,7 @@ class GroupByWrapper final { return no_grouping_attr == 0 && no_aggregated_attr == 1 && gt.AttrOper(0) == GT_Aggregation::GT_COUNT_NOT_NULL && gt.AttrDistinct(0); } + bool MayBeParallel() const; bool IsOnePass() { return gt.IsOnePass(); } int MemoryBlocksLeft() { return gt.MemoryBlocksLeft(); } // no place left for more packs (soft limit) diff --git a/storage/tianmu/core/mi_iterator.cpp b/storage/tianmu/optimizer/iterators/mi_iterator.cpp similarity index 99% rename from storage/tianmu/core/mi_iterator.cpp rename to storage/tianmu/optimizer/iterators/mi_iterator.cpp index b5fe3a7dd..f630159e6 100644 --- a/storage/tianmu/core/mi_iterator.cpp +++ b/storage/tianmu/optimizer/iterators/mi_iterator.cpp @@ -17,7 +17,7 @@ #include "mi_iterator.h" -#include "core/pack_orderer.h" +#include "data/pack_orderer.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/mi_iterator.h b/storage/tianmu/optimizer/iterators/mi_iterator.h similarity index 99% rename from storage/tianmu/core/mi_iterator.h rename to storage/tianmu/optimizer/iterators/mi_iterator.h index 28fbff95b..688a67d87 100644 --- a/storage/tianmu/core/mi_iterator.h +++ b/storage/tianmu/optimizer/iterators/mi_iterator.h @@ -18,7 +18,7 @@ #define TIANMU_CORE_MI_ITERATOR_H_ #pragma once -#include "core/multi_index.h" +#include "index/multi_index.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/mi_step_iterator.cpp b/storage/tianmu/optimizer/iterators/mi_step_iterator.cpp similarity index 100% rename from storage/tianmu/core/mi_step_iterator.cpp rename to storage/tianmu/optimizer/iterators/mi_step_iterator.cpp diff --git a/storage/tianmu/core/mi_step_iterator.h b/storage/tianmu/optimizer/iterators/mi_step_iterator.h similarity index 94% rename from storage/tianmu/core/mi_step_iterator.h rename to storage/tianmu/optimizer/iterators/mi_step_iterator.h index 68594bc91..a5ff1aa72 100644 --- a/storage/tianmu/core/mi_step_iterator.h +++ b/storage/tianmu/optimizer/iterators/mi_step_iterator.h @@ -18,7 +18,7 @@ #define TIANMU_CORE_MI_STEP_ITERATOR_H_ #pragma once -#include "core/mi_iterator.h" +#include "optimizer/iterators/mi_iterator.h" namespace Tianmu { namespace core { @@ -54,4 +54,4 @@ class MIRowsStepIterator : public MIIterator { } // namespace core } // namespace Tianmu -#endif // TIANMU_CORE_MI_STEP_ITERATOR_H_ \ No newline at end of file +#endif // TIANMU_CORE_MI_STEP_ITERATOR_H_ diff --git a/storage/tianmu/core/mi_updating_iterator.cpp b/storage/tianmu/optimizer/iterators/mi_updating_iterator.cpp similarity index 100% rename from storage/tianmu/core/mi_updating_iterator.cpp rename to storage/tianmu/optimizer/iterators/mi_updating_iterator.cpp diff --git a/storage/tianmu/core/mi_updating_iterator.h b/storage/tianmu/optimizer/iterators/mi_updating_iterator.h similarity index 99% rename from storage/tianmu/core/mi_updating_iterator.h rename to storage/tianmu/optimizer/iterators/mi_updating_iterator.h index 148ac3735..23fda8cf5 100644 --- a/storage/tianmu/core/mi_updating_iterator.h +++ b/storage/tianmu/optimizer/iterators/mi_updating_iterator.h @@ -18,7 +18,7 @@ #define TIANMU_CORE_MI_UPDATING_ITERATOR_H_ #pragma once -#include "core/mi_iterator.h" +#include "optimizer/iterators/mi_iterator.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/joiner.cpp b/storage/tianmu/optimizer/joiner.cpp similarity index 94% rename from storage/tianmu/core/joiner.cpp rename to storage/tianmu/optimizer/joiner.cpp index 70787e16c..e89902bc2 100644 --- a/storage/tianmu/core/joiner.cpp +++ b/storage/tianmu/optimizer/joiner.cpp @@ -15,13 +15,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "joiner.h" +#include "optimizer/joiner.h" -#include "core/joiner_hash.h" -#include "core/joiner_mapped.h" -#include "core/joiner_sort.h" #include "core/parallel_hash_join.h" #include "core/query.h" +#include "optimizer/joiner_hash.h" +#include "optimizer/joiner_mapped.h" +#include "optimizer/joiner_sort.h" #include "vc/const_column.h" #include "vc/virtual_column.h" diff --git a/storage/tianmu/core/joiner.h b/storage/tianmu/optimizer/joiner.h similarity index 97% rename from storage/tianmu/core/joiner.h rename to storage/tianmu/optimizer/joiner.h index d104c684b..50048aeb8 100644 --- a/storage/tianmu/core/joiner.h +++ b/storage/tianmu/optimizer/joiner.h @@ -18,10 +18,10 @@ #define TIANMU_CORE_JOINER_H_ #pragma once -#include "core/condition.h" -#include "core/ctask.h" -#include "core/descriptor.h" -#include "core/mi_iterator.h" +#include "executor/ctask.h" +#include "optimizer/compile/descriptor.h" +#include "optimizer/condition.h" +#include "optimizer/iterators/mi_iterator.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/joiner_general.cpp b/storage/tianmu/optimizer/joiner_general.cpp similarity index 96% rename from storage/tianmu/core/joiner_general.cpp rename to storage/tianmu/optimizer/joiner_general.cpp index 247807818..45bb8d019 100644 --- a/storage/tianmu/core/joiner_general.cpp +++ b/storage/tianmu/optimizer/joiner_general.cpp @@ -15,12 +15,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "core/ctask.h" -#include "core/descriptor.h" -#include "core/joiner.h" -#include "core/mi_new_contents.h" -#include "core/mi_updating_iterator.h" #include "core/transaction.h" +#include "executor/ctask.h" +#include "index/mi_new_contents.h" +#include "optimizer/compile/descriptor.h" +#include "optimizer/iterators/mi_updating_iterator.h" +#include "optimizer/joiner.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -33,16 +33,21 @@ void JoinerGeneral::ExecuteJoinConditions(Condition &cond) { std::vector pack_desc_locked; bool false_desc_found = false; bool non_true_desc_found = false; + for (int i = 0; i < no_desc; i++) { if (cond[i].IsFalse()) false_desc_found = true; + if (!cond[i].IsTrue()) non_true_desc_found = true; + pack_desc_locked.push_back(false); cond[i].DimensionUsed(all_dims); } + if (!non_true_desc_found) return; + mind->MarkInvolvedDimGroups(all_dims); DimensionVector outer_dims(cond[0].right_dims); if (!outer_dims.IsEmpty()) { @@ -50,14 +55,17 @@ void JoinerGeneral::ExecuteJoinConditions(Condition &cond) { all_dims.Plus(outer_dims); all_dims.Plus(cond[0].left_dims); } + if (false_desc_found && outer_dims.IsEmpty()) { all_dims.Plus(cond[0].left_dims); // for FALSE join condition // DimensionUsed() does not mark anything for (int i = 0; i < mind->NumOfDimensions(); i++) if (all_dims[i]) mind->Empty(i); + return; // all done } + MIIterator mit(mind, all_dims); MINewContents new_mind(mind, tips); new_mind.SetDimensions(all_dims); @@ -68,7 +76,6 @@ void JoinerGeneral::ExecuteJoinConditions(Condition &cond) { int64_t tuples_in_output = 0; // The main loop for checking conditions - if (!outer_dims.IsEmpty()) ExecuteOuterJoinLoop(cond, new_mind, all_dims, outer_dims, tuples_in_output, tips.limit); else { @@ -83,11 +90,13 @@ void JoinerGeneral::ExecuteJoinConditions(Condition &cond) { tips.count_only); #endif } + // Postprocessing and cleanup if (tips.count_only) new_mind.CommitCountOnly(tuples_in_output); else new_mind.Commit(tuples_in_output); + for (int i = 0; i < no_desc; i++) { cond[i].UnlockSourcePacks(); cond[i].done = true; @@ -348,10 +357,13 @@ void JoinerGeneral::ExecuteInnerJoinLoopMultiThread(MIIterator &mit, Condition & } utils::result_set res; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (size_t i = 0; i < vTask.size(); ++i) { - res.insert(ha_tianmu_engine_->query_thread_pool.add_task( - &JoinerGeneral::TaskInnerJoinPacks, this, &taskIterator[i], &vTask[i], &cond, &new_mind, &all_dims, - &pack_desc_locked, &tuples_in_output, limit, count_only, &stop_execution, &rows_passed, &rows_omitted)); + res.insert(eng->query_thread_pool.add_task(&JoinerGeneral::TaskInnerJoinPacks, this, &taskIterator[i], &vTask[i], + &cond, &new_mind, &all_dims, &pack_desc_locked, &tuples_in_output, limit, + count_only, &stop_execution, &rows_passed, &rows_omitted)); } res.get_all_with_except(); diff --git a/storage/tianmu/core/joiner_hash.cpp b/storage/tianmu/optimizer/joiner_hash.cpp similarity index 99% rename from storage/tianmu/core/joiner_hash.cpp rename to storage/tianmu/optimizer/joiner_hash.cpp index 7b1203ee9..b015c8b9c 100644 --- a/storage/tianmu/core/joiner_hash.cpp +++ b/storage/tianmu/optimizer/joiner_hash.cpp @@ -19,11 +19,11 @@ #include "common/assert.h" #include "core/engine.h" -#include "core/join_thread_table.h" -#include "core/mi_new_contents.h" -#include "core/rough_multi_index.h" #include "core/temp_table.h" #include "core/transaction.h" +#include "executor/join_thread_table.h" +#include "index/mi_new_contents.h" +#include "index/rough_multi_index.h" #include "system/fet.h" #include "util/thread_pool.h" #include "vc/virtual_column.h" diff --git a/storage/tianmu/core/joiner_hash.h b/storage/tianmu/optimizer/joiner_hash.h similarity index 98% rename from storage/tianmu/core/joiner_hash.h rename to storage/tianmu/optimizer/joiner_hash.h index 9c68cf296..45a837cb8 100644 --- a/storage/tianmu/core/joiner_hash.h +++ b/storage/tianmu/optimizer/joiner_hash.h @@ -18,8 +18,8 @@ #define TIANMU_CORE_JOINER_HASH_H_ #pragma once -#include "core/joiner.h" -#include "core/joiner_hash_table.h" +#include "optimizer/joiner.h" +#include "optimizer/joiner_hash_table.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/joiner_hash_table.cpp b/storage/tianmu/optimizer/joiner_hash_table.cpp similarity index 99% rename from storage/tianmu/core/joiner_hash_table.cpp rename to storage/tianmu/optimizer/joiner_hash_table.cpp index 224d05d6f..2ca5596db 100644 --- a/storage/tianmu/core/joiner_hash_table.cpp +++ b/storage/tianmu/optimizer/joiner_hash_table.cpp @@ -17,8 +17,8 @@ #include "joiner_hash_table.h" -#include "core/tools.h" #include "core/transaction.h" +#include "util/tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/joiner_hash_table.h b/storage/tianmu/optimizer/joiner_hash_table.h similarity index 98% rename from storage/tianmu/core/joiner_hash_table.h rename to storage/tianmu/optimizer/joiner_hash_table.h index 5675a4c0b..f1f9bb511 100644 --- a/storage/tianmu/core/joiner_hash_table.h +++ b/storage/tianmu/optimizer/joiner_hash_table.h @@ -18,11 +18,11 @@ #define TIANMU_CORE_JOINER_HASH_TABLE_H_ #pragma once -#include "core/bin_tools.h" -#include "core/column_bin_encoder.h" -#include "core/filter.h" -#include "core/tianmu_attr_typeinfo.h" +#include "executor/filter.h" #include "mm/traceable_object.h" +#include "util/bin_tools.h" +#include "vc/column_bin_encoder.h" +#include "vc/tianmu_attr_typeinfo.h" #include "vc/virtual_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/joiner_mapped.cpp b/storage/tianmu/optimizer/joiner_mapped.cpp similarity index 96% rename from storage/tianmu/core/joiner_mapped.cpp rename to storage/tianmu/optimizer/joiner_mapped.cpp index a522ae46d..2b6adcc35 100644 --- a/storage/tianmu/core/joiner_mapped.cpp +++ b/storage/tianmu/optimizer/joiner_mapped.cpp @@ -18,10 +18,10 @@ #include "joiner_mapped.h" #include "common/common_definitions.h" -#include "core/ctask.h" #include "core/engine.h" -#include "core/mi_new_contents.h" #include "core/transaction.h" +#include "executor/ctask.h" +#include "index/mi_new_contents.h" #include "util/log_ctl.h" #include "vc/virtual_column.h" @@ -331,12 +331,12 @@ void JoinerParallelMapped::ExecuteJoinConditions(Condition &cond) { vc1->Type().Lookup() || vc2->Type().Lookup()) return; - vc1->MarkUsedDims(traversed_dims); // "traversed" is unique now (a "dimension" table) - vc2->MarkUsedDims(matched_dims); // a "fact" table for 1:n relation + // "traversed" is unique now (a "dimension" table) a "fact" table for 1:n relation + vc1->MarkUsedDims(traversed_dims); + vc2->MarkUsedDims(matched_dims); mind->MarkInvolvedDimGroups(traversed_dims); mind->MarkInvolvedDimGroups(matched_dims); - if (traversed_dims.Intersects(matched_dims)) // both materialized - we should - // rather use a simple loop + if (traversed_dims.Intersects(matched_dims)) // both materialized - we should rather use a simple loop return; MIIterator mit_m(mind, matched_dims); @@ -351,6 +351,7 @@ void JoinerParallelMapped::ExecuteJoinConditions(Condition &cond) { traversed_dims = matched_dims; matched_dims = temp_dims; } + if (traversed_dims.NoDimsUsed() > 1 || // more than just a number matched_dims.Intersects(desc.right_dims)) // only traversed dimension may be outer return; @@ -372,8 +373,7 @@ void JoinerParallelMapped::ExecuteJoinConditions(Condition &cond) { mind->LockAllForUse(); if (!tips.count_only) new_mind->Init(dim2_size, dims_involved); - else if (outer_join) { // outer join on keys verified as unique - a trivial - // answer + else if (outer_join) { // outer join on keys verified as unique - a trivial answer new_mind->CommitCountOnly(dim2_size); why_failed = JoinFailure::NOT_FAILED; mind->UnlockAllFromUse(); @@ -391,20 +391,24 @@ void JoinerParallelMapped::ExecuteJoinConditions(Condition &cond) { int64_t joined_tuples = 0; int tids = (packnums < std::thread::hardware_concurrency() / 2) ? packnums : (std::thread::hardware_concurrency() / 2); + if (tids <= 2) tids = 1; + std::vector> indextable(tids); utils::result_set res; std::vector matched_tuples(tids); CTask task; task.dwPackNum = tids; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (int table_id = 0; table_id < tids; table_id++) { task.dwTaskId = table_id; task.dwStartPackno = table_id * (packnums / tids); task.dwEndPackno = (table_id == tids - 1) ? packnums : (table_id + 1) * (packnums / tids); - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&JoinerParallelMapped::ExecuteMatchLoop, this, - &indextable[table_id], packrows, &matched_tuples[table_id], - vc2, task, map_function.get())); + res.insert(eng->query_thread_pool.add_task(&JoinerParallelMapped::ExecuteMatchLoop, this, &indextable[table_id], + packrows, &matched_tuples[table_id], vc2, task, map_function.get())); } res.get_all(); @@ -415,6 +419,7 @@ void JoinerParallelMapped::ExecuteJoinConditions(Condition &cond) { joined_tuples += matched_tuples[i]; new_mind->AddBuildItem(indextable[i]); } + tianmu_control_.lock(m_conn->GetThreadID()) << "Produced " << joined_tuples << " tuples." << system::unlock; new_mind->Commit(joined_tuples, tips.count_only); diff --git a/storage/tianmu/core/joiner_mapped.h b/storage/tianmu/optimizer/joiner_mapped.h similarity index 98% rename from storage/tianmu/core/joiner_mapped.h rename to storage/tianmu/optimizer/joiner_mapped.h index df753421d..7367b45b4 100644 --- a/storage/tianmu/core/joiner_mapped.h +++ b/storage/tianmu/optimizer/joiner_mapped.h @@ -21,9 +21,9 @@ #include #include -#include "core/ctask.h" -#include "core/joiner.h" -#include "core/multi_index_builder.h" +#include "executor/ctask.h" +#include "index/multi_index_builder.h" +#include "optimizer/joiner.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/joiner_sort.cpp b/storage/tianmu/optimizer/joiner_sort.cpp similarity index 99% rename from storage/tianmu/core/joiner_sort.cpp rename to storage/tianmu/optimizer/joiner_sort.cpp index 776a2bcfc..ade1a26e9 100644 --- a/storage/tianmu/core/joiner_sort.cpp +++ b/storage/tianmu/optimizer/joiner_sort.cpp @@ -17,10 +17,10 @@ #include -#include "core/joiner_sort.h" -#include "core/mi_new_contents.h" -#include "core/sorter3.h" #include "core/transaction.h" +#include "index/mi_new_contents.h" +#include "optimizer/joiner_sort.h" +#include "util/sorter3.h" #include "vc/virtual_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/joiner_sort.h b/storage/tianmu/optimizer/joiner_sort.h similarity index 99% rename from storage/tianmu/core/joiner_sort.h rename to storage/tianmu/optimizer/joiner_sort.h index 3b57e20fb..c1dd79047 100644 --- a/storage/tianmu/core/joiner_sort.h +++ b/storage/tianmu/optimizer/joiner_sort.h @@ -18,10 +18,10 @@ #define TIANMU_CORE_JOINER_SORT_H_ #pragma once -#include "core/column_bin_encoder.h" -#include "core/joiner.h" #include "mm/traceable_object.h" +#include "optimizer/joiner.h" #include "system/cacheable_item.h" +#include "vc/column_bin_encoder.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/optimizer/plan/query_plan.h b/storage/tianmu/optimizer/plan/query_plan.h new file mode 100644 index 000000000..9365f5d40 --- /dev/null +++ b/storage/tianmu/optimizer/plan/query_plan.h @@ -0,0 +1,74 @@ +/* Copyright (c) 2022 StoneAtom, Inc. All rights reserved. + Use is subject to license terms + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA +*/ + +// this is base class of query plan used for tianmu engine. +// why we do this? due to it's hard to do optimization and pipeline execution on +// this current codes and framework. Therefore, we should split the optimization +// into stages, such as, prepare, setup, prepare, transformation,optimization, +// query plan gen, execution. just like the other sql engines do. + +#ifndef __OPTIMIZER_QUERY_PLAN__ +#define __OPTIMIZER_QUERY_PLAN__ + +#include "optimizer/compile/cq_term.h" + +namespace Tianmu { +namespace Optimizer { + +// in future we will change ns `core` to `optimizer`. +using namespace core; + +enum class QueryPlanType { NONE = 0, TABLE_SCAN, JOIN, AGG }; + +// the basic plan +class QueryPlan { + public: + QueryPlan(QueryPlanType type, QueryPlan *parent) { + type_ = type; + parent_ = parent; + } + virtual ~QueryPlan() = default; + + private: + // type of query plan. + QueryPlanType type_{QueryPlanType::NONE}; + + // parent of this plan. + QueryPlan *parent_; +}; + +class TableScan : public QueryPlan { + public: + TableScan() : QueryPlan(QueryPlanType::TABLE_SCAN, nullptr) {} + TableScan(QueryPlan *parent) : QueryPlan(QueryPlanType::TABLE_SCAN, parent) {} + + ~TableScan() {} + + public: + enum class ScanType { SEQ_SCAN = 0, INDX_SCAN }; + + private: + QueryPlan *parent_; + ScanType scan_type_; + TabID tid_; +}; + +class Join : public QueryPlan {}; + +class Aggregation : public QueryPlan {}; + +} // namespace Optimizer +} // namespace Tianmu + +#endif diff --git a/storage/tianmu/handler/ha_my_tianmu.cpp b/storage/tianmu/sql/ha_my_tianmu.cpp similarity index 77% rename from storage/tianmu/handler/ha_my_tianmu.cpp rename to storage/tianmu/sql/ha_my_tianmu.cpp index bc59b5380..89b99f0b9 100644 --- a/storage/tianmu/handler/ha_my_tianmu.cpp +++ b/storage/tianmu/sql/ha_my_tianmu.cpp @@ -16,8 +16,8 @@ */ #include "common/mysql_gate.h" -#include "core/compilation_tools.h" #include "core/engine.h" +#include "optimizer/compile/compilation_tools.h" #include "system/configuration.h" #include "util/log_ctl.h" #include "vc/virtual_column.h" @@ -37,6 +37,7 @@ bool AtLeastOneTianmuTableInvolved(LEX *lex) { if (core::Engine::IsTianmuTable(table)) return true; } + return false; } @@ -49,7 +50,10 @@ bool ForbiddenMySQLQueryPath(LEX *lex [[maybe_unused]]) { void ha_my_tianmu_update_and_store_col_comment(TABLE *table, int field_id, Field *source_field, int source_field_id, CHARSET_INFO *cs) { try { - ha_tianmu_engine_->UpdateAndStoreColumnComment(table, field_id, source_field, source_field_id, cs); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + eng->UpdateAndStoreColumnComment(table, field_id, source_field, source_field_id, cs); } catch (std::exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught: %s.", e.what()); @@ -66,15 +70,13 @@ bool ha_my_tianmu_set_statement_allowed(THD *thd, LEX *lex) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), "Queries inside SET statements are not supported. " "Enable the MySQL core::Query Path in my.cnf to execute the query " - "with reduced " - "performance.", + "with reduced performance.", MYF(0)); return false; } else push_warning(thd, Sql_condition::SL_NOTE, ER_UNKNOWN_ERROR, "SET statement not supported by the Tianmu Optimizer. The " - "query executed " - "by MySQL engine."); + "query executed by MySQL engine."); } return true; } @@ -85,18 +87,30 @@ QueryRouteTo ha_my_tianmu_query(THD *thd, LEX *lex, Query_result *&result_output try { // handle_select_ret is introduced here because in case of some exceptions // (e.g. thrown from ForbiddenMySQLQueryPath) we want to return - QueryRouteTo handle_select_ret = - ha_tianmu_engine_->HandleSelect(thd, lex, result_output, setup_tables_done_option, res, - is_optimize_after_tianmu, tianmu_free_join, with_insert); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + QueryRouteTo handle_select_ret = eng->HandleSelect(thd, lex, result_output, setup_tables_done_option, res, + is_optimize_after_tianmu, tianmu_free_join, with_insert); if (handle_select_ret == QueryRouteTo::kToMySQL && AtLeastOneTianmuTableInvolved(lex) && ForbiddenMySQLQueryPath(lex)) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), - "The query includes syntax that is not supported by the storage engine. \ -Either restructure the query with supported syntax, or enable the MySQL core::Query Path in config file to execute the query with reduced performance.", + "The query includes syntax that is not supported by the storage engine. " + "Either restructure the query with supported syntax, or enable the MySQL core::Query Path in config " + "file to execute the query with reduced performance.", MYF(0)); handle_select_ret = QueryRouteTo::kToTianmu; } ret = handle_select_ret; + } catch (Tianmu::common::TianmuError &e) { + std::string str_msg = std::string("A Tianmu Error system exception error caught. ") + e.Message().c_str(); + my_message(static_cast(common::ErrorCode::FAILED), str_msg.c_str(), MYF(0)); + TIANMU_LOG(LogCtl_Level::ERROR, "A TianmuError system exception error caught."); + } catch (Tianmu::common::DatabaseException &e) { + std::string str_msg = + std::string("A Tianmu DatabaseException Error system exception error caught. ") + e.getExceptionMsg().c_str(); + my_message(static_cast(common::ErrorCode::FAILED), str_msg.c_str(), MYF(0)); + TIANMU_LOG(LogCtl_Level::ERROR, "A DatabaseException system exception error caught."); } catch (std::exception &e) { my_message(static_cast(common::ErrorCode::UNKNOWN_ERROR), e.what(), MYF(0)); TIANMU_LOG(LogCtl_Level::ERROR, "HandleSelect Error: %s", e.what()); @@ -116,7 +130,10 @@ int tianmu_load_impl(THD *thd, sql_exchange *ex, TABLE_LIST *table_list, void *a return static_cast(TianmuEngineReturnValues::kLoadContinue); try { - tianmu_error = ha_tianmu_engine_->RunLoader(thd, ex, table_list, arg); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + tianmu_error = eng->RunLoader(thd, ex, table_list, arg); if (tianmu_error.GetErrorCode() != common::ErrorCode::SUCCESS) { TIANMU_LOG(LogCtl_Level::ERROR, "RunLoader Error: %s", tianmu_error.Message().c_str()); } else { diff --git a/storage/tianmu/handler/ha_my_tianmu.h b/storage/tianmu/sql/ha_my_tianmu.h similarity index 96% rename from storage/tianmu/handler/ha_my_tianmu.h rename to storage/tianmu/sql/ha_my_tianmu.h index 3ba01ecf4..211c9b74d 100644 --- a/storage/tianmu/handler/ha_my_tianmu.h +++ b/storage/tianmu/sql/ha_my_tianmu.h @@ -22,10 +22,7 @@ namespace Tianmu { namespace DBHandler { -enum class QueryRouteTo { - kToMySQL = 0, - kToTianmu, -}; +enum class QueryRouteTo { kToMySQL = 0, kToTianmu, kUnknown }; // processing the queries which routed to Tianmu engine. QueryRouteTo ha_my_tianmu_query(THD *thd, LEX *lex, Query_result *&result_output, ulong setup_tables_done_option, diff --git a/storage/tianmu/system/cacheable_item.cpp b/storage/tianmu/system/cacheable_item.cpp index 0b5f665f1..82174b3da 100644 --- a/storage/tianmu/system/cacheable_item.cpp +++ b/storage/tianmu/system/cacheable_item.cpp @@ -17,9 +17,9 @@ #include "cacheable_item.h" -#include "core/tools.h" #include "system/fet.h" #include "system/tianmu_system.h" +#include "util/tools.h" namespace Tianmu { namespace system { diff --git a/storage/tianmu/system/channel.cpp b/storage/tianmu/system/channel.cpp index a6b564254..1dc0d1c99 100644 --- a/storage/tianmu/system/channel.cpp +++ b/storage/tianmu/system/channel.cpp @@ -20,8 +20,8 @@ #include #include "channel.h" -#include "core/tools.h" #include "system/tianmu_system.h" +#include "util/tools.h" namespace Tianmu { namespace system { diff --git a/storage/tianmu/system/fet.h b/storage/tianmu/system/fet.h index 144065308..7111afc56 100644 --- a/storage/tianmu/system/fet.h +++ b/storage/tianmu/system/fet.h @@ -20,8 +20,8 @@ #include -#include "core/tools.h" #include "system/tianmu_system.h" +#include "util/tools.h" namespace Tianmu { namespace system { diff --git a/storage/tianmu/system/file.cpp b/storage/tianmu/system/file.cpp index 1c1266a2d..c77cfb925 100644 --- a/storage/tianmu/system/file.cpp +++ b/storage/tianmu/system/file.cpp @@ -29,7 +29,7 @@ int TianmuFile::Open(std::string const &file, int flags, mode_t mode) { fd_ = open(file.c_str(), flags, mode); if (fd_ == -1) throw common::TianmuError(common::ErrorCode::FAILED, - "ErrorCode: " + std::to_string(errno) + " - " + strerror(errno)); + "ErrorCode: " + std::to_string(errno) + " - " + strerror(errno) + "[" + file + "]"); return fd_; } diff --git a/storage/tianmu/system/file_system.cpp b/storage/tianmu/system/file_system.cpp index 3b2af5e59..b4df4f6e6 100644 --- a/storage/tianmu/system/file_system.cpp +++ b/storage/tianmu/system/file_system.cpp @@ -54,15 +54,15 @@ int ClearDirectory(std::string const &path) { void DeleteDirectory(std::string const &path) { std::vector targets; try { - for (auto &p : fs::recursive_directory_iterator(path)) + for (auto &p : fs::recursive_directory_iterator(path)) { if (fs::is_symlink(p.path())) targets.emplace_back(fs::canonical(fs::absolute(fs::read_symlink(p.path()), p.path().parent_path()))); + } fs::remove_all(path); std::error_code ec; for (auto &t : targets) { - // ingore error because the target might be under 'path' and thus have - // been removed + // ingore error because the target might be under 'path' and thus have been removed fs::remove_all(t, ec); if (ec && ec != std::errc::no_such_file_or_directory) TIANMU_LOG(LogCtl_Level::ERROR, "Failed to delete %s", t.c_str()); diff --git a/storage/tianmu/system/io_parameters.h b/storage/tianmu/system/io_parameters.h index effe8ce7b..89dcb55fa 100644 --- a/storage/tianmu/system/io_parameters.h +++ b/storage/tianmu/system/io_parameters.h @@ -23,8 +23,8 @@ #include "common/assert.h" #include "common/common_definitions.h" #include "common/data_format.h" -#include "core/tianmu_attr_typeinfo.h" #include "system/file_system.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace system { diff --git a/storage/tianmu/system/large_buffer.cpp b/storage/tianmu/system/large_buffer.cpp index 2cbc67301..ad5158ccf 100644 --- a/storage/tianmu/system/large_buffer.cpp +++ b/storage/tianmu/system/large_buffer.cpp @@ -20,10 +20,10 @@ #include #include "common/assert.h" -#include "core/tools.h" #include "system/io_parameters.h" #include "system/tianmu_file.h" #include "system/tianmu_system.h" +#include "util/tools.h" namespace Tianmu { namespace system { diff --git a/storage/tianmu/system/tianmu_file.h b/storage/tianmu/system/tianmu_file.h index 370bd6725..35f14b01f 100644 --- a/storage/tianmu/system/tianmu_file.h +++ b/storage/tianmu/system/tianmu_file.h @@ -49,6 +49,11 @@ class TianmuFile : public Stream { off_t Tell(); int Flush(); + inline bool Exists(const std::string &name) { + struct stat buffer; + return (stat(name.c_str(), &buffer) == 0); + } + int Open(std::string const &file, int flags, mode_t mode); int OpenCreate(std::string const &file); int OpenCreateNotExists(std::string const &file); diff --git a/storage/tianmu/system/tianmu_system.cpp b/storage/tianmu/system/tianmu_system.cpp index d94131713..d97208e56 100644 --- a/storage/tianmu/system/tianmu_system.cpp +++ b/storage/tianmu/system/tianmu_system.cpp @@ -19,37 +19,42 @@ #include -#include "core/tools.h" #include "system/fet.h" +#include "util/tools.h" namespace Tianmu { // row-column channel control. system::Channel tianmu_control_(true); + // query log channel flag. system::Channel tianmu_querylog_(true); + // global host ip addr. char global_hostIP_[FN_REFLEN]; + // global server info. char global_serverinfo_[FN_REFLEN]; -// key-value engine handler. -core::Engine *ha_tianmu_engine_ = nullptr; -// key-value store handler. -index::KVStore *ha_kvstore_ = nullptr; + // global mutex std::mutex global_mutex_; + // mutex of drop or rename std::shared_mutex drop_rename_mutex_; #ifdef FUNCTIONS_EXECUTION_TIMES // num of distinct DP loaded. LoadedDataPackCounter count_distinct_dp_loads; + // num of distinct decompressed DP. LoadedDataPackCounter count_distinct_dp_decompressions; + // exe time of func. FunctionsExecutionTimes *fet = nullptr; + // num of bytes read by DP. uint64_t NumOfBytesReadByDPs = 0; + // size of un-compressed DP. uint64_t SizeOfUncompressedDP = 0; #endif diff --git a/storage/tianmu/system/tianmu_system.h b/storage/tianmu/system/tianmu_system.h index d132d85f5..30edb98fd 100644 --- a/storage/tianmu/system/tianmu_system.h +++ b/storage/tianmu/system/tianmu_system.h @@ -38,21 +38,22 @@ class KVStore; // Channel for debugging information, not // displayed in the standard running mode. extern system::Channel tianmu_control_; + // the channel for query log. extern system::Channel tianmu_querylog_; + // host ip addr. extern char global_hostIP_[FN_REFLEN]; + // host server info string. extern char global_serverinfo_[FN_REFLEN]; -// row-column engine handler. -extern core::Engine *ha_tianmu_engine_; -// key-value store handler. -extern index::KVStore *ha_kvstore_; // global mutex. extern std::mutex global_mutex_; + // drop or rename mutex. extern std::shared_mutex drop_rename_mutex_; + // current transaction handler. extern thread_local core::Transaction *current_txn_; diff --git a/storage/tianmu/types/bstring.cpp b/storage/tianmu/types/bstring.cpp index 07b1dce7b..f067e01a7 100644 --- a/storage/tianmu/types/bstring.cpp +++ b/storage/tianmu/types/bstring.cpp @@ -17,7 +17,7 @@ #include "types/tianmu_data_types.h" #include "common/assert.h" -#include "core/tools.h" +#include "util/tools.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -72,7 +72,7 @@ BString::BString(const BString &tianmu_s) } BString::~BString() { - if (persistent_) + if (persistent_ && len_) delete[] val_; } diff --git a/storage/tianmu/core/data_type.cpp b/storage/tianmu/types/data_type.cpp similarity index 99% rename from storage/tianmu/core/data_type.cpp rename to storage/tianmu/types/data_type.cpp index e79714f92..25a5a6c8b 100644 --- a/storage/tianmu/core/data_type.cpp +++ b/storage/tianmu/types/data_type.cpp @@ -18,8 +18,8 @@ #include "data_type.h" #include "common/assert.h" -#include "core/column_type.h" #include "core/quick_math.h" +#include "vc/column_type.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/data_type.h b/storage/tianmu/types/data_type.h similarity index 100% rename from storage/tianmu/core/data_type.h rename to storage/tianmu/types/data_type.h diff --git a/storage/tianmu/types/tianmu_data_types.cpp b/storage/tianmu/types/tianmu_data_types.cpp index 063424e4e..0753663a9 100644 --- a/storage/tianmu/types/tianmu_data_types.cpp +++ b/storage/tianmu/types/tianmu_data_types.cpp @@ -17,8 +17,8 @@ #include "tianmu_data_types.h" -#include "core/tianmu_attr.h" -#include "core/tianmu_attr_typeinfo.h" +#include "vc/tianmu_attr.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace types { diff --git a/storage/tianmu/types/tianmu_data_types.h b/storage/tianmu/types/tianmu_data_types.h index b0ab9957e..068e9e093 100644 --- a/storage/tianmu/types/tianmu_data_types.h +++ b/storage/tianmu/types/tianmu_data_types.h @@ -24,9 +24,9 @@ #include "common/assert.h" #include "common/common_definitions.h" #include "common/exception.h" -#include "core/bin_tools.h" -#include "core/tianmu_attr_typeinfo.h" #include "system/txt_utils.h" +#include "util/bin_tools.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace types { @@ -90,18 +90,22 @@ union DT { bool Neg() const { return neg == 1; } void Store(MYSQL_TIME *my_time, enum_mysql_timestamp_type t) { - my_time->year = year; - my_time->month = month; - my_time->day = day; - my_time->hour = hour; + if (t == MYSQL_TIMESTAMP_TIME) { + my_time->year = 0; + my_time->month = 0; + my_time->day = 0; + my_time->hour = time_hour; + } else { + my_time->year = year; + my_time->month = month; + my_time->day = day; + my_time->hour = hour; + } my_time->minute = minute; my_time->second = second; my_time->second_part = microsecond; my_time->neg = neg; my_time->time_type = t; - - if (t == MYSQL_TIMESTAMP_TIME) - my_time->hour = time_hour; } // util functions diff --git a/storage/tianmu/types/tianmu_datetime.cpp b/storage/tianmu/types/tianmu_datetime.cpp index 3c35538cd..d131b4ed9 100644 --- a/storage/tianmu/types/tianmu_datetime.cpp +++ b/storage/tianmu/types/tianmu_datetime.cpp @@ -18,10 +18,10 @@ #include "types/tianmu_data_types.h" #include "core/engine.h" -#include "core/tools.h" #include "core/transaction.h" #include "system/tianmu_system.h" #include "types/value_parser4txt.h" +#include "util/tools.h" namespace Tianmu { namespace types { diff --git a/storage/tianmu/types/tianmu_num.cpp b/storage/tianmu/types/tianmu_num.cpp index 33d240964..f30e6ac2e 100644 --- a/storage/tianmu/types/tianmu_num.cpp +++ b/storage/tianmu/types/tianmu_num.cpp @@ -20,23 +20,25 @@ #include #include "common/assert.h" -#include "core/tools.h" #include "system/txt_utils.h" #include "types/tianmu_data_types.h" #include "types/value_parser4txt.h" +#include "util/tools.h" namespace Tianmu { namespace types { TianmuNum::TianmuNum(common::ColumnType attrt) - : value_(0), scale_(0), is_double_(false), is_dot_(false), attr_type_(attrt) {} + : value_(0), scale_(0), is_double_(false), is_dot_(false), attr_type_(attrt), unsigned_flag_(false) {} -TianmuNum::TianmuNum(int64_t value, short scale, bool is_double, common::ColumnType attrt) { - Assign(value, scale, is_double, attrt); +TianmuNum::TianmuNum(int64_t value, short scale, bool is_double, common::ColumnType attrt, bool unsigned_flag) { + Assign(value, scale, is_double, attrt, unsigned_flag); } TianmuNum::TianmuNum(double value) : value_(*(int64_t *)&value), scale_(0), is_double_(true), is_dot_(false), attr_type_(common::ColumnType::REAL) { + // In tianmu, real type does not support unsigned well. + unsigned_flag_ = false; null_ = (value_ == NULL_VALUE_D ? true : false); } @@ -46,17 +48,19 @@ TianmuNum::TianmuNum(const TianmuNum &tianmu_n) scale_(tianmu_n.scale_), is_double_(tianmu_n.is_double_), is_dot_(tianmu_n.is_dot_), - attr_type_(tianmu_n.attr_type_) { + attr_type_(tianmu_n.attr_type_), + unsigned_flag_(tianmu_n.unsigned_flag_) { null_ = tianmu_n.null_; } TianmuNum::~TianmuNum() {} -TianmuNum &TianmuNum::Assign(int64_t value, short scale, bool is_double, common::ColumnType attrt) { +TianmuNum &TianmuNum::Assign(int64_t value, short scale, bool is_double, common::ColumnType attrt, bool unsigned_flag) { this->value_ = value; this->scale_ = scale; this->is_double_ = is_double; this->attr_type_ = attrt; + this->unsigned_flag_ = unsigned_flag; if (scale != -1 && !is_double_) { // check if construct decimal, the UNK is used on temp_table.cpp: GetValueString(..) @@ -84,6 +88,7 @@ TianmuNum &TianmuNum::Assign(double value) { this->is_double_ = true; this->is_dot_ = false; this->attr_type_ = common::ColumnType::REAL; + this->unsigned_flag_ = false; common::double_int_t v(value_); null_ = (v.i == common::NULL_VALUE_64 ? true : false); return *this; diff --git a/storage/tianmu/types/tianmu_num.h b/storage/tianmu/types/tianmu_num.h index 05f6187f1..52324aff5 100644 --- a/storage/tianmu/types/tianmu_num.h +++ b/storage/tianmu/types/tianmu_num.h @@ -31,13 +31,14 @@ class TianmuNum : public ValueBasic { public: TianmuNum(common::ColumnType attrt = common::ColumnType::NUM); - TianmuNum(int64_t value, short scale = -1, bool dbl = false, common::ColumnType attrt = common::ColumnType::UNK); + TianmuNum(int64_t value, short scale = -1, bool dbl = false, common::ColumnType attrt = common::ColumnType::UNK, + bool unsigned_flag = false); TianmuNum(double value); TianmuNum(const TianmuNum &); ~TianmuNum(); TianmuNum &Assign(int64_t value, short scale = -1, bool dbl = false, - common::ColumnType attrt = common::ColumnType::UNK); + common::ColumnType attrt = common::ColumnType::UNK, bool unsigned_flag = false); TianmuNum &Assign(double value); static common::ErrorCode Parse(const BString &tianmu_s, TianmuNum &tianmu_n, @@ -82,6 +83,7 @@ class TianmuNum : public ValueBasic { short Scale() const { return scale_; } int64_t ValueInt() const { return value_; } + bool GetUnsignedFlag() const { return unsigned_flag_; } char *GetDataBytesPointer() const override { return (char *)&value_; } int64_t GetIntPart() const { return is_double_ ? (int64_t)GetIntPartAsDouble() : value_ / (int64_t)Uint64PowOfTen(scale_); @@ -105,6 +107,7 @@ class TianmuNum : public ValueBasic { private: static constexpr int MAX_DEC_PRECISION = 18; int64_t value_; + bool unsigned_flag_ = false; ushort scale_; // means 'scale' actually bool is_double_; bool is_dot_; diff --git a/storage/tianmu/types/value_parser4txt.h b/storage/tianmu/types/value_parser4txt.h index 80aa31d19..556fcf678 100644 --- a/storage/tianmu/types/value_parser4txt.h +++ b/storage/tianmu/types/value_parser4txt.h @@ -20,8 +20,8 @@ #include "common/assert.h" #include "common/exception.h" -#include "core/tianmu_attr_typeinfo.h" #include "types/tianmu_data_types.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace types { diff --git a/storage/tianmu/core/bin_tools.cpp b/storage/tianmu/util/bin_tools.cpp similarity index 99% rename from storage/tianmu/core/bin_tools.cpp rename to storage/tianmu/util/bin_tools.cpp index 98e4ecfac..0a513fe6e 100644 --- a/storage/tianmu/core/bin_tools.cpp +++ b/storage/tianmu/util/bin_tools.cpp @@ -17,8 +17,8 @@ #include -#include "core/bin_tools.h" #include "system/tianmu_system.h" +#include "util/bin_tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/bin_tools.h b/storage/tianmu/util/bin_tools.h similarity index 100% rename from storage/tianmu/core/bin_tools.h rename to storage/tianmu/util/bin_tools.h diff --git a/storage/tianmu/core/sorter3.cpp b/storage/tianmu/util/sorter3.cpp similarity index 99% rename from storage/tianmu/core/sorter3.cpp rename to storage/tianmu/util/sorter3.cpp index 91308d4c2..abee68ed9 100644 --- a/storage/tianmu/core/sorter3.cpp +++ b/storage/tianmu/util/sorter3.cpp @@ -17,12 +17,12 @@ #include #include "common/common_definitions.h" -#include "core/bin_tools.h" -#include "core/tools.h" #include "core/transaction.h" #include "sorter3.h" #include "system/fet.h" #include "system/tianmu_system.h" +#include "util/bin_tools.h" +#include "util/tools.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/sorter3.h b/storage/tianmu/util/sorter3.h similarity index 100% rename from storage/tianmu/core/sorter3.h rename to storage/tianmu/util/sorter3.h diff --git a/storage/tianmu/core/sorter_wrapper.cpp b/storage/tianmu/util/sorter_wrapper.cpp similarity index 97% rename from storage/tianmu/core/sorter_wrapper.cpp rename to storage/tianmu/util/sorter_wrapper.cpp index 81b2ecdb9..d1cf08a5c 100644 --- a/storage/tianmu/core/sorter_wrapper.cpp +++ b/storage/tianmu/util/sorter_wrapper.cpp @@ -17,9 +17,9 @@ #include "sorter_wrapper.h" #include "core/engine.h" -#include "core/mi_iterator.h" -#include "core/pack_orderer.h" #include "core/transaction.h" +#include "data/pack_orderer.h" +#include "optimizer/iterators/mi_iterator.h" #include "util/thread_pool.h" namespace Tianmu { @@ -242,30 +242,38 @@ bool SorterWrapper::InitPackrow(MIIterator &mit) // return true if the packrow TIANMU_LOG(LogCtl_Level::DEBUG, "InitPackrow: no_values_encoded %d, begin to loadpacks scol size %d ", no_values_encoded, scol.size()); // Not excluded: lock packs - if (!ha_tianmu_engine_->query_thread_pool.is_owner()) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + if (!eng->query_thread_pool.is_owner()) { utils::result_set res; for (uint i = 0; i < scol.size(); i++) - res.insert(ha_tianmu_engine_->query_thread_pool.add_task(&ColumnBinEncoder::LoadPacks, &scol[i], &mit)); + res.insert(eng->query_thread_pool.add_task(&ColumnBinEncoder::LoadPacks, &scol[i], &mit)); + res.get_all_with_except(); } else { for (uint i = 0; i < scol.size(); i++) if (scol[i].IsEnabled() && scol[i].IsNontrivial()) // constant num. columns are trivial scol[i].LockSourcePacks(mit); } + return false; } bool SorterWrapper::PutValues(MIIterator &mit) { if (s == nullptr) return false; // trivial sorter (constant values) + if (mi_encoder) mi_encoder->Encode(input_buf, mit); + bool update_stats = (rough_sort_by > -1 && limit > -1 && no_values_encoded <= limit); // otherwise statistics are either not used // or already prepared for (uint i = 0; i < scol.size(); i++) if (scol[i].IsEnabled() && scol[i].IsNontrivial()) // constant num. columns are trivial scol[i].Encode(input_buf, mit, nullptr, update_stats); + no_values_encoded++; return s->PutValue(input_buf); } @@ -273,6 +281,7 @@ bool SorterWrapper::PutValues(MIIterator &mit) { bool SorterWrapper::PutValues(SorterWrapper &sw) { if (s == nullptr) return false; // trivial sorter (constant values) + no_values_encoded += sw.GetEncodedValNum(); TIANMU_LOG(LogCtl_Level::DEBUG, "PutValues: no_values_encoded %d \n", no_values_encoded); return s->PutValue(sw.GetSorter()); diff --git a/storage/tianmu/core/sorter_wrapper.h b/storage/tianmu/util/sorter_wrapper.h similarity index 96% rename from storage/tianmu/core/sorter_wrapper.h rename to storage/tianmu/util/sorter_wrapper.h index c92142d39..fdd0c8192 100644 --- a/storage/tianmu/core/sorter_wrapper.h +++ b/storage/tianmu/util/sorter_wrapper.h @@ -18,10 +18,10 @@ #define TIANMU_CORE_SORTER_WRAPPER_H_ #pragma once -#include "core/column_bin_encoder.h" -#include "core/mi_iterator.h" -#include "core/multi_index.h" -#include "core/sorter3.h" +#include "index/multi_index.h" +#include "optimizer/iterators/mi_iterator.h" +#include "util/sorter3.h" +#include "vc/column_bin_encoder.h" #include "vc/virtual_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/tools.h b/storage/tianmu/util/tools.h similarity index 100% rename from storage/tianmu/core/tools.h rename to storage/tianmu/util/tools.h diff --git a/storage/tianmu/core/column.h b/storage/tianmu/vc/column.h similarity index 98% rename from storage/tianmu/core/column.h rename to storage/tianmu/vc/column.h index b63b2f355..bbeb30d23 100644 --- a/storage/tianmu/core/column.h +++ b/storage/tianmu/vc/column.h @@ -19,8 +19,8 @@ #pragma once #include "common/common_definitions.h" -#include "core/column_type.h" #include "types/tianmu_data_types.h" +#include "vc/column_type.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/column_bin_encoder.cpp b/storage/tianmu/vc/column_bin_encoder.cpp similarity index 99% rename from storage/tianmu/core/column_bin_encoder.cpp rename to storage/tianmu/vc/column_bin_encoder.cpp index 71cbfe045..4d38306d7 100644 --- a/storage/tianmu/core/column_bin_encoder.cpp +++ b/storage/tianmu/vc/column_bin_encoder.cpp @@ -16,9 +16,9 @@ */ #include "column_bin_encoder.h" -#include "core/bin_tools.h" -#include "core/mi_iterator.h" #include "core/transaction.h" +#include "optimizer/iterators/mi_iterator.h" +#include "util/bin_tools.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -139,9 +139,9 @@ bool ColumnBinEncoder::PrepareEncoder(vcolumn::VirtualColumn *_vc, vcolumn::Virt // (above) my_encoder.reset(new ColumnBinEncoder::EncoderInt(vc, decodable, nulls_possible, descending)); } else { - DEBUG_ASSERT(!"wrong combination of encoded columns"); // Other types not - // implemented yet - my_encoder.reset(new ColumnBinEncoder::EncoderText(vc, decodable, nulls_possible, descending)); + // DEBUG_ASSERT(!"wrong combination of encoded columns"); // Other types not implemented yet + throw common::DatabaseException("wrong types of columns"); + // my_encoder.reset(new ColumnBinEncoder::EncoderText(vc, decodable, nulls_possible, descending)); } if (_vc2 != nullptr) { // multiple column encoding? bool encoding_possible = my_encoder->SecondColumn(_vc2); diff --git a/storage/tianmu/core/column_bin_encoder.h b/storage/tianmu/vc/column_bin_encoder.h similarity index 99% rename from storage/tianmu/core/column_bin_encoder.h rename to storage/tianmu/vc/column_bin_encoder.h index 0cc7cd5d5..656aa2851 100644 --- a/storage/tianmu/core/column_bin_encoder.h +++ b/storage/tianmu/vc/column_bin_encoder.h @@ -18,7 +18,7 @@ #define TIANMU_CORE_COLUMN_BIN_ENCODER_H_ #pragma once -#include "core/rsi_cmap.h" +#include "index/rsi_cmap.h" #include "types/text_stat.h" #include "vc/virtual_column.h" @@ -506,4 +506,4 @@ class MultiindexPositionEncoder { } // namespace core } // namespace Tianmu -#endif // TIANMU_CORE_COLUMN_BIN_ENCODER_H_ \ No newline at end of file +#endif // TIANMU_CORE_COLUMN_BIN_ENCODER_H_ diff --git a/storage/tianmu/core/column_share.cpp b/storage/tianmu/vc/column_share.cpp similarity index 83% rename from storage/tianmu/core/column_share.cpp rename to storage/tianmu/vc/column_share.cpp index 9c7ab1abc..6cf65d7df 100644 --- a/storage/tianmu/core/column_share.cpp +++ b/storage/tianmu/vc/column_share.cpp @@ -20,10 +20,10 @@ #include #include "common/exception.h" -#include "core/column_share.h" #include "core/engine.h" #include "system/tianmu_file.h" #include "system/tianmu_system.h" +#include "vc/column_share.h" namespace Tianmu { namespace core { @@ -54,7 +54,7 @@ static constexpr size_t DPN_INC_CNT = ALLOC_UNIT / sizeof(DPN); ColumnShare::~ColumnShare() { if (start != nullptr) { - if (::munmap(start, common::COL_DN_FILE_SIZE) != 0) { + if (::munmap(start, COL_DN_FILE_SIZE) != 0) { // DO NOT throw in dtor! TIANMU_LOG(LogCtl_Level::WARN, "Failed to unmap DPN file. Error %d(%s)", errno, std::strerror(errno)); } @@ -85,12 +85,12 @@ void ColumnShare::map_dpn() { ASSERT(sb.st_size % sizeof(DPN) == 0); capacity = sb.st_size / sizeof(DPN); - auto addr = ::mmap(0, common::COL_DN_FILE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dn_fd, 0); + auto addr = ::mmap(0, COL_DN_FILE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dn_fd, 0); if (addr == MAP_FAILED) { throw std::system_error(errno, std::system_category(), "mmap() " + dpn_file.string()); } - // TODO: should we mlock(addr, common::COL_DN_FILE_SIZE)? + // TODO: should we mlock(addr, COL_DN_FILE_SIZE)? start = static_cast(addr); } @@ -139,7 +139,7 @@ void ColumnShare::scan_dpn(common::TX_ID xid) { fv.OpenReadOnly(m_path / common::COL_VERSION_DIR / xid.ToString()); fv.ReadExact(&hdr, sizeof(hdr)); - ASSERT(hdr.numOfPacks <= capacity, "bad dpn index"); + ASSERT(hdr.numOfPacks <= capacity, "bad dpn index, txnid:" + xid.ToString()); // get column saved auto inc auto_inc_.store(hdr.auto_inc); @@ -160,7 +160,7 @@ void ColumnShare::scan_dpn(common::TX_ID xid) { if (found == end) { start[i].reset(); } else { - start[i].SetPackPtr(0); + start[i].SetRefCount(0); start[i].used = 1; start[i].base = common::INVALID_PACK_INDEX; start[i].synced = 1; @@ -169,7 +169,7 @@ void ColumnShare::scan_dpn(common::TX_ID xid) { TIANMU_LOG(LogCtl_Level::WARN, "uncommited pack found: %s %d", m_path.c_str(), i); start[i].local = 0; } - if (start[i].dataAddress != DPN_INVALID_ADDR) { + if (start[i].dataAddress != DPN_INVALID_ADDR && !start[i].delete_compressed) { segs.push_back({start[i].dataAddress, start[i].dataLength, i}); } else { } @@ -187,7 +187,7 @@ void ColumnShare::scan_dpn(common::TX_ID xid) { TIANMU_LOG(LogCtl_Level::ERROR, " %u [%ld, %ld]", it.idx, it.offset, it.len); } TIANMU_LOG(LogCtl_Level::ERROR, "sorted end: -------------------"); - throw common::DatabaseException("bad DPN index file: " + m_path.string()); + throw common::DatabaseException("bad DPN index file: " + m_path.string() + " txn:" + xid.ToString()); } } } @@ -206,6 +206,7 @@ void ColumnShare::init_dpn(DPN &dpn, const common::TX_ID xid, const DPN *from) { dpn.max_i = -1; } } + dpn.used = 1; dpn.local = 1; // a new allocated dpn is __always__ owned by write session dpn.synced = 1; // would be reset by Pack when there is update @@ -215,23 +216,31 @@ void ColumnShare::init_dpn(DPN &dpn, const common::TX_ID xid, const DPN *from) { dpn.base = common::INVALID_PACK_INDEX; dpn.xmin = xid; dpn.xmax = common::MAX_XID; - dpn.SetPackPtr(0); + dpn.SetRefCount(0); } - +/* +When creating a dpn structure, logic to free up wasted space is triggered. +When releasing the old space, the transaction ID of each DPN will be determined. If it is smaller than the current +transaction ID, it will be skipped directly and will not be released. In other words, releasing the waste space will +only release the waste space generated by the current transaction. This logic can ensure that, The data of the old +transaction will not be changed, and if the current transaction fails, it can be rolled back to the last most recently +committed transaction. +*/ int ColumnShare::alloc_dpn(common::TX_ID xid, const DPN *from) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); for (uint32_t i = 0; i < capacity; i++) { if (start[i].used == 1) { - if (!(start[i].xmax < ha_tianmu_engine_->MinXID())) + if (!(start[i].xmax < eng->MinXID())) continue; - ha_tianmu_engine_->cache.DropObject(PackCoordinate(owner->TabID(), col_id, i)); + eng->cache.DropObject(PackCoordinate(owner->TabID(), col_id, i)); + // Remove the space pointer from the discarded pack segs.remove_if([i](const auto &s) { return s.idx == i; }); } init_dpn(start[i], xid, from); return i; } - ASSERT((capacity + DPN_INC_CNT) <= (common::COL_DN_FILE_SIZE / sizeof(DPN)), - "Failed to allocate new DN: " + m_path.string()); + ASSERT((capacity + DPN_INC_CNT) <= (COL_DN_FILE_SIZE / sizeof(DPN)), "Failed to allocate new DN: " + m_path.string()); capacity += DPN_INC_CNT; // NOTICE: @@ -248,6 +257,7 @@ void ColumnShare::alloc_seg(DPN *dpn) { uint64_t prev = 0; for (auto it = segs.cbegin(); it != segs.cend(); ++it) { + // Use overwrite if there is usable waste space if (it->offset - prev > dpn->dataLength) { segs.insert(it, {prev, dpn->dataLength, i}); dpn->dataAddress = prev; @@ -255,14 +265,16 @@ void ColumnShare::alloc_seg(DPN *dpn) { } prev = it->offset + it->len; } + // Append Write segs.push_back({prev, dpn->dataLength, i}); dpn->dataAddress = prev; } void ColumnShare::sync_dpns() { - int ret = ::msync(start, common::COL_DN_FILE_SIZE, MS_SYNC); + int ret = ::msync(start, COL_DN_FILE_SIZE, MS_SYNC); if (ret != 0) throw std::system_error(errno, std::system_category(), "msync() " + m_path.string()); } + } // namespace core } // namespace Tianmu diff --git a/storage/tianmu/core/column_share.h b/storage/tianmu/vc/column_share.h similarity index 85% rename from storage/tianmu/core/column_share.h rename to storage/tianmu/vc/column_share.h index b0bdf3a6e..e1dc6ea01 100644 --- a/storage/tianmu/core/column_share.h +++ b/storage/tianmu/vc/column_share.h @@ -22,14 +22,25 @@ #include "common/assert.h" #include "common/common_definitions.h" +#include "common/defs.h" #include "common/mysql_gate.h" -#include "core/column_type.h" -#include "core/dpn.h" +#include "data/dpn.h" #include "util/fs.h" +#include "vc/column_type.h" namespace Tianmu { namespace core { class TableShare; +/* + Number of DPN to reach the max row limiration. + It is calcualted by (max number of row limiration) / (max number of row per pack ) +*/ +constexpr size_t MAX_DPN_NUMS_EACH_COLUMN = + 1 << (common::MAX_ROW_NUM_SHIFT - common::MAX_PSS); // max 128K packs per each column +/* + The size of the file where the DPN metadata resides, in bytes +*/ +constexpr size_t COL_DN_FILE_SIZE = MAX_DPN_NUMS_EACH_COLUMN * sizeof(core::DPN); struct COL_META { uint32_t magic; @@ -77,11 +88,11 @@ class ColumnShare final { } DPN *get_dpn_ptr(common::PACK_INDEX i) { - ASSERT(i < common::COL_DN_FILE_SIZE / sizeof(DPN), "bad dpn index: " + std::to_string(i)); + ASSERT(i < COL_DN_FILE_SIZE / sizeof(DPN), "bad dpn index: " + std::to_string(i)); return &start[i]; } const DPN *get_dpn_ptr(common::PACK_INDEX i) const { - ASSERT(i < common::COL_DN_FILE_SIZE / sizeof(DPN), "bad dpn index: " + std::to_string(i)); + ASSERT(i < COL_DN_FILE_SIZE / sizeof(DPN), "bad dpn index: " + std::to_string(i)); return &start[i]; } @@ -129,6 +140,7 @@ class ColumnShare final { bool has_filter_hist = false; bool has_filter_bloom = false; }; + } // namespace core } // namespace Tianmu diff --git a/storage/tianmu/core/column_type.cpp b/storage/tianmu/vc/column_type.cpp similarity index 97% rename from storage/tianmu/core/column_type.cpp rename to storage/tianmu/vc/column_type.cpp index 906255d58..b9c0aedc3 100644 --- a/storage/tianmu/core/column_type.cpp +++ b/storage/tianmu/vc/column_type.cpp @@ -17,9 +17,9 @@ #include -#include "core/column_type.h" -#include "core/data_type.h" #include "core/quick_math.h" +#include "types/data_type.h" +#include "vc/column_type.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/column_type.h b/storage/tianmu/vc/column_type.h similarity index 99% rename from storage/tianmu/core/column_type.h rename to storage/tianmu/vc/column_type.h index 4607bf94a..159083883 100644 --- a/storage/tianmu/core/column_type.h +++ b/storage/tianmu/vc/column_type.h @@ -19,7 +19,7 @@ #pragma once #include "common/common_definitions.h" -#include "core/tianmu_attr_typeinfo.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/vc/const_column.cpp b/storage/tianmu/vc/const_column.cpp index 58444189f..a370cb93e 100644 --- a/storage/tianmu/vc/const_column.cpp +++ b/storage/tianmu/vc/const_column.cpp @@ -17,10 +17,10 @@ #include "const_column.h" -#include "core/compiled_query.h" #include "core/mysql_expression.h" -#include "core/tianmu_attr.h" #include "core/transaction.h" +#include "optimizer/compile/compiled_query.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { diff --git a/storage/tianmu/vc/const_column.h b/storage/tianmu/vc/const_column.h index 2b8a8c4ea..a75d0ffc1 100644 --- a/storage/tianmu/vc/const_column.h +++ b/storage/tianmu/vc/const_column.h @@ -18,8 +18,8 @@ #define TIANMU_VC_CONST_COLUMN_H_ #pragma once -#include "core/mi_updating_iterator.h" -#include "core/pack_guardian.h" +#include "data/pack_guardian.h" +#include "optimizer/iterators/mi_updating_iterator.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -58,6 +58,7 @@ class ConstColumn : public VirtualColumn { int64_t GetValueInt64Impl([[maybe_unused]] const core::MIIterator &mit) override { return value_or_null_.IsNull() ? common::NULL_VALUE_64 : value_or_null_.Get64(); } + bool GetUnsignedFlagImpl() override { return value_or_null_.GetUnsignedFlag(); } bool IsNullImpl([[maybe_unused]] const core::MIIterator &mit) override { return value_or_null_.IsNull(); } void GetValueStringImpl(types::BString &s, const core::MIIterator &mit) override; double GetValueDoubleImpl(const core::MIIterator &mit) override; diff --git a/storage/tianmu/vc/const_expr_column.cpp b/storage/tianmu/vc/const_expr_column.cpp index 3b09a18e1..2002e5e5c 100644 --- a/storage/tianmu/vc/const_expr_column.cpp +++ b/storage/tianmu/vc/const_expr_column.cpp @@ -17,9 +17,9 @@ #include "const_expr_column.h" -#include "core/compiled_query.h" #include "core/mysql_expression.h" -#include "core/tianmu_attr.h" +#include "optimizer/compile/compiled_query.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { diff --git a/storage/tianmu/vc/const_expr_column.h b/storage/tianmu/vc/const_expr_column.h index 311b9b031..61d66dacb 100644 --- a/storage/tianmu/vc/const_expr_column.h +++ b/storage/tianmu/vc/const_expr_column.h @@ -18,8 +18,8 @@ #define TIANMU_VC_CONST_EXPR_COLUMN_H_ #pragma once -#include "core/mi_updating_iterator.h" -#include "core/pack_guardian.h" +#include "data/pack_guardian.h" +#include "optimizer/iterators/mi_updating_iterator.h" #include "vc/expr_column.h" namespace Tianmu { @@ -96,6 +96,8 @@ class ConstExpressionColumn : public ExpressionColumn { return last_val_->IsNull() ? common::NULL_VALUE_64 : last_val_->Get64(); } + bool GetUnsignedFlagImpl() override { return last_val_->GetUnsignedFlag(); } + double GetValueDoubleImpl(const core::MIIterator &mit) override; int64_t GetMinInt64Impl([[maybe_unused]] const core::MIIterator &mit) override { return last_val_->IsNull() ? common::MINUS_INF_64 : last_val_->Get64(); diff --git a/storage/tianmu/vc/expr_column.cpp b/storage/tianmu/vc/expr_column.cpp index 290870c6b..013958049 100644 --- a/storage/tianmu/vc/expr_column.cpp +++ b/storage/tianmu/vc/expr_column.cpp @@ -16,9 +16,10 @@ */ #include "expr_column.h" -#include "core/compiled_query.h" +#include #include "core/mysql_expression.h" -#include "core/tianmu_attr.h" +#include "optimizer/compile/compiled_query.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { @@ -101,42 +102,89 @@ bool ExpressionColumn::FeedArguments(const core::MIIterator &mit) { first_eval_ = false; return true; } + for (auto &it : var_map_) { core::ValueOrNull v(it.just_a_table_ptr->GetComplexValue(mit[it.dim], it.col_ndx)); v.MakeStringOwner(); + auto cache = var_buf_.find(it.var_id); DEBUG_ASSERT(cache != var_buf_.end()); + diff = diff || (v != cache->second.begin()->first); - if (diff) - for (auto &val_it : cache->second) *(val_it.second) = val_it.first = v; + if (diff) { + for (auto &val_it : cache->second) { + val_it.first = v; + *(val_it.second) = val_it.first; + } + } } + first_eval_ = false; + + { + Item *item = expr_->GetItem(); + if (item && (Item::FUNC_ITEM == item->type()) && (dynamic_cast(item))) { + return true; + } + } + return (diff || !deterministic_); } int64_t ExpressionColumn::GetValueInt64Impl(const core::MIIterator &mit) { + static std::mutex scp_mutex; + std::scoped_lock lock(scp_mutex); + if (FeedArguments(mit)) last_val_ = expr_->Evaluate(); + if (last_val_->IsNull()) return common::NULL_VALUE_64; + + // In `FeedArguments`, the stings were stored in var_buf_, but we don't want to store all the data + // in due to the limitation of memory resource. Therefore, to store in FeedArguments, and frees the + // stored resource. This perphaps wastes some computing cost, but the memory cost is saved. And the + // memory leakage occur if we don't call clear. + for (auto &it : var_map_) { + auto cache = var_buf_.find(it.var_id); + DEBUG_ASSERT(cache != var_buf_.end()); + + for (auto &val_it : cache->second) { + if (&val_it.first) + val_it.first.Clear_SP(); + if (val_it.second) + val_it.second->Clear_SP(); + } + } + return last_val_->Get64(); } bool ExpressionColumn::IsNullImpl(const core::MIIterator &mit) { + { + Item *item = expr_->GetItem(); + if (item && (Item::FUNC_ITEM == item->type()) && (dynamic_cast(item))) { + return false; + } + } + if (FeedArguments(mit)) last_val_ = expr_->Evaluate(); + return last_val_->IsNull(); } void ExpressionColumn::GetValueStringImpl(types::BString &s, const core::MIIterator &mit) { if (FeedArguments(mit)) last_val_ = expr_->Evaluate(); + if (core::ATI::IsDateTimeType(TypeName())) { int64_t tmp; types::TianmuDateTime vd(last_val_->Get64(), TypeName()); vd.ToInt64(tmp); last_val_->SetFixed(tmp); } + last_val_->GetBString(s); } @@ -154,13 +202,13 @@ double ExpressionColumn::GetValueDoubleImpl(const core::MIIterator &mit) { else if (core::ATI::IsRealType(TypeName())) { val = last_val_->GetDouble(); } else if (core::ATI::IsDateTimeType(TypeName())) { - types::TianmuDateTime vd(last_val_->Get64(), - TypeName()); // 274886765314048 -> 2000-01-01 - int64_t vd_conv = 0; - vd.ToInt64(vd_conv); // 2000-01-01 -> 20000101 + types::TianmuDateTime vd(last_val_->Get64(), TypeName()); // 274886765314048 -> 2000-01-01 + int64_t vd_conv = 0; // 2000-01-01 -> 20000101 + vd.ToInt64(vd_conv); val = (double)vd_conv; } else if (core::ATI::IsStringType(TypeName())) { auto str = last_val_->ToString(); + if (str) val = std::stod(*str); } else @@ -175,14 +223,19 @@ types::TianmuValueObject ExpressionColumn::GetValueImpl(const core::MIIterator & GetValueString(s, mit); return s; } + if (core::ATI::IsIntegerType(TypeName())) return types::TianmuNum(GetValueInt64(mit), -1, false, TypeName()); + if (core::ATI::IsDateTimeType(TypeName())) return types::TianmuDateTime(GetValueInt64(mit), TypeName()); + if (core::ATI::IsRealType(TypeName())) return types::TianmuNum(GetValueInt64(mit), 0, true, TypeName()); + if (lookup_to_num || TypeName() == common::ColumnType::NUM || TypeName() == common::ColumnType::BIT) return types::TianmuNum(GetValueInt64(mit), Type().GetScale()); + DEBUG_ASSERT(!"Illegal execution path"); return types::TianmuValueObject(); } @@ -212,6 +265,7 @@ int64_t ExpressionColumn::GetApproxDistValsImpl([[maybe_unused]] bool incl_nulls [[maybe_unused]] core::RoughMultiIndex *rough_mind) { if (multi_index_->TooManyTuples()) return common::PLUS_INF_64; + return multi_index_->NumOfTuples(); // default } @@ -247,6 +301,7 @@ int64_t ExpressionColumn::RoughMinImpl() { double dmin = -(DBL_MAX); return *(int64_t *)(&dmin); } + return common::MINUS_INF_64; } @@ -255,6 +310,7 @@ int64_t ExpressionColumn::RoughMaxImpl() { double dmax = DBL_MAX; return *(int64_t *)(&dmax); } + return common::PLUS_INF_64; } @@ -268,12 +324,15 @@ bool ExpressionColumn::IsDistinctImpl() { return false; } bool ExpressionColumn::ExactlyOneLookup() { if (!deterministic_) return false; + auto iter = var_map_.begin(); if (iter == var_map_.end() || !iter->GetTabPtr()->GetColumnType(iter->col_ndx).Lookup()) return false; // not a lookup + iter++; if (iter != var_map_.end()) // more than one column return false; + return true; } @@ -290,14 +349,20 @@ void ExpressionColumn::FeedLookupArguments(core::MILookupIterator &mit) { v = col->DecodeValue_S(mit[0]); auto cache = var_buf_.find(iter->var_id); - for (auto &val_it : cache->second) *(val_it.second) = val_it.first = v; + for (auto &val_it : cache->second) { + val_it.first = v; + *(val_it.second) = v; + } if (mit.IsValid() && mit[0] != common::NULL_VALUE_64 && mit[0] >= col->Cardinality()) mit.Invalidate(); } void ExpressionColumn::LockSourcePacks(const core::MIIterator &mit) { - for (auto &it : var_map_) it.just_a_table_ptr = it.GetTabPtr().get(); + for (auto &it : var_map_) { + it.just_a_table_ptr = it.GetTabPtr().get(); + } + VirtualColumn::LockSourcePacks(mit); } } // namespace vcolumn diff --git a/storage/tianmu/vc/expr_column.h b/storage/tianmu/vc/expr_column.h index 834e93809..9b725d256 100644 --- a/storage/tianmu/vc/expr_column.h +++ b/storage/tianmu/vc/expr_column.h @@ -20,8 +20,8 @@ #include -#include "core/mi_updating_iterator.h" -#include "core/pack_guardian.h" +#include "data/pack_guardian.h" +#include "optimizer/iterators/mi_updating_iterator.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -83,6 +83,7 @@ class ExpressionColumn : public VirtualColumn { /////////////// Data access ////////////////////// protected: int64_t GetValueInt64Impl(const core::MIIterator &) override; + bool GetUnsignedFlagImpl() override { return static_cast(expr_->GetItem()->unsigned_flag); } bool IsNullImpl(const core::MIIterator &) override; void GetValueStringImpl(types::BString &, const core::MIIterator &) override; double GetValueDoubleImpl(const core::MIIterator &) override; diff --git a/storage/tianmu/vc/in_set_column.cpp b/storage/tianmu/vc/in_set_column.cpp index 04605fc96..b9ce999ac 100644 --- a/storage/tianmu/vc/in_set_column.cpp +++ b/storage/tianmu/vc/in_set_column.cpp @@ -17,11 +17,11 @@ #include "in_set_column.h" -#include "core/compiled_query.h" #include "core/mysql_expression.h" -#include "core/tianmu_attr.h" +#include "optimizer/compile/compiled_query.h" #include "vc/const_column.h" #include "vc/expr_column.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { diff --git a/storage/tianmu/vc/in_set_column.h b/storage/tianmu/vc/in_set_column.h index d68c42e7c..e9b68e5ab 100644 --- a/storage/tianmu/vc/in_set_column.h +++ b/storage/tianmu/vc/in_set_column.h @@ -18,10 +18,10 @@ #define TIANMU_VC_IN_SET_COLUMN_H_ #pragma once -#include "core/mi_updating_iterator.h" -#include "core/pack_guardian.h" #include "core/temp_table.h" #include "core/value_set.h" +#include "data/pack_guardian.h" +#include "optimizer/iterators/mi_updating_iterator.h" #include "vc/multi_value_column.h" namespace Tianmu { diff --git a/storage/tianmu/vc/multi_value_column.h b/storage/tianmu/vc/multi_value_column.h index 847a89a1d..99c4278f7 100644 --- a/storage/tianmu/vc/multi_value_column.h +++ b/storage/tianmu/vc/multi_value_column.h @@ -18,8 +18,8 @@ #define TIANMU_VC_MULTI_VALUE_COLUMN_H_ #pragma once -#include "core/mi_updating_iterator.h" -#include "core/pack_guardian.h" +#include "data/pack_guardian.h" +#include "optimizer/iterators/mi_updating_iterator.h" #include "types/tianmu_num.h" #include "vc/virtual_column.h" @@ -194,6 +194,10 @@ class MultiValColumn : public VirtualColumn { DEBUG_ASSERT(!"Invalid call for this type of column."); return (0); } + bool GetUnsignedFlagImpl() override { + DEBUG_ASSERT(!"Invalid call for this type of column."); + return (false); + } double GetValueDoubleImpl([[maybe_unused]] const core::MIIterator &mit) override { DEBUG_ASSERT(!"Invalid call for this type of column."); return (0); diff --git a/storage/tianmu/core/physical_column.h b/storage/tianmu/vc/physical_column.h similarity index 99% rename from storage/tianmu/core/physical_column.h rename to storage/tianmu/vc/physical_column.h index 9955f0eff..de22efb6f 100644 --- a/storage/tianmu/core/physical_column.h +++ b/storage/tianmu/vc/physical_column.h @@ -18,10 +18,10 @@ #define TIANMU_CORE_PHYSICAL_COLUMN_H_ #pragma once -#include "core/column.h" -#include "core/descriptor.h" #include "core/mysql_expression.h" +#include "optimizer/compile/descriptor.h" #include "types/text_stat.h" +#include "vc/column.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/vc/single_column.cpp b/storage/tianmu/vc/single_column.cpp index ddeb9f467..d393815be 100644 --- a/storage/tianmu/vc/single_column.cpp +++ b/storage/tianmu/vc/single_column.cpp @@ -17,9 +17,9 @@ #include "single_column.h" -#include "core/compiled_query.h" #include "core/mysql_expression.h" -#include "core/tianmu_attr.h" +#include "optimizer/compile/compiled_query.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { diff --git a/storage/tianmu/vc/single_column.h b/storage/tianmu/vc/single_column.h index 83718ddcb..efbaab686 100644 --- a/storage/tianmu/vc/single_column.h +++ b/storage/tianmu/vc/single_column.h @@ -18,9 +18,9 @@ #define TIANMU_VC_SINGLE_COLUMN_H_ #pragma once -#include "core/mi_updating_iterator.h" -#include "core/pack_guardian.h" -#include "core/physical_column.h" +#include "data/pack_guardian.h" +#include "optimizer/iterators/mi_updating_iterator.h" +#include "vc/physical_column.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -73,6 +73,7 @@ class SingleColumn : public VirtualColumn { protected: int64_t GetValueInt64Impl(const core::MIIterator &mit) override { return col_->GetValueInt64(mit[dim_]); } + bool GetUnsignedFlagImpl() override { return col_->Type().GetUnsigned(); } bool IsNullImpl(const core::MIIterator &mit) override { return col_->IsNull(mit[dim_]); } void GetValueStringImpl(types::BString &s, const core::MIIterator &mit) override { col_->GetValueString(mit[dim_], s); diff --git a/storage/tianmu/vc/subselect_column.cpp b/storage/tianmu/vc/subselect_column.cpp index b33109019..a30d98035 100644 --- a/storage/tianmu/vc/subselect_column.cpp +++ b/storage/tianmu/vc/subselect_column.cpp @@ -17,11 +17,11 @@ #include "subselect_column.h" -#include "core/compiled_query.h" #include "core/mysql_expression.h" -#include "core/tianmu_attr.h" #include "core/value_set.h" +#include "optimizer/compile/compiled_query.h" #include "vc/const_column.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { diff --git a/storage/tianmu/vc/subselect_column.h b/storage/tianmu/vc/subselect_column.h index cbea17c8a..87e75ec29 100644 --- a/storage/tianmu/vc/subselect_column.h +++ b/storage/tianmu/vc/subselect_column.h @@ -18,10 +18,10 @@ #define TIANMU_VC_SUBSELECT_COLUMN_H_ #pragma once -#include "core/mi_updating_iterator.h" -#include "core/pack_guardian.h" #include "core/rough_value.h" #include "core/temp_table.h" +#include "data/pack_guardian.h" +#include "optimizer/iterators/mi_updating_iterator.h" #include "vc/multi_value_column.h" namespace Tianmu { diff --git a/storage/tianmu/core/tianmu_attr.cpp b/storage/tianmu/vc/tianmu_attr.cpp similarity index 86% rename from storage/tianmu/core/tianmu_attr.cpp rename to storage/tianmu/vc/tianmu_attr.cpp index c6969075d..fa807d305 100644 --- a/storage/tianmu/core/tianmu_attr.cpp +++ b/storage/tianmu/vc/tianmu_attr.cpp @@ -21,14 +21,11 @@ #include "common/common_definitions.h" #include "common/data_format.h" -#include "core/dpn.h" -#include "core/pack_int.h" -#include "core/pack_str.h" -#include "core/tianmu_attr.h" -#include "core/tianmu_attr_typeinfo.h" -#include "core/tools.h" #include "core/transaction.h" #include "core/value.h" +#include "data/dpn.h" +#include "data/pack_int.h" +#include "data/pack_str.h" #include "loader/load_parser.h" #include "loader/value_cache.h" #include "system/fet.h" @@ -36,6 +33,9 @@ #include "types/tianmu_data_types.h" #include "util/fs.h" #include "util/log_ctl.h" +#include "util/tools.h" +#include "vc/tianmu_attr.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace core { @@ -151,7 +151,7 @@ void TianmuAttr::Create(const fs::path &dir, const AttributeTypeInfo &ati, uint8 } fdn.WriteExact(&dpn, sizeof(dpn)); fdn.Flush(); - fs::resize_file(dir / common::COL_DN_FILE, common::COL_DN_FILE_SIZE); + fs::resize_file(dir / common::COL_DN_FILE, core::COL_DN_FILE_SIZE); } // create filter directories @@ -171,8 +171,11 @@ void TianmuAttr::LoadVersion(common::TX_ID xid) { SetUniqueUpdated(hdr.unique_updated); if (hdr.dict_ver != 0) { - m_dict = ha_tianmu_engine_->cache.GetOrFetchObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), this); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + m_dict = eng->cache.GetOrFetchObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), this); } + m_idx.resize(hdr.numOfPacks); fattr.ReadExact(&m_idx[0], sizeof(common::PACK_INDEX) * hdr.numOfPacks); } @@ -266,6 +269,9 @@ void TianmuAttr::SaveFilters() { bool TianmuAttr::SaveVersion() { ASSERT(m_tx != nullptr, "Attempt to modify table in read-only transaction"); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + ASSERT(eng); + // save modified pack data for (size_t i = 0; i < m_idx.size(); i++) { auto &dpn = get_dpn(i); @@ -277,15 +283,15 @@ bool TianmuAttr::SaveVersion() { // trivial or already saved to disk if (auto p = get_pack(i); p != nullptr) { p->Unlock(); - ha_tianmu_engine_->cache.DropObject(get_pc(i)); - dpn.SetPackPtr(0); + eng->cache.DropObject(get_pc(i)); + dpn.SetRefCount(0); } continue; } get_pack(i)->Save(); get_pack(i)->Unlock(); // now it can be released by MM - dpn.SetPackPtr(0); + dpn.SetRefCount(0); } } @@ -328,25 +334,25 @@ bool TianmuAttr::SaveVersion() { void TianmuAttr::PostCommit() { if (!no_change) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (size_t i = 0; i < m_idx.size(); i++) { auto &dpn = get_dpn(i); if (dpn.IsLocal()) { dpn.SetLocal(false); if (dpn.base != common::INVALID_PACK_INDEX) - m_share->get_dpn_ptr(dpn.base)->xmax = ha_tianmu_engine_->MaxXID(); + m_share->get_dpn_ptr(dpn.base)->xmax = eng->MaxXID(); } } - ha_tianmu_engine_->DeferRemove(Path() / common::COL_VERSION_DIR / m_version.ToString(), m_tid); + eng->DeferRemove(Path() / common::COL_VERSION_DIR / m_version.ToString(), m_tid); if (m_share->has_filter_bloom) - ha_tianmu_engine_->DeferRemove( - Path() / common::COL_FILTER_DIR / common::COL_FILTER_BLOOM_DIR / m_version.ToString(), m_tid); + eng->DeferRemove(Path() / common::COL_FILTER_DIR / common::COL_FILTER_BLOOM_DIR / m_version.ToString(), m_tid); if (m_share->has_filter_cmap) - ha_tianmu_engine_->DeferRemove( - Path() / common::COL_FILTER_DIR / common::COL_FILTER_CMAP_DIR / m_version.ToString(), m_tid); + eng->DeferRemove(Path() / common::COL_FILTER_DIR / common::COL_FILTER_CMAP_DIR / m_version.ToString(), m_tid); if (m_share->has_filter_hist) - ha_tianmu_engine_->DeferRemove( - Path() / common::COL_FILTER_DIR / common::COL_FILTER_HIST_DIR / m_version.ToString(), m_tid); + eng->DeferRemove(Path() / common::COL_FILTER_DIR / common::COL_FILTER_HIST_DIR / m_version.ToString(), m_tid); m_version = m_tx->GetID(); } @@ -354,10 +360,13 @@ void TianmuAttr::PostCommit() { } void TianmuAttr::Rollback() { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (size_t i = 0; i < m_idx.size(); i++) { auto &dpn(get_dpn(i)); if (dpn.IsLocal()) { - ha_tianmu_engine_->cache.DropObject(get_pc(i)); + eng->cache.DropObject(get_pc(i)); dpn.reset(); } } @@ -366,12 +375,17 @@ void TianmuAttr::Rollback() { void TianmuAttr::LoadPackInfo([[maybe_unused]] Transaction *trans_) { if (hdr.dict_ver != 0 && !m_dict) { - m_dict = ha_tianmu_engine_->cache.GetOrFetchObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), this); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + m_dict = eng->cache.GetOrFetchObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), this); } } PackOntologicalStatus TianmuAttr::GetPackOntologicalStatus(int pack_no) { LoadPackInfo(); + if (m_idx.empty() || (!m_idx.size())) { + return PackOntologicalStatus::NULLS_ONLY; + } DPN const *dpn(pack_no >= 0 ? &get_dpn(pack_no) : nullptr); if (pack_no < 0 || dpn->NullOnly()) return PackOntologicalStatus::NULLS_ONLY; @@ -654,11 +668,14 @@ types::BString TianmuAttr::DecodeValue_S(int64_t code) { int TianmuAttr::EncodeValue_T(const types::BString &tianmu_s, bool new_val, common::ErrorCode *tianmu_err_code) { if (tianmu_err_code) *tianmu_err_code = common::ErrorCode::SUCCESS; + if (tianmu_s.IsNull()) return common::NULL_VALUE_32; + if (ATI::IsStringType(TypeName())) { DEBUG_ASSERT(GetPackType() == common::PackType::INT); LoadPackInfo(); + int vs = m_dict->GetEncodedValue(tianmu_s.val_, tianmu_s.len_); if (vs < 0) { if (!new_val) { @@ -666,6 +683,8 @@ int TianmuAttr::EncodeValue_T(const types::BString &tianmu_s, bool new_val, comm } ASSERT(m_tx != nullptr, "attempt to update dictionary in readonly transaction"); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); // copy on write if (!m_dict->Changed()) { @@ -673,24 +692,29 @@ int TianmuAttr::EncodeValue_T(const types::BString &tianmu_s, bool new_val, comm m_dict = sp->Clone(); sp->Unlock(); hdr.dict_ver++; - ha_tianmu_engine_->cache.PutObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), m_dict); + eng->cache.PutObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), m_dict); } vs = m_dict->Add(tianmu_s.val_, tianmu_s.len_); } return vs; } + char const *val = tianmu_s.val_; if (val == 0) val = ZERO_LENGTH_STRING; + if (ATI::IsDateTimeType(TypeName()) || TypeName() == common::ColumnType::BIGINT) { ASSERT(0, "Wrong data type!"); } else { types::TianmuNum tianmu_n; common::ErrorCode tmp_tianmu_rc = types::TianmuNum::Parse(tianmu_s, tianmu_n, TypeName()); + if (tianmu_err_code) *tianmu_err_code = tmp_tianmu_rc; + return (int)(int64_t)tianmu_n; } + return common::NULL_VALUE_32; } @@ -701,6 +725,7 @@ int64_t TianmuAttr::EncodeValue64(types::TianmuDataType *v, bool &rounded, commo rounded = false; if (tianmu_err_code) *tianmu_err_code = common::ErrorCode::SUCCESS; + if (!v || v->IsNull()) return common::NULL_VALUE_64; @@ -709,6 +734,7 @@ int64_t TianmuAttr::EncodeValue64(types::TianmuDataType *v, bool &rounded, commo } else if (ATI::IsDateTimeType(TypeName()) || ATI::IsDateTimeNType(TypeName())) { return ((types::TianmuDateTime *)v)->GetInt64(); } + ASSERT(GetPackType() == common::PackType::INT, "Pack type must be numeric!"); int64_t vv = ((types::TianmuNum *)v)->ValueInt(); @@ -721,6 +747,7 @@ int64_t TianmuAttr::EncodeValue64(types::TianmuDataType *v, bool &rounded, commo // for(int i=0;iIsReal()) { // v is double double vd = *(double *)(&vv); vd *= types::Uint64PowOfTen(Type().GetScale()); // translate into int64_t of proper precision @@ -730,10 +757,10 @@ int64_t TianmuAttr::EncodeValue64(types::TianmuDataType *v, bool &rounded, commo return common::MINUS_INF_64; int64_t res = int64_t(vd); if (fabs(vd - double(res)) > 0.01) - rounded = true; // ignore errors which are 2 digits less than declared - // precision + rounded = true; // ignore errors which are 2 digits less than declared precision return res; } + unsigned char dplaces = Type().GetScale(); while (vp < dplaces) { if (vv < common::MINUS_INF_64 / 10) @@ -743,9 +770,11 @@ int64_t TianmuAttr::EncodeValue64(types::TianmuDataType *v, bool &rounded, commo vv *= 10; vp++; } + while (vp > dplaces) { if (vv % 10 != 0) rounded = true; + vv /= 10; vp--; } @@ -783,6 +812,9 @@ void TianmuAttr::LockPackForUse(common::PACK_INDEX pn) { if (dpn->Trivial() && !dpn->IsLocal()) return; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + while (true) { if (dpn->IncRef()) return; @@ -794,13 +826,23 @@ void TianmuAttr::LockPackForUse(common::PACK_INDEX pn) { // we win the chance to load data std::shared_ptr sp; try { - sp = ha_tianmu_engine_->cache.GetOrFetchObject(get_pc(pn), this); + sp = eng->cache.GetOrFetchObject(get_pc(pn), this); + } catch (Tianmu::common::TianmuError &e) { + dpn->SetRefCount(0); + TIANMU_LOG(LogCtl_Level::ERROR, "An TianmuError exception is caught: %s", e.Message().c_str()); + + throw e; + } catch (Tianmu::common::Exception &e) { + dpn->SetRefCount(0); + TIANMU_LOG(LogCtl_Level::ERROR, "An common::Exception is caught: %s", e.getExceptionMsg().c_str()); + + throw e; } catch (std::exception &e) { - dpn->SetPackPtr(0); + dpn->SetRefCount(0); TIANMU_LOG(LogCtl_Level::ERROR, "An exception is caught: %s", e.what()); throw e; } catch (...) { - dpn->SetPackPtr(0); + dpn->SetRefCount(0); TIANMU_LOG(LogCtl_Level::ERROR, "An unknown system exception error caught."); throw; } @@ -832,7 +874,7 @@ void TianmuAttr::UnlockPackFromUse(common::PACK_INDEX pn) { if (dpn->Trivial()) return; - auto v = dpn->GetPackPtr(); + auto v = dpn->GetRefCount(); unsigned long newv; do { @@ -882,7 +924,10 @@ void TianmuAttr::PreparePackForLoad() { auto ret = m_share->alloc_dpn(m_tx->GetID()); m_idx.push_back(ret); } else { - CopyPackForWrite(SizeOfPack() - 1); + DPN &dpn = get_dpn(SizeOfPack() - 1); + if (!dpn.Trivial()) { + CopyPackForWrite(SizeOfPack() - 1); + } } } @@ -907,16 +952,21 @@ void TianmuAttr::LoadData(loader::ValueCache *nvs, Transaction *conn_info) { } DPN &dpn = get_dpn(pi); - Pack *pack = get_pack(pi); - if (!dpn.Trivial()) { - pack->Save(); - } - if (current_txn_->LoadSource() == common::LoadSource::LS_File) { + if (/*current_txn_->LoadSource() == common::LoadSource::LS_Direct ||*/ + current_txn_->LoadSource() == common::LoadSource::LS_File || dpn.numOfRecords == (1U << pss)) { + Pack *pack = get_pack(pi); + if (!dpn.Trivial()) { + pack->Save(); + } + if (pack) { pack->Unlock(); } - ha_tianmu_engine_->cache.DropObject(get_pc(pi)); - dpn.SetPackPtr(0); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + eng->cache.DropObject(get_pc(pi)); + dpn.SetRefCount(0); } hdr.numOfRecords += nvs->NumOfValues(); @@ -971,6 +1021,9 @@ void TianmuAttr::LoadDataPackN(size_t pi, loader::ValueCache *nvs) { // now dpn->sum has been updated // uniform package + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + if ((dpn.numOfNulls + load_nulls) == 0 && load_min == load_max && nvs->NumOfDeletes() == 0 && (dpn.numOfRecords == 0 || (dpn.min_i == load_min && dpn.max_i == load_max))) { dpn.min_i = load_min; @@ -980,11 +1033,12 @@ void TianmuAttr::LoadDataPackN(size_t pi, loader::ValueCache *nvs) { // new package (also in case of expanding so-far-uniform package) if (dpn.Trivial()) { // we need a pack struct for the previous trivial dp - auto sp = ha_tianmu_engine_->cache.GetOrFetchObject(get_pc(pi), this); + auto sp = eng->cache.GetOrFetchObject(get_pc(pi), this); // we don't need any synchronization here because the dpn is local! - dpn.SetPackPtr(reinterpret_cast(sp.get()) + tag_one); + dpn.SetRefCount(reinterpret_cast(sp.get()) + tag_one); } + get_packN(pi)->LoadValues(nvs, nv); } @@ -1024,10 +1078,13 @@ void TianmuAttr::LoadDataPackS(size_t pi, loader::ValueCache *nvs) { return; } + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + // new package or expanding so-far-null package if (dpn.numOfRecords == 0 || dpn.NullOnly()) { - auto sp = ha_tianmu_engine_->cache.GetOrFetchObject(get_pc(pi), this); - dpn.SetPackPtr(reinterpret_cast(sp.get()) + tag_one); + auto sp = eng->cache.GetOrFetchObject(get_pc(pi), this); + dpn.SetRefCount(reinterpret_cast(sp.get()) + tag_one); } get_packS(pi)->LoadValues(nvs); @@ -1037,20 +1094,39 @@ void TianmuAttr::UpdateData(uint64_t row, Value &old_v, Value &new_v) { // rclog << lock << "update data for row " << row << " col " << m_cid << // system::unlock; no_change = false; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + ASSERT(eng); auto pn = row2pack(row); FunctionExecutor fe([this, pn]() { LockPackForUse(pn); }, [this, pn]() { UnlockPackFromUse(pn); }); + // primary key process - UpdateIfIndex(nullptr, row, ColId(), old_v, new_v); + uint32_t colid = this->m_share->col_id; + auto owner = this->m_share->owner; + if (owner->s->primary_key == colid) { // if this col is defined as PK. Now, tianmu does not support unique key now. + common::ErrorCode err = UpdateIfIndex(nullptr, row, ColId(), old_v, new_v); + + if (eng && eng->getExtra() == HA_EXTRA_IGNORE_DUP_KEY) { // using `ingore` keyword + if (err == common::ErrorCode::DUPP_KEY) + return; + else if (err == common::ErrorCode::NOT_FOUND_KEY) + ; + else if (err == common::ErrorCode::FAILED) + ; + } else { // without `ignore` keywords. we throw a `DupKeyException` execption. + if (err == common::ErrorCode::DUPP_KEY) + throw common::DupKeyException(""); + else if (err == common::ErrorCode::NOT_FOUND_KEY) + ; + else if (err == common::ErrorCode::FAILED) + ; + } + } CopyPackForWrite(pn); auto &dpn = get_dpn(pn); auto dpn_save = dpn; - if (dpn.Trivial()) { - // need to create pack struct for previous trivial pack - ha_tianmu_engine_->cache.GetOrFetchObject(get_pc(pn), this); - } if (ct.Lookup() && new_v.HasValue()) { auto &str = new_v.GetString(); @@ -1063,8 +1139,9 @@ void TianmuAttr::UpdateData(uint64_t row, Value &old_v, Value &new_v) { m_dict = sp->Clone(); sp->Unlock(); hdr.dict_ver++; - ha_tianmu_engine_->cache.PutObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), m_dict); + eng->cache.PutObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), m_dict); } + code = m_dict->Add(str.data(), str.size()); } new_v.SetInt(code); @@ -1080,11 +1157,12 @@ void TianmuAttr::UpdateData(uint64_t row, Value &old_v, Value &new_v) { ResetMaxMin(dpn); } -void TianmuAttr::UpdateBatchData(core::Transaction *tx, const std::unordered_map &rows) { +void TianmuAttr::UpdateBatchData(core::Transaction *tx, + const std::unordered_map> &rows) { no_change = false; // group by pn - std::unordered_map> packs; + std::unordered_map>> packs; for (const auto &row : rows) { auto row_id = row.first; auto row_val = row.second; @@ -1093,25 +1171,25 @@ void TianmuAttr::UpdateBatchData(core::Transaction *tx, const std::unordered_map if (pack != packs.end()) { pack->second.emplace(row_id, row_val); } else { - packs.emplace(pn, std::unordered_map{{row_id, row_val}}); + packs.emplace(pn, std::unordered_map>{{row_id, row_val}}); } } + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + for (const auto &pack : packs) { auto pn = pack.first; FunctionExecutor fe([this, pn]() { LockPackForUse(pn); }, [this, pn]() { UnlockPackFromUse(pn); }); CopyPackForWrite(pn); auto &dpn = get_dpn(pn); auto dpn_save = dpn; - if (dpn.Trivial()) { - ha_tianmu_engine_->cache.GetOrFetchObject(get_pc(pn), this); - } for (const auto &row : pack.second) { uint64_t row_id = row.first; - Value row_val = row.second; - if (ct.Lookup() && row_val.HasValue()) { - auto &str = row_val.GetString(); + std::shared_ptr row_val = row.second; + if (ct.Lookup() && row_val->HasValue()) { + auto &str = row_val->GetString(); int code = m_dict->GetEncodedValue(str.data(), str.size()); if (code < 0) { ASSERT(m_tx != nullptr, "attempt to update dictionary in readonly transaction"); @@ -1120,13 +1198,13 @@ void TianmuAttr::UpdateBatchData(core::Transaction *tx, const std::unordered_map m_dict = sp->Clone(); sp->Unlock(); hdr.dict_ver++; - ha_tianmu_engine_->cache.PutObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), m_dict); + eng->cache.PutObject(FTreeCoordinate(m_tid, m_cid, hdr.dict_ver), m_dict); } code = m_dict->Add(str.data(), str.size()); } - row_val.SetInt(code); + row_val->SetInt(code); } - get_pack(pn)->UpdateValue(row2offset(row_id), row_val); + get_pack(pn)->UpdateValue(row2offset(row_id), *row_val); } dpn.synced = false; @@ -1169,10 +1247,6 @@ void TianmuAttr::DeleteData(uint64_t row) { CopyPackForWrite(pn); auto &dpn = get_dpn(pn); auto dpn_save = dpn; - if (dpn.Trivial()) { - // need to create pack struct for previous trivial pack - ha_tianmu_engine_->cache.GetOrFetchObject(get_pc(pn), this); - } get_pack(pn)->DeleteByRow(row2offset(row)); // update global data @@ -1202,9 +1276,6 @@ void TianmuAttr::DeleteBatchData(core::Transaction *tx, const std::vectorcache.GetOrFetchObject(get_pc(pn), this); - } for (const auto &row_id : pack.second) { get_pack(pn)->DeleteByRow(row2offset(row_id)); @@ -1251,7 +1322,7 @@ void TianmuAttr::ResetMaxMin(DPN &dpn) { } void TianmuAttr::CopyPackForWrite(common::PACK_INDEX pi) { - if (get_dpn(pi).IsLocal()) + if (get_dpn(pi).IsLocal() && get_pack(pi)) return; auto &old_dpn(get_dpn(pi)); // save a ref to the old dpn @@ -1262,24 +1333,24 @@ void TianmuAttr::CopyPackForWrite(common::PACK_INDEX pi) { m_idx[pi] = pos; auto &dpn(get_dpn(pi)); - // if (dpn.Trivial()) - // return; - const PackCoordinate pc_old(m_tid, m_cid, m_share->GetPackIndex(&old_dpn)); const PackCoordinate pc_new(get_pc(pi)); std::shared_ptr new_pack; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + // if the pack data is already loaded, just clone it to avoid disk IO // otherwise, load pack data from disk - auto pack = ha_tianmu_engine_->cache.GetLockedObject(pc_old); + auto pack = eng->cache.GetLockedObject(pc_old); if (pack) { new_pack = pack->Clone(pc_new); new_pack->SetDPN(&dpn); // need to set dpn after clone - ha_tianmu_engine_->cache.PutObject(pc_new, new_pack); + eng->cache.PutObject(pc_new, new_pack); pack->Unlock(); } else { - new_pack = ha_tianmu_engine_->cache.GetOrFetchObject(get_pc(pi), this); + new_pack = eng->cache.GetOrFetchObject(get_pc(pi), this); } - dpn.SetPackPtr(reinterpret_cast(new_pack.get()) + tag_one); + dpn.SetRefCount(reinterpret_cast(new_pack.get()) + tag_one); } void TianmuAttr::CompareAndSetCurrentMin(const types::BString &tstmp, types::BString &min, bool set) { @@ -1423,9 +1494,9 @@ void TianmuAttr::RefreshFilter(common::PACK_INDEX pi) { UpdateRSI_Hist(pi); } -Pack *TianmuAttr::get_pack(size_t i) { return reinterpret_cast(get_dpn(i).GetPackPtr() & tag_mask); } +Pack *TianmuAttr::get_pack(size_t i) { return reinterpret_cast(get_dpn(i).GetRefCount() & tag_mask); } -Pack *TianmuAttr::get_pack(size_t i) const { return reinterpret_cast(get_dpn(i).GetPackPtr() & tag_mask); } +Pack *TianmuAttr::get_pack(size_t i) const { return reinterpret_cast(get_dpn(i).GetRefCount() & tag_mask); } std::shared_ptr TianmuAttr::GetFilter_Hist() { if (!tianmu_sysvar_enable_histogram_cmap_bloom) { @@ -1440,8 +1511,12 @@ std::shared_ptr TianmuAttr::GetFilter_Hist() { filter_hist = std::make_shared(Path() / common::COL_FILTER_DIR, m_version); return filter_hist; } + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + if (!filter_hist) - filter_hist = std::static_pointer_cast(ha_tianmu_engine_->filter_cache.Get( + filter_hist = std::static_pointer_cast(eng->filter_cache.Get( FilterCoordinate(m_tid, m_cid, (int)FilterType::HIST, m_version.v1, m_version.v2), filter_creator)); return filter_hist; } @@ -1459,7 +1534,11 @@ std::shared_ptr TianmuAttr::GetFilter_CMap() { filter_cmap = std::make_shared(Path() / common::COL_FILTER_DIR, m_version); return filter_cmap; } - return std::static_pointer_cast(ha_tianmu_engine_->filter_cache.Get( + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + return std::static_pointer_cast(eng->filter_cache.Get( FilterCoordinate(m_tid, m_cid, (int)FilterType::CMAP, m_version.v1, m_version.v2), filter_creator)); } @@ -1476,56 +1555,76 @@ std::shared_ptr TianmuAttr::GetFilter_Bloom() { filter_bloom = std::make_shared(Path() / common::COL_FILTER_DIR, m_version); return filter_bloom; } - return std::static_pointer_cast(ha_tianmu_engine_->filter_cache.Get( + + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + return std::static_pointer_cast(eng->filter_cache.Get( FilterCoordinate(m_tid, m_cid, (int)FilterType::BLOOM, m_version.v1, m_version.v2), filter_creator)); } -void TianmuAttr::UpdateIfIndex(core::Transaction *tx, uint64_t row, uint64_t col, const Value &old_v, - const Value &new_v) { +common::ErrorCode TianmuAttr::UpdateIfIndex(core::Transaction *tx, uint64_t row, uint64_t col, const Value &old_v, + const Value &new_v) { + DBUG_ENTER("TianmuAttr::UpdateIfIndex"); + if (tx == nullptr) { tx = current_txn_; } + + common::ErrorCode returnCode = common::ErrorCode::SUCCESS; + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + ASSERT(eng); + auto path = m_share->owner->Path(); - std::shared_ptr tab = ha_tianmu_engine_->GetTableIndex(path); + std::shared_ptr tab = eng->GetTableIndex(path); // col is not primary key if (!tab) - return; + DBUG_RETURN(returnCode); + std::vector keycols = tab->KeyCols(); if (std::find(keycols.begin(), keycols.end(), col) == keycols.end()) - return; + DBUG_RETURN(returnCode); - if (!new_v.HasValue()) - throw common::Exception("primary key not support null!"); + if (!new_v.HasValue()) { + returnCode = common::ErrorCode::UNSUPPORTED_DATATYPE; + TIANMU_LOG(LogCtl_Level::DEBUG, "primary key not support null!"); + DBUG_RETURN(returnCode); + } if (GetPackType() == common::PackType::STR) { auto &vnew = new_v.GetString(); auto &vold = old_v.GetString(); std::string nkey(vnew.data(), vnew.length()); std::string okey(vold.data(), vold.length()); - common::ErrorCode returnCode = tab->UpdateIndex(tx, nkey, okey, row); + returnCode = tab->UpdateIndex(tx, nkey, okey, row); if (returnCode == common::ErrorCode::DUPP_KEY || returnCode == common::ErrorCode::FAILED) { TIANMU_LOG(LogCtl_Level::DEBUG, "Duplicate entry: %s for primary key", vnew.data()); - throw common::DupKeyException("Duplicate entry: " + vnew + " for primary key"); + // throw common::DupKeyException("Duplicate entry: " + vnew + " for primary key"); } } else { // common::PackType::INT int64_t vnew = new_v.GetInt(); int64_t vold = old_v.GetInt(); std::string nkey(reinterpret_cast(&vnew), sizeof(int64_t)); std::string okey(reinterpret_cast(&vold), sizeof(int64_t)); - common::ErrorCode returnCode = tab->UpdateIndex(tx, nkey, okey, row); + returnCode = tab->UpdateIndex(tx, nkey, okey, row); if (returnCode == common::ErrorCode::DUPP_KEY || returnCode == common::ErrorCode::FAILED) { TIANMU_LOG(LogCtl_Level::DEBUG, "Duplicate entry :%" PRId64 " for primary key", vnew); - throw common::DupKeyException("Duplicate entry: " + std::to_string(vnew) + " for primary key"); + // throw common::DupKeyException("Duplicate entry: " + std::to_string(vnew) + " for primary key"); } } + return returnCode; } void TianmuAttr::DeleteByPrimaryKey(uint64_t row, uint64_t col) { + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + auto path = m_share->owner->Path(); - std::shared_ptr tab = ha_tianmu_engine_->GetTableIndex(path); + std::shared_ptr tab = eng->GetTableIndex(path); // col is not primary key if (!tab) return; + std::vector keycols = tab->KeyCols(); if (std::find(keycols.begin(), keycols.end(), col) == keycols.end()) return; diff --git a/storage/tianmu/core/tianmu_attr.h b/storage/tianmu/vc/tianmu_attr.h similarity index 96% rename from storage/tianmu/core/tianmu_attr.h rename to storage/tianmu/vc/tianmu_attr.h index 0ccb0e326..fbed90ecd 100644 --- a/storage/tianmu/core/tianmu_attr.h +++ b/storage/tianmu/vc/tianmu_attr.h @@ -22,25 +22,25 @@ #include "common/assert.h" #include "common/common_definitions.h" -#include "core/bin_tools.h" -#include "core/column_share.h" -#include "core/dpn.h" #include "core/ftree.h" -#include "core/pack.h" -#include "core/physical_column.h" -#include "core/rough_multi_index.h" -#include "core/rsi_bloom.h" -#include "core/rsi_cmap.h" -#include "core/rsi_histogram.h" -#include "core/tianmu_attr_typeinfo.h" -#include "core/tools.h" +#include "data/dpn.h" +#include "data/pack.h" +#include "index/rough_multi_index.h" +#include "index/rsi_bloom.h" +#include "index/rsi_cmap.h" +#include "index/rsi_histogram.h" #include "loader/value_cache.h" #include "mm/traceable_object.h" #include "system/file_system.h" #include "system/tianmu_system.h" #include "types/tianmu_data_types.h" #include "types/tianmu_num.h" +#include "util/bin_tools.h" #include "util/fs.h" +#include "util/tools.h" +#include "vc/column_share.h" +#include "vc/physical_column.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace core { @@ -92,8 +92,10 @@ class TianmuAttr final : public mm::TraceableObject, public PhysicalColumn, publ mm::TO_TYPE TraceableType() const override { return mm::TO_TYPE::TO_TEMPORARY; } void UpdateData(uint64_t row, Value &old_v, Value &new_v); - void UpdateBatchData(core::Transaction *tx, const std::unordered_map &rows); - void UpdateIfIndex(core::Transaction *tx, uint64_t row, uint64_t col, const Value &old_v, const Value &new_v); + void UpdateBatchData(core::Transaction *tx, const std::unordered_map> &rows); + common::ErrorCode UpdateIfIndex(core::Transaction *tx, uint64_t row, uint64_t col, const Value &old_v, + const Value &new_v); + void Truncate(); void DeleteData(uint64_t row); void DeleteByPrimaryKey(uint64_t row, uint64_t col); @@ -229,6 +231,7 @@ class TianmuAttr final : public mm::TraceableObject, public PhysicalColumn, publ void SetMaxInt64(int64_t a_imax) { hdr.max = a_imax; } bool GetIfAutoInc() const { return ct.GetAutoInc(); } bool GetIfUnsigned() const { return ct.GetUnsigned(); } + void SetUnsigned(bool unsigned_flag) { ct.SetUnsigned(unsigned_flag); } uint64_t AutoIncNext() { backup_auto_inc_next_ = m_share->auto_inc_.fetch_add(1); if (backup_auto_inc_next_ >= UINT64_MAX) diff --git a/storage/tianmu/core/tianmu_attr_exeq_rs.cpp b/storage/tianmu/vc/tianmu_attr_exeq_rs.cpp similarity index 98% rename from storage/tianmu/core/tianmu_attr_exeq_rs.cpp rename to storage/tianmu/vc/tianmu_attr_exeq_rs.cpp index ae8453f85..d0c25d23c 100644 --- a/storage/tianmu/core/tianmu_attr_exeq_rs.cpp +++ b/storage/tianmu/vc/tianmu_attr_exeq_rs.cpp @@ -16,16 +16,16 @@ */ // This is a part of TianmuAttr implementation concerned with the KNs and its usage -#include "core/cq_term.h" #include "core/engine.h" -#include "core/pack.h" -#include "core/pack_guardian.h" -#include "core/tianmu_attr.h" -#include "core/tianmu_attr_typeinfo.h" #include "core/value_set.h" +#include "data/pack.h" +#include "data/pack_guardian.h" +#include "optimizer/compile/cq_term.h" #include "types/text_stat.h" #include "vc/multi_value_column.h" #include "vc/single_column.h" +#include "vc/tianmu_attr.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace core { @@ -367,10 +367,20 @@ common::RoughSetValue TianmuAttr::RoughCheck(int pack, Descriptor &d, bool addit // values were already transformed in // EncodeCondition int64_t v2 = d.val2.vc->GetValueInt64(mit); + bool is_v1_unsigned = d.val1.vc->GetUnsignedFlag(); + bool is_v2_unsigned = d.val2.vc->GetUnsignedFlag(); if (!ATI::IsRealType(TypeName())) { + // Currently the max value in tianmu is common::PLUS_INF_64, so v1(left boundary) should never GE PLUS_INF_64. + // only when v1 > common::PLUS_INF_64 it will be set "is_unsigned" in item and then passed to ValueOrNull. + if (is_v1_unsigned && (static_cast(v1) > common::PLUS_INF_64)) { + if (common::Operator::O_NOT_BETWEEN == d.op) + return common::RoughSetValue::RS_ALL; + else // all other cases + return common::RoughSetValue::RS_NONE; + } if (v1 == common::MINUS_INF_64) v1 = dpn.min_i; - if (v2 == common::PLUS_INF_64) + if (v2 == common::PLUS_INF_64 || (is_v2_unsigned && (static_cast(v2) > common::PLUS_INF_64))) v2 = dpn.max_i; } else { if (v1 == *(int64_t *)&common::MINUS_INF_DBL) diff --git a/storage/tianmu/core/tianmu_attr_exqp.cpp b/storage/tianmu/vc/tianmu_attr_exqp.cpp similarity index 98% rename from storage/tianmu/core/tianmu_attr_exqp.cpp rename to storage/tianmu/vc/tianmu_attr_exqp.cpp index 16d5031d5..bd774b449 100644 --- a/storage/tianmu/core/tianmu_attr_exqp.cpp +++ b/storage/tianmu/vc/tianmu_attr_exqp.cpp @@ -21,18 +21,18 @@ */ #include "common/assert.h" -#include "core/cq_term.h" -#include "core/pack_guardian.h" -#include "core/pack_str.h" -#include "core/tianmu_attr.h" -#include "core/tianmu_attr_typeinfo.h" -#include "core/tools.h" #include "core/transaction.h" #include "core/value_set.h" +#include "data/pack_guardian.h" +#include "data/pack_str.h" +#include "optimizer/compile/cq_term.h" #include "util/hash64.h" +#include "util/tools.h" #include "vc/const_column.h" #include "vc/in_set_column.h" #include "vc/single_column.h" +#include "vc/tianmu_attr.h" +#include "vc/tianmu_attr_typeinfo.h" namespace Tianmu { namespace core { @@ -109,7 +109,10 @@ common::ErrorCode TianmuAttr::EvaluateOnIndex(MIUpdatingIterator &mit, int dim, common::ErrorCode TianmuAttr::EvaluateOnIndex_BetweenInt(MIUpdatingIterator &mit, int dim, Descriptor &d, int64_t limit) { common::ErrorCode rv = common::ErrorCode::FAILED; - auto indextab = ha_tianmu_engine_->GetTableIndex(m_share->owner->Path()); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + auto indextab = eng->GetTableIndex(m_share->owner->Path()); if (!indextab) return rv; @@ -172,7 +175,10 @@ common::ErrorCode TianmuAttr::EvaluateOnIndex_BetweenInt(MIUpdatingIterator &mit common::ErrorCode TianmuAttr::EvaluateOnIndex_BetweenString(MIUpdatingIterator &mit, int dim, Descriptor &d, int64_t limit) { common::ErrorCode rv = common::ErrorCode::FAILED; - auto indextab = ha_tianmu_engine_->GetTableIndex(m_share->owner->Path()); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + auto indextab = eng->GetTableIndex(m_share->owner->Path()); if (!indextab) return rv; @@ -238,7 +244,10 @@ common::ErrorCode TianmuAttr::EvaluateOnIndex_BetweenString(MIUpdatingIterator & common::ErrorCode TianmuAttr::EvaluateOnIndex_BetweenString_UTF(MIUpdatingIterator &mit, int dim, Descriptor &d, int64_t limit) { common::ErrorCode rv = common::ErrorCode::FAILED; - auto indextab = ha_tianmu_engine_->GetTableIndex(m_share->owner->Path()); + core::Engine *eng = reinterpret_cast(tianmu_hton->data); + assert(eng); + + auto indextab = eng->GetTableIndex(m_share->owner->Path()); if (!indextab) return rv; diff --git a/storage/tianmu/core/tianmu_attr_typeinfo.cpp b/storage/tianmu/vc/tianmu_attr_typeinfo.cpp similarity index 95% rename from storage/tianmu/core/tianmu_attr_typeinfo.cpp rename to storage/tianmu/vc/tianmu_attr_typeinfo.cpp index 4ba59ac72..571b8332e 100644 --- a/storage/tianmu/core/tianmu_attr_typeinfo.cpp +++ b/storage/tianmu/vc/tianmu_attr_typeinfo.cpp @@ -15,12 +15,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ -#include "tianmu_attr_typeinfo.h" +#include "vc/tianmu_attr_typeinfo.h" #include "common/data_format.h" #include "common/txt_data_format.h" -#include "core/tianmu_attr.h" #include "types/tianmu_data_types.h" #include "types/tianmu_num.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace core { diff --git a/storage/tianmu/core/tianmu_attr_typeinfo.h b/storage/tianmu/vc/tianmu_attr_typeinfo.h similarity index 100% rename from storage/tianmu/core/tianmu_attr_typeinfo.h rename to storage/tianmu/vc/tianmu_attr_typeinfo.h diff --git a/storage/tianmu/vc/type_cast_column.h b/storage/tianmu/vc/type_cast_column.h index 8a4b0db27..082f09701 100644 --- a/storage/tianmu/vc/type_cast_column.h +++ b/storage/tianmu/vc/type_cast_column.h @@ -18,7 +18,7 @@ #define TIANMU_VC_TYPE_CAST_COLUMN_H_ #pragma once -#include "core/mi_iterator.h" +#include "optimizer/iterators/mi_iterator.h" #include "vc/virtual_column.h" namespace Tianmu { @@ -71,6 +71,7 @@ class TypeCastColumn : public VirtualColumn { protected: int64_t GetValueInt64Impl(const core::MIIterator &mit) override { return vc_->GetValueInt64(mit); } + bool GetUnsignedFlagImpl() override { return vc_->GetUnsignedFlag(); } bool IsNullImpl(const core::MIIterator &mit) override { return vc_->IsNull(mit); } void GetValueStringImpl(types::BString &s, const core::MIIterator &m) override { return vc_->GetValueString(s, m); } double GetValueDoubleImpl(const core::MIIterator &m) override { return vc_->GetValueDouble(m); } diff --git a/storage/tianmu/vc/virtual_column.h b/storage/tianmu/vc/virtual_column.h index a351c7a69..2ad184e44 100644 --- a/storage/tianmu/vc/virtual_column.h +++ b/storage/tianmu/vc/virtual_column.h @@ -18,7 +18,7 @@ #define TIANMU_VC_VIRTUAL_COLUMN_H_ #pragma once -#include "core/pack_guardian.h" +#include "data/pack_guardian.h" #include "vc/virtual_column_base.h" namespace Tianmu { diff --git a/storage/tianmu/vc/virtual_column_base.cpp b/storage/tianmu/vc/virtual_column_base.cpp index aed0c37be..4efe04f8c 100644 --- a/storage/tianmu/vc/virtual_column_base.cpp +++ b/storage/tianmu/vc/virtual_column_base.cpp @@ -17,11 +17,11 @@ #include "vc/virtual_column_base.h" -#include "core/compiled_query.h" #include "core/mysql_expression.h" -#include "core/tianmu_attr.h" +#include "optimizer/compile/compiled_query.h" #include "vc/in_set_column.h" #include "vc/subselect_column.h" +#include "vc/tianmu_attr.h" namespace Tianmu { namespace vcolumn { diff --git a/storage/tianmu/vc/virtual_column_base.h b/storage/tianmu/vc/virtual_column_base.h index 9fce8bed3..95d5133ac 100644 --- a/storage/tianmu/vc/virtual_column_base.h +++ b/storage/tianmu/vc/virtual_column_base.h @@ -20,12 +20,12 @@ #include -#include "core/column.h" #include "core/just_a_table.h" -#include "core/multi_index.h" #include "core/mysql_expression.h" -#include "core/pack_guardian.h" +#include "data/pack_guardian.h" +#include "index/multi_index.h" #include "types/text_stat.h" +#include "vc/column.h" namespace Tianmu { namespace core { @@ -91,6 +91,7 @@ class VirtualColumnBase : public core::Column { * - Doubles must be cast e.g. *(double*)& */ inline int64_t GetValueInt64(const core::MIIterator &mit) { return GetValueInt64Impl(mit); } + inline bool GetUnsignedFlag() { return GetUnsignedFlagImpl(); } virtual int64_t GetNotNullValueInt64(const core::MIIterator &mit) = 0; /*! \brief get Item @@ -492,6 +493,7 @@ class VirtualColumnBase : public core::Column { protected: virtual int64_t GetValueInt64Impl(const core::MIIterator &) = 0; + virtual bool GetUnsignedFlagImpl() = 0; virtual bool IsNullImpl(const core::MIIterator &) = 0; virtual void GetValueStringImpl(types::BString &, const core::MIIterator &) = 0; virtual double GetValueDoubleImpl(const core::MIIterator &) = 0; diff --git a/website/community/main.md b/website/community/main.md deleted file mode 100644 index 8c5a40cb2..000000000 --- a/website/community/main.md +++ /dev/null @@ -1,93 +0,0 @@ -## Community {#community} -The StoneDB community is comprised of users, contributors, and culture that unite our community and inspire new ideas, collaboration, and mutual learning. Our open-source community files issues and pull requests, attends events, advocates for greater adoption of StoneDB, and makes many other valuable contributions. - -Read on to learn how you can get involved and become part of this amazing community. - -## Contributors {#team} -```custom-teamList -- ![RingsC](https://avatars.githubusercontent.com/u/5336722?v=4 "title:RingsC,to://github.com/ringsc") -- ![hustjieke](https://avatars.githubusercontent.com/u/18331104?v=4 "title:hustjieke,to://github.com/hustjieke") -- ![dupeiliang](https://avatars.githubusercontent.com/u/39800914?v=4 "title:dupeiliang,to://github.com/dupeiliang") -- ![andyli](https://avatars.githubusercontent.com/u/15212006?v=4 "title:andyli,to://github.com/andyli029") -- ![SPzhang](https://avatars.githubusercontent.com/u/31213457?v=4 "title:SPzhang,to://github.com/zsp108") -- ![CodingSuen](https://avatars.githubusercontent.com/u/69141572?v=4 "title:CodingSuen,to://github.com/CodingSuen") -- ![jun-lihaijun](https://avatars.githubusercontent.com/u/103155258?v=4 "title:jun-lihaijun,to://github.com/lihaijun-jun") -- ![DandreChen](https://avatars.githubusercontent.com/u/34465107?v=4 "title:DandreChen,to://github.com/DandreChen") -- ![isredstar](https://avatars.githubusercontent.com/u/63028664?v=4 "title:isredstar,to://github.com/isredstar") -- ![konghaiya](https://avatars.githubusercontent.com/u/106147765?v=4 "title:konghaiya,to://github.com/konghaiya") -- ![Nliver](https://avatars.githubusercontent.com/u/34496563?v=4 "title:Nliver,to://github.com/Nliver") -- ![Yeekin-](https://avatars.githubusercontent.com/u/101704468?v=4 "title:Yeekin-,to://github.com/Yeekin-GYJ") -- ![MaJun](https://avatars.githubusercontent.com/u/64419837?v=4 "title:MaJun,to://github.com/leizzboy") -- ![LuiciferYi](https://avatars.githubusercontent.com/u/24913493?v=4 "title:LuiciferYi,to://github.com/LuiciferYi") -- ![litaihong](https://avatars.githubusercontent.com/u/79444526?v=4 "title:litaihong,to://github.com/lylth") -- ![haitaoguan](https://avatars.githubusercontent.com/u/105625912?v=4 "title:haitaoguan,to://github.com/haitaoguan") -- ![shangyanwen](https://avatars.githubusercontent.com/u/107781103?v=4 "title:shangyanwen,to://github.com/shangyanwen") -- ![adofsauron](https://avatars.githubusercontent.com/u/3915817?v=4 "title:adofsauron,to://github.com/adofsauron") -- ![fuxiang](https://avatars.githubusercontent.com/u/26853590?v=4 "title:fuxiang,to://github.com/gougexuanli") -- ![lujiashun](https://avatars.githubusercontent.com/u/112846998?v=4 "title:lujiashun,to://github.com/lujiashun") -- ![xuejiao-joy](https://avatars.githubusercontent.com/u/107540910?v=4 "title:xuejiao-joy,to://github.com/xuejiao-joy") -- ![davidshiz](https://avatars.githubusercontent.com/u/53512869?v=4) "title:shizhao,to://github.com/davidshiz") -``` - -## Join the community {#join} -```custom-joinList -- [Github Discussion](https://github.com/stoneatom/stonedb/discussions "icon:icon-a-bianzu16beifen1") -- [Slack Channel](https://stonedb.slack.com/join/shared_invite/zt-1ba2lpvbo-Vqq62DJcxViyxCZmp7Rimw#/shared-invite/email "icon:icon-a-bianzu18beifen2") -- [Reddit](https://www.reddit.com/user/StoneDBTeam "icon:icon-a-bianzu3") -- [新浪微博](https://weibo.com/u/7756824587 "icon:icon-a-bianzu31,local:zh") -- [Twitter](https://twitter.com/StoneDataBase "icon:icon-a-bianzu2") -``` - - - - -```custom-subscribe -``` - - - - - diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 4093d0c3d..1c649d2f7 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -255,6 +255,7 @@ const config = { }, ], ], + scripts:["https://hm.baidu.com/hm.js?7bd24ad933c7b555361696ce01e3e8ff"] }; module.exports = config; diff --git a/website/i18n/zh/code.json b/website/i18n/zh/code.json index 4b00cee9a..6ac252784 100644 --- a/website/i18n/zh/code.json +++ b/website/i18n/zh/code.json @@ -246,7 +246,7 @@ "message": "接受最新功能更新、开源社区活动消息" }, "home.social": { - "message": "关注公众号" + "message": "加入用户群 关注公众号" }, "home.concat": { "message": "联系我们" diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/intro.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/intro.md index 2b295ed94..a5f4493de 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/intro.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/intro.md @@ -7,7 +7,7 @@ sidebar_position: 1.1 StoneDB 是由石原子科技公司自主设计、研发的国内首款基于 MySQL 内核打造的开源 HTAP(Hybrid Transactional and Analytical Processing)融合型数据库,可实现与 MySQL 的无缝切换。StoneDB 具备超高性能、实时分析等特点,为用户提供一站式 HTAP 解决方案。 -StoneDB 100% 兼容 MySQL 5.6、5.7 协议和 MySQL 生态等重要特性,支持 MySQL 常用的功能及语法,支持 MySQL 生态中的系统工具和客户端,如 Navicat、Workbench、mysqldump、mydumper。由于 100% 兼容 MySQL,因此 StoneDB 的所有工作负载都可以继续使用 MySQL 数据库体系运行。 +StoneDB 100% 兼容 MySQL 5.6、5.7、8.0 协议和 MySQL 生态等重要特性,支持 MySQL 常用的功能及语法,支持 MySQL 生态中的系统工具和客户端,如 Navicat、Workbench、mysqldump、mydumper。由于 100% 兼容 MySQL,因此 StoneDB 的所有工作负载都可以继续使用 MySQL 数据库体系运行。 StoneDB 专门针对 OLAP 应用程序进行了设计和优化,支持百亿数据场景下进行高性能、多维度字段组合的复杂查询,相对比社区版的 MySQL,其查询速度提升了十倍以上。 diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/limits.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/limits.md index 43d6acdac..a256ace28 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/limits.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/00-about-stonedb/limits.md @@ -4,7 +4,7 @@ sidebar_position: 1.3 --- # 使用限制 -StoneDB 100% 兼容 MySQL 5.6、5.7 协议和 MySQL 生态等重要特性,支持 MySQL 常用的功能及语法,但由于 StoneDB 本身的一些特性,部分操作和功能尚未得到支持,以下列出的是不兼容 MySQL 的操作和功能。 +StoneDB 100% 兼容 MySQL 5.6、5.7、8.0 协议和 MySQL 生态等重要特性,支持 MySQL 常用的功能及语法,但由于 StoneDB 本身的一些特性,部分操作和功能尚未得到支持,以下列出的是不兼容 MySQL 的操作和功能。 # 不支持的DDL 1. optimize table diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-add-mtr-test.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-add-mtr-test.md new file mode 100644 index 000000000..6b4e18ab0 --- /dev/null +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-add-mtr-test.md @@ -0,0 +1,103 @@ +--- +id: quick-add-mtr-test +sidebar_position: 3.6 +--- + +# 快速添加 MTR Test + +## 添加并运行一个mtr测试用例 + +当你在StoneDB贡献代码的同时,你需要测试你贡献的代码 + +测试用例在路径 `${StoneDB-Source-DIR}/mysql-test/suite/tianmu/`中. + +:::info +`${StoneDB-Source-DIR}` 是你的StoneDB源码目录. + +下文中我们将用`${TEST-PATH}`来指代路径`${StoneDB-Source-DIR}/mysql-test/suite/tianmu/`. +::: + +### 第一步. 编写你的测试用例和应该输出的结果的文件 + +将你的测试文件放`${TEST-PATH}/t/` 中,并将你的结果文件放在 `${TEST-PATH}/r/` 中. + +你可以像下面的例子中一样编写你的测试用例和结果. + +issue736.test +```sql +--source include/have_tianmu.inc +use test; +CREATE TABLE t1(col1 INT, col2 CHAR(5))ENGINE=tianmu; +INSERT INTO t1 VALUES(NULL,''),(1,'a'),(1,'b'),(1,'c'),(2,'dd'),(3,'eee'); +INSERT INTO t1 VALUES(8,UNHEX('CEB2')); +SELECT COUNT(DISTINCT col2) FROM t1; +SELECT COUNT(DISTINCT col1) FROM t1; +DROP TABLE t1; +``` + +Issue736.result +```sql +use test; +CREATE TABLE t1(col1 INT, col2 CHAR(5))ENGINE=tianmu; +INSERT INTO t1 VALUES(NULL,''),(1,'a'),(1,'b'),(1,'c'),(2,'dd'),(3,'eee'); +INSERT INTO t1 VALUES(8,UNHEX('CEB2')); +SELECT COUNT(DISTINCT col2) FROM t1; +COUNT(DISTINCT col2) +7 +SELECT COUNT(DISTINCT col1) FROM t1; +COUNT(DISTINCT col1) +4 +DROP TABLE t1; + +``` + +### 第二步. 编译安装StoneDB. + +在这个例子中, 我将StoneDB编译在 `${StoneDB-Source-DIR}/build/mysql8/` 中,并且将其安装在 `${StoneDB-Source-DIR}/build/install8/` 中 + + ```shell +cd stonedb/build +mkdir mysql8 install8 +# build your stonedb +......... + ``` + +### 第三步. 运行测试用例. + +在安装完成后, 测试用例会被移动至安装目录中. 在这个例子中, 路径为 `${StoneDB-Source-DIR}/build/install8/mysql-test` + +``` shell +cd install8/mysql-test +# run your test case. issue736 is my testcase. +# run one case. +./mtr --suite=tianmu testcase +# run all cases. +./mysql-test-run.pl --suite=tianmu --nowarnings --force --nocheck-testcases --parallel=10 + +### Execute the test in this example. +root@htap-dev-64-2:/stonedb/build/install8/mysql-test# ./mtr --suite=tianmu issue736 +Logging: ./mtr --suite=tianmu issue736 +MySQL Version 8.0.30 +Checking supported features + - Binaries are debug compiled +Collecting tests +Checking leftover processes +Removing old var directory +Creating var directory '/stonedb/build/install8/mysql-test/var' +Installing system database +Using parallel: 1 + +============================================================================== + TEST NAME RESULT TIME (ms) COMMENT +------------------------------------------------------------------------------ +worker[1] mysql-test-run: WARNING: running this script as _root_ will cause some tests to be skipped +[ 50%] tianmu.issue736 [ pass ] 78 +[100%] shutdown_report [ pass ] +------------------------------------------------------------------------------ +The servers were restarted 0 times +The servers were reinitialized 0 times +Spent 0.078 of 35 seconds executing testcases + +Completed: All 2 tests were successful. + +``` \ No newline at end of file diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deploy-in-docker.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deploy-in-docker.md index 5c584687e..7335a82e6 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deploy-in-docker.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deploy-in-docker.md @@ -3,15 +3,23 @@ id: quick-deploy-in-docker sidebar_position: 3.2 --- -# Docker快速部署StoneDB +# Docker 快速部署 StoneDB ## StoneDB Docker Hub地址 + +建议您阅读Docker hub的最新文档。 [Docker Hub](https://hub.docker.com/r/stoneatom/stonedb) ## 使用方法 -默认登录账号密码为 root,stonedb123 +默认登录账号密码为 root,密码有您自己定义。 + +确保你的 CPU 支持 AVX + +```bash +cat /proc/cpuinfo |grep avx +``` ### 1、docker pull ```bash -docker pull stoneatom/stonedb:v1.0.2 +docker pull stoneatom/stonedb:v1.0.3 ``` ### 2、docker run 参数说明: @@ -27,11 +35,11 @@ docker pull stoneatom/stonedb:v1.0.2 -d:启动不进入容器,想要进入容器需要使用指令 docker exec ```bash -docker run -p 13306:3306 -v $stonedb_volumn_dir/data/:/stonedb56/install/data/ -it -d stoneatom/stonedb:v0.1 /bin/bash +docker run -p 3306:3306 -itd -v $YOU_DATA_DIR:/opt -e MYSQL_ROOT_PASSWORD='$YOU_PASSWORD' stoneatom/stonedb:v1.0.3 ``` or ```bash -docker run -p 13306:3306 -it -d stoneatom/stonedb:v0.1 /bin/bash +docker run -p 3306:3306 -itd -e MYSQL_ROOT_PASSWORD='$YOU_PASSWORD' stoneatom/stonedb:v1.0.3 ``` ### 3、登录容器内使用 StoneDB ```bash @@ -39,11 +47,12 @@ docker run -p 13306:3306 -it -d stoneatom/stonedb:v0.1 /bin/bash $ docker ps #通过 docker ps 获取 docker ID,进入容器 -$ docker exec -it 容器ID bash -容器ID$ /stonedb56/install/bin/mysql -uroot -pstonedb123 +docker exec -it bash +#如果$YOU_PASSWORD不正确,请去log中查看默认生成的密码 +$ /opt/stonedb57/install/bin/mysql -uroot -p$YOU_PASSWORD ``` ### 4、容器外登录StoneDB 使用客户端登录,其他第三方工具,如 Navicat、DBeaver 登录方式类似 ```shell -mysql -h宿主机IP -uroot -pstonedb123 -P宿主机映射端口 +mysql -h -uroot -p$YOU_PASSWORD -P ``` \ No newline at end of file diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deployment/quick-deployment-57.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deployment/quick-deployment-57.md index a760231ba..2f381f852 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deployment/quick-deployment-57.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/02-getting-started/quick-deployment/quick-deployment-57.md @@ -6,7 +6,7 @@ sidebar_position: 3.12 # 快速部署 StoneDB-5.7 为方便用户快速上手,安装包是已经编译好的,只需要检查自己的环境是否缺少依赖。 ## 下载安装包 -点击 [此处](https://static.stoneatom.com/custom/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz)下载最新的安装包。 +点击 [Github](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz) or [Gitee](https://gitee.com/StoneDB/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz) 下载最新的安装包。 ## 上传tar包并解压 ```shell cd / diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md index fe023c7b1..c66832f10 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-56.md @@ -1,6 +1,6 @@ --- -id: compile-using-centos7-56 -sidebar_position: 5.122 +id: compile-using-centos7-for-56 +sidebar_position: 5.123 --- # CentOS 7 下编译 StoneDB for MySQL5.6 diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md index 24d75dda3..ffa3725a3 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-57.md @@ -1,6 +1,6 @@ --- -id: compile-using-centos7-57 -sidebar_position: 5.121 +id: compile-using-centos7-for-57 +sidebar_position: 5.122 --- # CentOS 7 下编译 StoneDB for MySQL5.7 diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md new file mode 100644 index 000000000..d090f791a --- /dev/null +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-centos7/compile-using-centos7-for-80.md @@ -0,0 +1,452 @@ +--- +id: compile-using-centos7-for-80 +sidebar_position: 5.121 +--- + +# CentOS 7 下编译 StoneDB for MySQL 8.0 + +本文说明了如何在CentOS 7.9 的环境下编译StoneDB for MySQL 8.0。 + +编译工具以及第三方库的版本要求如下: + + * GCC 11.2.0 + * Make 3.82 or later + * CMake 3.7.2 or later + * marisa 0.77 + * rocksdb 6.12.6 + * boost 1.77 + +:::info +以下命令的执行可能会遇到权限问题,建议在root权限下运行 +::: + +:::tip +本文中所有命令默认是在root权限下运行 +::: + +## 第一步:安装依赖包 + +```bash +yum install -y tree +yum install -y gcc +yum install -y gcc-c++ +yum install -y libzstd-devel +yum install -y make +yum install -y ncurses +yum install -y ncurses-devel +yum install -y bison +yum install -y libaio +yum install -y perl +yum install -y perl-DBI +yum install -y perl-DBD-MySQL +yum install -y perl-Time-HiRes +yum install -y readline-devel +yum install -y numactl +yum install -y zlib +yum install -y zlib-devel +yum install -y openssl +yum install -y openssl-devel +yum install -y redhat-lsb-core +yum install -y git +yum install -y autoconf +yum install -y automake +yum install -y libtool +yum install -y lrzsz +yum install -y lz4 +yum install -y lz4-devel +yum install -y snappy +yum install -y snappy-devel +yum install -y bzip2 +yum install -y bzip2-devel +yum install -y zstd +yum install -y libedit +yum install -y libedit-devel +yum install -y libaio-devel +yum install -y libicu +yum install -y libicu-devel +yum install -y jemalloc-devel +``` +:::info +如果您当前的yum源找不到所需包,再配置一个epel源即可,命令如下: +```bash +yum install -y epel-release +``` +::: + +## 第二步:安装gcc 11.2.0 + +通过执行以下语句,检查当前 gcc 版本是否符合安装要求。 + +```bash +gcc --version +``` + +如果版本不符合要求,按照以下步骤将 gcc 切换为正确版本。 + +### 1.配置scl源 + +```bash +yum install centos-release-scl scl-utils-build -y +``` + +### 2.安装11.2.0版本的gcc、gcc-c++、binutils + +```bash +yum install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils -y +``` + +### 3.切换至11.2.0版本 + +```bash +scl enable devtoolset-11 bash +``` + +### 4.版本检查 + +```bash +gcc --version +``` + +## 第三步:安装第三方库 + +StoneDB 依赖 marisa、rocksdb、boost,在编译 marisa、rocksdb、boost 时,建议指定安装路径。示例中我们指定了 marisa、rocksdb、boost 的安装路径,您可以根据自己的需求更改安装路径。 + +### 1.安装cmake + +检查当前cmake版本是否符合安装要求。 + +```bash +cmake --version +``` + +如果您的cmake版本 >= 3.7.2,则不用再安装cmake,否则按照以下步骤编译安装合适版本的cmake。 + +```bash +wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz +tar -zxvf cmake-3.7.2.tar.gz +cd cmake-3.7.2 +./bootstrap && make && make install +/usr/local/bin/cmake --version +rm -rf /usr/bin/cmake +ln -s /usr/local/bin/cmake /usr/bin/cmake +cmake --version +``` + +:::info +gcc11在编译cmake-3.7.2的时候会出现编译报错。您可以在`cmake-3.7.2/Source/cmServerProtocol.cxx`文件开头加上`#include `来解决这个问题 +```c++ +#include +#include +#include +#include +``` +::: + +### 2.安装make + +检查当前make版本是否符合安装要求。 + +```bash +make --version +``` + +如果您的make版本 >= 3.82,则不用再安装make,否则按照以下步骤编译安装合适版本的make。 + +```bash +wget http://mirrors.ustc.edu.cn/gnu/make/make-4.3.tar.gz +tar -zxvf make-4.3.tar.gz +cd make-4.3 +./configure --prefix=/usr/local/make +make && make install +/usr/local/make/bin/make --version +rm -rf /usr/bin/make +ln -s /usr/local/make/bin/make /usr/bin/make +make --version +``` + +### 3.安装marisa + +```bash +git clone https://github.com/s-yata/marisa-trie.git +cd marisa-trie +autoreconf -i +./configure --enable-native-code --prefix=/usr/local/stonedb-marisa +sudo make && make install +``` + +marisa 的安装路径可以根据实际情况指定,示例中的安装路径是 /usr/local/stonedb-marisa。在编译安装后,usr/local/stonedb-marisa/lib目录中的内容如下: + +```bash +[root@localhost /usr/local/stonedb-marisa/lib]#ll +total 6768 +-rw-r--r--. 1 root root 4977788 May 5 07:33 libmarisa.a +-rwxr-xr-x. 1 root root 946 May 5 07:33 libmarisa.la +lrwxrwxrwx. 1 root root 18 May 5 07:33 libmarisa.so -> libmarisa.so.0.0.0 +lrwxrwxrwx. 1 root root 18 May 5 07:33 libmarisa.so.0 -> libmarisa.so.0.0.0 +-rwxr-xr-x. 1 root root 1945584 May 5 07:33 libmarisa.so.0.0.0 +drwxr-xr-x. 2 root root 23 May 5 07:33 pkgconfig +``` + +### 4.安装rocksdb + +```bash +wget https://github.com/facebook/rocksdb/archive/refs/tags/v6.12.6.tar.gz +tar -zxvf v6.12.6.tar.gz +cd rocksdb-6.12.6 + +cmake ./ \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local/stonedb-gcc-rocksdb \ + -DCMAKE_INSTALL_LIBDIR=/usr/local/stonedb-gcc-rocksdb \ + -DWITH_JEMALLOC=ON \ + -DWITH_SNAPPY=ON \ + -DWITH_LZ4=ON \ + -DWITH_ZLIB=ON \ + -DWITH_ZSTD=ON \ + -DUSE_RTTI=ON \ + -DROCKSDB_BUILD_SHARED=ON \ + -DWITH_GFLAGS=OFF \ + -DWITH_TOOLS=OFF \ + -DWITH_BENCHMARK_TOOLS=OFF \ + -DWITH_CORE_TOOLS=OFF + +make -j`nproc` +make install -j`nproc` +``` + +rocksdb 的安装路径可以根据实际情况指定,示例中的安装路径是 /usr/local/stonedb-gcc-rocksdb。在编译安装后,/usr/local/stonedb-gcc-rocksdb目录中文件如下: + +```bash +[root@localhost /usr/local/stonedb-gcc-rocksdb]#ll +total 28736 +drwxr-xr-x. 3 root root 21 May 5 07:39 cmake +drwxr-xr-x. 3 root root 21 May 5 07:39 include +-rw-r--r--. 1 root root 20332942 May 5 07:38 librocksdb.a +lrwxrwxrwx. 1 root root 15 May 5 07:39 librocksdb.so -> librocksdb.so.6 +lrwxrwxrwx. 1 root root 20 May 5 07:39 librocksdb.so.6 -> librocksdb.so.6.12.6 +-rwxr-xr-x. 1 root root 9086272 May 5 07:39 librocksdb.so.6.12.6 +``` + +### 5.安装boost + +```bash +wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz +tar -zxvf boost_1_77_0.tar.gz +cd boost_1_77_0 +./bootstrap.sh --prefix=/usr/local/stonedb-boost177 +./b2 install --with=all +``` + +boost 的安装路径可以根据实际情况指定,示例中的安装路径是 /usr/local/stonedb-boost177。在编译安装后,/usr/local/stonedb-boost177/lib目录中内容如下: + +```bash +[root@localhost /usr/local/stonedb-boost177/lib]#ll +total 43412 +drwxr-xr-x. 50 root root 4096 May 5 08:34 cmake +-rw-r--r--. 1 root root 14152 May 5 08:33 libboost_atomic.a +lrwxrwxrwx. 1 root root 25 May 5 08:34 libboost_atomic.so -> libboost_atomic.so.1.77.0 +-rwxr-xr-x. 1 root root 27632 May 5 08:34 libboost_atomic.so.1.77.0 +-rw-r--r--. 1 root root 182964 May 5 08:33 libboost_chrono.a +lrwxrwxrwx. 1 root root 25 May 5 08:34 libboost_chrono.so -> libboost_chrono.so.1.77.0 +-rwxr-xr-x. 1 root root 161408 May 5 08:34 libboost_chrono.so.1.77.0 +-rw-r--r--. 1 root root 172262 May 5 08:33 libboost_container.a +lrwxrwxrwx. 1 root root 28 May 5 08:34 libboost_container.so -> libboost_container.so.1.77.0 +-rwxr-xr-x. 1 root root 116424 May 5 08:34 libboost_container.so.1.77.0 +-rw-r--r--. 1 root root 7202 May 5 08:33 libboost_context.a +lrwxrwxrwx. 1 root root 26 May 5 08:34 libboost_context.so -> libboost_context.so.1.77.0 +-rwxr-xr-x. 1 root root 17024 May 5 08:34 libboost_context.so.1.77.0 +-rw-r--r--. 1 root root 284652 May 5 08:33 libboost_contract.a +lrwxrwxrwx. 1 root root 27 May 5 08:34 libboost_contract.so -> libboost_contract.so.1.77.0 +-rwxr-xr-x. 1 root root 254408 May 5 08:34 libboost_contract.so.1.77.0 +-rw-r--r--. 1 root root 196532 May 5 08:33 libboost_coroutine.a +lrwxrwxrwx. 1 root root 28 May 5 08:34 libboost_coroutine.so -> libboost_coroutine.so.1.77.0 +-rwxr-xr-x. 1 root root 84592 May 5 08:34 libboost_coroutine.so.1.77.0 +-rw-r--r--. 1 root root 1466 May 5 08:33 libboost_date_time.a +lrwxrwxrwx. 1 root root 28 May 5 08:34 libboost_date_time.so -> libboost_date_time.so.1.77.0 +-rwxr-xr-x. 1 root root 15832 May 5 08:34 libboost_date_time.so.1.77.0 +-rw-r--r--. 1 root root 1662 May 5 08:34 libboost_exception.a +-rw-r--r--. 1 root root 255586 May 5 08:33 libboost_fiber.a +lrwxrwxrwx. 1 root root 24 May 5 08:32 libboost_fiber.so -> libboost_fiber.so.1.77.0 +-rwxr-xr-x. 1 root root 108704 May 5 08:32 libboost_fiber.so.1.77.0 +-rw-r--r--. 1 root root 520624 May 5 08:33 libboost_filesystem.a +lrwxrwxrwx. 1 root root 29 May 5 08:32 libboost_filesystem.so -> libboost_filesystem.so.1.77.0 +-rwxr-xr-x. 1 root root 271120 May 5 08:32 libboost_filesystem.so.1.77.0 +-rw-r--r--. 1 root root 1039814 May 5 08:33 libboost_graph.a +lrwxrwxrwx. 1 root root 24 May 5 08:32 libboost_graph.so -> libboost_graph.so.1.77.0 +-rwxr-xr-x. 1 root root 504312 May 5 08:32 libboost_graph.so.1.77.0 +-rw-r--r--. 1 root root 263000 May 5 08:33 libboost_iostreams.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_iostreams.so -> libboost_iostreams.so.1.77.0 +-rwxr-xr-x. 1 root root 124640 May 5 08:32 libboost_iostreams.so.1.77.0 +-rw-r--r--. 1 root root 491206 May 5 08:33 libboost_json.a +lrwxrwxrwx. 1 root root 23 May 5 08:32 libboost_json.so -> libboost_json.so.1.77.0 +-rwxr-xr-x. 1 root root 426856 May 5 08:32 libboost_json.so.1.77.0 +-rw-r--r--. 1 root root 3221762 May 5 08:33 libboost_locale.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_locale.so -> libboost_locale.so.1.77.0 +-rwxr-xr-x. 1 root root 1088632 May 5 08:32 libboost_locale.so.1.77.0 +-rw-r--r--. 1 root root 3715884 May 5 08:33 libboost_log.a +-rw-r--r--. 1 root root 3141980 May 5 08:33 libboost_log_setup.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_log_setup.so -> libboost_log_setup.so.1.77.0 +-rwxr-xr-x. 1 root root 1363320 May 5 08:32 libboost_log_setup.so.1.77.0 +lrwxrwxrwx. 1 root root 22 May 5 08:32 libboost_log.so -> libboost_log.so.1.77.0 +-rwxr-xr-x. 1 root root 1325072 May 5 08:32 libboost_log.so.1.77.0 +-rw-r--r--. 1 root root 201806 May 5 08:33 libboost_math_c99.a +-rw-r--r--. 1 root root 185294 May 5 08:33 libboost_math_c99f.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_c99f.so -> libboost_math_c99f.so.1.77.0 +-rwxr-xr-x. 1 root root 71888 May 5 08:32 libboost_math_c99f.so.1.77.0 +-rw-r--r--. 1 root root 184610 May 5 08:33 libboost_math_c99l.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_c99l.so -> libboost_math_c99l.so.1.77.0 +-rwxr-xr-x. 1 root root 70640 May 5 08:32 libboost_math_c99l.so.1.77.0 +lrwxrwxrwx. 1 root root 27 May 5 08:32 libboost_math_c99.so -> libboost_math_c99.so.1.77.0 +-rwxr-xr-x. 1 root root 73640 May 5 08:32 libboost_math_c99.so.1.77.0 +-rw-r--r--. 1 root root 1168442 May 5 08:33 libboost_math_tr1.a +-rw-r--r--. 1 root root 1190212 May 5 08:33 libboost_math_tr1f.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_tr1f.so -> libboost_math_tr1f.so.1.77.0 +-rwxr-xr-x. 1 root root 278584 May 5 08:32 libboost_math_tr1f.so.1.77.0 +-rw-r--r--. 1 root root 1137874 May 5 08:33 libboost_math_tr1l.a +lrwxrwxrwx. 1 root root 28 May 5 08:32 libboost_math_tr1l.so -> libboost_math_tr1l.so.1.77.0 +-rwxr-xr-x. 1 root root 289168 May 5 08:32 libboost_math_tr1l.so.1.77.0 +lrwxrwxrwx. 1 root root 27 May 5 08:32 libboost_math_tr1.so -> libboost_math_tr1.so.1.77.0 +-rwxr-xr-x. 1 root root 294848 May 5 08:32 libboost_math_tr1.so.1.77.0 +-rw-r--r--. 1 root root 22466 May 5 08:33 libboost_nowide.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_nowide.so -> libboost_nowide.so.1.77.0 +-rwxr-xr-x. 1 root root 24712 May 5 08:32 libboost_nowide.so.1.77.0 +-rw-r--r--. 1 root root 176758 May 5 08:34 libboost_prg_exec_monitor.a +lrwxrwxrwx. 1 root root 35 May 5 08:32 libboost_prg_exec_monitor.so -> libboost_prg_exec_monitor.so.1.77.0 +-rwxr-xr-x. 1 root root 195640 May 5 08:32 libboost_prg_exec_monitor.so.1.77.0 +-rw-r--r--. 1 root root 1319422 May 5 08:33 libboost_program_options.a +lrwxrwxrwx. 1 root root 34 May 5 08:32 libboost_program_options.so -> libboost_program_options.so.1.77.0 +-rwxr-xr-x. 1 root root 651768 May 5 08:32 libboost_program_options.so.1.77.0 +-rw-r--r--. 1 root root 63270 May 5 08:33 libboost_random.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_random.so -> libboost_random.so.1.77.0 +-rwxr-xr-x. 1 root root 152064 May 5 08:32 libboost_random.so.1.77.0 +-rw-r--r--. 1 root root 797262 May 5 08:33 libboost_regex.a +lrwxrwxrwx. 1 root root 24 May 5 08:32 libboost_regex.so -> libboost_regex.so.1.77.0 +-rwxr-xr-x. 1 root root 473968 May 5 08:32 libboost_regex.so.1.77.0 +-rw-r--r--. 1 root root 1177984 May 5 08:34 libboost_serialization.a +lrwxrwxrwx. 1 root root 32 May 5 08:32 libboost_serialization.so -> libboost_serialization.so.1.77.0 +-rwxr-xr-x. 1 root root 457280 May 5 08:32 libboost_serialization.so.1.77.0 +-rw-r--r--. 1 root root 23484 May 5 08:34 libboost_stacktrace_addr2line.a +lrwxrwxrwx. 1 root root 39 May 5 08:32 libboost_stacktrace_addr2line.so -> libboost_stacktrace_addr2line.so.1.77.0 +-rwxr-xr-x. 1 root root 125792 May 5 08:32 libboost_stacktrace_addr2line.so.1.77.0 +-rw-r--r--. 1 root root 13906 May 5 08:34 libboost_stacktrace_basic.a +lrwxrwxrwx. 1 root root 35 May 5 08:32 libboost_stacktrace_basic.so -> libboost_stacktrace_basic.so.1.77.0 +-rwxr-xr-x. 1 root root 22456 May 5 08:32 libboost_stacktrace_basic.so.1.77.0 +-rw-r--r--. 1 root root 2938 May 5 08:33 libboost_stacktrace_noop.a +lrwxrwxrwx. 1 root root 34 May 5 08:32 libboost_stacktrace_noop.so -> libboost_stacktrace_noop.so.1.77.0 +-rwxr-xr-x. 1 root root 16376 May 5 08:32 libboost_stacktrace_noop.so.1.77.0 +-rw-r--r--. 1 root root 1436 May 5 08:33 libboost_system.a +lrwxrwxrwx. 1 root root 25 May 5 08:32 libboost_system.so -> libboost_system.so.1.77.0 +-rwxr-xr-x. 1 root root 15816 May 5 08:32 libboost_system.so.1.77.0 +-rw-r--r--. 1 root root 2331082 May 5 08:33 libboost_test_exec_monitor.a +-rw-r--r--. 1 root root 322240 May 5 08:33 libboost_thread.a +lrwxrwxrwx. 1 root root 25 May 5 08:34 libboost_thread.so -> libboost_thread.so.1.77.0 +-rwxr-xr-x. 1 root root 260920 May 5 08:34 libboost_thread.so.1.77.0 +-rw-r--r--. 1 root root 53892 May 5 08:34 libboost_timer.a +lrwxrwxrwx. 1 root root 24 May 5 08:33 libboost_timer.so -> libboost_timer.so.1.77.0 +-rwxr-xr-x. 1 root root 45472 May 5 08:33 libboost_timer.so.1.77.0 +-rw-r--r--. 1 root root 123412 May 5 08:34 libboost_type_erasure.a +lrwxrwxrwx. 1 root root 31 May 5 08:33 libboost_type_erasure.so -> libboost_type_erasure.so.1.77.0 +-rwxr-xr-x. 1 root root 76952 May 5 08:33 libboost_type_erasure.so.1.77.0 +-rw-r--r--. 1 root root 2312932 May 5 08:34 libboost_unit_test_framework.a +lrwxrwxrwx. 1 root root 38 May 5 08:33 libboost_unit_test_framework.so -> libboost_unit_test_framework.so.1.77.0 +-rwxr-xr-x. 1 root root 1028120 May 5 08:33 libboost_unit_test_framework.so.1.77.0 +-rw-r--r--. 1 root root 4746706 May 5 08:34 libboost_wave.a +lrwxrwxrwx. 1 root root 23 May 5 08:33 libboost_wave.so -> libboost_wave.so.1.77.0 +-rwxr-xr-x. 1 root root 1599392 May 5 08:33 libboost_wave.so.1.77.0 +-rw-r--r--. 1 root root 779892 May 5 08:34 libboost_wserialization.a +lrwxrwxrwx. 1 root root 33 May 5 08:33 libboost_wserialization.so -> libboost_wserialization.so.1.77.0 +-rwxr-xr-x. 1 root root 320040 May 5 08:33 libboost_wserialization.so.1.77.0 +``` + +### 6.安装gtest + +```bash +git clone https://github.com/google/googletest.git -b release-1.12.0 +cd googletest +mkdir build +cd build +cmake .. -DBUILD_GMOCK=OFF +make +make install +``` + +默认安装路径为 /usr/local/ + +```bash +ls /usr/local/include/ +...... gtest +ls /usr/local/lib/ # 32-bit os +ls /usr/local/lib64/ # 64-bit os +...... cmake libgtest.a libgtest_main.a +``` + +## 第四步:编译StoneDB + +现在StoneDB有三个分支: StoneDB-5.6 (for MySQL 5.6)、 StoneDB-5.7 (for MySQL 5.7) and StoneDB-8.0 (for MySQL 8.0)。本文安装的是StoneDB-8.0,在本例中源代码保存在 / 目录中。 + +```bash +cd / +git clone -b stonedb-8.0-dev https://github.com/stoneatom/stonedb.git +``` + +在编译前,像下文一样更改编译脚本: + +:::info +您可以根据自己的需求将安装目录更改为您的实际安装目录,本例中用的是/stonedb/,记得将marisa, rocksdb, 和 boost的路径改为您的这三个库的实际安装路径 +::: + +```bash +cd stonedb +mkdir build +cd build +mkdir install8 mysql8 +cd mysql8 +cmake ../../ \ +-DCMAKE_BUILD_TYPE=Debug \ +-DCMAKE_INSTALL_PREFIX=/stonedb/build/install8 \ +-DMYSQL_DATADIR=/stonedb/build/install8/data \ +-DSYSCONFDIR=/stonedb/build/install8 \ +-DMYSQL_UNIX_ADDR=/stonedb/build/install8/tmp/mysql.sock \ +-DWITH_BOOST=/usr/local/stonedb-boost177 \ +-DWITH_MARISA=/usr/local/stonedb-marisa \ +-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb \ +-DDOWNLOAD_BOOST=0 +make -j`nproc` +make install -j`nproc` +``` + +## 第五步:启动StoneDB + +您需要手动创建几个目录, 然后初始化并启动StoneDB。您还需要填写您的配置文件my.cnf, 包括安装目录和端口。 + +```bash +cd ../install8 + +### 新建目录 +mkdir data binlog log tmp redolog undolog + +### 配置my.cnf +cp ../../scripts/my.cnf.sample my.cnf +sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf + +### 初始化StoneDB +./bin/mysqld --defaults-file=./my.cnf --initialize-insecure + +### 启动StoneDB +./bin/mysqld --user=root & + +### 关闭StoneDB +./bin/mysqladmin -uroot shutdown +``` + +## 第六步:登录StoneDB + +```bash +./bin/mysql -uroot +### 设置用户 root 的密码为 'stonedb123' +mysql> alter user 'root'@'localhost' identified by 'stonedb123'; +Query OK, 0 rows affected +### 允许远程访问 +mysql> update user set host='%' where user='root'; +``` + diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-56-57.md similarity index 83% rename from website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker.md rename to website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-56-57.md index 2b980e06c..7573807a0 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-56-57.md @@ -1,9 +1,9 @@ --- -id: compile-using-docker -sidebar_position: 5.15 +id: compile-using-docker-for-56-57 +sidebar_position: 5.161 --- -# Docker 下编译使用 StoneDB +# Docker 下编译使用 StoneDB 5.7 ## 环境简介 由于编译环境搭建第三方库较为繁琐,且Fedora,Ubuntu等环境编译存在大量依赖缺失,需要补充安装依赖,搭建麻烦,所以搭建一个Docker Centos 编译环境容器,可以通过Docker 容器快速编译StoneDB,解决编译环境搭建繁琐问题,也可以通过Docker 容器编译后直接启动StoneDB进行调试使用。 @@ -114,44 +114,56 @@ CONTAINER ID IMAGE COMMAND CREATED [root@06f1f385d3b3 build]# tar -zcPvf /home/stonedb57.tar.gz /stonedb57/ ``` ### 2、容器中直接部署试用StoneDB -可以参考:[StoneDB快速部署手册](https://stonedb.io/zh/docs/getting-started/quick-deployment), +可以参考:[StoneDB快速部署手册](https://stonedb.io/zh/docs/quick-deployment), 或者在容器中参考以下方法快速部署进行试用。 -```bash -#进入编译安装的StoneDB install目录,以stonedb57为例 -[root@06f1f385d3b3 build]# cd /stonedb57/install/ - -[root@06f1f385d3b3 install]# groupadd mysql - -[root@06f1f385d3b3 install]# useradd -g mysql mysql - -[root@06f1f385d3b3 install]# ll -total 180 --rw-r--r--. 1 root root 17987 Jun 8 03:41 COPYING --rw-r--r--. 1 root root 102986 Jun 8 03:41 INSTALL-BINARY --rw-r--r--. 1 root root 2615 Jun 8 03:41 README -drwxr-xr-x. 2 root root 4096 Jun 8 06:16 bin -drwxr-xr-x. 3 root root 18 Jun 8 06:16 data -drwxr-xr-x. 2 root root 55 Jun 8 06:16 docs -drwxr-xr-x. 3 root root 4096 Jun 8 06:16 include --rwxr-xr-x. 1 root root 267 Jun 8 03:41 install.sh -drwxr-xr-x. 3 root root 272 Jun 8 06:16 lib -drwxr-xr-x. 4 root root 30 Jun 8 06:16 man -drwxr-xr-x. 10 root root 4096 Jun 8 06:16 mysql-test --rwxr-xr-x. 1 root root 12516 Jun 8 03:41 mysql_server --rwxr-xr-x. 1 root root 764 Jun 8 03:41 reinstall.sh -drwxr-xr-x. 2 root root 57 Jun 8 06:16 scripts -drwxr-xr-x. 28 root root 4096 Jun 8 06:16 share -drwxr-xr-x. 4 root root 4096 Jun 8 06:16 sql-bench --rw-r--r--. 1 root root 5526 Jun 8 03:41 stonedb.cnf -drwxr-xr-x. 2 root root 136 Jun 8 06:16 support-files - -[root@06f1f385d3b3 install]# ll {data,binlog,log,tmp,redolog,undolog} -[root@06f1f385d3b3 install]# mkdir -p ./{data/innodb,binlog,log,tmp,redolog,undolog} - -[root@06f1f385d3b3 install]# chown -R mysql:mysql * +#### 2.1. 创建用户 +```shell +groupadd mysql +useradd -g mysql mysql +passwd mysql +``` +#### 2.2. 手动安装 +手动创建目录、初始化和启动实例,还需要配置 my.cnf 文件,如安装目录,端口等参数。 +```shell +###创建目录 +mkdir -p /stonedb57/install/data +mkdir -p /stonedb57/install/binlog +mkdir -p /stonedb57/install/log +mkdir -p /stonedb57/install/tmp +mkdir -p /stonedb57/install/redolog +mkdir -p /stonedb57/install/undolog +chown -R mysql:mysql /stonedb57 + +###配置my.cnf +mv my.cnf my.cnf.bak +vim /stonedb57/install/my.cnf +[mysqld] +port = 3306 +socket = /stonedb57/install/tmp/mysql.sock +basedir = /stonedb57/install +datadir = /stonedb57/install/data +pid_file = /stonedb57/install/data/mysqld.pid +log_error = /stonedb57/install/log/mysqld.log +innodb_log_group_home_dir = /stonedb57/install/redolog/ +innodb_undo_directory = /stonedb57/install/undolog/ + +chown -R mysql:mysql /stonedb57/install/my.cnf + +###初始化实例 +/stonedb57/install/bin/mysqld --defaults-file=/stonedb57/install/my.cnf --initialize --user=mysql + +###启动实例 +/stonedb57/install/bin/mysqld_safe --defaults-file=/stonedb57/install/my.cnf --user=mysql & +``` +#### 2.3. 自动安装 +编译完成后,在安装目录下会自动生成 reinstall.sh、install.sh 和 my.cnf 文件,执行 reinstall.sh 就是创建目录、初始化实例和启动实例的过程。 +```shell +cd /stonedb57/install +./reinstall.sh ``` +#### 2.4 执行登录 StoneDB56 和StoneDB57安装部署的区别在于初始化数据和重置密码上,在初始化过程中如果遇到问题建议先自行排查log/mysqld.log ,是否有报错信息,如无法自行解决,请提供StoneDB版本信息,Docker image 版本和报错日志,StoneDB版本信息到我们社区或者github 提交issues。 -### StoneDB56参考 +##### StoneDB56参考 ```bash [root@06f1f385d3b3 install]# ./scripts/mysql_install_db --defaults-file=./my.cnf --user=mysql --basedir=/stonedb56/install --datadir=/stonedb56/install/data To do so, start the server, then issue the following commands: @@ -196,7 +208,7 @@ Query OK, 0 rows affected (0.00 sec) ``` -### StoneDB57参考 +##### StoneDB57参考 ```bash [root@06f1f385d3b3 install]# ./bin/mysqld --defaults-file=./my.cnf --initialize --user=mysql diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md new file mode 100644 index 000000000..ed1338e0c --- /dev/null +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-docker/compile-using-docker-for-80.md @@ -0,0 +1,81 @@ +--- +id: compile-using-docker-for-80 +sidebar_position: 5.162 +--- + +# Docker 下编译使用 StoneDB 8.0 +## 环境简介 +由于编译环境搭建第三方库较为繁琐,且Fedora,Ubuntu等环境编译存在大量依赖缺失,需要补充安装依赖,搭建麻烦,所以搭建一个Docker Centos 编译环境容器,可以通过Docker 容器快速编译StoneDB,解决编译环境搭建繁琐问题,也可以通过Docker 容器编译后直接启动StoneDB进行调试使用。 + +## Docker 编译环境搭建使用步骤 +本搭建文档需要提前安装好Docker,Docker 安装请参考Docker官方文档[https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/)。 + +### 获取镜像 +Docker hub镜像地址:[stoneatom/stonedb80_buildenv](https://hub.docker.com/r/stoneatom/stonedb80_buildenv) +```bash +# 从 dockerhub 获取镜像 +$ docker pull stoneatom/stonedb80_buildenv +# 查看docker 镜像 +$ docker images +REPOSITORY TAG IMAGE ID CREATED SIZE +stoneatom/stonedb80_buildenv latest cc644347ffed 7 months ago 771MB +``` + +### 启动一个容器并进入 +```bash +# docker run 参数说明 +# -v 目录挂载,前面是宿主机目录,后面是容器内目录,宿主机目录为stonedb源码父目录路径,本文档以/home/src路径为示例 +# -p 端口映射,前面是宿主机端口,后面是容器端口,设置端口映射使得可以在容器外连接容器内的数据库服务端 +$ docker run -v /home/src/:/home/ -p 23306:3306 -it stoneatom/stonedb80_buildenv /bin/bash +``` +### 创建用户 +```bash +groupadd mysql +useradd -g mysql mysql +passwd mysql +``` +### 获取 StoneDB 8.0 源码,编译安装 +```bash +root@71a1384e5ee3:/home# git clone -b stonedb-8.0-dev https://github.com/stoneatom/stonedb.git + +root@fb0bf0c54de0:/home# cd stonedb +root@fb0bf0c54de0:/home/stonedb# mkdir build +root@fb0bf0c54de0:/home/stonedb# cd build +# 本文档安装路径以/stonedb8/install为例,你可以另外指定安装路径 +root@fb0bf0c54de0:/home/stonedb/build# cmake .. \ +-DCMAKE_BUILD_TYPE=Release \ +-DCMAKE_INSTALL_PREFIX=/stonedb8/install \ +-DMYSQL_DATADIR=/stonedb8/install/data \ +-DSYSCONFDIR=/stonedb8/install \ +-DMYSQL_UNIX_ADDR=/stonedb8/install/tmp/mysql.sock \ +-DWITH_BOOST=/usr/local/stonedb-boost \ +-DWITH_MARISA=/usr/local/stonedb-marisa \ +-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb + +root@fb0bf0c54de0:/home/stonedb/build# make -j `nproc` && make install -j`nproc` +``` + +### 初始化并启动StoneDB +```bash +root@fb0bf0c54de0:/home/stonedb/build# cd /stonedb8/install +# 新建目录 +root@fb0bf0c54de0:/stonedb8/install# mkdir data binlog log tmp redolog undolog +# 配置 my.cnf +root@fb0bf0c54de0:/stonedb8/install# cp /home/stonedb/scripts/my.cnf.sample my.cnf +root@fb0bf0c54de0:/stonedb8/install# sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf +# 初始化 +root@fb0bf0c54de0:/stonedb8/install# chown -R mysql:mysql /stonedb8/install +root@fb0bf0c54de0:/stonedb8/install# ./bin/mysqld --defaults-file=./my.cnf --initialize-insecure --user=mysql +# 启动 +root@fb0bf0c54de0:/stonedb8/install# ./bin/mysqld --user=mysql & +``` + +### 登录 StoneDB +```bash +root@fb0bf0c54de0:/stonedb8/install# ./bin/mysql -uroot +# 设置用户 root 的密码为 'stonedb123' +mysql> alter user 'root'@'localhost' identified by 'stonedb123'; +# 允许远程访问 +mysql> use mysql; +mysql> update user set host='%' where user='root'; +``` \ No newline at end of file diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md index 69de459aa..6a9829760 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-56.md @@ -50,7 +50,6 @@ sudo apt install -y libaio-dev sudo apt install -y libncurses5-dev sudo apt install -y libreadline-dev sudo apt install -y libpam0g-dev -sudo apt install -y zlib1g-dev sudo apt install -y libicu-dev sudo apt install -y libboost-dev sudo apt install -y libgflags-dev diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md index bdf981e78..63bffcd93 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2004/compile-using-ubuntu2004-for-57.md @@ -49,7 +49,6 @@ sudo apt install -y libaio-dev sudo apt install -y libncurses5-dev sudo apt install -y libreadline-dev sudo apt install -y libpam0g-dev -sudo apt install -y zlib1g-dev sudo apt install -y libicu-dev sudo apt install -y libboost-dev sudo apt install -y libgflags-dev diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md new file mode 100644 index 000000000..be2053745 --- /dev/null +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/04-developer-guide/00-compiling-methods/compile-using-ubuntu2204/compile-using-ubuntu2204-for-80.md @@ -0,0 +1,331 @@ +--- +id: compile-using-ubuntu22.04-for-80 +sidebar_position: 5.151 +--- + +# Ubuntu 22.04 下编译 StoneDB for MySQL 8.0 + +本文说明了如何在Ubuntu 22.04 的环境下编译 StoneDB for MySQL 8.0 + +编译工具以及第三方库的版本要求如下: +* GCC 9.4.0 +* Make 3.82 or later +* CMake 3.7.2 or later +* marisa 0.77 +* RocksDB 6.12.6 +* Boost 1.77 + +:::info +以下命令的执行可能会遇到权限问题,建议在管理员权限下运行,或者使用 sudo +::: + +## 第一步:安装依赖包 + +```bash +sudo apt install -y gcc +sudo apt install -y g++ +sudo apt install -y make +sudo apt install -y cmake +sudo apt install -y build-essential +sudo apt install -y autoconf +sudo apt install -y tree +sudo apt install -y bison +sudo apt install -y git +sudo apt install -y libtool +sudo apt install -y numactl +sudo apt install -y python3-dev +sudo apt install -y openssl +sudo apt install -y perl +sudo apt install -y binutils +sudo apt install -y libgmp-dev +sudo apt install -y libmpfr-dev +sudo apt install -y libmpc-dev +sudo apt install -y libisl-dev +sudo apt install -y zlib1g-dev +sudo apt install -y liblz4-dev +sudo apt install -y libbz2-dev +sudo apt install -y libzstd-dev +sudo apt install -y zstd +sudo apt install -y lz4 +sudo apt install -y ncurses-dev +sudo apt install -y libsnappy-dev +sudo apt install -y libedit-dev +sudo apt install -y libaio-dev +sudo apt install -y libncurses5-dev +sudo apt install -y libreadline-dev +sudo apt install -y libpam0g-dev +sudo apt install -y libicu-dev +sudo apt install -y libboost-dev +sudo apt install -y libgflags-dev +sudo apt install -y libjemalloc-dev +sudo apt install -y libssl-dev +sudo apt install -y pkg-config +``` + +:::info +libssl-dev可能安装不成功,你可以使用aptitude安装,安装过程中的选项要选择n y y +```bash +sudo apt install aptitude +sudo aptitude install libssl-dev +... +# type n y y +``` +::: + +## 第二步:安装第三方库 +StoneDB 依赖 marisa、rocksdb、boost,在编译 marisa、rocksdb、boost 时,建议指定安装路径。示例中我们指定了 marisa、rocksdb、boost 的安装路径,你可以根据自己的需求更改安装路径。 +### 1. 安装 cmake +注意检查你的 cmake 版本,如果你的cmake 版本 < 3.72, 安装 cmake +```bash +wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz +tar -zxvf cmake-3.7.2.tar.gz +cd cmake-3.7.2 +./bootstrap && make && make install +/usr/local/bin/cmake --version +apt remove cmake -y +ln -s /usr/local/bin/cmake /usr/bin/ +cmake --version +``` +:::info +如果你的gcc版本过高, 可能导致编译失败. 你可以在`cmake-3.72/Source/cmServerProtocal.cxx`的文件开头加上`#include `来解决这个问题. +```c++ +#include +#include +#include +#include +``` +::: + +### 2. 安装 make +注意检查你的Make版本,如果你的make版本 < 3.82, 安装 make +```bash +wget http://mirrors.ustc.edu.cn/gnu/make/make-3.82.tar.gz +tar -zxvf make-3.82.tar.gz +cd make-3.82 +./configure --prefix=/usr/local/make +make && make install +rm -rf /usr/local/bin/make +ln -s /usr/local/make/bin/make /usr/local/bin/make +make --version +``` + +### 3. 安装marisa +```bash +git clone https://github.com/s-yata/marisa-trie.git +cd marisa-trie +autoreconf -i +./configure --enable-native-code --prefix=/usr/local/stonedb-marisa +sudo make && make install +``` + +在这个例子中marisa的安装路径是`/usr/local/stonedb-marisa`. 你可以根据实际情况修改路径. 在这一步中, `/usr/local/stonedb-marisa/lib`目录中的内容如下. + +```bash +root@htap-dev-64-2:/usr/local/stonedb-marisa/lib$ ls -l +total 4136 +-rw-r--r-- 1 root root 2947618 Mar 20 16:25 libmarisa.a +-rwxr-xr-x 1 root root 967 Mar 20 16:25 libmarisa.la +lrwxrwxrwx 1 root root 18 Mar 20 16:25 libmarisa.so -> libmarisa.so.0.0.0 +lrwxrwxrwx 1 root root 18 Mar 20 16:25 libmarisa.so.0 -> libmarisa.so.0.0.0 +-rwxr-xr-x 1 root root 1273936 Mar 20 16:25 libmarisa.so.0.0.0 +drwxrwxr-x 2 root root 4096 Mar 20 16:25 pkgconfig +``` + +### 4. 安装RocksDB + +```bash +wget https://github.com/facebook/rocksdb/archive/refs/tags/v6.12.6.tar.gz +tar -zxvf v6.12.6.tar.gz +cd rocksdb-6.12.6 + +sudo cmake ./ \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local/stonedb-gcc-rocksdb \ + -DCMAKE_INSTALL_LIBDIR=/usr/local/stonedb-gcc-rocksdb \ + -DWITH_JEMALLOC=ON \ + -DWITH_SNAPPY=ON \ + -DWITH_LZ4=ON \ + -DWITH_ZLIB=ON \ + -DWITH_ZSTD=ON \ + -DUSE_RTTI=ON \ + -DROCKSDB_BUILD_SHARED=ON \ + -DWITH_GFLAGS=OFF \ + -DWITH_TOOLS=OFF \ + -DWITH_BENCHMARK_TOOLS=OFF \ + -DWITH_CORE_TOOLS=OFF + +sudo make -j`nproc` +sudo make install -j`nproc` +``` + +:::info +你的gcc版本可能过高, 可以将你的CMakeLists.txt的310-317行改成下方这样. +```shell +if(FAIL_ON_WARNINGS) + if(MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") + else() # assume GCC + # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") + endif() +endif() +``` +::: + +在本例中RocksDB的安装目录为`/usr/local/stonedb-gcc-rocksdb`. 你可以根据实际情况修改路径. 在这一步中, `/usr/local/stonedb-gcc-rocksdb`目录中文件如下 + +```bash +root@htap-dev-64-2:/usr/local/stonedb-gcc-rocksdb$ ls -l +total 29352 +drwxr-xr-x 3 root root 4096 Mar 20 17:12 cmake +drwxr-xr-x 3 root root 4096 Mar 20 17:12 include +-rw-r--r-- 1 root root 20555728 Mar 20 17:11 librocksdb.a +lrwxrwxrwx 1 root root 15 Mar 20 17:12 librocksdb.so -> librocksdb.so.6 +lrwxrwxrwx 1 root root 20 Mar 20 17:12 librocksdb.so.6 -> librocksdb.so.6.12.6 +-rw-r--r-- 1 root root 9490272 Mar 20 17:12 librocksdb.so.6.12.6 +``` + +### 5. 安装Boost + +```bash +wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz +tar -zxvf boost_1_77_0.tar.gz +cd boost_1_77_0 +./bootstrap.sh --prefix=/usr/local/stonedb-boost177 +./b2 install --with=all +``` + +在本例中boost的安装目录为`/usr/local/stonedb-boost`. 你可以根据实际情况修改路径. 在这一步中, `/usr/local/stonedb-boost/lib`目录中的内容如下. + +```bash +root@htap-dev-64-2:/usr/local/stonedb-boost177/lib$ ls -l +total 41612 +drwxrwxr-x 49 root root 4096 Mar 20 18:57 cmake +-rw-rw-r-- 1 root root 14648 Mar 20 18:56 libboost_atomic.a +lrwxrwxrwx 1 root root 25 Mar 20 18:57 libboost_atomic.so -> libboost_atomic.so.1.77.0 +-rwxrwxr-x 1 root root 22248 Mar 20 18:57 libboost_atomic.so.1.77.0 +-rw-rw-r-- 1 root root 181638 Mar 20 18:56 libboost_chrono.a +lrwxrwxrwx 1 root root 25 Mar 20 18:57 libboost_chrono.so -> libboost_chrono.so.1.77.0 +-rwxrwxr-x 1 root root 55000 Mar 20 18:57 libboost_chrono.so.1.77.0 +-rw-rw-r-- 1 root root 166894 Mar 20 18:56 libboost_container.a +lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_container.so -> libboost_container.so.1.77.0 +-rwxrwxr-x 1 root root 111912 Mar 20 18:57 libboost_container.so.1.77.0 +-rw-rw-r-- 1 root root 6874 Mar 20 18:56 libboost_context.a +lrwxrwxrwx 1 root root 26 Mar 20 18:57 libboost_context.so -> libboost_context.so.1.77.0 +-rwxrwxr-x 1 root root 16584 Mar 20 18:57 libboost_context.so.1.77.0 +-rw-rw-r-- 1 root root 275376 Mar 20 18:56 libboost_contract.a +lrwxrwxrwx 1 root root 27 Mar 20 18:57 libboost_contract.so -> libboost_contract.so.1.77.0 +-rwxrwxr-x 1 root root 148672 Mar 20 18:57 libboost_contract.so.1.77.0 +-rw-rw-r-- 1 root root 178370 Mar 20 18:56 libboost_coroutine.a +lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_coroutine.so -> libboost_coroutine.so.1.77.0 +-rwxrwxr-x 1 root root 84440 Mar 20 18:57 libboost_coroutine.so.1.77.0 +-rw-rw-r-- 1 root root 1458 Mar 20 18:56 libboost_date_time.a +lrwxrwxrwx 1 root root 28 Mar 20 18:57 libboost_date_time.so -> libboost_date_time.so.1.77.0 +-rwxrwxr-x 1 root root 15184 Mar 20 18:57 libboost_date_time.so.1.77.0 +-rw-rw-r-- 1 root root 1654 Mar 20 18:57 libboost_exception.a +-rw-rw-r-- 1 root root 249818 Mar 20 18:56 libboost_fiber.a +lrwxrwxrwx 1 root root 24 Mar 20 18:56 libboost_fiber.so -> libboost_fiber.so.1.77.0 +-rwxrwxr-x 1 root root 107648 Mar 20 18:56 libboost_fiber.so.1.77.0 +-rw-rw-r-- 1 root root 520738 Mar 20 18:56 libboost_filesystem.a +lrwxrwxrwx 1 root root 29 Mar 20 18:56 libboost_filesystem.so -> libboost_filesystem.so.1.77.0 +-rwxrwxr-x 1 root root 178288 Mar 20 18:56 libboost_filesystem.so.1.77.0 +-rw-rw-r-- 1 root root 1015048 Mar 20 18:57 libboost_graph.a +lrwxrwxrwx 1 root root 24 Mar 20 18:56 libboost_graph.so -> libboost_graph.so.1.77.0 +-rwxrwxr-x 1 root root 525440 Mar 20 18:56 libboost_graph.so.1.77.0 +-rw-rw-r-- 1 root root 250402 Mar 20 18:56 libboost_iostreams.a +lrwxrwxrwx 1 root root 28 Mar 20 18:56 libboost_iostreams.so -> libboost_iostreams.so.1.77.0 +-rwxrwxr-x 1 root root 129440 Mar 20 18:56 libboost_iostreams.so.1.77.0 +-rw-rw-r-- 1 root root 478396 Mar 20 18:57 libboost_json.a +lrwxrwxrwx 1 root root 23 Mar 20 18:56 libboost_json.so -> libboost_json.so.1.77.0 +-rwxrwxr-x 1 root root 329512 Mar 20 18:56 libboost_json.so.1.77.0 +-rw-rw-r-- 1 root root 3158276 Mar 20 18:57 libboost_locale.a +lrwxrwxrwx 1 root root 25 Mar 20 18:56 libboost_locale.so -> libboost_locale.so.1.77.0 +-rwxrwxr-x 1 root root 1177200 Mar 20 18:56 libboost_locale.so.1.77.0 +``` + +### 6. 安装Gtest + +```bash +sudo git clone https://github.com/google/googletest.git -b release-1.12.0 +cd googletest +sudo mkdir build +cd build +sudo cmake .. -DBUILD_GMOCK=OFF +sudo make +sudo make install +``` + +默认安装路径为`/usr/local/`. + +```bash +ls /usr/local/include/ +...... gtest +ls /usr/local/lib/ # 32-bit os +ls /usr/local/lib64/ # 64-bit os +...... cmake libgtest.a libgtest_main.a +``` + +## 第三步:编译StoneDB + +现在StoneDB有三个分支: StoneDB-5.6 (for MySQL 5.6)、 StoneDB-5.7 (for MySQL 5.7) and StoneDB-8.0 (for MySQL 8.0). 本文安装的是StoneDB-8.0. 在本例中源代码保存在/目录中. + +```bash +cd / +git clone https://github.com/stoneatom/stonedb.git +``` + +在编译前, 像下文一样更改编译脚本: +:::info +你可以根据自己的需求将安装目录更改为你的实际安装目录, 本例中用的是`/stonedb/`,记得将marisa, RocksDB, 和 Boost的路径改为你的这三个库的实际安装路径. +::: + +```bash +cd stonedb +git checkout -b 8.0 origin/stonedb-8.0-dev +mkdir build +cd build +mkdir install8 mysql8 +cd mysql8 +cmake ../../ \ +-DCMAKE_BUILD_TYPE=Debug \ +-DCMAKE_INSTALL_PREFIX=/stonedb/build/install8 \ +-DMYSQL_DATADIR=/stonedb/build/install8/data \ +-DSYSCONFDIR=/stonedb/build/install8 \ +-DMYSQL_UNIX_ADDR=/stonedb/build/install8/tmp/mysql.sock \ +-DWITH_BOOST=/usr/local/stonedb-boost177 \ +-DWITH_MARISA=/usr/local/stonedb-marisa \ +-DWITH_ROCKSDB=/usr/local/stonedb-gcc-rocksdb \ +-DDOWNLOAD_BOOST=0 +make -j`nproc` +make install -j`nproc` +``` + +## 第四步:启动StoneDB + +你需要手动创建几个目录, 然后初始化并启动StoneDB. 你还需要填写你的配置文件my.cnf, 包括安装目录和端口. + +```bash +cd ../install8 +### 新建目录 +sudo mkdir data binlog log tmp redolog undolog + +### 配置my.cnf +sudo cp ../../scripts/my.cnf.sample my.cnf +sudo sed -i "s|YOUR_ABS_PATH|$(pwd)|g" my.cnf + +### 初始化StoneDB +sudo ./bin/mysqld --defaults-file=./my.cnf --initialize-insecure + +### 启动StoneDB +sudo ./bin/mysqld --user=root & +``` + +## 第五步:登录 StoneDB +```bash +./bin/mysql -uroot +### 设置用户 root 的密码为 'stonedb123' +mysql> alter user 'root'@'localhost' identified by 'stonedb123'; +Query OK, 0 rows affected +### 允许远程访问 +mysql> use mysql; +mysql> update user set host='%' where user='root'; +``` diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/09-FAQ/stonedb-faq.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/09-FAQ/stonedb-faq.md index 542f6aeac..f9c34880e 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/09-FAQ/stonedb-faq.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/09-FAQ/stonedb-faq.md @@ -6,7 +6,7 @@ sidebar_position: 10.2 # 产品FAQ ## StoneDB与MySQL的兼容性如何? -StoneDB 高度兼容 MySQL 5.6、5.7 协议和 MySQL 生态等重要特性,支持 MySQL 常用的功能及语法。 +StoneDB 高度兼容 MySQL 5.6、5.7、8.0 协议和 MySQL 生态等重要特性,支持 MySQL 常用的功能及语法。 由于 StoneDB 本身的一些特性,部分操作和功能尚未得到支持,如不支持创建索引、不支持删除数据等。 ## StoneDB有自己的优化器吗? StoneDB 是在原生的 MySQL 加入的存储引擎,StoneDB 有自己的优化器,但 StoneDB 实际也会利用原生的 MySQL 的优化器做一些查询解析和重写机制。 diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/download.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/download.md index 653a0a471..a96ff18fb 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/download.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/download.md @@ -15,12 +15,13 @@ sidebar_position: 100 | [5.7-v1.0.0](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.0-GA) | 2022-8-31 | [Download](https://static.stoneatom.com/custom/stonedb-ce-5.7-v1.0.0.el7.x86_64.tar.gz) | e23593b80b50e0118f59627216613a2f | \ | | [5.7-v1.0.1](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.1-GA) | 2022-10-24 | [Download](https://static.stoneatom.com/custom/stonedb-ce-5.7-v1.0.1.el7.x86_64.tar.gz) | 73911e56ac89af5f568dd7e9de9e9af5 | 1. 可以[下载DEB包](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.1-GA/stonedb-ce-5.7-v1.0.1.debain.x86_64.tar.gz);2. 如果您在编译的时候提示缺失依赖,您可以前往 Github [**下载相关依赖**](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.1-GA/stonedb-lib.tar.gz) | | [5.7-v1.0.2](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.2-GA) | 2023-01-15 | [Download](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/stonedb-ce-5.7-v1.0.2.el7.x86_64.tar.gz) | be54d4ebb74517bf09fbfe1806f6e2ab | 1. 可以[下载DEB包](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/stonedb-ce-5.7_v1.0.2.ubuntu.amd64.deb);2. 可以[下载RPM包](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/stonedb-ce-5.7-v1.0.2.el7.x86_64.rpm),体验两分钟极速安装StoneDB;3.可以下载自动化部署StoneDB备库的[Shell脚本](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.2-GA/shell.for.deploy.stonedb.as.replic.tar.gz)| +| [5.7-v1.0.3](https://github.com/stoneatom/stonedb/releases/tag/5.7-v1.0.3-GA) | 2023-03-20 | [Download](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.tar.gz) | 679491c2a154b2b00de534c47dea507b | 1. 可以[下载DEB包](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.ubuntu.amd64.deb);2. 可以[下载RPM包](https://github.com/stoneatom/stonedb/releases/download/5.7-v1.0.3-GA/stonedb-ce-5.7-v1.0.3.el7.x86_64.rpm),体验两分钟极速安装StoneDB | | Next Version | Coming soon~ | Coming soon~ | Coming soon~ | \ | :::tip -所有的下载包链接都导向了 Github 页面,如果您当前的网络无法正常访问 Github,可以前往 [Gitee](https://gitee.com/StoneDB/stonedb/releases/tag/5.7-v1.0.2-GA) 按需下载相关安装包。 +所有的下载包链接都导向了 Github 页面,如果您当前的网络无法正常访问 Github,可以前往 [Gitee](https://gitee.com/StoneDB/stonedb/releases/tag/5.7-v1.0.3-GA) 按需下载相关安装包。 如果有更多问题,可以通过以下方式联系我们: diff --git a/website/i18n/zh/docusaurus-plugin-content-docs/current/release-notes.md b/website/i18n/zh/docusaurus-plugin-content-docs/current/release-notes.md index 1ac1ec478..b85efeadf 100644 --- a/website/i18n/zh/docusaurus-plugin-content-docs/current/release-notes.md +++ b/website/i18n/zh/docusaurus-plugin-content-docs/current/release-notes.md @@ -4,8 +4,8 @@ sidebar_position: 11.0 --- # 发版日志 -## StoneDB-5.7-v1.0.3 的发行日志 (2023-03-19, GA) -发布日期: 2023 年 03 月 19 日 +## StoneDB-5.7-v1.0.3 的发行日志 (2023-03-20, GA) +发布日期: 2023 年 03 月 20 日 ### 主备能力 - Binlog 改造 — 指定 DDL 过滤。 diff --git a/website/i18n/zh/docusaurus-plugin-content-pages/community.md b/website/i18n/zh/docusaurus-plugin-content-pages/community.md index 776a37520..c4659602d 100644 --- a/website/i18n/zh/docusaurus-plugin-content-pages/community.md +++ b/website/i18n/zh/docusaurus-plugin-content-pages/community.md @@ -5,31 +5,39 @@ StoneDB 社区由用户、贡献者和社区独有的文化所组成。他们将 ## 贡献团队 {#team} ```custom-teamList +- ![yejianlin](https://avatars.githubusercontent.com/u/3657940?v=4 "title:yejianlin,to://github.com/yejianlin") - ![RingsC](https://avatars.githubusercontent.com/u/5336722?v=4 "title:RingsC,to://github.com/ringsc") +- ![wisehead](https://avatars.githubusercontent.com/u/17314209?v=4 "title:wisehead,to://github.com/wisehead") - ![hustjieke](https://avatars.githubusercontent.com/u/18331104?v=4 "title:hustjieke,to://github.com/hustjieke") -- ![dupeiliang](https://avatars.githubusercontent.com/u/39800914?v=4 "title:dupeiliang,to://github.com/dupeiliang") -- ![andyli](https://avatars.githubusercontent.com/u/15212006?v=4 "title:andyli,to://github.com/andyli029") +- ![Nliver](https://avatars.githubusercontent.com/u/34496563?v=4 "title:Nliver,to://github.com/Nliver") +- ![konghaiya](https://avatars.githubusercontent.com/u/106147765?v=4 "title:konghaiya,to://github.com/konghaiya") +- ![adofsauron](https://avatars.githubusercontent.com/u/3915817?v=4 "title:adofsauron,to://github.com/adofsauron") +- ![davidshiz](https://avatars.githubusercontent.com/u/53512869?v=4 "title:shizhao,to://github.com/davidshiz") +- ![shangyanwen](https://avatars.githubusercontent.com/u/107781103?v=4 "title:shangyanwen,to://github.com/shangyanwen") +- ![haitaoguan](https://avatars.githubusercontent.com/u/105625912?v=4 "title:haitaoguan,to://github.com/haitaoguan") +- ![Double0101](https://avatars.githubusercontent.com/u/19671032?v=4 "title:Double0101,to://github.com/Double0101") +- ![chenshengjiang](https://avatars.githubusercontent.com/u/107859421?v=4 "title:chenshengjiang,to://github.com/chenshengjiang") - ![SPzhang](https://avatars.githubusercontent.com/u/31213457?v=4 "title:SPzhang,to://github.com/zsp108") +- ![zzzz-vincent](https://avatars.githubusercontent.com/u/85084498?v=4 "title:zzzz-vincent,to://github.com/zzzz-vincent") +- ![El-even-11](https://avatars.githubusercontent.com/u/73071130?v=4 "title:El-even-11,to://github.com/El-even-11") +- ![TomeC](https://avatars.githubusercontent.com/u/6322894?v=4 "title:TomeC,to://github.com/TomeC") +- ![HappenLee](https://avatars.githubusercontent.com/u/10553413?v=4 "title:HappenLee,to://github.com/HappenLee") +- ![slchris](https://avatars.githubusercontent.com/u/68360471?v=4 "title:slchris,to://github.com/slchris") +- ![Dysprosium0626](https://avatars.githubusercontent.com/u/59086724?v=4 "title:Dysprosium0626,to://github.com/Dysprosium0626") +- ![lxd5866](https://avatars.githubusercontent.com/u/10388914?v=4 "title:lxd5866,to://github.com/lxd5866") +- ![Yeekin-](https://avatars.githubusercontent.com/u/101704468?v=4 "title:Yeekin-,to://github.com/Yeekin-GYJ") - ![CodingSuen](https://avatars.githubusercontent.com/u/69141572?v=4 "title:CodingSuen,to://github.com/CodingSuen") -- ![jun-lihaijun](https://avatars.githubusercontent.com/u/103155258?v=4 "title:jun-lihaijun,to://github.com/lihaijun-jun") +- ![fuxiang](https://avatars.githubusercontent.com/u/26853590?v=4 "title:fuxiang,to://github.com/gougexuanli") +- ![lujiashun](https://avatars.githubusercontent.com/u/112846998?v=4 "title:lujiashun,to://github.com/lujiashun") - ![DandreChen](https://avatars.githubusercontent.com/u/34465107?v=4 "title:DandreChen,to://github.com/DandreChen") - ![isredstar](https://avatars.githubusercontent.com/u/63028664?v=4 "title:isredstar,to://github.com/isredstar") -- ![konghaiya](https://avatars.githubusercontent.com/u/106147765?v=4 "title:konghaiya,to://github.com/konghaiya") -- ![Nliver](https://avatars.githubusercontent.com/u/34496563?v=4 "title:Nliver,to://github.com/Nliver") -- ![Yeekin-](https://avatars.githubusercontent.com/u/101704468?v=4 "title:Yeekin-,to://github.com/Yeekin-GYJ") +- ![jun-lihaijun](https://avatars.githubusercontent.com/u/103155258?v=4 "title:jun-lihaijun,to://github.com/lihaijun-jun") - ![MaJun](https://avatars.githubusercontent.com/u/64419837?v=4 "title:MaJun,to://github.com/leizzboy") - ![LuiciferYi](https://avatars.githubusercontent.com/u/24913493?v=4 "title:LuiciferYi,to://github.com/LuiciferYi") - ![litaihong](https://avatars.githubusercontent.com/u/79444526?v=4 "title:litaihong,to://github.com/lylth") -- ![haitaoguan](https://avatars.githubusercontent.com/u/105625912?v=4 "title:haitaoguan,to://github.com/haitaoguan") -- ![shangyanwen](https://avatars.githubusercontent.com/u/107781103?v=4 "title:shangyanwen,to://github.com/shangyanwen") -- ![adofsauron](https://avatars.githubusercontent.com/u/3915817?v=4 "title:adofsauron,to://github.com/adofsauron") -- ![fuxiang](https://avatars.githubusercontent.com/u/26853590?v=4 "title:fuxiang,to://github.com/gougexuanli") -- ![lujiashun](https://avatars.githubusercontent.com/u/112846998?v=4 "title:lujiashun,to://github.com/lujiashun") - ![xuejiao-joy](https://avatars.githubusercontent.com/u/107540910?v=4 "title:xuejiao-joy,to://github.com/xuejiao-joy") -- ![davidshiz](https://avatars.githubusercontent.com/u/53512869?v=4 "title:shizhao,to://github.com/davidshiz") ``` - ## 加入社区 {#join} ```custom-joinList - [Github Discussion](https://github.com/stoneatom/stonedb/discussions "icon:icon-a-bianzu16beifen1") diff --git a/website/i18n/zh/docusaurus-plugin-content-pages/index.md b/website/i18n/zh/docusaurus-plugin-content-pages/index.md index 4dfeb27f2..a897b0ca9 100644 --- a/website/i18n/zh/docusaurus-plugin-content-pages/index.md +++ b/website/i18n/zh/docusaurus-plugin-content-pages/index.md @@ -79,7 +79,7 @@ StoneDB for MySQL - 减少企业的TCO成本,人人皆可获得低成本的数据服务。 ``` -```custom-roadMap 2023-01-15 +```custom-roadMap 2023-03-20 - Roadmap - StoneDB_5.6_v1.0.0 1. 一体化行列混存+内存计算架构 @@ -112,7 +112,7 @@ StoneDB for MySQL 2. 部分数据对象的定义 3. Binlog 改造 4. 主备集群自动寻主功能 - - 2023-02-30 + - 2023-03-20 - StoneDB_5.7_v1.0.4 1. 存储过程增强 2. MySQL Event(批量加工能力) @@ -128,20 +128,29 @@ StoneDB for MySQL - 2023-06-30 - StoneDB_8.0_v1.0.0 - 适配 MySQL 8.0 - - 2023-03-06 + - 2023-05-04 - StoneDB_v2.0.0 - 全新架构 - 2023年~ ``` ```custom-showCase -- 国产化适配 +- 信创国产化 - kunpeng - 鲲鹏技术认证 - tx - 统信软件认证 + - zkfd + - 中科方德认证 + - hgxx + - 海光信息认证 + - zkkk + - 中科可控认证 + - ghzz + - 光合组织成员单位 - Opengauss - - OpenGauss共建社区 + - OpenGauss共建社区 + ``` ```custom-customers diff --git a/website/package-lock.json b/website/package-lock.json deleted file mode 100644 index 5285ec5cb..000000000 --- a/website/package-lock.json +++ /dev/null @@ -1,25967 +0,0 @@ -{ - "name": "stoneDB", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "stoneDB", - "version": "0.0.0", - "dependencies": { - "@aldridged/docusaurus-plugin-lunr": "^1.0.0-alpha.10", - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-pwa": "2.1.0", - "@docusaurus/preset-classic": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-live-codeblock": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@easyops-cn/docusaurus-search-local": "^0.32.0", - "@mdx-js/react": "^1.6.22", - "antd": "^4.20.5", - "clsx": "^1.1.1", - "emailjs": "^4.0.0", - "gsap": "^3.10.4", - "hast-util-to-text": "^3.1.1", - "js-md5": "^0.7.3", - "katex": "^0.15.6", - "libpag": "^4.0.5-release.7", - "lottie-web": "^5.9.4", - "mathjs": "^11.2.1", - "md5": "^2.3.0", - "mdast-util-definition-list": "^1.1.1", - "mdast-util-math": "^2.0.1", - "micromark-extension-math": "^2.0.2", - "mockjs": "^1.1.0", - "moment": "^2.29.4", - "prism-react-renderer": "^1.3.1", - "ramda": "^0.28.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-intersection-observer": "^9.4.0", - "react-markdown": "^8.0.3", - "rehype-katex": "^4.0.0", - "rehype-stringify": "^9.0.3", - "remark-html": "^15.0.1", - "remark-math": "^3.0.1", - "remark-rehype": "^10.1.0", - "styled-components": "^5.3.5", - "unist-util-select": "^2.0.2", - "uuid": "^8.3.2" - }, - "devDependencies": { - "@docusaurus/eslint-plugin": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-client-redirects": "2.1.0", - "@docusaurus/plugin-ideal-image": "2.1.0", - "@tsconfig/docusaurus": "^1.0.5", - "@types/styled-components": "^5.1.25", - "babel-plugin-import": "^1.13.5", - "babel-plugin-styled-components": "^2.0.7", - "docusaurus-plugin-less": "^2.0.2", - "less": "^4.1.2", - "less-loader": "^11.0.0", - "less-vars-to-js": "^1.3.0", - "style-loader": "^3.3.1", - "typescript": "^4.6.4" - } - }, - "node_modules/@aldridged/docusaurus-plugin-lunr": { - "version": "1.0.0-alpha.10", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "^2.0.0-alpha.58", - "@docusaurus/utils": "^2.0.0-alpha.58", - "autocomplete.js": "^0.37.1", - "fs-extra": "^9.0.1", - "globby": "^11.0.1", - "lodash": "^4.17.15", - "lunr": "^2.3.8", - "remove-markdown": "^0.3.0", - "striptags": "^3.1.1", - "urijs": "^1.19.2" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "@docusaurus/core": "^2.0.0", - "react": "^16.8.4", - "react-dom": "^16.8.4" - } - }, - "node_modules/@aldridged/docusaurus-plugin-lunr/node_modules/fs-extra": { - "version": "9.1.0", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.7.1", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.7.1" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.1", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.7.1" - }, - "peerDependencies": { - "@algolia/client-search": "^4.9.1", - "algoliasearch": "^4.9.1" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.1", - "license": "MIT" - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.14.2" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.14.2", - "license": "MIT" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.14.2" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "license": "MIT" - }, - "node_modules/@algolia/logger-common": { - "version": "4.14.2", - "license": "MIT" - }, - "node_modules/@algolia/logger-console": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/logger-common": "4.14.2" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.14.2" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.14.2", - "license": "MIT" - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.14.2" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ant-design/colors": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "@ctrl/tinycolor": "^3.4.0" - } - }, - "node_modules/@ant-design/icons": { - "version": "4.7.0", - "license": "MIT", - "dependencies": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-svg": "^4.2.1", - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-util": "^5.9.4" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/@ant-design/icons-svg": { - "version": "4.2.1", - "license": "MIT" - }, - "node_modules/@ant-design/react-slick": { - "version": "0.29.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.4", - "classnames": "^2.2.5", - "json2mq": "^0.2.0", - "lodash": "^4.17.21", - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dependencies": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regexpu-core": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regjsgen": { - "version": "0.7.1", - "license": "MIT" - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regjsparser": { - "version": "0.9.1", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.18.12", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.1", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.19.1", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.19.1", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.19.1", - "@babel/helper-compilation-targets": "^7.19.1", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.19.0", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.13", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.19.0", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.19.1", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@ctrl/tinycolor": { - "version": "3.4.1", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/@docsearch/css": { - "version": "3.2.1", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.7.1", - "@algolia/autocomplete-preset-algolia": "1.7.1", - "@docsearch/css": "3.2.1", - "algoliasearch": "^4.0.0" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/commander": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@docusaurus/core/node_modules/semver": { - "version": "7.3.7", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/eslint-plugin": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.30.5", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "eslint": ">=6" - } - }, - "node_modules/@docusaurus/logger": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/lqip-loader": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "2.1.0", - "file-loader": "^6.2.0", - "lodash": "^4.17.21", - "sharp": "^0.30.7", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/image-size": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/mdast-util-to-string": { - "version": "2.0.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@docusaurus/mdx-loader/node_modules/unified": { - "version": "9.2.2", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.1.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-ideal-image": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/lqip-loader": "2.1.0", - "@docusaurus/responsive-loader": "^1.7.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@endiliey/react-ideal-image": "^0.0.11", - "react-waypoint": "^10.3.0", - "sharp": "^0.30.7", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "jimp": "*", - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - }, - "peerDependenciesMeta": { - "jimp": { - "optional": true - } - } - }, - "node_modules/@docusaurus/plugin-pwa": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@docusaurus/core": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "babel-loader": "^8.2.5", - "clsx": "^1.2.1", - "core-js": "^3.23.3", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0", - "workbox-build": "^6.5.3", - "workbox-precaching": "^6.5.3", - "workbox-window": "^6.5.3" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/plugin-debug": "2.1.0", - "@docusaurus/plugin-google-analytics": "2.1.0", - "@docusaurus/plugin-google-gtag": "2.1.0", - "@docusaurus/plugin-sitemap": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-search-algolia": "2.1.0", - "@docusaurus/types": "2.1.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.2", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/responsive-loader": { - "version": "1.7.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "jimp": "*", - "sharp": "*" - }, - "peerDependenciesMeta": { - "jimp": { - "optional": true - }, - "sharp": { - "optional": true - } - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-live-codeblock": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@philpl/buble": "^0.19.7", - "clsx": "^1.2.1", - "fs-extra": "^10.1.0", - "react-live": "2.2.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/types/node_modules/commander": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "2.1.0", - "@svgr/webpack": "^6.2.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@easyops-cn/autocomplete.js": { - "version": "0.38.1", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "immediate": "^3.2.3" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local": { - "version": "0.32.0", - "license": "MIT", - "dependencies": { - "@docusaurus/plugin-content-docs": "^2.0.0-rc.1", - "@docusaurus/theme-translations": "^2.0.0-rc.1", - "@docusaurus/utils": "^2.0.0-rc.1", - "@docusaurus/utils-common": "^2.0.0-rc.1", - "@docusaurus/utils-validation": "^2.0.0-rc.1", - "@easyops-cn/autocomplete.js": "^0.38.1", - "@node-rs/jieba": "^1.6.0", - "cheerio": "^1.0.0-rc.3", - "clsx": "^1.1.1", - "debug": "^4.2.0", - "fs-extra": "^10.0.0", - "klaw-sync": "^6.0.0", - "lunr": "^2.3.9", - "lunr-languages": "^1.4.0", - "mark.js": "^8.11.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "@docusaurus/theme-common": "^2.0.0-rc.1", - "react": "^16.14.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.8.0" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.8.0", - "license": "MIT" - }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "license": "MIT" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "license": "MIT" - }, - "node_modules/@endiliey/react-ideal-image": { - "version": "0.0.11", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.9.0", - "npm": "> 3" - }, - "peerDependencies": { - "prop-types": ">=15", - "react": ">=0.14.x", - "react-waypoint": ">=9.0.2" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "devOptional": true, - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "devOptional": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "devOptional": true, - "peer": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "devOptional": true, - "peer": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "license": "MIT", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx/node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-definitions": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "9.2.0", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-generated": { - "version": "1.1.6", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@node-rs/jieba": { - "version": "1.6.1", - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@node-rs/jieba-android-arm-eabi": "1.6.1", - "@node-rs/jieba-android-arm64": "1.6.1", - "@node-rs/jieba-darwin-arm64": "1.6.1", - "@node-rs/jieba-darwin-x64": "1.6.1", - "@node-rs/jieba-freebsd-x64": "1.6.1", - "@node-rs/jieba-linux-arm-gnueabihf": "1.6.1", - "@node-rs/jieba-linux-arm64-gnu": "1.6.1", - "@node-rs/jieba-linux-arm64-musl": "1.6.1", - "@node-rs/jieba-linux-x64-gnu": "1.6.1", - "@node-rs/jieba-linux-x64-musl": "1.6.1", - "@node-rs/jieba-win32-arm64-msvc": "1.6.1", - "@node-rs/jieba-win32-ia32-msvc": "1.6.1", - "@node-rs/jieba-win32-x64-msvc": "1.6.1" - } - }, - "node_modules/@node-rs/jieba-darwin-arm64": { - "version": "1.6.1", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@philpl/buble": { - "version": "0.19.7", - "license": "MIT", - "dependencies": { - "acorn": "^6.1.1", - "acorn-class-fields": "^0.2.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.0.1", - "chalk": "^2.4.2", - "magic-string": "^0.25.2", - "minimist": "^1.2.0", - "os-homedir": "^1.0.1", - "regexpu-core": "^4.5.4" - }, - "bin": { - "buble": "bin/buble" - } - }, - "node_modules/@philpl/buble/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@philpl/buble/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@philpl/buble/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@philpl/buble/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@philpl/buble/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "license": "MIT" - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "license": "MIT" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "license": "BSD-3-Clause" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "license": "MIT", - "dependencies": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "license": "Apache-2.0", - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.3.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "6.3.1", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1", - "@svgr/babel-plugin-transform-svg-component": "^6.3.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "6.3.1", - "license": "MIT", - "dependencies": { - "@svgr/plugin-jsx": "^6.3.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.3.1", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.18.4", - "entities": "^4.3.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "6.3.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.3.1", - "@svgr/hast-util-to-babel-ast": "^6.3.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "6.3.1", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/webpack": { - "version": "6.3.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.18.5", - "@babel/plugin-transform-react-constant-elements": "^7.17.12", - "@babel/preset-env": "^7.18.2", - "@babel/preset-react": "^7.17.12", - "@babel/preset-typescript": "^7.17.12", - "@svgr/core": "^6.3.1", - "@svgr/plugin-jsx": "^6.3.1", - "@svgr/plugin-svgo": "^6.3.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tsconfig/docusaurus": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.7", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.4.6", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.14", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.4", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "license": "MIT" - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "license": "MIT" - }, - "node_modules/@types/katex": { - "version": "0.11.1", - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "3.0.10", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "18.7.21", - "license": "MIT" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.0.21", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.19", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.6", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.4", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "license": "MIT" - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/styled-components": { - "version": "5.1.26", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.2", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.38.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.38.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.38.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.38.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/typescript-estree": "5.38.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.38.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.38.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "6.4.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-class-fields": { - "version": "0.2.1", - "license": "MIT", - "engines": { - "node": ">=4.8.2" - }, - "peerDependencies": { - "acorn": "^6.0.0" - } - }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.14.2", - "license": "MIT", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.11.1", - "license": "MIT", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antd": { - "version": "4.23.2", - "license": "MIT", - "dependencies": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons": "^4.7.0", - "@ant-design/react-slick": "~0.29.1", - "@babel/runtime": "^7.18.3", - "@ctrl/tinycolor": "^3.4.0", - "classnames": "^2.2.6", - "copy-to-clipboard": "^3.2.0", - "lodash": "^4.17.21", - "memoize-one": "^6.0.0", - "moment": "^2.29.2", - "rc-cascader": "~3.7.0", - "rc-checkbox": "~2.3.0", - "rc-collapse": "~3.3.0", - "rc-dialog": "~8.9.0", - "rc-drawer": "~5.1.0", - "rc-dropdown": "~4.0.0", - "rc-field-form": "~1.27.0", - "rc-image": "~5.7.0", - "rc-input": "~0.1.2", - "rc-input-number": "~7.3.5", - "rc-mentions": "~1.9.1", - "rc-menu": "~9.6.3", - "rc-motion": "^2.6.1", - "rc-notification": "~4.6.0", - "rc-pagination": "~3.1.17", - "rc-picker": "~2.6.10", - "rc-progress": "~3.3.2", - "rc-rate": "~2.9.0", - "rc-resize-observer": "^1.2.0", - "rc-segmented": "~2.1.0", - "rc-select": "~14.1.13", - "rc-slider": "~10.0.0", - "rc-steps": "~4.1.0", - "rc-switch": "~3.2.0", - "rc-table": "~7.26.0", - "rc-tabs": "~12.1.0-alpha.1", - "rc-textarea": "~0.3.0", - "rc-tooltip": "~5.2.0", - "rc-tree": "~5.7.0", - "rc-tree-select": "~5.5.0", - "rc-trigger": "^5.2.10", - "rc-upload": "~4.3.0", - "rc-util": "^5.22.5", - "scroll-into-view-if-needed": "^2.2.25" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ant-design" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/array-tree-filter": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/assert": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "node_modules/async": { - "version": "3.2.4", - "license": "MIT" - }, - "node_modules/async-validator": { - "version": "4.2.5", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autocomplete.js": { - "version": "0.37.1", - "license": "MIT", - "dependencies": { - "immediate": "^3.2.3" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.12", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.25.0", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/babel-loader": { - "version": "8.2.5", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "license": "MIT" - }, - "node_modules/babel-plugin-import": { - "version": "1.13.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - }, - "peerDependencies": { - "styled-components": ">= 2" - } - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "license": "MIT" - }, - "node_modules/bail": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base16": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.0", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.0.14", - "license": "MIT", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/bonjour-service/node_modules/array-flatten": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/boxen": { - "version": "6.2.1", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.4", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buble": { - "version": "0.19.6", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "magic-string": "^0.25.1", - "minimist": "^1.2.0", - "os-homedir": "^1.0.1", - "regexpu-core": "^4.2.0", - "vlq": "^1.0.0" - }, - "bin": { - "buble": "bin/buble" - } - }, - "node_modules/buble/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/buble/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/buble/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/buble/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/buble/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/camelize": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001412", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "1.1.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio-select/node_modules/css-select": { - "version": "5.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio/node_modules/parse5": { - "version": "7.1.1", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "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" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/classnames": { - "version": "2.3.2", - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "5.3.1", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/colord": { - "version": "2.9.3", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.19", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/complex.js": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/component-props": { - "version": "1.1.1" - }, - "node_modules/component-xor": { - "version": "0.0.4", - "license": "MIT" - }, - "node_modules/compressible": { - "version": "2.0.18", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/compute-scroll-into-view": { - "version": "1.0.17", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/configstore": { - "version": "5.0.1", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "license": "MIT" - }, - "node_modules/consolidated-events": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.2", - "license": "MIT", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.2", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.25.3", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.25.3", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.25.3", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.7.1", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.7", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "cssnano": "^5.1.8", - "jest-worker": "^27.5.1", - "postcss": "^8.4.13", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select/node_modules/dom-serializer": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.3.1", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domutils": { - "version": "2.8.0", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/css-select/node_modules/entities": { - "version": "2.2.0", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/css-selector-parser": { - "version": "1.4.1", - "license": "MIT" - }, - "node_modules/css-to-react-native": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.13", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.3.8", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.12", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "license": "MIT", - "dependencies": { - "css-declaration-sorter": "^6.3.0", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csstype": { - "version": "3.1.1", - "license": "MIT" - }, - "node_modules/date-fns": { - "version": "2.29.3", - "license": "MIT", - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/dayjs": { - "version": "1.11.5", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/decimal.js": { - "version": "10.4.1", - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decode-named-character-reference/node_modules/character-entities": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "devOptional": true, - "peer": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detab": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-libc": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/diff": { - "version": "5.1.0", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "devOptional": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/docusaurus-plugin-less": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@docusaurus/core": ">=2.0.0-beta.9", - "less": ">=4.0.0", - "less-loader": ">=10.0.0" - } - }, - "node_modules/dom-align": { - "version": "1.12.3", - "license": "MIT" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-iterator": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "component-props": "1.1.1", - "component-xor": "0.0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.0.1", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "license": "BSD-3-Clause" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.8", - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.262", - "license": "ISC" - }, - "node_modules/emailjs": { - "version": "4.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "typescript": ">=4.3.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.10.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.4.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.3", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.6", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "license": "MIT" - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-object-assign": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-latex": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "devOptional": true, - "peer": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "devOptional": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "devOptional": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "devOptional": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "devOptional": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "devOptional": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "devOptional": true, - "peer": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "devOptional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "devOptional": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "devOptional": true, - "peer": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "1.12.3", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "dev": true, - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "version": "4.18.1", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "devOptional": true, - "peer": true - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.13.0", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/feed": { - "version": "4.2.2", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "devOptional": true, - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.0", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "devOptional": true, - "peer": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "devOptional": true, - "peer": true - }, - "node_modules/flux": { - "version": "4.0.3", - "license": "BSD-3-Clause", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.7", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/github-slugger": { - "version": "1.4.0", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/decompress-response": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "devOptional": true, - "peer": true - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gsap": { - "version": "3.11.1", - "license": "Standard 'no charge' license: https://greensock.com/standard-license. Club GreenSock members get more: https://greensock.com/licensing/. Why GreenSock doesn't employ an MIT license: https://greensock.com/why-license/" - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-is-element": { - "version": "2.1.2", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/html-void-elements": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-sanitize": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html": { - "version": "8.0.3", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-is-element": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "html-void-elements": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.2", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html/node_modules/ccount": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-html/node_modules/comma-separated-tokens": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-html/node_modules/property-information": { - "version": "6.1.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-html/node_modules/space-separated-tokens": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-html/node_modules/unist-util-is": { - "version": "5.1.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-text": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-is-element": "^2.0.0", - "unist-util-find-after": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "2.0.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.0", - "license": "ISC" - }, - "node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "license": "MIT" - }, - "node_modules/immer": { - "version": "9.0.15", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.42", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "license": "MIT" - }, - "node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jake": { - "version": "10.8.5", - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.6.1", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-md5": { - "version": "0.7.3", - "license": "MIT" - }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "devOptional": true, - "peer": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "0.5.0", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "devOptional": true, - "peer": true - }, - "node_modules/json2mq": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "string-convert": "^0.2.0" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/katex": { - "version": "0.15.6", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.0.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/less": { - "version": "4.1.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less-vars-to-js": { - "version": "1.3.0", - "dev": true, - "dependencies": { - "strip-json-comments": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "devOptional": true, - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libpag": { - "version": "4.1.8", - "license": "Apache-2.0" - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "license": "MIT" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "devOptional": true, - "peer": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.0.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lottie-web": { - "version": "5.9.6", - "license": "MIT" - }, - "node_modules/lower-case": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "license": "MIT" - }, - "node_modules/lunr-languages": { - "version": "1.10.0", - "license": "MPL-1.1" - }, - "node_modules/magic-string": { - "version": "0.25.9", - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mark.js": { - "version": "8.11.1", - "license": "MIT" - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mathjs": { - "version": "11.2.1", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.19.0", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.0", - "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" - }, - "bin": { - "mathjs": "bin/cli.js" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5/node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definition-list": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.10", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-hast": "^12.0.0", - "mdast-util-to-markdown": "^1.2.1", - "micromark-extension-definition-list": "^1.2.0", - "unist-builder": "^3.0.0" - } - }, - "node_modules/mdast-util-definition-list/node_modules/unist-builder": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-is": { - "version": "5.1.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-math": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "12.2.2", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "trim-lines": "^3.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-builder": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-is": { - "version": "5.1.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-position": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { - "version": "5.1.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown/node_modules/zwitch": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-to-string": { - "version": "3.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "license": "CC0-1.0" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.7", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memoize-one": { - "version": "6.0.0", - "license": "MIT" - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "3.0.10", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.0.6", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-extension-definition-list": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "assert": "^2.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1" - }, - "peerDependencies": { - "micromark": "^3.0.5" - } - }, - "node_modules/micromark-extension-math": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "@types/katex": "^0.11.0", - "katex": "^0.13.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-math/node_modules/katex": { - "version": "0.13.24", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.0.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.0.2", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.0.2", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.0.2", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.0.1", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.1.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.0.0", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.0.2", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.0.1", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "1.0.2", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.1", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "license": "MIT" - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "dev": true, - "license": "MIT" - }, - "node_modules/mockjs": { - "version": "1.1.0", - "dependencies": { - "commander": "*" - }, - "bin": { - "random": "bin/random" - } - }, - "node_modules/mockjs/node_modules/commander": { - "version": "9.4.0", - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "devOptional": true, - "peer": true - }, - "node_modules/needle": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-abi": { - "version": "3.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "5.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/not": { - "version": "0.1.0" - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "devOptional": true, - "peer": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "license": "MIT", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "6.0.1", - "license": "MIT" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "7.1.1", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.16", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "browserslist": "^4.20.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.7", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.3", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.16" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "license": "MIT", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/promise": { - "version": "7.3.1", - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.10.3", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/ramda": { - "version": "0.28.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc-align": { - "version": "4.0.12", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "dom-align": "^1.7.0", - "lodash": "^4.17.21", - "rc-util": "^5.3.0", - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-cascader": { - "version": "3.7.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", - "classnames": "^2.3.1", - "rc-select": "~14.1.0", - "rc-tree": "~5.7.0", - "rc-util": "^5.6.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-checkbox": { - "version": "2.3.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-collapse": { - "version": "3.3.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.3.4", - "rc-util": "^5.2.1", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-dialog": { - "version": "8.9.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-motion": "^2.3.0", - "rc-util": "^5.21.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-drawer": { - "version": "5.1.0", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-motion": "^2.6.1", - "rc-util": "^5.21.2" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-dropdown": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.6", - "rc-trigger": "^5.3.1", - "rc-util": "^5.17.0" - }, - "peerDependencies": { - "react": ">=16.11.0", - "react-dom": ">=16.11.0" - } - }, - "node_modules/rc-field-form": { - "version": "1.27.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.0", - "async-validator": "^4.1.0", - "rc-util": "^5.8.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-image": { - "version": "5.7.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-dialog": "~8.9.0", - "rc-util": "^5.0.6" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-input": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.18.1" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/rc-input-number": { - "version": "7.3.9", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.23.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-mentions": { - "version": "1.9.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-menu": "~9.6.0", - "rc-textarea": "^0.3.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.22.5" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-menu": { - "version": "9.6.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.4.3", - "rc-overflow": "^1.2.0", - "rc-trigger": "^5.1.2", - "rc-util": "^5.12.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-motion": { - "version": "2.6.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.21.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-notification": { - "version": "4.6.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.2.0", - "rc-util": "^5.20.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-overflow": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.19.2" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-pagination": { - "version": "3.1.17", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-picker": { - "version": "2.6.10", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "date-fns": "2.x", - "dayjs": "1.x", - "moment": "^2.24.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.4.0", - "shallowequal": "^1.1.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-progress": { - "version": "3.3.3", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-util": "^5.16.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-rate": { - "version": "2.9.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.0.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-resize-observer": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.15.0", - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-segmented": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-motion": "^2.4.4", - "rc-util": "^5.17.0" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/rc-select": { - "version": "14.1.13", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-overflow": "^1.0.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.16.1", - "rc-virtual-list": "^3.2.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/rc-slider": { - "version": "10.0.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.18.1", - "shallowequal": "^1.1.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-steps": { - "version": "4.1.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.2", - "classnames": "^2.2.3", - "rc-util": "^5.0.1" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-switch": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.1" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-table": { - "version": "7.26.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-resize-observer": "^1.1.0", - "rc-util": "^5.22.5", - "shallowequal": "^1.1.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-tabs": { - "version": "12.1.0-alpha.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.2", - "classnames": "2.x", - "rc-dropdown": "~4.0.0", - "rc-menu": "~9.6.0", - "rc-motion": "^2.6.2", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-textarea": { - "version": "0.3.7", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.7.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-tooltip": { - "version": "5.2.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.2", - "classnames": "^2.3.1", - "rc-trigger": "^5.0.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-tree": { - "version": "5.7.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-util": "^5.16.1", - "rc-virtual-list": "^3.4.8" - }, - "engines": { - "node": ">=10.x" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/rc-tree-select": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-select": "~14.1.0", - "rc-tree": "~5.7.0", - "rc-util": "^5.16.1" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/rc-trigger": { - "version": "5.3.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.6", - "rc-align": "^4.0.0", - "rc-motion": "^2.0.0", - "rc-util": "^5.19.2" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-upload": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.5", - "rc-util": "^5.2.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-util": { - "version": "5.24.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "react-is": "^16.12.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, - "node_modules/rc-virtual-list": { - "version": "3.4.8", - "license": "MIT", - "dependencies": { - "classnames": "^2.2.6", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.15.0" - }, - "engines": { - "node": ">=8.x" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/react": { - "version": "17.0.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "license": "MIT", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-intersection-observer": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.0.tgz", - "integrity": "sha512-v0403CmomOVlzhqFXlzOxg0ziLcVq8mfbP0AwAcEQWgZmR2OulOT79Ikznw4UlB3N+jlUYqLMe4SDHUOyp0t2A==", - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0|| ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "license": "MIT", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "license": "MIT" - }, - "node_modules/react-live": { - "version": "2.2.3", - "license": "MIT", - "dependencies": { - "buble": "0.19.6", - "core-js": "^2.4.1", - "dom-iterator": "^1.0.0", - "prism-react-renderer": "^1.0.1", - "prop-types": "^15.5.8", - "react-simple-code-editor": "^0.10.0", - "unescape": "^1.0.1" - }, - "engines": { - "node": ">= 0.12.0", - "npm": ">= 2.0.0" - } - }, - "node_modules/react-live/node_modules/core-js": { - "version": "2.6.12", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-markdown": { - "version": "8.0.3", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.3.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/react-markdown/node_modules/comma-separated-tokens": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/react-markdown/node_modules/property-information": { - "version": "6.1.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/react-markdown/node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" - }, - "node_modules/react-markdown/node_modules/remark-parse": { - "version": "10.0.1", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/space-separated-tokens": { - "version": "2.0.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/react-markdown/node_modules/unist-util-is": { - "version": "5.1.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile": { - "version": "5.3.5", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-markdown/node_modules/vfile-message": { - "version": "3.1.2", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/react-router": { - "version": "5.3.3", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.3", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.3", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-simple-code-editor": { - "version": "0.10.0", - "license": "MIT", - "peerDependencies": { - "react": "^16.0.0", - "react-dom": "^16.0.0" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.3.4", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-waypoint": { - "version": "10.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "consolidated-events": "^1.1.0 || ^2.0.0", - "prop-types": "^15.0.0", - "react-is": "^17.0.1 || ^18.0.0" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-waypoint/node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.7.0", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/rehype-katex": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/katex": "^0.11.0", - "hast-util-to-text": "^2.0.0", - "katex": "^0.12.0", - "rehype-parse": "^7.0.0", - "unified": "^9.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-katex/node_modules/commander": { - "version": "2.20.3", - "license": "MIT" - }, - "node_modules/rehype-katex/node_modules/hast-util-is-element": { - "version": "1.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-katex/node_modules/hast-util-to-text": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "hast-util-is-element": "^1.0.0", - "repeat-string": "^1.0.0", - "unist-util-find-after": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-katex/node_modules/katex": { - "version": "0.12.0", - "license": "MIT", - "dependencies": { - "commander": "^2.19.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/rehype-katex/node_modules/unified": { - "version": "9.2.2", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-katex/node_modules/unist-util-find-after": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "hast-util-from-parse5": "^6.0.0", - "parse5": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-stringify": { - "version": "9.0.3", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-to-html": "^8.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-html": { - "version": "15.0.1", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "hast-util-sanitize": "^4.0.0", - "hast-util-to-html": "^8.0.0", - "mdast-util-to-hast": "^12.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-math": { - "version": "3.0.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "license": "MIT", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "license": "MIT" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread/node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "10.1.0", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remove-markdown": { - "version": "0.3.0", - "license": "MIT" - }, - "node_modules/renderkid": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.1", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "license": "BSD-3-Clause" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/rtlcss/node_modules/strip-json-comments": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.5.7", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "license": "MIT", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.4", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/scroll-into-view-if-needed": { - "version": "2.2.29", - "license": "MIT", - "dependencies": { - "compute-scroll-into-view": "^1.0.17" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "license": "MIT" - }, - "node_modules/select-hose": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/send": { - "version": "0.18.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/sharp": { - "version": "0.30.7", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.3.7", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "license": "MIT" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sirv": { - "version": "1.0.19", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "license": "MIT" - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/stable": { - "version": "0.1.8", - "license": "MIT" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.2.1", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-convert": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-entities/node_modules/character-entities-legacy": { - "version": "3.0.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/striptags": { - "version": "3.2.0", - "license": "MIT" - }, - "node_modules/style-loader": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/styled-components": { - "version": "5.3.5", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.0", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "2.8.0", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "license": "MIT", - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.15.0", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.8.0", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/trim": { - "version": "0.0.1" - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "devOptional": true, - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "2.19.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-function": { - "version": "4.1.0", - "engines": { - "node": ">= 14" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.8.3", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.33", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", - "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unescape": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "10.1.2", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/bail": { - "version": "2.0.2", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "4.1.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unified/node_modules/trough": { - "version": "2.1.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unified/node_modules/vfile": { - "version": "5.3.5", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/vfile-message": { - "version": "3.1.2", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-find-after": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-find-after/node_modules/unist-util-is": { - "version": "5.1.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "2.0.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-select": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "css-selector-parser": "^1.1.0", - "not": "^0.1.0", - "nth-check": "^1.0.1", - "unist-util-is": "^3.0.0", - "zwitch": "^1.0.3" - } - }, - "node_modules/unist-util-select/node_modules/nth-check": { - "version": "1.0.2", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/unist-util-select/node_modules/unist-util-is": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.9", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.7", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urijs": { - "version": "1.19.11", - "license": "MIT" - }, - "node_modules/url-loader": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util": { - "version": "0.12.4", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.5", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/wait-on": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "license": "BSD-2-Clause" - }, - "node_modules/webpack": { - "version": "5.76.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", - "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.6.1", - "license": "MIT", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.8.0", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.1", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.9.0", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "license": "MIT" - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.8.0", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-build": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "license": "BSD-3-Clause", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-core": { - "version": "6.5.4", - "license": "MIT" - }, - "node_modules/workbox-expiration": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-precaching": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-recipes": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-routing": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-strategies": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-streams": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "node_modules/workbox-sw": { - "version": "6.5.4", - "license": "MIT" - }, - "node_modules/workbox-window": { - "version": "6.5.4", - "license": "MIT", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "node_modules/wrap-ansi": { - "version": "8.0.1", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.1.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@aldridged/docusaurus-plugin-lunr": { - "version": "1.0.0-alpha.10", - "requires": { - "@docusaurus/types": "^2.0.0-alpha.58", - "@docusaurus/utils": "^2.0.0-alpha.58", - "autocomplete.js": "^0.37.1", - "fs-extra": "^9.0.1", - "globby": "^11.0.1", - "lodash": "^4.17.15", - "lunr": "^2.3.8", - "remove-markdown": "^0.3.0", - "striptags": "^3.1.1", - "urijs": "^1.19.2" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - } - } - }, - "@algolia/autocomplete-core": { - "version": "1.7.1", - "requires": { - "@algolia/autocomplete-shared": "1.7.1" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.7.1", - "requires": { - "@algolia/autocomplete-shared": "1.7.1" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.7.1" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "requires": { - "@algolia/cache-common": "4.14.2" - } - }, - "@algolia/cache-common": { - "version": "4.14.2" - }, - "@algolia/cache-in-memory": { - "version": "4.14.2", - "requires": { - "@algolia/cache-common": "4.14.2" - } - }, - "@algolia/client-account": { - "version": "4.14.2", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-analytics": { - "version": "4.14.2", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-common": { - "version": "4.14.2", - "requires": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-personalization": { - "version": "4.14.2", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-search": { - "version": "4.14.2", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/events": { - "version": "4.0.1" - }, - "@algolia/logger-common": { - "version": "4.14.2" - }, - "@algolia/logger-console": { - "version": "4.14.2", - "requires": { - "@algolia/logger-common": "4.14.2" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.14.2", - "requires": { - "@algolia/requester-common": "4.14.2" - } - }, - "@algolia/requester-common": { - "version": "4.14.2" - }, - "@algolia/requester-node-http": { - "version": "4.14.2", - "requires": { - "@algolia/requester-common": "4.14.2" - } - }, - "@algolia/transporter": { - "version": "4.14.2", - "requires": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@ant-design/colors": { - "version": "6.0.0", - "requires": { - "@ctrl/tinycolor": "^3.4.0" - } - }, - "@ant-design/icons": { - "version": "4.7.0", - "requires": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-svg": "^4.2.1", - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-util": "^5.9.4" - } - }, - "@ant-design/icons-svg": { - "version": "4.2.1" - }, - "@ant-design/react-slick": { - "version": "0.29.2", - "requires": { - "@babel/runtime": "^7.10.4", - "classnames": "^2.2.5", - "json2mq": "^0.2.0", - "lodash": "^4.17.21", - "resize-observer-polyfill": "^1.5.1" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" - }, - "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "requires": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "dependencies": { - "regenerate-unicode-properties": { - "version": "10.1.0", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regexpu-core": { - "version": "5.2.1", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.7.1" - }, - "regjsparser": { - "version": "0.9.1", - "requires": { - "jsesc": "~0.5.0" - } - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.19.0" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1" - }, - "@babel/helper-validator-option": { - "version": "7.18.6" - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "escape-string-regexp": { - "version": "1.0.5" - } - } - }, - "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.19.0", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.18.12", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - }, - "dependencies": { - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - } - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.1", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.19.1", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-typescript": "^7.18.6" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.19.1", - "requires": { - "@babel/compat-data": "^7.19.1", - "@babel/helper-compilation-targets": "^7.19.1", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.19.0", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.13", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.19.0", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.19.1", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.10", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "optional": true - }, - "@ctrl/tinycolor": { - "version": "3.4.1" - }, - "@docsearch/css": { - "version": "3.2.1" - }, - "@docsearch/react": { - "version": "3.2.1", - "requires": { - "@algolia/autocomplete-core": "1.7.1", - "@algolia/autocomplete-preset-algolia": "1.7.1", - "@docsearch/css": "3.2.1", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.1.0", - "requires": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "dependencies": { - "commander": { - "version": "5.1.0" - }, - "semver": { - "version": "7.3.7", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.1.0", - "requires": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/eslint-plugin": { - "version": "2.1.0", - "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.30.5", - "tslib": "^2.4.0" - } - }, - "@docusaurus/logger": { - "version": "2.1.0", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - } - }, - "@docusaurus/lqip-loader": { - "version": "2.1.0", - "dev": true, - "requires": { - "@docusaurus/logger": "2.1.0", - "file-loader": "^6.2.0", - "lodash": "^4.17.21", - "sharp": "^0.30.7", - "tslib": "^2.4.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.1.0", - "requires": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "dependencies": { - "image-size": { - "version": "1.0.2", - "requires": { - "queue": "6.0.2" - } - }, - "mdast-util-to-string": { - "version": "2.0.0" - }, - "unified": { - "version": "9.2.2", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.1.0", - "requires": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.1.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - } - }, - "@docusaurus/plugin-client-redirects": { - "version": "2.1.0", - "dev": true, - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-docs": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-debug": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-ideal-image": { - "version": "2.1.0", - "dev": true, - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/lqip-loader": "2.1.0", - "@docusaurus/responsive-loader": "^1.7.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@endiliey/react-ideal-image": "^0.0.11", - "react-waypoint": "^10.3.0", - "sharp": "^0.30.7", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-pwa": { - "version": "2.1.0", - "requires": { - "@babel/core": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@docusaurus/core": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "babel-loader": "^8.2.5", - "clsx": "^1.2.1", - "core-js": "^3.23.3", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0", - "workbox-build": "^6.5.3", - "workbox-precaching": "^6.5.3", - "workbox-window": "^6.5.3" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/preset-classic": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/plugin-debug": "2.1.0", - "@docusaurus/plugin-google-analytics": "2.1.0", - "@docusaurus/plugin-google-gtag": "2.1.0", - "@docusaurus/plugin-sitemap": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-search-algolia": "2.1.0", - "@docusaurus/types": "2.1.0" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.2", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "@docusaurus/responsive-loader": { - "version": "1.7.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0" - } - }, - "@docusaurus/theme-classic": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/types": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-common": { - "version": "2.1.0", - "requires": { - "@docusaurus/mdx-loader": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-content-blog": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/plugin-content-pages": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-live-codeblock": { - "version": "2.1.0", - "requires": { - "@docusaurus/core": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "@philpl/buble": "^0.19.7", - "clsx": "^1.2.1", - "fs-extra": "^10.1.0", - "react-live": "2.2.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.1.0", - "requires": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.1.0", - "@docusaurus/logger": "2.1.0", - "@docusaurus/plugin-content-docs": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-translations": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-validation": "2.1.0", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-translations": { - "version": "2.1.0", - "requires": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/types": { - "version": "2.1.0", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "dependencies": { - "commander": { - "version": "5.1.0" - } - } - }, - "@docusaurus/utils": { - "version": "2.1.0", - "requires": { - "@docusaurus/logger": "2.1.0", - "@svgr/webpack": "^6.2.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - } - }, - "@docusaurus/utils-common": { - "version": "2.1.0", - "requires": { - "tslib": "^2.4.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.1.0", - "requires": { - "@docusaurus/logger": "2.1.0", - "@docusaurus/utils": "2.1.0", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - } - }, - "@easyops-cn/autocomplete.js": { - "version": "0.38.1", - "requires": { - "cssesc": "^3.0.0", - "immediate": "^3.2.3" - } - }, - "@easyops-cn/docusaurus-search-local": { - "version": "0.32.0", - "requires": { - "@docusaurus/plugin-content-docs": "^2.0.0-rc.1", - "@docusaurus/theme-translations": "^2.0.0-rc.1", - "@docusaurus/utils": "^2.0.0-rc.1", - "@docusaurus/utils-common": "^2.0.0-rc.1", - "@docusaurus/utils-validation": "^2.0.0-rc.1", - "@easyops-cn/autocomplete.js": "^0.38.1", - "@node-rs/jieba": "^1.6.0", - "cheerio": "^1.0.0-rc.3", - "clsx": "^1.1.1", - "debug": "^4.2.0", - "fs-extra": "^10.0.0", - "klaw-sync": "^6.0.0", - "lunr": "^2.3.9", - "lunr-languages": "^1.4.0", - "mark.js": "^8.11.1", - "tslib": "^2.4.0" - } - }, - "@emotion/is-prop-valid": { - "version": "1.2.0", - "requires": { - "@emotion/memoize": "^0.8.0" - } - }, - "@emotion/memoize": { - "version": "0.8.0" - }, - "@emotion/stylis": { - "version": "0.8.5" - }, - "@emotion/unitless": { - "version": "0.7.5" - }, - "@endiliey/react-ideal-image": { - "version": "0.0.11", - "dev": true, - "requires": {} - }, - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "devOptional": true, - "peer": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "devOptional": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "devOptional": true, - "peer": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true, - "peer": true - } - } - }, - "@hapi/hoek": { - "version": "9.3.0" - }, - "@hapi/topo": { - "version": "5.1.0", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "devOptional": true, - "peer": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "devOptional": true, - "peer": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "devOptional": true, - "peer": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0" - }, - "@jridgewell/set-array": { - "version": "1.1.2" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4" - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "semver": { - "version": "5.7.1" - }, - "source-map": { - "version": "0.5.7" - }, - "unified": { - "version": "9.2.0", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-util-generated": { - "version": "1.1.6" - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22" - }, - "@node-rs/jieba": { - "version": "1.6.1", - "requires": { - "@node-rs/jieba-android-arm-eabi": "1.6.1", - "@node-rs/jieba-android-arm64": "1.6.1", - "@node-rs/jieba-darwin-arm64": "1.6.1", - "@node-rs/jieba-darwin-x64": "1.6.1", - "@node-rs/jieba-freebsd-x64": "1.6.1", - "@node-rs/jieba-linux-arm-gnueabihf": "1.6.1", - "@node-rs/jieba-linux-arm64-gnu": "1.6.1", - "@node-rs/jieba-linux-arm64-musl": "1.6.1", - "@node-rs/jieba-linux-x64-gnu": "1.6.1", - "@node-rs/jieba-linux-x64-musl": "1.6.1", - "@node-rs/jieba-win32-arm64-msvc": "1.6.1", - "@node-rs/jieba-win32-ia32-msvc": "1.6.1", - "@node-rs/jieba-win32-x64-msvc": "1.6.1" - } - }, - "@node-rs/jieba-darwin-arm64": { - "version": "1.6.1", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@philpl/buble": { - "version": "0.19.7", - "requires": { - "acorn": "^6.1.1", - "acorn-class-fields": "^0.2.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-jsx": "^5.0.1", - "chalk": "^2.4.2", - "magic-string": "^0.25.2", - "minimist": "^1.2.0", - "os-homedir": "^1.0.1", - "regexpu-core": "^4.5.4" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "escape-string-regexp": { - "version": "1.0.5" - } - } - }, - "@polka/url": { - "version": "1.0.0-next.21" - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39" - } - } - }, - "@sideway/address": { - "version": "4.1.4", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0" - }, - "@sindresorhus/is": { - "version": "0.14.0" - }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "requires": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.3.1", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "6.3.1", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1", - "@svgr/babel-plugin-transform-svg-component": "^6.3.1" - } - }, - "@svgr/core": { - "version": "6.3.1", - "requires": { - "@svgr/plugin-jsx": "^6.3.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "6.3.1", - "requires": { - "@babel/types": "^7.18.4", - "entities": "^4.3.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.3.1", - "requires": { - "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.3.1", - "@svgr/hast-util-to-babel-ast": "^6.3.1", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.3.1", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.3.1", - "requires": { - "@babel/core": "^7.18.5", - "@babel/plugin-transform-react-constant-elements": "^7.17.12", - "@babel/preset-env": "^7.18.2", - "@babel/preset-react": "^7.17.12", - "@babel/preset-typescript": "^7.17.12", - "@svgr/core": "^6.3.1", - "@svgr/plugin-jsx": "^6.3.1", - "@svgr/plugin-svgo": "^6.3.1" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@trysound/sax": { - "version": "0.2.0" - }, - "@tsconfig/docusaurus": { - "version": "1.0.6", - "dev": true - }, - "@types/body-parser": { - "version": "1.19.2", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/debug": { - "version": "4.1.7", - "requires": { - "@types/ms": "*" - } - }, - "@types/eslint": { - "version": "8.4.6", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.0" - }, - "@types/express": { - "version": "4.17.14", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11" - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "dev": true, - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0" - }, - "@types/http-proxy": { - "version": "1.17.9", - "requires": { - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11" - }, - "@types/katex": { - "version": "0.11.1" - }, - "@types/mdast": { - "version": "3.0.10", - "requires": { - "@types/unist": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2" - }, - "@types/mime": { - "version": "3.0.1" - }, - "@types/ms": { - "version": "0.7.31" - }, - "@types/node": { - "version": "18.7.21" - }, - "@types/parse-json": { - "version": "4.0.0" - }, - "@types/parse5": { - "version": "5.0.3" - }, - "@types/prop-types": { - "version": "15.7.5" - }, - "@types/qs": { - "version": "6.9.7" - }, - "@types/range-parser": { - "version": "1.2.4" - }, - "@types/react": { - "version": "18.0.21", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-router": { - "version": "5.1.19", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.6", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/resolve": { - "version": "1.17.1", - "requires": { - "@types/node": "*" - } - }, - "@types/retry": { - "version": "0.12.0" - }, - "@types/sax": { - "version": "1.2.4", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2" - }, - "@types/serve-index": { - "version": "1.9.1", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "requires": { - "@types/node": "*" - } - }, - "@types/styled-components": { - "version": "5.1.26", - "dev": true, - "requires": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "@types/trusted-types": { - "version": "2.0.2" - }, - "@types/unist": { - "version": "2.0.6" - }, - "@types/ws": { - "version": "8.5.3", - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.38.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0" - } - }, - "@typescript-eslint/types": { - "version": "5.38.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.38.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/utils": { - "version": "5.38.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/typescript-estree": "5.38.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.38.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.38.0", - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.3.0", - "dev": true - } - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0" - }, - "@xtuc/long": { - "version": "4.2.2" - }, - "accepts": { - "version": "1.3.8", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "6.4.2" - }, - "acorn-class-fields": { - "version": "0.2.1", - "requires": {} - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0" - }, - "address": { - "version": "1.2.1" - }, - "aggregate-error": { - "version": "3.1.0", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "requires": {} - }, - "algoliasearch": { - "version": "4.14.2", - "requires": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "algoliasearch-helper": { - "version": "3.11.1", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "ansi-align": { - "version": "3.0.1", - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-html-community": { - "version": "0.0.8" - }, - "ansi-regex": { - "version": "5.0.1" - }, - "ansi-styles": { - "version": "4.3.0", - "requires": { - "color-convert": "^2.0.1" - } - }, - "antd": { - "version": "4.23.2", - "requires": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons": "^4.7.0", - "@ant-design/react-slick": "~0.29.1", - "@babel/runtime": "^7.18.3", - "@ctrl/tinycolor": "^3.4.0", - "classnames": "^2.2.6", - "copy-to-clipboard": "^3.2.0", - "lodash": "^4.17.21", - "memoize-one": "^6.0.0", - "moment": "^2.29.2", - "rc-cascader": "~3.7.0", - "rc-checkbox": "~2.3.0", - "rc-collapse": "~3.3.0", - "rc-dialog": "~8.9.0", - "rc-drawer": "~5.1.0", - "rc-dropdown": "~4.0.0", - "rc-field-form": "~1.27.0", - "rc-image": "~5.7.0", - "rc-input": "~0.1.2", - "rc-input-number": "~7.3.5", - "rc-mentions": "~1.9.1", - "rc-menu": "~9.6.3", - "rc-motion": "^2.6.1", - "rc-notification": "~4.6.0", - "rc-pagination": "~3.1.17", - "rc-picker": "~2.6.10", - "rc-progress": "~3.3.2", - "rc-rate": "~2.9.0", - "rc-resize-observer": "^1.2.0", - "rc-segmented": "~2.1.0", - "rc-select": "~14.1.13", - "rc-slider": "~10.0.0", - "rc-steps": "~4.1.0", - "rc-switch": "~3.2.0", - "rc-table": "~7.26.0", - "rc-tabs": "~12.1.0-alpha.1", - "rc-textarea": "~0.3.0", - "rc-tooltip": "~5.2.0", - "rc-tree": "~5.7.0", - "rc-tree-select": "~5.5.0", - "rc-trigger": "^5.2.10", - "rc-upload": "~4.3.0", - "rc-util": "^5.22.5", - "scroll-into-view-if-needed": "^2.2.25" - } - }, - "anymatch": { - "version": "3.1.2", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2" - }, - "argparse": { - "version": "2.0.1" - }, - "array-flatten": { - "version": "1.1.1" - }, - "array-tree-filter": { - "version": "2.1.0" - }, - "array-union": { - "version": "2.1.0" - }, - "asap": { - "version": "2.0.6" - }, - "assert": { - "version": "2.0.0", - "requires": { - "es6-object-assign": "^1.1.0", - "is-nan": "^1.2.1", - "object-is": "^1.0.1", - "util": "^0.12.0" - } - }, - "async": { - "version": "3.2.4" - }, - "async-validator": { - "version": "4.2.5" - }, - "at-least-node": { - "version": "1.0.0" - }, - "autocomplete.js": { - "version": "0.37.1", - "requires": { - "immediate": "^3.2.3" - } - }, - "autoprefixer": { - "version": "10.4.12", - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5" - }, - "axios": { - "version": "0.25.0", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "babel-loader": { - "version": "8.2.5", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4" - } - } - }, - "babel-plugin-import": { - "version": "1.13.5", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-styled-components": { - "version": "2.0.7", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0" - }, - "bail": { - "version": "1.0.5" - }, - "balanced-match": { - "version": "1.0.2" - }, - "base16": { - "version": "1.0.0" - }, - "base64-js": { - "version": "1.5.1", - "dev": true - }, - "batch": { - "version": "0.6.1" - }, - "big.js": { - "version": "5.2.2" - }, - "binary-extensions": { - "version": "2.2.0" - }, - "bl": { - "version": "4.1.0", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.20.0", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2" - }, - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0" - } - } - }, - "bonjour-service": { - "version": "1.0.14", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2" - } - } - }, - "boolbase": { - "version": "1.0.0" - }, - "boxen": { - "version": "6.2.1", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1" - }, - "emoji-regex": { - "version": "9.2.2" - }, - "string-width": { - "version": "5.1.2", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.4", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "buble": { - "version": "0.19.6", - "requires": { - "chalk": "^2.4.1", - "magic-string": "^0.25.1", - "minimist": "^1.2.0", - "os-homedir": "^1.0.1", - "regexpu-core": "^4.2.0", - "vlq": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3" - }, - "escape-string-regexp": { - "version": "1.0.5" - } - } - }, - "buffer": { - "version": "5.7.1", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2" - }, - "builtin-modules": { - "version": "3.3.0" - }, - "bytes": { - "version": "3.0.0" - }, - "cacheable-request": { - "version": "6.1.0", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0" - }, - "normalize-url": { - "version": "4.5.1" - } - } - }, - "call-bind": { - "version": "1.0.2", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0" - }, - "camel-case": { - "version": "4.1.2", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0" - }, - "camelcase-css": { - "version": "2.0.1" - }, - "camelize": { - "version": "1.0.0" - }, - "caniuse-api": { - "version": "3.0.0", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001412" - }, - "ccount": { - "version": "1.1.0" - }, - "chalk": { - "version": "4.1.2", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "character-entities": { - "version": "1.2.4" - }, - "character-entities-html4": { - "version": "2.1.0" - }, - "character-entities-legacy": { - "version": "1.1.4" - }, - "character-reference-invalid": { - "version": "1.1.4" - }, - "charenc": { - "version": "0.0.2" - }, - "cheerio": { - "version": "1.0.0-rc.12", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.1", - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "cheerio-select": { - "version": "2.1.0", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "dependencies": { - "css-select": { - "version": "5.1.0", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - } - }, - "chownr": { - "version": "1.1.4", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3" - }, - "ci-info": { - "version": "2.0.0" - }, - "classnames": { - "version": "2.3.2" - }, - "clean-css": { - "version": "5.3.1", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0" - }, - "cli-boxes": { - "version": "3.0.0" - }, - "cli-table3": { - "version": "0.6.3", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.3", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "1.2.1" - }, - "collapse-white-space": { - "version": "1.0.6" - }, - "color": { - "version": "4.2.3", - "dev": true, - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - }, - "color-convert": { - "version": "2.0.1", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4" - }, - "color-string": { - "version": "1.9.1", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colord": { - "version": "2.9.3" - }, - "colorette": { - "version": "2.0.19" - }, - "combine-promises": { - "version": "1.1.0" - }, - "comma-separated-tokens": { - "version": "1.0.8" - }, - "commander": { - "version": "8.3.0" - }, - "common-tags": { - "version": "1.8.2" - }, - "commondir": { - "version": "1.0.1" - }, - "complex.js": { - "version": "2.1.1" - }, - "component-props": { - "version": "1.1.1" - }, - "component-xor": { - "version": "0.0.4" - }, - "compressible": { - "version": "2.0.18", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0" - }, - "safe-buffer": { - "version": "5.1.2" - } - } - }, - "compute-scroll-into-view": { - "version": "1.0.17" - }, - "concat-map": { - "version": "0.0.1" - }, - "configstore": { - "version": "5.0.1", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect-history-api-fallback": { - "version": "2.0.0" - }, - "consola": { - "version": "2.15.3" - }, - "consolidated-events": { - "version": "2.0.2", - "dev": true - }, - "content-disposition": { - "version": "0.5.2" - }, - "content-type": { - "version": "1.0.4" - }, - "convert-source-map": { - "version": "1.8.0", - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2" - } - } - }, - "cookie": { - "version": "0.5.0" - }, - "cookie-signature": { - "version": "1.0.6" - }, - "copy-anything": { - "version": "2.0.6", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-text-to-clipboard": { - "version": "3.0.1" - }, - "copy-to-clipboard": { - "version": "3.3.2", - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.1.2", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0" - } - } - }, - "core-js": { - "version": "3.25.3" - }, - "core-js-compat": { - "version": "3.25.3", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.25.3" - }, - "core-util-is": { - "version": "1.0.3" - }, - "cosmiconfig": { - "version": "7.0.1", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-fetch": { - "version": "3.1.5", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2" - }, - "crypto-random-string": { - "version": "2.0.0" - }, - "css-color-keywords": { - "version": "1.0.0" - }, - "css-declaration-sorter": { - "version": "6.3.1", - "requires": {} - }, - "css-loader": { - "version": "6.7.1", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "4.1.0", - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^27.5.1", - "postcss": "^8.4.13", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - } - }, - "css-select": { - "version": "4.3.0", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0" - } - } - }, - "css-selector-parser": { - "version": "1.4.1" - }, - "css-to-react-native": { - "version": "3.0.0", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "css-tree": { - "version": "1.1.3", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0" - }, - "cssesc": { - "version": "3.0.0" - }, - "cssnano": { - "version": "5.1.13", - "requires": { - "cssnano-preset-default": "^5.2.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-advanced": { - "version": "5.3.8", - "requires": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.12", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - } - }, - "cssnano-preset-default": { - "version": "5.2.12", - "requires": { - "css-declaration-sorter": "^6.3.0", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.1.1" - }, - "date-fns": { - "version": "2.29.3" - }, - "dayjs": { - "version": "1.11.5" - }, - "debug": { - "version": "4.3.4", - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2" - } - } - }, - "decimal.js": { - "version": "10.4.1" - }, - "decode-named-character-reference": { - "version": "1.0.2", - "requires": { - "character-entities": "^2.0.0" - }, - "dependencies": { - "character-entities": { - "version": "2.0.2" - } - } - }, - "decompress-response": { - "version": "6.0.0", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "dev": true - } - } - }, - "deep-extend": { - "version": "0.6.0" - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "devOptional": true, - "peer": true - }, - "deepmerge": { - "version": "4.2.2" - }, - "default-gateway": { - "version": "6.0.3", - "requires": { - "execa": "^5.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3" - }, - "define-lazy-prop": { - "version": "2.0.0" - }, - "define-properties": { - "version": "1.1.4", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "depd": { - "version": "2.0.0" - }, - "dequal": { - "version": "2.0.3" - }, - "destroy": { - "version": "1.2.0" - }, - "detab": { - "version": "2.0.4", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-libc": { - "version": "2.0.1", - "dev": true - }, - "detect-node": { - "version": "2.1.0" - }, - "detect-port": { - "version": "1.5.1", - "requires": { - "address": "^1.0.1", - "debug": "4" - } - }, - "detect-port-alt": { - "version": "1.1.6", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0" - } - } - }, - "diff": { - "version": "5.1.0" - }, - "dir-glob": { - "version": "3.0.1", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0" - }, - "dns-packet": { - "version": "5.4.0", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "devOptional": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "docusaurus-plugin-less": { - "version": "2.0.2", - "dev": true, - "requires": {} - }, - "dom-align": { - "version": "1.12.3" - }, - "dom-converter": { - "version": "0.2.0", - "requires": { - "utila": "~0.4" - } - }, - "dom-iterator": { - "version": "1.0.0", - "requires": { - "component-props": "1.1.1", - "component-xor": "0.0.4" - } - }, - "dom-serializer": { - "version": "2.0.0", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0" - }, - "domhandler": { - "version": "5.0.3", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dot-case": { - "version": "3.0.4", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0" - } - } - }, - "duplexer": { - "version": "0.1.2" - }, - "duplexer3": { - "version": "0.1.5" - }, - "eastasianwidth": { - "version": "0.2.0" - }, - "ee-first": { - "version": "1.1.1" - }, - "ejs": { - "version": "3.1.8", - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.262" - }, - "emailjs": { - "version": "4.0.1", - "requires": {} - }, - "emoji-regex": { - "version": "8.0.0" - }, - "emojis-list": { - "version": "3.0.0" - }, - "emoticon": { - "version": "3.2.0" - }, - "encodeurl": { - "version": "1.0.2" - }, - "end-of-stream": { - "version": "1.4.4", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.10.0", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "4.4.0" - }, - "errno": { - "version": "0.1.8", - "dev": true, - "optional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.3", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.6", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-module-lexer": { - "version": "0.9.3" - }, - "es-to-primitive": { - "version": "1.2.1", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-object-assign": { - "version": "1.1.0" - }, - "escalade": { - "version": "3.1.1" - }, - "escape-goat": { - "version": "2.1.1" - }, - "escape-html": { - "version": "1.0.3" - }, - "escape-latex": { - "version": "1.2.0" - }, - "escape-string-regexp": { - "version": "4.0.0" - }, - "eslint": { - "version": "8.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", - "devOptional": true, - "peer": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "devOptional": true, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "devOptional": true, - "peer": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, - "peer": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "devOptional": true, - "peer": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "devOptional": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "devOptional": true, - "peer": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "devOptional": true, - "peer": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "devOptional": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "devOptional": true - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "devOptional": true, - "peer": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "devOptional": true, - "peer": true - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "devOptional": true, - "peer": true - } - } - }, - "esprima": { - "version": "4.0.1" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "devOptional": true, - "peer": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, - "peer": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0" - } - } - }, - "estraverse": { - "version": "4.3.0" - }, - "estree-walker": { - "version": "1.0.1" - }, - "esutils": { - "version": "2.0.3" - }, - "eta": { - "version": "1.12.3" - }, - "etag": { - "version": "1.8.1" - }, - "eval": { - "version": "0.1.8", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "eventemitter3": { - "version": "4.0.7" - }, - "events": { - "version": "3.3.0" - }, - "execa": { - "version": "5.1.1", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "expand-template": { - "version": "2.0.3", - "dev": true - }, - "express": { - "version": "4.18.1", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "content-disposition": { - "version": "0.5.4", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0" - }, - "path-to-regexp": { - "version": "0.1.7" - } - } - }, - "extend": { - "version": "3.0.2" - }, - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3" - }, - "fast-glob": { - "version": "3.2.12", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "devOptional": true, - "peer": true - }, - "fast-url-parser": { - "version": "1.1.3", - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1" - } - } - }, - "fastq": { - "version": "1.13.0", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2" - }, - "feed": { - "version": "4.2.2", - "requires": { - "xml-js": "^1.6.11" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "devOptional": true, - "peer": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "filelist": { - "version": "1.0.4", - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "filesize": { - "version": "8.0.7" - }, - "fill-range": { - "version": "7.0.1", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "5.0.0", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "devOptional": true, - "peer": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "devOptional": true, - "peer": true - }, - "flux": { - "version": "4.0.3", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "follow-redirects": { - "version": "1.15.2" - }, - "for-each": { - "version": "0.3.3", - "requires": { - "is-callable": "^1.1.3" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.7", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tapable": { - "version": "1.1.3" - } - } - }, - "forwarded": { - "version": "0.2.0" - }, - "fraction.js": { - "version": "4.2.0" - }, - "fresh": { - "version": "0.5.2" - }, - "fs-constants": { - "version": "1.0.0", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3" - }, - "fs.realpath": { - "version": "1.0.0" - }, - "fsevents": { - "version": "2.3.2", - "optional": true - }, - "function-bind": { - "version": "1.1.1" - }, - "function.prototype.name": { - "version": "1.1.5", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3" - }, - "gensync": { - "version": "1.0.0-beta.2" - }, - "get-intrinsic": { - "version": "1.1.3", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2" - }, - "get-stream": { - "version": "6.0.1" - }, - "get-symbol-description": { - "version": "1.0.0", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "github-from-package": { - "version": "0.0.0", - "dev": true - }, - "github-slugger": { - "version": "1.4.0" - }, - "glob": { - "version": "7.2.3", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1" - }, - "global-dirs": { - "version": "3.0.0", - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0" - } - } - }, - "global-modules": { - "version": "2.0.0", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0" - }, - "globby": { - "version": "11.1.0", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "3.3.0", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.10" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "devOptional": true, - "peer": true - }, - "gray-matter": { - "version": "4.0.3", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "gsap": { - "version": "3.11.1" - }, - "gzip-size": { - "version": "6.0.0", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1" - }, - "has": { - "version": "1.0.3", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2" - }, - "has-flag": { - "version": "4.0.0" - }, - "has-property-descriptors": { - "version": "1.0.0", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3" - }, - "has-tostringtag": { - "version": "1.0.0", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-yarn": { - "version": "2.1.0" - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-is-element": { - "version": "2.1.2", - "requires": { - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0" - } - }, - "hast-util-parse-selector": { - "version": "2.2.5" - }, - "hast-util-raw": { - "version": "6.0.1", - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "html-void-elements": { - "version": "1.0.5" - } - } - }, - "hast-util-sanitize": { - "version": "4.0.0", - "requires": { - "@types/hast": "^2.0.0" - } - }, - "hast-util-to-html": { - "version": "8.0.3", - "requires": { - "@types/hast": "^2.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-is-element": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "html-void-elements": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.2", - "unist-util-is": "^5.0.0" - }, - "dependencies": { - "ccount": { - "version": "2.0.1" - }, - "comma-separated-tokens": { - "version": "2.0.2" - }, - "property-information": { - "version": "6.1.1" - }, - "space-separated-tokens": { - "version": "2.0.1" - }, - "unist-util-is": { - "version": "5.1.1" - } - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hast-util-to-text": { - "version": "3.1.1", - "requires": { - "@types/hast": "^2.0.0", - "hast-util-is-element": "^2.0.0", - "unist-util-find-after": "^4.0.0" - } - }, - "hast-util-whitespace": { - "version": "2.0.0" - }, - "hastscript": { - "version": "6.0.0", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0" - }, - "history": { - "version": "4.10.1", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "requires": { - "react-is": "^16.7.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0" - }, - "readable-stream": { - "version": "2.3.7", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2" - }, - "string_decoder": { - "version": "1.1.1", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.3" - }, - "html-minifier-terser": { - "version": "6.1.0", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-tags": { - "version": "3.2.0" - }, - "html-void-elements": { - "version": "2.0.1" - }, - "html-webpack-plugin": { - "version": "5.5.0", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "8.0.1", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "http-deceiver": { - "version": "1.2.7" - }, - "http-errors": { - "version": "2.0.0", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8" - }, - "http-proxy": { - "version": "1.18.1", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0" - } - } - }, - "human-signals": { - "version": "2.1.0" - }, - "iconv-lite": { - "version": "0.4.24", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "requires": {} - }, - "idb": { - "version": "7.1.0" - }, - "ieee754": { - "version": "1.2.1", - "dev": true - }, - "ignore": { - "version": "5.2.0" - }, - "image-size": { - "version": "0.5.5", - "dev": true, - "optional": true - }, - "immediate": { - "version": "3.3.0" - }, - "immer": { - "version": "9.0.15" - }, - "import-fresh": { - "version": "3.3.0", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0" - }, - "imurmurhash": { - "version": "0.1.4" - }, - "indent-string": { - "version": "4.0.0" - }, - "infima": { - "version": "0.2.0-alpha.42" - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "1.3.8" - }, - "inline-style-parser": { - "version": "0.1.1" - }, - "internal-slot": { - "version": "1.0.3", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0" - }, - "invariant": { - "version": "2.2.4", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "2.0.1" - }, - "is-alphabetical": { - "version": "1.0.4" - }, - "is-alphanumerical": { - "version": "1.0.4", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1" - }, - "is-bigint": { - "version": "1.0.4", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5" - }, - "is-callable": { - "version": "1.2.7" - }, - "is-ci": { - "version": "2.0.0", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.10.0", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4" - }, - "is-docker": { - "version": "2.2.1" - }, - "is-extendable": { - "version": "0.1.1" - }, - "is-extglob": { - "version": "2.1.1" - }, - "is-fullwidth-code-point": { - "version": "3.0.0" - }, - "is-generator-function": { - "version": "1.0.10", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4" - }, - "is-installed-globally": { - "version": "0.4.0", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-module": { - "version": "1.0.0" - }, - "is-nan": { - "version": "1.3.2", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-negative-zero": { - "version": "2.0.2" - }, - "is-npm": { - "version": "5.0.0" - }, - "is-number": { - "version": "7.0.0" - }, - "is-number-object": { - "version": "1.0.7", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1" - }, - "is-path-cwd": { - "version": "2.2.0" - }, - "is-path-inside": { - "version": "3.0.3" - }, - "is-plain-obj": { - "version": "2.1.0" - }, - "is-plain-object": { - "version": "2.0.4", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0" - }, - "is-root": { - "version": "2.1.0" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1" - }, - "is-string": { - "version": "1.0.7", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.9", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0" - }, - "is-weakref": { - "version": "1.0.2", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-what": { - "version": "3.14.1", - "dev": true - }, - "is-whitespace-character": { - "version": "1.0.4" - }, - "is-word-character": { - "version": "1.0.4" - }, - "is-wsl": { - "version": "2.2.0", - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.3.0" - }, - "isarray": { - "version": "0.0.1" - }, - "isexe": { - "version": "2.0.0" - }, - "isobject": { - "version": "3.0.1" - }, - "jake": { - "version": "10.8.5", - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - } - }, - "javascript-natural-sort": { - "version": "0.7.1" - }, - "jest-worker": { - "version": "27.5.1", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.6.1", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-md5": { - "version": "0.7.3" - }, - "js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "devOptional": true, - "peer": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "4.1.0", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "0.5.0" - }, - "json-buffer": { - "version": "3.0.0" - }, - "json-parse-even-better-errors": { - "version": "2.3.1" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "devOptional": true, - "peer": true - }, - "json2mq": { - "version": "0.2.0", - "requires": { - "string-convert": "^0.2.0" - } - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" - }, - "katex": { - "version": "0.15.6", - "requires": { - "commander": "^8.0.0" - } - }, - "keyv": { - "version": "3.1.0", - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3" - }, - "klaw-sync": { - "version": "6.0.0", - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "kleur": { - "version": "3.0.3" - }, - "klona": { - "version": "2.0.5" - }, - "latest-version": { - "version": "5.1.0", - "requires": { - "package-json": "^6.3.0" - } - }, - "less": { - "version": "4.1.3", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "dev": true, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "semver": { - "version": "5.7.1", - "dev": true, - "optional": true - } - } - }, - "less-loader": { - "version": "11.0.0", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "less-vars-to-js": { - "version": "1.3.0", - "dev": true, - "requires": { - "strip-json-comments": "^2.0.1" - } - }, - "leven": { - "version": "3.1.0" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "devOptional": true, - "peer": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "libpag": { - "version": "4.1.8" - }, - "lilconfig": { - "version": "2.0.6" - }, - "lines-and-columns": { - "version": "1.2.4" - }, - "loader-runner": { - "version": "4.3.0" - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash.curry": { - "version": "4.1.1" - }, - "lodash.debounce": { - "version": "4.0.8" - }, - "lodash.flow": { - "version": "3.5.0" - }, - "lodash.memoize": { - "version": "4.1.2" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "devOptional": true, - "peer": true - }, - "lodash.sortby": { - "version": "4.7.0" - }, - "lodash.uniq": { - "version": "4.5.0" - }, - "longest-streak": { - "version": "3.0.1" - }, - "loose-envify": { - "version": "1.4.0", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lottie-web": { - "version": "5.9.6" - }, - "lower-case": { - "version": "2.0.2", - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "1.0.1" - }, - "lru-cache": { - "version": "6.0.0", - "requires": { - "yallist": "^4.0.0" - } - }, - "lunr": { - "version": "2.3.9" - }, - "lunr-languages": { - "version": "1.10.0" - }, - "magic-string": { - "version": "0.25.9", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "requires": { - "semver": "^6.0.0" - } - }, - "mark.js": { - "version": "8.11.1" - }, - "markdown-escapes": { - "version": "1.0.4" - }, - "mathjs": { - "version": "11.2.1", - "requires": { - "@babel/runtime": "^7.19.0", - "complex.js": "^2.1.1", - "decimal.js": "^10.4.0", - "escape-latex": "^1.2.0", - "fraction.js": "^4.2.0", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^4.1.0" - } - }, - "md5": { - "version": "2.3.0", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6" - } - } - }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-definition-list": { - "version": "1.2.1", - "requires": { - "@types/mdast": "^3.0.10", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-hast": "^12.0.0", - "mdast-util-to-markdown": "^1.2.1", - "micromark-extension-definition-list": "^1.2.0", - "unist-builder": "^3.0.0" - }, - "dependencies": { - "unist-builder": { - "version": "3.0.0", - "requires": { - "@types/unist": "^2.0.0" - } - } - } - }, - "mdast-util-definitions": { - "version": "5.1.1", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.1" - }, - "unist-util-visit": { - "version": "4.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-from-markdown": { - "version": "1.2.0", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-math": { - "version": "2.0.1", - "requires": { - "@types/mdast": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-to-hast": { - "version": "12.2.2", - "requires": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "trim-lines": "^3.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "dependencies": { - "unist-builder": { - "version": "3.0.0", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-is": { - "version": "5.1.1" - }, - "unist-util-position": { - "version": "4.0.3", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "4.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-to-markdown": { - "version": "1.3.0", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.1" - }, - "unist-util-visit": { - "version": "4.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "zwitch": { - "version": "2.0.2" - } - } - }, - "mdast-util-to-string": { - "version": "3.1.0" - }, - "mdn-data": { - "version": "2.0.14" - }, - "mdurl": { - "version": "1.0.1" - }, - "media-typer": { - "version": "0.3.0" - }, - "memfs": { - "version": "3.4.7", - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "memoize-one": { - "version": "6.0.0" - }, - "merge-descriptors": { - "version": "1.0.1" - }, - "merge-stream": { - "version": "2.0.0" - }, - "merge2": { - "version": "1.4.1" - }, - "methods": { - "version": "1.1.2" - }, - "micromark": { - "version": "3.0.10", - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "micromark-core-commonmark": { - "version": "1.0.6", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "micromark-extension-definition-list": { - "version": "1.2.0", - "requires": { - "assert": "^2.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1" - } - }, - "micromark-extension-math": { - "version": "2.0.2", - "requires": { - "@types/katex": "^0.11.0", - "katex": "^0.13.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "dependencies": { - "katex": { - "version": "0.13.24", - "requires": { - "commander": "^8.0.0" - } - } - } - }, - "micromark-factory-destination": { - "version": "1.0.0", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-label": { - "version": "1.0.2", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-space": { - "version": "1.0.0", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-title": { - "version": "1.0.2", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-character": { - "version": "1.1.0", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-chunked": { - "version": "1.0.0", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-classify-character": { - "version": "1.0.0", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-decode-string": { - "version": "1.0.2", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-encode": { - "version": "1.0.1" - }, - "micromark-util-html-tag-name": { - "version": "1.1.0" - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-sanitize-uri": { - "version": "1.0.0", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-subtokenize": { - "version": "1.0.2", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-util-symbol": { - "version": "1.0.1" - }, - "micromark-util-types": { - "version": "1.0.2" - }, - "micromatch": { - "version": "4.0.5", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0" - }, - "mime-db": { - "version": "1.52.0" - }, - "mime-types": { - "version": "2.1.35", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0" - }, - "mimic-response": { - "version": "1.0.1" - }, - "mini-create-react-context": { - "version": "0.4.1", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "mini-css-extract-plugin": { - "version": "2.6.1", - "requires": { - "schema-utils": "^4.0.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1" - }, - "minimatch": { - "version": "3.1.2", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6" - }, - "mkdirp-classic": { - "version": "0.5.3", - "dev": true - }, - "mockjs": { - "version": "1.1.0", - "requires": { - "commander": "*" - }, - "dependencies": { - "commander": { - "version": "9.4.0" - } - } - }, - "moment": { - "version": "2.29.4" - }, - "mri": { - "version": "1.2.0" - }, - "mrmime": { - "version": "1.0.1" - }, - "ms": { - "version": "2.1.3" - }, - "multicast-dns": { - "version": "7.2.5", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.4" - }, - "napi-build-utils": { - "version": "1.0.2", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "devOptional": true, - "peer": true - }, - "needle": { - "version": "3.1.0", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.6.3", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "negotiator": { - "version": "0.6.3" - }, - "neo-async": { - "version": "2.6.2" - }, - "no-case": { - "version": "3.0.4", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-abi": { - "version": "3.24.0", - "dev": true, - "requires": { - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "node-addon-api": { - "version": "5.0.0", - "dev": true - }, - "node-emoji": { - "version": "1.11.0", - "requires": { - "lodash": "^4.17.21" - } - }, - "node-fetch": { - "version": "2.6.7", - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3" - }, - "webidl-conversions": { - "version": "3.0.1" - }, - "whatwg-url": { - "version": "5.0.0", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-forge": { - "version": "1.3.1" - }, - "node-releases": { - "version": "2.0.6" - }, - "normalize-path": { - "version": "3.0.0" - }, - "normalize-range": { - "version": "0.1.2" - }, - "normalize-url": { - "version": "6.1.0" - }, - "not": { - "version": "0.1.0" - }, - "npm-run-path": { - "version": "4.0.1", - "requires": { - "path-key": "^3.0.0" - } - }, - "nprogress": { - "version": "0.2.0" - }, - "nth-check": { - "version": "2.1.1", - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1" - }, - "object-inspect": { - "version": "1.12.2" - }, - "object-is": { - "version": "1.1.5", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1" - }, - "object.assign": { - "version": "4.1.4", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "obuf": { - "version": "1.1.2" - }, - "on-finished": { - "version": "2.4.1", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2" - }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opener": { - "version": "1.5.2" - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "devOptional": true, - "peer": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-homedir": { - "version": "1.0.2" - }, - "p-cancelable": { - "version": "1.1.0" - }, - "p-limit": { - "version": "2.3.0", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "5.0.0", - "requires": { - "p-limit": "^3.0.2" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0" - }, - "package-json": { - "version": "6.5.0", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - } - }, - "param-case": { - "version": "3.0.4", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-entities": { - "version": "2.0.0", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-node-version": { - "version": "1.0.1", - "dev": true - }, - "parse-numeric-range": { - "version": "1.3.0" - }, - "parse5": { - "version": "6.0.1" - }, - "parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "requires": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "dependencies": { - "parse5": { - "version": "7.1.1", - "requires": { - "entities": "^4.4.0" - } - } - } - }, - "parseurl": { - "version": "1.3.3" - }, - "pascal-case": { - "version": "3.1.2", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0" - }, - "path-is-absolute": { - "version": "1.0.1" - }, - "path-is-inside": { - "version": "1.0.2" - }, - "path-key": { - "version": "3.1.1" - }, - "path-parse": { - "version": "1.0.7" - }, - "path-to-regexp": { - "version": "2.2.1" - }, - "path-type": { - "version": "4.0.0" - }, - "picocolors": { - "version": "1.0.0" - }, - "picomatch": { - "version": "2.3.1" - }, - "pify": { - "version": "4.0.1", - "dev": true, - "optional": true - }, - "pkg-dir": { - "version": "4.2.0", - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0" - } - } - }, - "postcss": { - "version": "8.4.16", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-calc": { - "version": "8.2.4", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.0", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.2", - "requires": { - "browserslist": "^4.20.3", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "requires": {} - }, - "postcss-discard-unused": { - "version": "5.1.0", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-loader": { - "version": "7.0.1", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "postcss-merge-idents": { - "version": "5.1.1", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-merge-longhand": { - "version": "5.1.6", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" - } - }, - "postcss-merge-rules": { - "version": "5.1.2", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.3", - "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.0", - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.1.3", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-idents": { - "version": "5.2.0", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.1.0", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-sort-media-queries": { - "version": "4.3.0", - "requires": { - "sort-css-media-queries": "2.1.0" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0" - }, - "postcss-zindex": { - "version": "5.1.0", - "requires": {} - }, - "prebuild-install": { - "version": "7.1.1", - "dev": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "devOptional": true, - "peer": true - }, - "prepend-http": { - "version": "2.0.0" - }, - "pretty-bytes": { - "version": "5.6.0" - }, - "pretty-error": { - "version": "4.0.0", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-time": { - "version": "1.1.0" - }, - "prism-react-renderer": { - "version": "1.3.5", - "requires": {} - }, - "prismjs": { - "version": "1.29.0" - }, - "process-nextick-args": { - "version": "2.0.1" - }, - "promise": { - "version": "7.3.1", - "requires": { - "asap": "~2.0.3" - } - }, - "prompts": { - "version": "2.4.2", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-information": { - "version": "5.6.0", - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1" - } - } - }, - "prr": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "pump": { - "version": "3.0.0", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1" - }, - "pupa": { - "version": "2.1.1", - "requires": { - "escape-goat": "^2.0.0" - } - }, - "pure-color": { - "version": "1.3.0" - }, - "qs": { - "version": "6.10.3", - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue": { - "version": "6.0.2", - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3" - }, - "ramda": { - "version": "0.28.0" - }, - "randombytes": { - "version": "2.1.0", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1" - }, - "raw-body": { - "version": "2.5.1", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2" - } - } - }, - "rc": { - "version": "1.2.8", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "rc-align": { - "version": "4.0.12", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "dom-align": "^1.7.0", - "lodash": "^4.17.21", - "rc-util": "^5.3.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "rc-cascader": { - "version": "3.7.0", - "requires": { - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", - "classnames": "^2.3.1", - "rc-select": "~14.1.0", - "rc-tree": "~5.7.0", - "rc-util": "^5.6.1" - } - }, - "rc-checkbox": { - "version": "2.3.2", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - } - }, - "rc-collapse": { - "version": "3.3.1", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.3.4", - "rc-util": "^5.2.1", - "shallowequal": "^1.1.0" - } - }, - "rc-dialog": { - "version": "8.9.0", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-motion": "^2.3.0", - "rc-util": "^5.21.0" - } - }, - "rc-drawer": { - "version": "5.1.0", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-motion": "^2.6.1", - "rc-util": "^5.21.2" - } - }, - "rc-dropdown": { - "version": "4.0.1", - "requires": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.6", - "rc-trigger": "^5.3.1", - "rc-util": "^5.17.0" - } - }, - "rc-field-form": { - "version": "1.27.1", - "requires": { - "@babel/runtime": "^7.18.0", - "async-validator": "^4.1.0", - "rc-util": "^5.8.0" - } - }, - "rc-image": { - "version": "5.7.1", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "^2.2.6", - "rc-dialog": "~8.9.0", - "rc-util": "^5.0.6" - } - }, - "rc-input": { - "version": "0.1.2", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.18.1" - } - }, - "rc-input-number": { - "version": "7.3.9", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.23.0" - } - }, - "rc-mentions": { - "version": "1.9.2", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-menu": "~9.6.0", - "rc-textarea": "^0.3.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.22.5" - } - }, - "rc-menu": { - "version": "9.6.4", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.4.3", - "rc-overflow": "^1.2.0", - "rc-trigger": "^5.1.2", - "rc-util": "^5.12.0", - "shallowequal": "^1.1.0" - } - }, - "rc-motion": { - "version": "2.6.2", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-util": "^5.21.0" - } - }, - "rc-notification": { - "version": "4.6.0", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.2.0", - "rc-util": "^5.20.1" - } - }, - "rc-overflow": { - "version": "1.2.8", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.19.2" - } - }, - "rc-pagination": { - "version": "3.1.17", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" - } - }, - "rc-picker": { - "version": "2.6.10", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "date-fns": "2.x", - "dayjs": "1.x", - "moment": "^2.24.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.4.0", - "shallowequal": "^1.1.0" - } - }, - "rc-progress": { - "version": "3.3.3", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-util": "^5.16.1" - } - }, - "rc-rate": { - "version": "2.9.2", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.0.1" - } - }, - "rc-resize-observer": { - "version": "1.2.0", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.15.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "rc-segmented": { - "version": "2.1.0", - "requires": { - "@babel/runtime": "^7.11.1", - "classnames": "^2.2.1", - "rc-motion": "^2.4.4", - "rc-util": "^5.17.0" - } - }, - "rc-select": { - "version": "14.1.13", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-overflow": "^1.0.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.16.1", - "rc-virtual-list": "^3.2.0" - } - }, - "rc-slider": { - "version": "10.0.1", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-util": "^5.18.1", - "shallowequal": "^1.1.0" - } - }, - "rc-steps": { - "version": "4.1.4", - "requires": { - "@babel/runtime": "^7.10.2", - "classnames": "^2.2.3", - "rc-util": "^5.0.1" - } - }, - "rc-switch": { - "version": "3.2.2", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-util": "^5.0.1" - } - }, - "rc-table": { - "version": "7.26.0", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.5", - "rc-resize-observer": "^1.1.0", - "rc-util": "^5.22.5", - "shallowequal": "^1.1.0" - } - }, - "rc-tabs": { - "version": "12.1.0-alpha.1", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "2.x", - "rc-dropdown": "~4.0.0", - "rc-menu": "~9.6.0", - "rc-motion": "^2.6.2", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.0" - } - }, - "rc-textarea": { - "version": "0.3.7", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.7.0", - "shallowequal": "^1.1.0" - } - }, - "rc-tooltip": { - "version": "5.2.2", - "requires": { - "@babel/runtime": "^7.11.2", - "classnames": "^2.3.1", - "rc-trigger": "^5.0.0" - } - }, - "rc-tree": { - "version": "5.7.0", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-motion": "^2.0.1", - "rc-util": "^5.16.1", - "rc-virtual-list": "^3.4.8" - } - }, - "rc-tree-select": { - "version": "5.5.0", - "requires": { - "@babel/runtime": "^7.10.1", - "classnames": "2.x", - "rc-select": "~14.1.0", - "rc-tree": "~5.7.0", - "rc-util": "^5.16.1" - } - }, - "rc-trigger": { - "version": "5.3.1", - "requires": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.6", - "rc-align": "^4.0.0", - "rc-motion": "^2.0.0", - "rc-util": "^5.19.2" - } - }, - "rc-upload": { - "version": "4.3.4", - "requires": { - "@babel/runtime": "^7.18.3", - "classnames": "^2.2.5", - "rc-util": "^5.2.0" - } - }, - "rc-util": { - "version": "5.24.4", - "requires": { - "@babel/runtime": "^7.18.3", - "react-is": "^16.12.0", - "shallowequal": "^1.1.0" - } - }, - "rc-virtual-list": { - "version": "3.4.8", - "requires": { - "classnames": "^2.2.6", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.15.0" - } - }, - "react": { - "version": "17.0.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-base16-styling": { - "version": "0.6.0", - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - } - } - }, - "react-dom": { - "version": "17.0.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-error-overlay": { - "version": "6.0.11" - }, - "react-fast-compare": { - "version": "3.2.0" - }, - "react-helmet-async": { - "version": "1.3.0", - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - } - }, - "react-intersection-observer": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.4.0.tgz", - "integrity": "sha512-v0403CmomOVlzhqFXlzOxg0ziLcVq8mfbP0AwAcEQWgZmR2OulOT79Ikznw4UlB3N+jlUYqLMe4SDHUOyp0t2A==", - "requires": {} - }, - "react-is": { - "version": "16.13.1" - }, - "react-json-view": { - "version": "1.21.3", - "requires": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - } - }, - "react-lifecycles-compat": { - "version": "3.0.4" - }, - "react-live": { - "version": "2.2.3", - "requires": { - "buble": "0.19.6", - "core-js": "^2.4.1", - "dom-iterator": "^1.0.0", - "prism-react-renderer": "^1.0.1", - "prop-types": "^15.5.8", - "react-simple-code-editor": "^0.10.0", - "unescape": "^1.0.1" - }, - "dependencies": { - "core-js": { - "version": "2.6.12" - } - } - }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "requires": { - "@babel/runtime": "^7.10.3" - } - }, - "react-markdown": { - "version": "8.0.3", - "requires": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.3.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "comma-separated-tokens": { - "version": "2.0.2" - }, - "property-information": { - "version": "6.1.1" - }, - "react-is": { - "version": "18.2.0" - }, - "remark-parse": { - "version": "10.0.1", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "space-separated-tokens": { - "version": "2.0.1" - }, - "unist-util-is": { - "version": "5.1.1" - }, - "unist-util-visit": { - "version": "4.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - } - }, - "unist-util-visit-parents": { - "version": "5.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "vfile": { - "version": "5.3.5", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.1.2", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } - } - }, - "react-router": { - "version": "5.3.3", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "dependencies": { - "path-to-regexp": { - "version": "1.8.0", - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "react-router-config": { - "version": "5.1.1", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-router-dom": { - "version": "5.3.3", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.3", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-simple-code-editor": { - "version": "0.10.0", - "requires": {} - }, - "react-textarea-autosize": { - "version": "8.3.4", - "requires": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - } - }, - "react-waypoint": { - "version": "10.3.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "consolidated-events": "^1.1.0 || ^2.0.0", - "prop-types": "^15.0.0", - "react-is": "^17.0.1 || ^18.0.0" - }, - "dependencies": { - "react-is": { - "version": "18.2.0", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "requires": { - "picomatch": "^2.2.1" - } - }, - "reading-time": { - "version": "1.5.0" - }, - "rechoir": { - "version": "0.6.2", - "requires": { - "resolve": "^1.1.6" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { - "minimatch": "^3.0.5" - } - }, - "regenerate": { - "version": "1.4.2" - }, - "regenerate-unicode-properties": { - "version": "9.0.0", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9" - }, - "regenerator-transform": { - "version": "0.15.0", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "devOptional": true, - "peer": true - }, - "regexpu-core": { - "version": "4.8.0", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "registry-auth-token": { - "version": "4.2.2", - "requires": { - "rc": "1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "requires": { - "rc": "^1.2.8" - } - }, - "regjsgen": { - "version": "0.5.2" - }, - "regjsparser": { - "version": "0.7.0", - "requires": { - "jsesc": "~0.5.0" - } - }, - "rehype-katex": { - "version": "4.0.0", - "requires": { - "@types/katex": "^0.11.0", - "hast-util-to-text": "^2.0.0", - "katex": "^0.12.0", - "rehype-parse": "^7.0.0", - "unified": "^9.0.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "commander": { - "version": "2.20.3" - }, - "hast-util-is-element": { - "version": "1.1.0" - }, - "hast-util-to-text": { - "version": "2.0.1", - "requires": { - "hast-util-is-element": "^1.0.0", - "repeat-string": "^1.0.0", - "unist-util-find-after": "^3.0.0" - } - }, - "katex": { - "version": "0.12.0", - "requires": { - "commander": "^2.19.0" - } - }, - "unified": { - "version": "9.2.2", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-util-find-after": { - "version": "3.0.0", - "requires": { - "unist-util-is": "^4.0.0" - } - } - } - }, - "rehype-parse": { - "version": "7.0.1", - "requires": { - "hast-util-from-parse5": "^6.0.0", - "parse5": "^6.0.0" - } - }, - "rehype-stringify": { - "version": "9.0.3", - "requires": { - "@types/hast": "^2.0.0", - "hast-util-to-html": "^8.0.0", - "unified": "^10.0.0" - } - }, - "relateurl": { - "version": "0.2.7" - }, - "remark-emoji": { - "version": "2.2.0", - "requires": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "remark-footnotes": { - "version": "2.0.0" - }, - "remark-html": { - "version": "15.0.1", - "requires": { - "@types/mdast": "^3.0.0", - "hast-util-sanitize": "^4.0.0", - "hast-util-to-html": "^8.0.0", - "mdast-util-to-hast": "^12.0.0", - "unified": "^10.0.0" - } - }, - "remark-math": { - "version": "3.0.1" - }, - "remark-mdx": { - "version": "1.6.22", - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.19.0" - } - } - }, - "semver": { - "version": "5.7.1" - }, - "source-map": { - "version": "0.5.7" - }, - "unified": { - "version": "9.2.0", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "remark-parse": { - "version": "8.0.3", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "remark-rehype": { - "version": "10.1.0", - "requires": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "remove-markdown": { - "version": "0.3.0" - }, - "renderkid": { - "version": "3.0.0", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0" - }, - "htmlparser2": { - "version": "6.1.0", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "repeat-string": { - "version": "1.6.1" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-like": { - "version": "0.1.2" - }, - "requires-port": { - "version": "1.0.0" - }, - "resize-observer-polyfill": { - "version": "1.5.1" - }, - "resolve": { - "version": "1.22.1", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0" - }, - "resolve-pathname": { - "version": "3.0.0" - }, - "responselike": { - "version": "1.0.2", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "retry": { - "version": "0.13.1" - }, - "reusify": { - "version": "1.0.4" - }, - "rimraf": { - "version": "3.0.2", - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "jest-worker": { - "version": "26.6.2", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "rtl-detect": { - "version": "1.0.4" - }, - "rtlcss": { - "version": "3.5.0", - "requires": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "3.1.1" - } - } - }, - "run-parallel": { - "version": "1.2.0", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.5.7", - "requires": { - "tslib": "^2.1.0" - } - }, - "sade": { - "version": "1.8.1", - "requires": { - "mri": "^1.1.0" - } - }, - "safe-buffer": { - "version": "5.2.1" - }, - "safe-regex-test": { - "version": "1.0.0", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2" - }, - "sax": { - "version": "1.2.4" - }, - "scheduler": { - "version": "0.20.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "4.0.0", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "scroll-into-view-if-needed": { - "version": "2.2.29", - "requires": { - "compute-scroll-into-view": "^1.0.17" - } - }, - "section-matter": { - "version": "1.0.0", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "seedrandom": { - "version": "3.0.5" - }, - "select-hose": { - "version": "2.0.0" - }, - "selfsigned": { - "version": "2.1.1", - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "6.3.0" - }, - "semver-diff": { - "version": "3.1.1", - "requires": { - "semver": "^6.3.0" - } - }, - "send": { - "version": "0.18.0", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0" - } - } - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, - "dependencies": { - "mime-db": { - "version": "1.33.0" - }, - "mime-types": { - "version": "2.1.18", - "requires": { - "mime-db": "~1.33.0" - } - }, - "range-parser": { - "version": "1.2.0" - } - } - }, - "serve-index": { - "version": "1.9.1", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2" - }, - "http-errors": { - "version": "1.6.3", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3" - }, - "ms": { - "version": "2.0.0" - }, - "setprototypeof": { - "version": "1.1.0" - }, - "statuses": { - "version": "1.5.0" - } - } - }, - "serve-static": { - "version": "1.15.0", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setimmediate": { - "version": "1.0.5" - }, - "setprototypeof": { - "version": "1.2.0" - }, - "shallow-clone": { - "version": "3.0.1", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shallowequal": { - "version": "1.1.0" - }, - "sharp": { - "version": "0.30.7", - "dev": true, - "requires": { - "color": "^4.2.3", - "detect-libc": "^2.0.1", - "node-addon-api": "^5.0.0", - "prebuild-install": "^7.1.1", - "semver": "^7.3.7", - "simple-get": "^4.0.1", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "shebang-command": { - "version": "2.0.0", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0" - }, - "shell-quote": { - "version": "1.7.3" - }, - "shelljs": { - "version": "0.8.5", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7" - }, - "simple-concat": { - "version": "1.0.1", - "dev": true - }, - "simple-get": { - "version": "4.0.1", - "dev": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "simple-swizzle": { - "version": "0.2.2", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "dev": true - } - } - }, - "sirv": { - "version": "1.0.19", - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - } - }, - "sisteransi": { - "version": "1.0.5" - }, - "sitemap": { - "version": "7.1.1", - "requires": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "dependencies": { - "@types/node": { - "version": "17.0.45" - } - } - }, - "slash": { - "version": "3.0.0" - }, - "sockjs": { - "version": "0.3.24", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "sort-css-media-queries": { - "version": "2.1.0" - }, - "source-map": { - "version": "0.6.1" - }, - "source-map-js": { - "version": "1.0.2" - }, - "source-map-support": { - "version": "0.5.21", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8" - }, - "space-separated-tokens": { - "version": "1.1.5" - }, - "spdy": { - "version": "4.0.2", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3" - }, - "stable": { - "version": "0.1.8" - }, - "state-toggle": { - "version": "1.0.3" - }, - "statuses": { - "version": "2.0.1" - }, - "std-env": { - "version": "3.2.1" - }, - "string_decoder": { - "version": "1.3.0", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-convert": { - "version": "0.2.1" - }, - "string-width": { - "version": "4.2.3", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.matchall": { - "version": "4.0.7", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "stringify-entities": { - "version": "4.0.3", - "requires": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "dependencies": { - "character-entities-legacy": { - "version": "3.0.0" - } - } - }, - "stringify-object": { - "version": "3.3.0", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom-string": { - "version": "1.0.0" - }, - "strip-comments": { - "version": "2.0.1" - }, - "strip-final-newline": { - "version": "2.0.0" - }, - "strip-json-comments": { - "version": "2.0.1" - }, - "striptags": { - "version": "3.2.0" - }, - "style-loader": { - "version": "3.3.1", - "dev": true, - "requires": {} - }, - "style-to-object": { - "version": "0.3.0", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "styled-components": { - "version": "5.3.5", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - } - }, - "stylehacks": { - "version": "5.1.0", - "requires": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - } - }, - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0" - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0" - }, - "svg-parser": { - "version": "2.0.4" - }, - "svgo": { - "version": "2.8.0", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0" - } - } - }, - "tapable": { - "version": "2.2.1" - }, - "tar-fs": { - "version": "2.1.1", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "temp-dir": { - "version": "2.0.0" - }, - "tempy": { - "version": "0.6.0", - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0" - } - } - }, - "terser": { - "version": "5.15.0", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "acorn": { - "version": "8.8.0" - }, - "commander": { - "version": "2.20.3" - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "text-table": { - "version": "0.2.0" - }, - "thunky": { - "version": "1.1.0" - }, - "tiny-emitter": { - "version": "2.1.0" - }, - "tiny-invariant": { - "version": "1.2.0" - }, - "tiny-warning": { - "version": "1.0.3" - }, - "to-fast-properties": { - "version": "2.0.0" - }, - "to-readable-stream": { - "version": "1.0.0" - }, - "to-regex-range": { - "version": "5.0.1", - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6" - }, - "toidentifier": { - "version": "1.0.1" - }, - "totalist": { - "version": "1.1.0" - }, - "tr46": { - "version": "1.0.1", - "requires": { - "punycode": "^2.1.0" - } - }, - "trim": { - "version": "0.0.1" - }, - "trim-lines": { - "version": "3.0.1" - }, - "trim-trailing-lines": { - "version": "1.1.4" - }, - "trough": { - "version": "1.0.5" - }, - "tslib": { - "version": "2.4.0" - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "dev": true - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "devOptional": true, - "peer": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "2.19.0" - }, - "type-is": { - "version": "1.6.18", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-function": { - "version": "4.1.0" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.8.3" - }, - "ua-parser-js": { - "version": "0.7.33", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", - "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==" - }, - "unbox-primitive": { - "version": "1.0.2", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unescape": { - "version": "1.0.1", - "requires": { - "extend-shallow": "^2.0.1" - } - }, - "unherit": { - "version": "1.1.3", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0" - }, - "unified": { - "version": "10.1.2", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.2" - }, - "is-plain-obj": { - "version": "4.1.0" - }, - "trough": { - "version": "2.1.0" - }, - "vfile": { - "version": "5.3.5", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.1.2", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } - } - }, - "unique-string": { - "version": "2.0.0", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unist-builder": { - "version": "2.0.3" - }, - "unist-util-find-after": { - "version": "4.0.0", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.1" - } - } - }, - "unist-util-generated": { - "version": "2.0.0" - }, - "unist-util-is": { - "version": "4.1.0" - }, - "unist-util-position": { - "version": "3.1.0" - }, - "unist-util-remove": { - "version": "2.1.0", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-select": { - "version": "2.0.2", - "requires": { - "css-selector-parser": "^1.1.0", - "not": "^0.1.0", - "nth-check": "^1.0.1", - "unist-util-is": "^3.0.0", - "zwitch": "^1.0.3" - }, - "dependencies": { - "nth-check": { - "version": "1.0.2", - "requires": { - "boolbase": "~1.0.0" - } - }, - "unist-util-is": { - "version": "3.0.0" - } - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0" - }, - "unpipe": { - "version": "1.0.0" - }, - "upath": { - "version": "1.2.0" - }, - "update-browserslist-db": { - "version": "1.0.9", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "update-notifier": { - "version": "5.1.0", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "boxen": { - "version": "5.1.2", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "cli-boxes": { - "version": "2.2.1" - }, - "semver": { - "version": "7.3.7", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "0.20.2" - }, - "widest-line": { - "version": "3.1.0", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "requires": { - "punycode": "^2.1.0" - } - }, - "urijs": { - "version": "1.19.11" - }, - "url-loader": { - "version": "4.1.1", - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "use-composed-ref": { - "version": "1.3.0", - "requires": {} - }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "requires": {} - }, - "use-latest": { - "version": "1.2.1", - "requires": { - "use-isomorphic-layout-effect": "^1.1.1" - } - }, - "util": { - "version": "0.12.4", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2" - }, - "utila": { - "version": "0.4.0" - }, - "utility-types": { - "version": "3.10.0" - }, - "utils-merge": { - "version": "1.0.1" - }, - "uuid": { - "version": "8.3.2" - }, - "uvu": { - "version": "0.5.6", - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "dependencies": { - "kleur": { - "version": "4.1.5" - } - } - }, - "value-equal": { - "version": "1.0.1" - }, - "vary": { - "version": "1.1.2" - }, - "vfile": { - "version": "4.2.1", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "2.0.3", - "requires": { - "@types/unist": "^2.0.2" - } - } - } - }, - "vfile-location": { - "version": "3.2.0" - }, - "vfile-message": { - "version": "2.0.4", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "dependencies": { - "unist-util-stringify-position": { - "version": "2.0.3", - "requires": { - "@types/unist": "^2.0.2" - } - } - } - }, - "vlq": { - "version": "1.0.1" - }, - "wait-on": { - "version": "6.0.1", - "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - } - }, - "watchpack": { - "version": "2.4.0", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "web-namespaces": { - "version": "1.1.4" - }, - "webidl-conversions": { - "version": "4.0.2" - }, - "webpack": { - "version": "5.76.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", - "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.51" - }, - "acorn": { - "version": "8.8.0" - }, - "acorn-import-assertions": { - "version": "1.8.0", - "requires": {} - }, - "schema-utils": { - "version": "3.1.1", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-bundle-analyzer": { - "version": "4.6.1", - "requires": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "dependencies": { - "acorn": { - "version": "8.8.0" - }, - "commander": { - "version": "7.2.0" - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "webpack-dev-server": { - "version": "4.11.1", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "ws": { - "version": "8.9.0", - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3" - }, - "webpackbar": { - "version": "5.0.2", - "requires": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4" - }, - "whatwg-url": { - "version": "7.1.0", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "2.0.2", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-typed-array": { - "version": "1.1.8", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - } - }, - "widest-line": { - "version": "4.0.1", - "requires": { - "string-width": "^5.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1" - }, - "emoji-regex": { - "version": "9.2.2" - }, - "string-width": { - "version": "5.1.2", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wildcard": { - "version": "2.0.0" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "devOptional": true, - "peer": true - }, - "workbox-background-sync": { - "version": "6.5.4", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-broadcast-update": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-build": { - "version": "6.5.4", - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "requires": { - "whatwg-url": "^7.0.0" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-core": { - "version": "6.5.4" - }, - "workbox-expiration": { - "version": "6.5.4", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-google-analytics": { - "version": "6.5.4", - "requires": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-navigation-preload": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-precaching": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-range-requests": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-recipes": { - "version": "6.5.4", - "requires": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-routing": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-strategies": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-streams": { - "version": "6.5.4", - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "workbox-sw": { - "version": "6.5.4" - }, - "workbox-window": { - "version": "6.5.4", - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "wrap-ansi": { - "version": "8.0.1", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1" - }, - "ansi-styles": { - "version": "6.1.1" - }, - "emoji-regex": { - "version": "9.2.2" - }, - "string-width": { - "version": "5.1.2", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2" - }, - "write-file-atomic": { - "version": "3.0.3", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "requires": {} - }, - "xdg-basedir": { - "version": "4.0.0" - }, - "xml-js": { - "version": "1.6.11", - "requires": { - "sax": "^1.2.4" - } - }, - "xtend": { - "version": "4.0.2" - }, - "yallist": { - "version": "4.0.0" - }, - "yaml": { - "version": "1.10.2" - }, - "yocto-queue": { - "version": "0.1.0" - }, - "zwitch": { - "version": "1.0.5" - } - } -} diff --git a/website/package.json b/website/package.json index d07299249..bea7de4cd 100644 --- a/website/package.json +++ b/website/package.json @@ -17,14 +17,14 @@ }, "dependencies": { "@aldridged/docusaurus-plugin-lunr": "^1.0.0-alpha.10", - "@docusaurus/core": "2.1.0", - "@docusaurus/plugin-pwa": "2.1.0", - "@docusaurus/preset-classic": "2.1.0", - "@docusaurus/theme-classic": "2.1.0", - "@docusaurus/theme-common": "2.1.0", - "@docusaurus/theme-live-codeblock": "2.1.0", - "@docusaurus/utils": "2.1.0", - "@docusaurus/utils-common": "2.1.0", + "@docusaurus/core": "2.4.0", + "@docusaurus/plugin-pwa": "^2.4.0", + "@docusaurus/preset-classic": "2.4.0", + "@docusaurus/theme-classic": "^2.4.0", + "@docusaurus/theme-common": "^2.4.0", + "@docusaurus/theme-live-codeblock": "^2.4.0", + "@docusaurus/utils": "^2.4.0", + "@docusaurus/utils-common": "^2.4.0", "@easyops-cn/docusaurus-search-local": "^0.32.0", "@mdx-js/react": "^1.6.22", "antd": "^4.20.5", @@ -55,14 +55,14 @@ "remark-math": "^3.0.1", "remark-rehype": "^10.1.0", "styled-components": "^5.3.5", - "unist-util-select": "^2.0.2", + "unist-util-select": "^4.0.3", "uuid": "^8.3.2" }, "devDependencies": { - "@docusaurus/eslint-plugin": "2.1.0", - "@docusaurus/module-type-aliases": "2.1.0", - "@docusaurus/plugin-client-redirects": "2.1.0", - "@docusaurus/plugin-ideal-image": "2.1.0", + "@docusaurus/eslint-plugin": "^2.4.0", + "@docusaurus/module-type-aliases": "^2.4.0", + "@docusaurus/plugin-client-redirects": "^2.4.0", + "@docusaurus/plugin-ideal-image": "^2.4.0", "@tsconfig/docusaurus": "^1.0.5", "@types/styled-components": "^5.1.25", "babel-plugin-import": "^1.13.5", diff --git a/website/src/components/contact/index.tsx b/website/src/components/contact/index.tsx index 7f7371b3b..63f7ac1d0 100644 --- a/website/src/components/contact/index.tsx +++ b/website/src/components/contact/index.tsx @@ -99,7 +99,7 @@ const Concat = () => { 关注我们 - + diff --git a/website/src/components/roadMap/step/index.tsx b/website/src/components/roadMap/step/index.tsx index 3b8d4806b..ad5cfd62f 100644 --- a/website/src/components/roadMap/step/index.tsx +++ b/website/src/components/roadMap/step/index.tsx @@ -4,7 +4,7 @@ import {IStep} from './interface'; import {StepWrap, StepItemWrap, StepContext, ButtonWrap, ButtonIcon, Logo} from './styles'; export const Step: React.FC = ({dataSource, value}) => { - const [scroll, setScroll] = useState(0); + const [scroll, setScroll] = useState(960); const { ref, inView } = useInView({ threshold: 0.8, }); diff --git a/website/src/components/showCase/data.tsx b/website/src/components/showCase/data.tsx index 2fbcad4c6..99b046f83 100644 --- a/website/src/components/showCase/data.tsx +++ b/website/src/components/showCase/data.tsx @@ -3,6 +3,10 @@ import Translate from "@docusaurus/Translate"; import kunpeng from '@site/static/resource/kunpeng.png'; import tx from '@site/static/resource/tx.png'; import Opengauss from '@site/static/resource/Opengauss.png'; +import zkfd from '@site/static/resource/zkfd.png'; +import ghzz from '@site/static/resource/ghzz.png'; +import hgxx from '@site/static/resource/hgxx.png'; +import zkkk from '@site/static/resource/zkkk.png'; export const list = [ { @@ -28,5 +32,37 @@ export const list = [ 100%兼容MySQL 5.7 ) + }, + { + logo: zkfd, + name: ( + + 100%兼容MySQL 5.7 + + ) + }, + { + logo: ghzz, + name: ( + + 100%兼容MySQL 5.7 + + ) + }, + { + logo: hgxx, + name: ( + + 100%兼容MySQL 5.7 + + ) + }, + { + logo: zkkk, + name: ( + + 100%兼容MySQL 5.7 + + ) } ] \ No newline at end of file diff --git a/website/src/components/showCase/index.tsx b/website/src/components/showCase/index.tsx index 59272d30a..3f68c3ec6 100644 --- a/website/src/components/showCase/index.tsx +++ b/website/src/components/showCase/index.tsx @@ -8,13 +8,21 @@ import kunpeng from '@site/static/resource/kunpeng.png'; import tx from '@site/static/resource/tx.png'; import Opengauss from '@site/static/resource/Opengauss.png'; import BgChinaly from '@site/static/resource/BgChinaly.png'; +import zkfd from '@site/static/resource/zkfd.png'; +import ghzz from '@site/static/resource/ghzz.png'; +import hgxx from '@site/static/resource/hgxx.png'; +import zkkk from '@site/static/resource/zkkk.png'; import { Title, Context } from "../styles"; import {ItemWrap, PanelWrap} from './styles'; const imgs: any = { kunpeng, tx, - Opengauss + Opengauss, + zkfd, + ghzz, + hgxx, + zkkk } const ShowCase: React.FC = ({children}) => { diff --git a/website/src/css/custom.less b/website/src/css/custom.less index 84251e050..1827e9294 100644 --- a/website/src/css/custom.less +++ b/website/src/css/custom.less @@ -27,6 +27,9 @@ .footer { --ifm-footer-padding-horizontal: 0; } + .navbar__search-input { + width: 12.5rem; + } } .communityRow{ @@ -58,7 +61,7 @@ } .navbar__link:hover, .navbar__link--active{ - font-weight: bold; + text-shadow: 1px 0 0 currentColor; } @media (max-width: 996px){ diff --git a/website/src/pages/community.md b/website/src/pages/community.md index d5b49602b..15b42dffc 100644 --- a/website/src/pages/community.md +++ b/website/src/pages/community.md @@ -5,28 +5,37 @@ Read on to learn how you can get involved and become part of this amazing commun ## Contributors {#team} ```custom-teamList +- ![yejianlin](https://avatars.githubusercontent.com/u/3657940?v=4 "title:yejianlin,to://github.com/yejianlin") - ![RingsC](https://avatars.githubusercontent.com/u/5336722?v=4 "title:RingsC,to://github.com/ringsc") +- ![wisehead](https://avatars.githubusercontent.com/u/17314209?v=4 "title:wisehead,to://github.com/wisehead") - ![hustjieke](https://avatars.githubusercontent.com/u/18331104?v=4 "title:hustjieke,to://github.com/hustjieke") -- ![dupeiliang](https://avatars.githubusercontent.com/u/39800914?v=4 "title:dupeiliang,to://github.com/dupeiliang") -- ![andyli](https://avatars.githubusercontent.com/u/15212006?v=4 "title:andyli,to://github.com/andyli029") +- ![Nliver](https://avatars.githubusercontent.com/u/34496563?v=4 "title:Nliver,to://github.com/Nliver") +- ![konghaiya](https://avatars.githubusercontent.com/u/106147765?v=4 "title:konghaiya,to://github.com/konghaiya") +- ![adofsauron](https://avatars.githubusercontent.com/u/3915817?v=4 "title:adofsauron,to://github.com/adofsauron") +- ![davidshiz](https://avatars.githubusercontent.com/u/53512869?v=4 "title:shizhao,to://github.com/davidshiz") +- ![shangyanwen](https://avatars.githubusercontent.com/u/107781103?v=4 "title:shangyanwen,to://github.com/shangyanwen") +- ![haitaoguan](https://avatars.githubusercontent.com/u/105625912?v=4 "title:haitaoguan,to://github.com/haitaoguan") +- ![Double0101](https://avatars.githubusercontent.com/u/19671032?v=4 "title:Double0101,to://github.com/Double0101") +- ![chenshengjiang](https://avatars.githubusercontent.com/u/107859421?v=4 "title:chenshengjiang,to://github.com/chenshengjiang") - ![SPzhang](https://avatars.githubusercontent.com/u/31213457?v=4 "title:SPzhang,to://github.com/zsp108") +- ![zzzz-vincent](https://avatars.githubusercontent.com/u/85084498?v=4 "title:zzzz-vincent,to://github.com/zzzz-vincent") +- ![El-even-11](https://avatars.githubusercontent.com/u/73071130?v=4 "title:El-even-11,to://github.com/El-even-11") +- ![TomeC](https://avatars.githubusercontent.com/u/6322894?v=4 "title:TomeC,to://github.com/TomeC") +- ![HappenLee](https://avatars.githubusercontent.com/u/10553413?v=4 "title:HappenLee,to://github.com/HappenLee") +- ![slchris](https://avatars.githubusercontent.com/u/68360471?v=4 "title:slchris,to://github.com/slchris") +- ![Dysprosium0626](https://avatars.githubusercontent.com/u/59086724?v=4 "title:Dysprosium0626,to://github.com/Dysprosium0626") +- ![lxd5866](https://avatars.githubusercontent.com/u/10388914?v=4 "title:lxd5866,to://github.com/lxd5866") +- ![Yeekin-](https://avatars.githubusercontent.com/u/101704468?v=4 "title:Yeekin-,to://github.com/Yeekin-GYJ") - ![CodingSuen](https://avatars.githubusercontent.com/u/69141572?v=4 "title:CodingSuen,to://github.com/CodingSuen") -- ![jun-lihaijun](https://avatars.githubusercontent.com/u/103155258?v=4 "title:jun-lihaijun,to://github.com/lihaijun-jun") +- ![fuxiang](https://avatars.githubusercontent.com/u/26853590?v=4 "title:fuxiang,to://github.com/gougexuanli") +- ![lujiashun](https://avatars.githubusercontent.com/u/112846998?v=4 "title:lujiashun,to://github.com/lujiashun") - ![DandreChen](https://avatars.githubusercontent.com/u/34465107?v=4 "title:DandreChen,to://github.com/DandreChen") - ![isredstar](https://avatars.githubusercontent.com/u/63028664?v=4 "title:isredstar,to://github.com/isredstar") -- ![konghaiya](https://avatars.githubusercontent.com/u/106147765?v=4 "title:konghaiya,to://github.com/konghaiya") -- ![Nliver](https://avatars.githubusercontent.com/u/34496563?v=4 "title:Nliver,to://github.com/Nliver") -- ![Yeekin-](https://avatars.githubusercontent.com/u/101704468?v=4 "title:Yeekin-,to://github.com/Yeekin-GYJ") +- ![jun-lihaijun](https://avatars.githubusercontent.com/u/103155258?v=4 "title:jun-lihaijun,to://github.com/lihaijun-jun") - ![MaJun](https://avatars.githubusercontent.com/u/64419837?v=4 "title:MaJun,to://github.com/leizzboy") - ![LuiciferYi](https://avatars.githubusercontent.com/u/24913493?v=4 "title:LuiciferYi,to://github.com/LuiciferYi") - ![litaihong](https://avatars.githubusercontent.com/u/79444526?v=4 "title:litaihong,to://github.com/lylth") -- ![haitaoguan](https://avatars.githubusercontent.com/u/105625912?v=4 "title:haitaoguan,to://github.com/haitaoguan") -- ![shangyanwen](https://avatars.githubusercontent.com/u/107781103?v=4 "title:shangyanwen,to://github.com/shangyanwen") -- ![adofsauron](https://avatars.githubusercontent.com/u/3915817?v=4 "title:adofsauron,to://github.com/adofsauron") -- ![fuxiang](https://avatars.githubusercontent.com/u/26853590?v=4 "title:fuxiang,to://github.com/gougexuanli") -- ![lujiashun](https://avatars.githubusercontent.com/u/112846998?v=4 "title:lujiashun,to://github.com/lujiashun") - ![xuejiao-joy](https://avatars.githubusercontent.com/u/107540910?v=4 "title:xuejiao-joy,to://github.com/xuejiao-joy") -- ![davidshiz](https://avatars.githubusercontent.com/u/53512869?v=4 "title:davidshiz,to://github.com/davidshiz") ``` ## Join the community {#join} diff --git a/website/src/pages/index.md b/website/src/pages/index.md index bc1787428..2a10ca65c 100644 --- a/website/src/pages/index.md +++ b/website/src/pages/index.md @@ -80,7 +80,7 @@ A Real-time HTAP Database - Minimal TCO, Making Data Services Affordable to Everyone ``` -```custom-roadMap 2023-01-15 +```custom-roadMap 2023-03-20 - Roadmap - StoneDB_5.6_v1.0.0 1. Support integrated hybrid row-column storage and use an in-memory computing architecture. @@ -111,7 +111,7 @@ A Real-time HTAP Database 2. Definition of some data objects 3. Binlog modification 4. The active and standby clusters automatically search for the master - - 2023-02-30 + - 2023-03-20 - StoneDB_5.7_v1.0.4 1. Stored procedure enhancement 2. MySQL Event (Batch processing capability) @@ -127,7 +127,7 @@ A Real-time HTAP Database - 2023-06-30 - StoneDB_8.0_v1.0.0 - Adapt to MySQL 8.0. - - 2023-03-06 + - 2023-05-05 - StoneDB_v2.0.0 - Launch the brand new V2.0 architecture. - 2023~ diff --git a/website/static/resource/ghzz.png b/website/static/resource/ghzz.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a57589d3ea056e48f38eb5b45765acd1ca241b GIT binary patch literal 32142 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
>zaEZDEhFST01cF$o-hZ z*>1U|?>u}^;nEn5H*YoQN5d7_H*nZm(Ll3m%PRjnoDU}YC;5dj*{PEUHMMsW!yX1| z<|~=5@(J92e{$y)Bk1hV^k;0N#(DT^l<Y(mTcLU&(<|OWpx#QHN^6%nPwZM}& zQ?Z!WtNMnbJ%wkPxbMSVp45-3Zl>3}!dRFGmAztb&vz=b!E0GRemB|dY;9dyT3Xg{ z69TZk2%kLtdxH|Ar;|Uk%+c2r?Gj~qyg!0Zt=luqcrSj;&Ni>9IHMffDUa_cdv-Mt zbUaS&#yhFQ4A))gwlqrR({QJGh_t_d{c)TuGy5UO9Z6Dkl0~1wj{8hbkp0|#>O~)f zQ>52|K#VRVMk-|oC$qw@3l)k#$Gz=L;kl(kJy=1^TT5~0hlg5AFEu&3hm%*v3Bx^3 z+l5|RG%SoaJD-G1ddUY*PulzbVF*-#WFE7Qhq-`KFlcLa%Gi*(eVOE_*6Hl%@BM~TMYoZ~ILOU>GV z$t9TDA0OJ3{v*srHodpV!q^bODIN2Dy?Q;nsaNKj@Zoq=N^L*7`*I#GbDc-JRkl`g zIOXv~K5=$-AfO^RsD=ow;wbLpa8Ix#B538~TYS3z;ofy*Q{?x6O(JfNl^CJy%uvfW z3q_=iTs$~REbmudKfGyW+F_80Gk04Yoz9SUo0^z)vCV?h93k#Z{p(BuzNfM2^ap>% zQCzgHKlw&s-7vQ2P+};MQAY8LXOZvBj?fYPUYB6UZ&SG{q@GQ?!DdY`RDaRUk%!!R z`&4Hj4rya>qFQ0wj?_||wDk3^p8fIx$welg%H7vjZe!1MR$M$#uI-|NCt$w$EZ5Fo z9T{>a@;Gc&NYJ6@8*zWHpcriPwoDULNe>jLL2+iLpYi7CnIZJY<=+Wh2$DfnZ`wT) z_jnY@=w_5)z3keb)f07N&qp5P6h!o2_o0B82oZ_LZ(35i=3h1*o3eP!syV-^vOP1} znZvKnfAuNWK@KbZ=MQ0uk5kAFq1)BzM|PDaJ?1CX1U0weZz)4)!1j^JoOCHfT*)8M zI3OVNQTO-x-YY6nA0~G4?&ua4OzrRC4V^_!e|{8d z8dwd86 zyF14BEwHi8;VliL{k-?Lq8)c%UieyhXs7qyohnytqoD)QF(Bp91-HzYJ{Aw0SxJ%09KW)w42*A0rasamnPD}FN|GB??(Xx4 z={?x&gS+x%X60MkqnnB(<_M$ON4_)Dg5(b9s*8EXvCU*_?s~)2uE^u*2i$V%Tbw6t zq@I^tLmcm8`Y87l>44LB`aVJ)XfQ%guhMT|q&Gvisp6xG-czCt8dK1rLf^tq-^Giq zfutbenW*-ghoLRNDtlNXdFmhDYkPp57((e$W60%;i5g67#iK&!U(U#j28afM^GMl~Hdrcx>yS6HspHm9+XRILQ{{tfEbD%#fv*hj zyy8TW8~JcXH^^n=;In5wcxo>bT=U7#+rG9sDfOQ>^U@`}U=#TY*7zCa3X^Hy@nOl+ zI7ShwNNtRUtOQZ-fuxnvHztV>leG+Ae$8RK)?Kd^7`xI3f|8_F;T%W=Qtj$RC;$;$ z-Ph(8B=HoR6a41AJ=&#PRoY9He$hpjjR@bvY62d^?r`fCU>@m41qx26%mX?+T+Uo? zl7SN5kDRHKHqMM!=rrq2APBJ70qm>o8X-G?NRTVz9geZNWL-UeTQyls|>NP1#)A4evM0Aa?yqM`aAIX+7dGUVB znW#BJNGXDRRqMNdjIa2NY9R^IeSPFfpO;~9lSK(mG2&`R>8eJMirn+g5hhGoY1+KL>ruFE^C%?^pnk-hzEyZ)dfXT~?gpjMgS(6oUO6~qEo5p*zi)!UtyE2zr z&BrlCGRBw8Sy_EBUnVc(^5_eq#uhcBhxEnA|J1k&NR(Q?S%QtpsglLF{Tv`yGTx%B zJUA0<%Y?rv)_w~Vlx95HpIjfrD?NXcv2=a#`Wn{}ZCHkF@G%|lV8Ep{vD-JVD{Wq8 zuiB2iBwgdLZu1EJ7L@HNHL?H%W9fe%)hYC5Y(2aEzI3r9?d-7MFErJ&-3(Vu`*I|v zE9^&mUXu^(Hu~7I!F5TFWBv$>gy^^NLmP);?vZ!^*h=D@4twl_9avHSW%n!X?{(?S zZH*k)Fs6J6G?UQxIz6iD>X{PD1prW(Uyz{HQ`wf@J z_eFJePD0*T=G*Ojx7U?NbJaUb&Bsj^d}uZ3iWU?%oPXZU<>L`RH%N+t z24(*wdH4a?l4}1>h|mfsCCGmBWJ7|GSZlCoC&FA@-A(lAF&PKq;nbr=w-rsS^})F3 zL3oxYCH5P(++QEfJqiImrY*bZN2)~vx45hABw>BOg?AC5Y^^`fS>*SF>w+~Sm3c;m zmn-bcbIj1rLlboTk{b5!>;x&k89b(@1bIxQjM5J>t z{*{h>PLb}!J;`>n5jQBMu*kwR*>O7QWPhoE8Otks?ml$2Vjtp$*(W5iqwNCWs4Md8 zAJCtALA{d7zMCvrcR{m2Z8ok09(o@^^Ffq?%S{bn=&dorZ-c&utljKd$Tz!w(qPej z;uq;$7hUOX>loR15zojT3Q4pYv#aWl`W*AEc-J_C5wALGZVqUF+c6BS`PH{ypE#Zh zI%4Je8z{pQ6{7bGG-ehK);@ggantgttr2AbwAF>o236>Z_|C|&xQbju9kbJxWi~&3 zQkU5AhfQ)D?M46%|5^DvGcoBmt#+ z^e^V+j-r^v=j;JmmM*k)oTy zDRy_w4Q-wk+0~(C+)7p3thQ67fXvTZbxxdG-FRt1g#GtM;)C}L{|LeFH_}nH7|LwA z^{;pOP_99=B_}TLAF6T1S;P)v5@gc9?0tSrp1`}k1{WgCr^euD0!1E-Y2rQ}WaM_P z&FUXY>{Eu{zlpN18#(E?J*H)Yc(&-%zm{_|9cbdCz$ueM|J z+PN3EUacSX%{5&A$aLo$36O-Z*4s`h(Xyg_D+N`vSF>gw-qjxGG6Zw<LW?AYbMzD?+bAs$E{j-0#KMO#E_d{tEa zugh(4r2f4g{}wo?w9hE^67IrH{W~K$mgf|;Sx_{UVfydhlnzJ9vTcbUb=L9=?16v1 zpGlr=BFT`M&!q8)B4afojRc%q-yfKv1G`|?&C=_*u~^49M8)N4Mq*~2fjUdWX07I( zC^I^{gt!MM=hwb=a>AhY%3)!vGC|n<4zLHp6!^Zv$r6V$^j7??mWvO_PcF_Zm(?PA zoN1Bo@Pgw!6cQXYk(w~>AUa6QSYPZM_4#-f4rAy;gq* z_c6buRibltL$;a(^#p9gaR~e$4z{2_u{9%M&dcgVv@GSK{gT(oV)s+3!;h!u{sc}t zXR9vw2}bY8%RX7$ukE+h#?N>c>1l5#^JsUeZr5ACDvoWFh1mQR#R(+*``n#)jDM(f ziMXNv*lFEdWX?s-9A@7YCZB9mLp7iGVLKfFLn6qjn~T^pakY3ZmL<=*Vk)(A50aqE zEynJ<*`EHg^xtiM70@iPyYQdzUsA%Dea6?!cH9XXxQhrkHZRSi4kQ~LVeUr@pb+w& zA%+zm&v^=;Dg9DD750HRfIRWe%V{hFBmw%KC5bA!*=&-{Z>^>f;~5G46EhPd^m^D& z({U|0W~@-G)*4dvV$3s#87nJO<(tBTBDoQwBn88tqdTAKJRaEe_dru4Fxwl|suQy> z_TRd|k>BK^X~`Nrt_@%}TP38?6kK6v^)@^`jd{Rl$8<;!WA;O^(O`j{!%IwBmH z)dCE+rs*UnNIey>kr}b( zFrQj~DB8Bm#l*@3OcZS8ulmEQjN+D*f+l3GGs+u#oGVb~e4_+O+MIEv9hVC?{3Kny zD?Kw0Dni5VZ*FvyGfjNQY2DVf$ZI`5ydr)J=)IQJCfKvHg53KOYV-5E{%D8L=$QIe zv+0HXGpOCw<`yzhCW7Fv6t_34IQ$Yg60DXziZgm<$F2#*Z~BT#2zovSMJh08+&K&S zWYB~X=ht-kM~gtNcKXop?%TjlPgY-*WX%~L=(BzIN7afY;*}EecNC-W1L*dN>=d30 zJKsz4@Yq)eCfGW-+VyMqAIdI2i`R4n?APsntf4#T*j?i*XCVlh04hrapw9FI64P%| zSS_4A*+IG`YwTN#F@ke(=1Zpuzf@U_wA3@fSaW@sOC;9ynSp$Od>=)zTu_a%@qYT; zB6l5s=c`_JjMBKxLZ;O=i>A#9w4{+-a!jxZk&ps zQ~qu`T=MbGe;=tlZ{*fl#}$fZc+KQxIHPkq3KSAm4h9Q9UhKkQQL7_n9fnH(O5u*{ zfyk)r!o0U2^ipBd(4sp=qd4R4)hG=2+>ioi%WtAtcJui!JbLio{N3DK6Tr=UVT8>q zzr3zXm>kuorUz%yCI_PcjtYdZ$j)FwMeM~aV-c(IxERf3y?@xI8VlKM@`*Q9KuvME zsQ725lnVJxXTw7dVAxSSJqkLV#4l)f>KUE!xV0ESTW&tUBY1GIN_hy_p_*2F zie7@U;0fZGu0a*;iqsG_D?-PYnP&3hj-qVTbpl5xEeF*H-8DW$m~RgT{m&;(5IOf+3u8LLH`5@7bNV)#|P&fdx3(~;KIq2s*2S$idYybh0TpZ2}|oam`%aGEjVnC>i5EGIN6619Mz=q!{h0fWn-mT zCSR^67U@CDYGCsK=EhLBg)+hBSv`Dn-Jg987{6S=AF0WIqfq{(jXc{NU~xf~@snt% z=D)kaZN|7H!6CW)B#cO-rloxZ!Jr_FzVU;VZ^d!j2DkJ;hL%NZ%Rf^l_AH8=$E2&q z`JJmjz9?wAoNUvs+Gd{DeSccm+uPg2;4>$_m)_^&6fVPAQX%K}?|u>*jKlh3&pHq1 z>pV5T+8rxdgW|l@qq#PpC%y9WCem+=2{CPLwx`1Yq#@Ft7FQ*O#QW$nIT=slXYhnW z_IdwHMRQx91I5?4O(M+g%a@`4@04M*MoIkB`M;FxJn8qo@aZ@|@@K;)+HSM&&LB>X?5PejdnZT2wi#p}-A|E@)CtepNND zWK{P1F)}f=55Oxhay@_Cyl9KnN$vD$E?O5NkoX|;>59ZZ+6MvRb`_%TxqhL+HSEzM zAad>Z*51LvXyn$h)-M0l`jtr|xuYkuerN88)@2ozhqinj_sE(}>$}9-NjZEr|4cSXY zbMY5*Y2+fm`9E-gEK-!?C_`6{Njo$(Lso3mzHIEd^f3QgbfOR7#suD%q15~AG0u#S z%Pl%%D3))2D`}w1;PCs8_vm;s)(-7nMDJ#td?Yp3DpnbqZ}+(}v|GX?uMLlLFL$aa ze)+Nwc@wlWNvH$emPOge>x?tykk5au7_^K-`@WFnC?+yT??SpNx`%y>A9-SN7kQlMul;aH zxP42{I2$lr>jF4U+Jr2zS!eS8_}||ckD@OO-HFJbM?3r;4QugfCR^)J7*{{x;dXfF zj52HjSqNfcr=GnpZaFFq8uZuGKKDPIS~BO0MveCgK&(f=BoS*NlCW89)u~F1zSv_b z^4{1->sopl(D~KHRk<{?>UX=PCg-!Z6Msi5Dv1uAiag3WcglbdDTV^q*Ct!f8@bRX zFzQ1QWiB7~e0-~Jf>8K>J2>S)2(?>gOB3$U#V+syI`04F_Hp`o{3D|lewe9=4)b!= zvsg9{_V8|`aS`FEbi+lUa|<3Tokq^F$vJTy+xu!fvdn+GfiFUnzkk8~V5f9GHI(zV z-NbRw0IFTk036z|qJtYr9VEzX=>@EOeryMFYxbbB;~tJ=833R+6`R4E;?&=BhHqJ= ztvq%YuPn!SC3MLzkC$(yxjSE~du0oLT;RL&(lyAMPRkg`Y}Ba&&08+NS*m?LRcC(r z=a&Vw{tNkUE*FQH1nH=8RD&227(2vLqEE^|TZT38_ip-KBD9$n3b>!FCNAW)!n_~3 zyY2p!2*7KWvel%=wrku;H+)a&CvkFVxMWX>wZL>maDyM`Wm(lKFrgGwy5Z7X?7H50 zEOn$@qLyvP@;;l1IuLIytjaZOzqJcJXQ@azHQZs?D)}T3SAG@I+_E2jOSC%u)oa%U z7tBsR9sqAVS5QKuV0Yae_e(}iaCUchM{U-u9zXThm0>YV~O9#OoBF zyhK;u`1PEWRxkJbAt2S^?~3}ASj2hS7mPM|)rSsAOCZU0bS5k_cnfDbkl41^Aw#jj zY_ZU%8(Pai=9)m!Hn>@;B;hD23-uus(7cO&Z0*g>%a0yVINz6;3EPSgn$)QXH`P+W z$rrDC|3Uae&$;w)o2%B~fp`e(_aBp*g9EJnq~zoQ@G!n)SwFP-&2NO8kPmMndVXX% ztOaYnBKOsE`Y0AgED3kuPK$wV!++j2zM1Lt>Ud-(@0{Z_?O2*Uw9J;hxD7B_1^|3l z0Mi+8{hro!`$uL)uY5$;9&|X8VePe;oBbIFLlX(%{*Y?^8{l|tdeP$5P9DY0=?TB9 zY#@CI&8>i_`b%kiSq*3#gJzf!1ry?CiFf#{)V0S_a@sc5xRTgn&4A1~!4ukKVizt3 z&i@_})%P+6)SYPr&WO|QLkmO+pZ`Y&VKdvp$RRbFJ!+G0GA=%J=#W82%~@vgN94Yj z)nNgj$$2zF4QeeFK|JL{%>DtSc0eRy+S9evZZs&AflHNpp=rhU7;3+;D)uKYq(N?> zz9l~NDtfr(!Qi4w5ehwye;I4dx=K@C{IKmO5~nRVx3y*J7PJA=KUyFw9lH}j$<}5r zzejAwegJqD)BcX088>ui&K!fNq|1jY{z!s!SU=2;X6)O`fP$M74b)6nlJQ=mh?l>p zI1lB*8Z(}LTdRdI$m#<0lRks_al=uyoz%^<(jB*!gdTv6DD## zhLOR+hN;t*1ju7AeiOS_XNh^APqpzJT8cJ)&D{+U|MVAYk?}=W@p;*)Gv%o}&Rqyy zF9Ta|2qc5#y5hO~Kiih-GTS%5D2ZhxV*l|hGtHO@Em~v?fccw>S8AZ|mJAH3SjIdq zlBD=UaA_gT>VaWFy<1@I}3Ps zS#e3mLf|7cT$bMKhoViC^-_qN4oNclZYR2g5H@zWEnm=wq!n}zyWCREsrdzEI z_IyoNJvB&$w#LL^2RQ8A%k6aRMR4(5tUdk#t-QkDe{XL#O)3gsqhP%TvGoa|D0A*i zBrM^$+dj>!5I(G>ZJ`LG5T5zwL^QZ~D`|-`p$D9fli@)A{eB`XE{<@f8H{LZ&bdll z{xT{;&;+TcTiN37fjp$tt}LeAU654ADk z65rBduLBLiq0GB-hPi$q-XvUOj_dB{)e`e5X~px4YBxmH*#2Jo(`7`Wh$LJR(Zs|= z`ETlk`Wc3b=Ezwr)A;U)!;x`#mH3U5bdYGjdd@(2jN;bj>I>R=sz0VvB4^*;*&a@+X&e-*@tc;9|Ci?B& zo{u44pYIq(HJQ_g!RG8#B4*C>GpueMNyA>heoZ~_(&v!L*OMMSki%`Fu8(00`^S5W zm2$4`!T^oHCQwn-^iQMUys~tYhiJx+;$bNR6%;R0*LarGdLCO@r8I5eW$;uaI%X%N z4b$4+rZ+Xi*wSVcn8b;LCg_*UB~#bbvhjOUC0Cny2Pgzm+MVUKtC%9pELhjW=C}rs z!^v$IZnF7d#vA_K;!#RJyRlK7$5&W5V9lB8Y^D4<74!nMBT9{=dmpXIc~agz{;;M* z;AQ|viNMamp>0}DIlIw&hyDAXn}Zs?Jxp$TAKg%n(@hKWet<2CGBnRD^m~8f;<}P? z+yR~w9v)tb)6D>6D4Bphy#jcJb%I+g*rZyjR~P28U61FEC)3ovkZ~sTR!~Q(D=55H z$wjb$TQOSrH&p4ZF*4G=eHpJpw_xtxM3<;Bt+;FtI15Oq7 zoNEDMrf+1lbls-F0Aw(C!Gc<8v>Ta@4d@g2KS4E5hzk8Rw;SNBhC;`*+!t}SiZVRe zK1U&*y<^(JYyctTmH%eZzJ7k3*Iu`bmYSz0*;FK8w=4Cmg!{~xhspM(G?=bP_?d+h zUD6Ib7Zy)0Pv|DpxJYAaXeb)vfVExUmQ8Wuih1JN8d5v=RO+R{3?Tg`gu!o3@-Cc@ z9{D#B>|WA{)h{+!3hStNx|=V85Y3_emW?b>TZ2{Mnit#(`0|1R3yHEg67pgr+UK^> zQ3BJx+s{?6o^P<$#vGipW`WML0kB(id`q{AWC&yB_}4qNyP=auFhQpY<99qR;3gv5 z(c;TWuTyP+_~D9LSZc~Q>Uz8nEhw=z3uP?lLD}6s0}~u6={5i%s-ze$mbWh<9&1y%3Y8??(?2Ps@2Da%Sy` z3uIz5uqIvvYLL~PpKcYM$0zqvCD^-{HCJI%dw7<9yY0j zUfEZ;b;pLL>M>oa$djS}awzVc>7V%}+}^1L3l@>(x^gRCw3*?duMd>Irj&SmCi`Ot ziM^1&0R(rX9YjM4!+p-_H8hN&Rid{1(fW(Y%8n~HYxpM&(MZjyVpS^J7yXKs@fox! z_M5b?zB>Ti8g}v#eap9DO5qAW_Ou9mc>vH;a2Q<>@Qs->!_8$(DK+;}ra7a^i9MTd1OUjHf>lb1F9(Ig|GX*Q<^>zxA
Jqo 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 H%!2<18Ul1} literal 0 HcmV?d00001 diff --git a/website/static/resource/hgxx.png b/website/static/resource/hgxx.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0ce33cc38f56f00b613156d9ee999e95f0ef3c GIT binary patch literal 22136 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