From 6a2c1c1b65fbeb1b80b95478feedb4cfcc8c8b55 Mon Sep 17 00:00:00 2001 From: silicontwin Date: Sun, 8 Dec 2024 01:53:45 +0000 Subject: [PATCH 01/55] Updated C++ documentation --- .../class_`ForestContainerCpp`.md | 60 +++++++++---------- .../class_`ForestCpp`.md | 44 +++++++------- .../class_`ForestDatasetCpp`.md | 4 +- .../class_`ForestSamplerCpp`.md | 4 +- .../class_`JsonCpp`.md | 16 ++--- .../class_`ResidualCpp`.md | 8 +-- .../class_`RngCpp`.md | 4 +- .../namespace_`StochTree`.md | 4 +- 8 files changed, 72 insertions(+), 72 deletions(-) diff --git a/docs/c-documentation-markdown/class_`ForestContainerCpp`.md b/docs/c-documentation-markdown/class_`ForestContainerCpp`.md index b1ad21d7d..327c30933 100644 --- a/docs/c-documentation-markdown/class_`ForestContainerCpp`.md +++ b/docs/c-documentation-markdown/class_`ForestContainerCpp`.md @@ -15,10 +15,10 @@ title: class `ForestContainerCpp` `public inline int `[`NumLeavesForest`](#classForestContainerCpp_1aaef9c9d9c0463a71571308981a2929ad)`(int forest_num)` | `public inline double `[`SumLeafSquared`](#classForestContainerCpp_1a7d625fdf2b189349aa9d5c0c86606965)`(int forest_num)` | `public inline void `[`DeleteSample`](#classForestContainerCpp_1aa326d10037e7ce6a141e647b1c8987ef)`(int forest_num)` | -`public inline py::array_t< double > `[`Predict`](#classForestContainerCpp_1a2db2e6b954f08a94cd1eb6119f2ee768)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | -`public inline py::array_t< double > `[`PredictRaw`](#classForestContainerCpp_1a7571c4ffe69a319360e485b697a5ba12)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | -`public inline py::array_t< double > `[`PredictRawSingleForest`](#classForestContainerCpp_1abb59e21562dd76e6eaf467f443ca8eb9)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num)` | -`public inline py::array_t< double > `[`PredictRawSingleTree`](#classForestContainerCpp_1ae633f36e5088076fc625bc8e06a7b211)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num,int tree_num)` | +`public inline py::array_t< double > `[`Predict`](#classForestContainerCpp_1a2fd9c5aa05154d9c07b49a7dc677f54c)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | +`public inline py::array_t< double > `[`PredictRaw`](#classForestContainerCpp_1a4c8c2eb1effbddbb358bf1b6c4341d59)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | +`public inline py::array_t< double > `[`PredictRawSingleForest`](#classForestContainerCpp_1a780d740c0c102a677d611ebf0e476cdb)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num)` | +`public inline py::array_t< double > `[`PredictRawSingleTree`](#classForestContainerCpp_1aa56172c76d74f5a71c3042cf995342e5)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num,int tree_num)` | `public inline void `[`SetRootValue`](#classForestContainerCpp_1a1d85e6b963eeb042dcdea70c47f45d3f)`(int forest_num,double leaf_value)` | `public inline void `[`SetRootVector`](#classForestContainerCpp_1a492b80b03c79bfa94d59c7de11303abd)`(int forest_num,py::array_t< double > & leaf_vector,int leaf_size)` | `public inline void `[`InitializeRootValue`](#classForestContainerCpp_1a4715522f9b93610451cb792aee74c15f)`(double val)` | @@ -29,18 +29,18 @@ title: class `ForestContainerCpp` `public void `[`LoadFromJson`](#classForestContainerCpp_1adce3d8dd9ca9866e06cc7cefb11ac010)`(`[`JsonCpp`](#classJsonCpp)` & json,std::string forest_label)` | `public inline std::string `[`DumpJsonString`](#classForestContainerCpp_1a78b5cee874333c52d7b0ca5d9af4da31)`()` | `public inline void `[`LoadFromJsonString`](#classForestContainerCpp_1a8325daf220502cf275c2e83681d40ed9)`(std::string & json_string)` | -`public inline StochTree::ForestContainer * `[`GetContainer`](#classForestContainerCpp_1a56e7247fcef3f4ff370f7ab50e092d0a)`()` | -`public inline StochTree::TreeEnsemble * `[`GetForest`](#classForestContainerCpp_1afca04cd37b2973e41f5bbf529e61946c)`(int i)` | +`public inline StochTree::ForestContainer * `[`GetContainer`](#classForestContainerCpp_1a890e6d02f416b973d79ef4d847b2bae4)`()` | +`public inline StochTree::TreeEnsemble * `[`GetForest`](#classForestContainerCpp_1acea2c4d74677584b9c0fb35bcdbcf0b5)`(int i)` | `public inline nlohmann::json `[`ToJson`](#classForestContainerCpp_1aedc3756fab2320ff704e507ed4229766)`()` | `public inline void `[`AddSampleValue`](#classForestContainerCpp_1ab9ef774f9d03be1b6027e77c9a87801f)`(double leaf_value)` | `public inline void `[`AddSampleVector`](#classForestContainerCpp_1a614daa8ea9cbee47b6f5582874bd32bb)`(py::array_t< double > leaf_vector)` | `public inline void `[`AddNumericSplitVector`](#classForestContainerCpp_1ae5c5e5444d988e72d097c965b876324c)`(int forest_num,int tree_num,int leaf_num,int feature_num,double split_threshold,py::array_t< double > left_leaf_vector,py::array_t< double > right_leaf_vector)` | `public inline void `[`AddNumericSplitValue`](#classForestContainerCpp_1ab898857480955a868d0d356f2e534ae8)`(int forest_num,int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` | -`public inline py::array_t< int > `[`GetTreeLeaves`](#classForestContainerCpp_1a146de93a75e64e18ce721c145f684207)`(int forest_num,int tree_num)` | -`public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestContainerCpp_1a8377a17e8b4f27523775130849f92d8c)`(int forest_num,int tree_num,int num_features)` | -`public inline py::array_t< int > `[`GetForestSplitCounts`](#classForestContainerCpp_1a2d0a8067ddfb2d3b703307725205f002)`(int forest_num,int num_features)` | -`public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestContainerCpp_1a3b2bff3c52a603480ffe77b1671eae61)`(int num_features)` | -`public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestContainerCpp_1a64428c5deaaf26733a8d94cd7bd5fb71)`(int num_features)` | +`public inline py::array_t< int > `[`GetTreeLeaves`](#classForestContainerCpp_1a0c2a1ea7f43b72e9fd88a8bb6aaaa638)`(int forest_num,int tree_num)` | +`public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestContainerCpp_1a28b6eecc84b861ca77558cf99d99274d)`(int forest_num,int tree_num,int num_features)` | +`public inline py::array_t< int > `[`GetForestSplitCounts`](#classForestContainerCpp_1a5243383cf3ad209cfca700ec1bf2fc7f)`(int forest_num,int num_features)` | +`public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestContainerCpp_1ac937d908979e4aebef100ab28dab2bc0)`(int num_features)` | +`public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestContainerCpp_1af3879b88e50f645bf6f97c1fb360de75)`(int num_features)` | `public inline bool `[`IsLeafNode`](#classForestContainerCpp_1a37e496b5c0caa7a0420e073607d32fa0)`(int forest_id,int tree_id,int node_id)` | `public inline bool `[`IsNumericSplitNode`](#classForestContainerCpp_1a86154e0a0f794637a748d62cdd3b662a)`(int forest_id,int tree_id,int node_id)` | `public inline bool `[`IsCategoricalSplitNode`](#classForestContainerCpp_1a0f542f3cca9b87a72dde44910db5d27f)`(int forest_id,int tree_id,int node_id)` | @@ -50,14 +50,14 @@ title: class `ForestContainerCpp` `public inline int `[`SplitIndex`](#classForestContainerCpp_1a7dd8e6e0282043920a503581e9b43cd3)`(int forest_id,int tree_id,int node_id)` | `public inline int `[`NodeDepth`](#classForestContainerCpp_1ae73b1c0fdc9ab3a3c30c31c2e4b7cb9a)`(int forest_id,int tree_id,int node_id)` | `public inline double `[`SplitThreshold`](#classForestContainerCpp_1a4bac1c1cdd1a56bdfff32cb0ff576142)`(int forest_id,int tree_id,int node_id)` | -`public inline py::array_t< int > `[`SplitCategories`](#classForestContainerCpp_1a62d0aadc6af7218e808c825fff561661)`(int forest_id,int tree_id,int node_id)` | -`public inline py::array_t< double > `[`NodeLeafValues`](#classForestContainerCpp_1a27def7ae5ea2272274518280882f6b87)`(int forest_id,int tree_id,int node_id)` | +`public inline py::array_t< int > `[`SplitCategories`](#classForestContainerCpp_1ab895beadb6d57f7411d06646858c5d04)`(int forest_id,int tree_id,int node_id)` | +`public inline py::array_t< double > `[`NodeLeafValues`](#classForestContainerCpp_1a19e1ec1cf34b3dd0e5fd8dafd8ebbdcd)`(int forest_id,int tree_id,int node_id)` | `public inline int `[`NumNodes`](#classForestContainerCpp_1ad456f4a52d2cef77cf72939e992ebd3b)`(int forest_id,int tree_id)` | `public inline int `[`NumLeaves`](#classForestContainerCpp_1a5e567f2b6c4291bc061358616c259de0)`(int forest_id,int tree_id)` | `public inline int `[`NumLeafParents`](#classForestContainerCpp_1a1bc9fb5b355a50d8439dd5a46a7da17e)`(int forest_id,int tree_id)` | `public inline int `[`NumSplitNodes`](#classForestContainerCpp_1a4a97cc11868360dd617236319dec49f8)`(int forest_id,int tree_id)` | -`public inline py::array_t< int > `[`Nodes`](#classForestContainerCpp_1a95b373bbda33767a1c939587571d9b91)`(int forest_id,int tree_id)` | -`public inline py::array_t< int > `[`Leaves`](#classForestContainerCpp_1a496ea57b9cbe444f66c810476e21bf0e)`(int forest_id,int tree_id)` | +`public inline py::array_t< int > `[`Nodes`](#classForestContainerCpp_1aa85b1490e3b552d9b60e9ffcf40b282d)`(int forest_id,int tree_id)` | +`public inline py::array_t< int > `[`Leaves`](#classForestContainerCpp_1ad3cf3b8c605746c719b1f77c20ca7de2)`(int forest_id,int tree_id)` | ## Members @@ -75,13 +75,13 @@ title: class `ForestContainerCpp` #### `public inline void `[`DeleteSample`](#classForestContainerCpp_1aa326d10037e7ce6a141e647b1c8987ef)`(int forest_num)` -#### `public inline py::array_t< double > `[`Predict`](#classForestContainerCpp_1a2db2e6b954f08a94cd1eb6119f2ee768)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` +#### `public inline py::array_t< double > `[`Predict`](#classForestContainerCpp_1a2fd9c5aa05154d9c07b49a7dc677f54c)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` -#### `public inline py::array_t< double > `[`PredictRaw`](#classForestContainerCpp_1a7571c4ffe69a319360e485b697a5ba12)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` +#### `public inline py::array_t< double > `[`PredictRaw`](#classForestContainerCpp_1a4c8c2eb1effbddbb358bf1b6c4341d59)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` -#### `public inline py::array_t< double > `[`PredictRawSingleForest`](#classForestContainerCpp_1abb59e21562dd76e6eaf467f443ca8eb9)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num)` +#### `public inline py::array_t< double > `[`PredictRawSingleForest`](#classForestContainerCpp_1a780d740c0c102a677d611ebf0e476cdb)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num)` -#### `public inline py::array_t< double > `[`PredictRawSingleTree`](#classForestContainerCpp_1ae633f36e5088076fc625bc8e06a7b211)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num,int tree_num)` +#### `public inline py::array_t< double > `[`PredictRawSingleTree`](#classForestContainerCpp_1aa56172c76d74f5a71c3042cf995342e5)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num,int tree_num)` #### `public inline void `[`SetRootValue`](#classForestContainerCpp_1a1d85e6b963eeb042dcdea70c47f45d3f)`(int forest_num,double leaf_value)` @@ -103,9 +103,9 @@ title: class `ForestContainerCpp` #### `public inline void `[`LoadFromJsonString`](#classForestContainerCpp_1a8325daf220502cf275c2e83681d40ed9)`(std::string & json_string)` -#### `public inline StochTree::ForestContainer * `[`GetContainer`](#classForestContainerCpp_1a56e7247fcef3f4ff370f7ab50e092d0a)`()` +#### `public inline StochTree::ForestContainer * `[`GetContainer`](#classForestContainerCpp_1a890e6d02f416b973d79ef4d847b2bae4)`()` -#### `public inline StochTree::TreeEnsemble * `[`GetForest`](#classForestContainerCpp_1afca04cd37b2973e41f5bbf529e61946c)`(int i)` +#### `public inline StochTree::TreeEnsemble * `[`GetForest`](#classForestContainerCpp_1acea2c4d74677584b9c0fb35bcdbcf0b5)`(int i)` #### `public inline nlohmann::json `[`ToJson`](#classForestContainerCpp_1aedc3756fab2320ff704e507ed4229766)`()` @@ -117,15 +117,15 @@ title: class `ForestContainerCpp` #### `public inline void `[`AddNumericSplitValue`](#classForestContainerCpp_1ab898857480955a868d0d356f2e534ae8)`(int forest_num,int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` -#### `public inline py::array_t< int > `[`GetTreeLeaves`](#classForestContainerCpp_1a146de93a75e64e18ce721c145f684207)`(int forest_num,int tree_num)` +#### `public inline py::array_t< int > `[`GetTreeLeaves`](#classForestContainerCpp_1a0c2a1ea7f43b72e9fd88a8bb6aaaa638)`(int forest_num,int tree_num)` -#### `public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestContainerCpp_1a8377a17e8b4f27523775130849f92d8c)`(int forest_num,int tree_num,int num_features)` +#### `public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestContainerCpp_1a28b6eecc84b861ca77558cf99d99274d)`(int forest_num,int tree_num,int num_features)` -#### `public inline py::array_t< int > `[`GetForestSplitCounts`](#classForestContainerCpp_1a2d0a8067ddfb2d3b703307725205f002)`(int forest_num,int num_features)` +#### `public inline py::array_t< int > `[`GetForestSplitCounts`](#classForestContainerCpp_1a5243383cf3ad209cfca700ec1bf2fc7f)`(int forest_num,int num_features)` -#### `public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestContainerCpp_1a3b2bff3c52a603480ffe77b1671eae61)`(int num_features)` +#### `public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestContainerCpp_1ac937d908979e4aebef100ab28dab2bc0)`(int num_features)` -#### `public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestContainerCpp_1a64428c5deaaf26733a8d94cd7bd5fb71)`(int num_features)` +#### `public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestContainerCpp_1af3879b88e50f645bf6f97c1fb360de75)`(int num_features)` #### `public inline bool `[`IsLeafNode`](#classForestContainerCpp_1a37e496b5c0caa7a0420e073607d32fa0)`(int forest_id,int tree_id,int node_id)` @@ -145,9 +145,9 @@ title: class `ForestContainerCpp` #### `public inline double `[`SplitThreshold`](#classForestContainerCpp_1a4bac1c1cdd1a56bdfff32cb0ff576142)`(int forest_id,int tree_id,int node_id)` -#### `public inline py::array_t< int > `[`SplitCategories`](#classForestContainerCpp_1a62d0aadc6af7218e808c825fff561661)`(int forest_id,int tree_id,int node_id)` +#### `public inline py::array_t< int > `[`SplitCategories`](#classForestContainerCpp_1ab895beadb6d57f7411d06646858c5d04)`(int forest_id,int tree_id,int node_id)` -#### `public inline py::array_t< double > `[`NodeLeafValues`](#classForestContainerCpp_1a27def7ae5ea2272274518280882f6b87)`(int forest_id,int tree_id,int node_id)` +#### `public inline py::array_t< double > `[`NodeLeafValues`](#classForestContainerCpp_1a19e1ec1cf34b3dd0e5fd8dafd8ebbdcd)`(int forest_id,int tree_id,int node_id)` #### `public inline int `[`NumNodes`](#classForestContainerCpp_1ad456f4a52d2cef77cf72939e992ebd3b)`(int forest_id,int tree_id)` @@ -157,7 +157,7 @@ title: class `ForestContainerCpp` #### `public inline int `[`NumSplitNodes`](#classForestContainerCpp_1a4a97cc11868360dd617236319dec49f8)`(int forest_id,int tree_id)` -#### `public inline py::array_t< int > `[`Nodes`](#classForestContainerCpp_1a95b373bbda33767a1c939587571d9b91)`(int forest_id,int tree_id)` +#### `public inline py::array_t< int > `[`Nodes`](#classForestContainerCpp_1aa85b1490e3b552d9b60e9ffcf40b282d)`(int forest_id,int tree_id)` -#### `public inline py::array_t< int > `[`Leaves`](#classForestContainerCpp_1a496ea57b9cbe444f66c810476e21bf0e)`(int forest_id,int tree_id)` +#### `public inline py::array_t< int > `[`Leaves`](#classForestContainerCpp_1ad3cf3b8c605746c719b1f77c20ca7de2)`(int forest_id,int tree_id)` diff --git a/docs/c-documentation-markdown/class_`ForestCpp`.md b/docs/c-documentation-markdown/class_`ForestCpp`.md index b6a21c582..4cd894451 100644 --- a/docs/c-documentation-markdown/class_`ForestCpp`.md +++ b/docs/c-documentation-markdown/class_`ForestCpp`.md @@ -15,18 +15,18 @@ title: class `ForestCpp` `public inline double `[`SumLeafSquared`](#classForestCpp_1a593c60de74d0bc5ef2665e942eed2c23)`(int forest_num)` | `public inline void `[`ResetRoot`](#classForestCpp_1a0db280769720c942d0a0add330184a6d)`()` | `public inline void `[`Reset`](#classForestCpp_1ac631efc7efb9c17d9c2824ad15524b1c)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_container,int forest_num)` | -`public inline py::array_t< double > `[`Predict`](#classForestCpp_1a72bf093162b956ac310b7d613f487562)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | -`public inline py::array_t< double > `[`PredictRaw`](#classForestCpp_1ab7d07a3d5fc821541e1353d8630d7dec)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | +`public inline py::array_t< double > `[`Predict`](#classForestCpp_1a567ae932ede69f095f3a3b7e5dba07da)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | +`public inline py::array_t< double > `[`PredictRaw`](#classForestCpp_1a05f41f957d5e6ae01585cecaf98000ff)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | `public inline void `[`SetRootValue`](#classForestCpp_1a84f063c78a37a0ef8cd0273f1c3d231a)`(double leaf_value)` | `public inline void `[`SetRootVector`](#classForestCpp_1abc913598e992bedb29e077d445599f32)`(py::array_t< double > & leaf_vector,int leaf_size)` | `public void `[`AdjustResidual`](#classForestCpp_1a7746d912c13481a5c99092b3fa0bc71b)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestSamplerCpp`](#classForestSamplerCpp)` & sampler,bool requires_basis,bool add)` | -`public inline StochTree::TreeEnsemble * `[`GetEnsemble`](#classForestCpp_1a9a460c31a55a035d7be41bffd6e3a1e6)`()` | +`public inline StochTree::TreeEnsemble * `[`GetEnsemble`](#classForestCpp_1a539edf719d09c2d93dfb51bcd20362da)`()` | `public inline void `[`AddNumericSplitValue`](#classForestCpp_1a54b2db5a367fcc3c6130779de0f08b53)`(int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` | `public inline void `[`AddNumericSplitVector`](#classForestCpp_1ae1531429d5bdf13d85752e407924d24a)`(int tree_num,int leaf_num,int feature_num,double split_threshold,py::array_t< double > left_leaf_vector,py::array_t< double > right_leaf_vector)` | -`public inline py::array_t< int > `[`GetTreeLeaves`](#classForestCpp_1a0c2f05421b96db1e284c5ba0547fd8dc)`(int tree_num)` | -`public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestCpp_1a9a02cdc1a69f1d12727c8ac8246fc6bb)`(int tree_num,int num_features)` | -`public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestCpp_1aadb6e632d3f9eb20da1c9ce411ed67d0)`(int num_features)` | -`public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestCpp_1ac23d794d2baa1c47f3253d1a57da3fa9)`(int num_features)` | +`public inline py::array_t< int > `[`GetTreeLeaves`](#classForestCpp_1a099c652dafa37d340d8233f067d3e785)`(int tree_num)` | +`public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestCpp_1a8aa79e4e316dcbd72951c1935a868915)`(int tree_num,int num_features)` | +`public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestCpp_1aefd727a404691be4b08c4146ac25d470)`(int num_features)` | +`public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestCpp_1ad46e573d9f6c52bf5730e7c3ad51d90e)`(int num_features)` | `public inline bool `[`IsLeafNode`](#classForestCpp_1a1a6f14e5b414a4f2a7f080566ed58271)`(int tree_id,int node_id)` | `public inline bool `[`IsNumericSplitNode`](#classForestCpp_1a762f394b82a34274c2a88e9f581e228e)`(int tree_id,int node_id)` | `public inline bool `[`IsCategoricalSplitNode`](#classForestCpp_1a4faac08e1de68d8675079d8652aeda78)`(int tree_id,int node_id)` | @@ -36,14 +36,14 @@ title: class `ForestCpp` `public inline int `[`SplitIndex`](#classForestCpp_1aa0994a8cf2cafce22b13f20784b3803c)`(int tree_id,int node_id)` | `public inline int `[`NodeDepth`](#classForestCpp_1ac5cd5b5b47962d4eac21ed8180633be5)`(int tree_id,int node_id)` | `public inline double `[`SplitThreshold`](#classForestCpp_1a2a2c4beba400f9a96119d72e3d9d026a)`(int tree_id,int node_id)` | -`public inline py::array_t< int > `[`SplitCategories`](#classForestCpp_1a53a8f9b5138f9f04c40cb95e2f7f05e6)`(int tree_id,int node_id)` | -`public inline py::array_t< double > `[`NodeLeafValues`](#classForestCpp_1ae84fe3c4daa7d43e3117d9c025410b6e)`(int tree_id,int node_id)` | +`public inline py::array_t< int > `[`SplitCategories`](#classForestCpp_1aeaaedd20855c448263f44c5b675f5d43)`(int tree_id,int node_id)` | +`public inline py::array_t< double > `[`NodeLeafValues`](#classForestCpp_1abe284956a2cef3027e1d3c59f3b910e2)`(int tree_id,int node_id)` | `public inline int `[`NumNodes`](#classForestCpp_1a96a5b0a2f4e4eaba91b5ff4429ee38ac)`(int tree_id)` | `public inline int `[`NumLeaves`](#classForestCpp_1a9b0394c86703a88f565170c1c91e3bbd)`(int tree_id)` | `public inline int `[`NumLeafParents`](#classForestCpp_1a5508ff762921aefda57ba8ca454d435b)`(int tree_id)` | `public inline int `[`NumSplitNodes`](#classForestCpp_1a0ac612e1f3e5a9404a5e3ef03e3b384f)`(int tree_id)` | -`public inline py::array_t< int > `[`Nodes`](#classForestCpp_1a800710c90175da166413f72d24a2e427)`(int tree_id)` | -`public inline py::array_t< int > `[`Leaves`](#classForestCpp_1a1ff7e0b58124b1911208fd4988f4e193)`(int tree_id)` | +`public inline py::array_t< int > `[`Nodes`](#classForestCpp_1a581abc2f59f8f15960dff0a91c0f9afc)`(int tree_id)` | +`public inline py::array_t< int > `[`Leaves`](#classForestCpp_1a1e10325a54931699b33df779a24d1c87)`(int tree_id)` | ## Members @@ -61,9 +61,9 @@ title: class `ForestCpp` #### `public inline void `[`Reset`](#classForestCpp_1ac631efc7efb9c17d9c2824ad15524b1c)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_container,int forest_num)` -#### `public inline py::array_t< double > `[`Predict`](#classForestCpp_1a72bf093162b956ac310b7d613f487562)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` +#### `public inline py::array_t< double > `[`Predict`](#classForestCpp_1a567ae932ede69f095f3a3b7e5dba07da)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` -#### `public inline py::array_t< double > `[`PredictRaw`](#classForestCpp_1ab7d07a3d5fc821541e1353d8630d7dec)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` +#### `public inline py::array_t< double > `[`PredictRaw`](#classForestCpp_1a05f41f957d5e6ae01585cecaf98000ff)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` #### `public inline void `[`SetRootValue`](#classForestCpp_1a84f063c78a37a0ef8cd0273f1c3d231a)`(double leaf_value)` @@ -71,19 +71,19 @@ title: class `ForestCpp` #### `public void `[`AdjustResidual`](#classForestCpp_1a7746d912c13481a5c99092b3fa0bc71b)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestSamplerCpp`](#classForestSamplerCpp)` & sampler,bool requires_basis,bool add)` -#### `public inline StochTree::TreeEnsemble * `[`GetEnsemble`](#classForestCpp_1a9a460c31a55a035d7be41bffd6e3a1e6)`()` +#### `public inline StochTree::TreeEnsemble * `[`GetEnsemble`](#classForestCpp_1a539edf719d09c2d93dfb51bcd20362da)`()` #### `public inline void `[`AddNumericSplitValue`](#classForestCpp_1a54b2db5a367fcc3c6130779de0f08b53)`(int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` #### `public inline void `[`AddNumericSplitVector`](#classForestCpp_1ae1531429d5bdf13d85752e407924d24a)`(int tree_num,int leaf_num,int feature_num,double split_threshold,py::array_t< double > left_leaf_vector,py::array_t< double > right_leaf_vector)` -#### `public inline py::array_t< int > `[`GetTreeLeaves`](#classForestCpp_1a0c2f05421b96db1e284c5ba0547fd8dc)`(int tree_num)` +#### `public inline py::array_t< int > `[`GetTreeLeaves`](#classForestCpp_1a099c652dafa37d340d8233f067d3e785)`(int tree_num)` -#### `public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestCpp_1a9a02cdc1a69f1d12727c8ac8246fc6bb)`(int tree_num,int num_features)` +#### `public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestCpp_1a8aa79e4e316dcbd72951c1935a868915)`(int tree_num,int num_features)` -#### `public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestCpp_1aadb6e632d3f9eb20da1c9ce411ed67d0)`(int num_features)` +#### `public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestCpp_1aefd727a404691be4b08c4146ac25d470)`(int num_features)` -#### `public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestCpp_1ac23d794d2baa1c47f3253d1a57da3fa9)`(int num_features)` +#### `public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestCpp_1ad46e573d9f6c52bf5730e7c3ad51d90e)`(int num_features)` #### `public inline bool `[`IsLeafNode`](#classForestCpp_1a1a6f14e5b414a4f2a7f080566ed58271)`(int tree_id,int node_id)` @@ -103,9 +103,9 @@ title: class `ForestCpp` #### `public inline double `[`SplitThreshold`](#classForestCpp_1a2a2c4beba400f9a96119d72e3d9d026a)`(int tree_id,int node_id)` -#### `public inline py::array_t< int > `[`SplitCategories`](#classForestCpp_1a53a8f9b5138f9f04c40cb95e2f7f05e6)`(int tree_id,int node_id)` +#### `public inline py::array_t< int > `[`SplitCategories`](#classForestCpp_1aeaaedd20855c448263f44c5b675f5d43)`(int tree_id,int node_id)` -#### `public inline py::array_t< double > `[`NodeLeafValues`](#classForestCpp_1ae84fe3c4daa7d43e3117d9c025410b6e)`(int tree_id,int node_id)` +#### `public inline py::array_t< double > `[`NodeLeafValues`](#classForestCpp_1abe284956a2cef3027e1d3c59f3b910e2)`(int tree_id,int node_id)` #### `public inline int `[`NumNodes`](#classForestCpp_1a96a5b0a2f4e4eaba91b5ff4429ee38ac)`(int tree_id)` @@ -115,7 +115,7 @@ title: class `ForestCpp` #### `public inline int `[`NumSplitNodes`](#classForestCpp_1a0ac612e1f3e5a9404a5e3ef03e3b384f)`(int tree_id)` -#### `public inline py::array_t< int > `[`Nodes`](#classForestCpp_1a800710c90175da166413f72d24a2e427)`(int tree_id)` +#### `public inline py::array_t< int > `[`Nodes`](#classForestCpp_1a581abc2f59f8f15960dff0a91c0f9afc)`(int tree_id)` -#### `public inline py::array_t< int > `[`Leaves`](#classForestCpp_1a1ff7e0b58124b1911208fd4988f4e193)`(int tree_id)` +#### `public inline py::array_t< int > `[`Leaves`](#classForestCpp_1a1e10325a54931699b33df779a24d1c87)`(int tree_id)` diff --git a/docs/c-documentation-markdown/class_`ForestDatasetCpp`.md b/docs/c-documentation-markdown/class_`ForestDatasetCpp`.md index 589e8946c..50911bc51 100644 --- a/docs/c-documentation-markdown/class_`ForestDatasetCpp`.md +++ b/docs/c-documentation-markdown/class_`ForestDatasetCpp`.md @@ -15,7 +15,7 @@ title: class `ForestDatasetCpp` `public inline void `[`UpdateBasis`](#classForestDatasetCpp_1a41aa7a00787f8ddc1897f656884c3582)`(py::array_t< double > basis_matrix,data_size_t num_row,int num_col,bool row_major)` | `public inline void `[`AddVarianceWeights`](#classForestDatasetCpp_1ac8d722192ac8d8b36434deb2892d5db2)`(py::array_t< double > weight_vector,data_size_t num_row)` | `public inline data_size_t `[`NumRows`](#classForestDatasetCpp_1a8b11609225839609d6bcbc05e8e5a81e)`()` | -`public inline StochTree::ForestDataset * `[`GetDataset`](#classForestDatasetCpp_1a931778b318957e9d7da00a6d4710132b)`()` | +`public inline StochTree::ForestDataset * `[`GetDataset`](#classForestDatasetCpp_1adb1a0267f8e1f6debcfa5e6f43d69b4e)`()` | ## Members @@ -33,5 +33,5 @@ title: class `ForestDatasetCpp` #### `public inline data_size_t `[`NumRows`](#classForestDatasetCpp_1a8b11609225839609d6bcbc05e8e5a81e)`()` -#### `public inline StochTree::ForestDataset * `[`GetDataset`](#classForestDatasetCpp_1a931778b318957e9d7da00a6d4710132b)`()` +#### `public inline StochTree::ForestDataset * `[`GetDataset`](#classForestDatasetCpp_1adb1a0267f8e1f6debcfa5e6f43d69b4e)`()` diff --git a/docs/c-documentation-markdown/class_`ForestSamplerCpp`.md b/docs/c-documentation-markdown/class_`ForestSamplerCpp`.md index da308aa84..72c54c59e 100644 --- a/docs/c-documentation-markdown/class_`ForestSamplerCpp`.md +++ b/docs/c-documentation-markdown/class_`ForestSamplerCpp`.md @@ -10,7 +10,7 @@ title: class `ForestSamplerCpp` --------------------------------|--------------------------------------------- `public inline `[`ForestSamplerCpp`](#classForestSamplerCpp_1a716e2183d9ee5577e19e33b7b6221d93)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,py::array_t< int > feature_types,int num_trees,data_size_t num_obs,double alpha,double beta,int min_samples_leaf,int max_depth)` | `public inline `[`~ForestSamplerCpp`](#classForestSamplerCpp_1a6ebd4b2b5b43fc2efa43bcf67fe611e3)`()` | -`public inline StochTree::ForestTracker * `[`GetTracker`](#classForestSamplerCpp_1ac01993c23e40d2519a2cd554982c0c03)`()` | +`public inline StochTree::ForestTracker * `[`GetTracker`](#classForestSamplerCpp_1a826540f8d94dedfa37f59f9c4098f766)`()` | `public inline void `[`ReconstituteTrackerFromForest`](#classForestSamplerCpp_1a160ae5c804b6ed2b1268ad5d16d6b5ac)`(`[`ForestCpp`](#classForestCpp)` & forest,`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,bool is_mean_model)` | `public inline void `[`SampleOneIteration`](#classForestSamplerCpp_1ae03fd50c2a683ed6a8d889eae8a83aa2)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,`[`ForestCpp`](#classForestCpp)` & forest,`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`RngCpp`](#classRngCpp)` & rng,py::array_t< int > feature_types,int cutpoint_grid_size,py::array_t< double > leaf_model_scale_input,py::array_t< double > variable_weights,double a_forest,double b_forest,double global_variance,int leaf_model_int,bool keep_forest,bool gfr,bool pre_initialized)` | `public inline void `[`InitializeForestModel`](#classForestSamplerCpp_1a6b52e1327dd113b611eb3f7b42ea6c69)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestCpp`](#classForestCpp)` & forest,int leaf_model_int,py::array_t< double > initial_values)` | @@ -23,7 +23,7 @@ title: class `ForestSamplerCpp` #### `public inline `[`~ForestSamplerCpp`](#classForestSamplerCpp_1a6ebd4b2b5b43fc2efa43bcf67fe611e3)`()` -#### `public inline StochTree::ForestTracker * `[`GetTracker`](#classForestSamplerCpp_1ac01993c23e40d2519a2cd554982c0c03)`()` +#### `public inline StochTree::ForestTracker * `[`GetTracker`](#classForestSamplerCpp_1a826540f8d94dedfa37f59f9c4098f766)`()` #### `public inline void `[`ReconstituteTrackerFromForest`](#classForestSamplerCpp_1a160ae5c804b6ed2b1268ad5d16d6b5ac)`(`[`ForestCpp`](#classForestCpp)` & forest,`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,bool is_mean_model)` diff --git a/docs/c-documentation-markdown/class_`JsonCpp`.md b/docs/c-documentation-markdown/class_`JsonCpp`.md index 11d50840f..1fc71ded0 100644 --- a/docs/c-documentation-markdown/class_`JsonCpp`.md +++ b/docs/c-documentation-markdown/class_`JsonCpp`.md @@ -33,10 +33,10 @@ title: class `JsonCpp` `public inline bool `[`ExtractBoolSubfolder`](#classJsonCpp_1ae040b066fc7c7ae34cc4147b9a60175e)`(std::string subfolder_name,std::string field_name)` | `public inline std::string `[`ExtractString`](#classJsonCpp_1ab0b6b218f814bfa9b34e93d5b868386a)`(std::string field_name)` | `public inline std::string `[`ExtractStringSubfolder`](#classJsonCpp_1a8654f6e9a42841a88a6309584306ebd2)`(std::string subfolder_name,std::string field_name)` | -`public inline py::array_t< double > `[`ExtractDoubleVector`](#classJsonCpp_1aa1dae9756f87ce20be18ddf40444740e)`(std::string field_name)` | -`public inline py::array_t< double > `[`ExtractDoubleVectorSubfolder`](#classJsonCpp_1acb5dbc28a3c8eafad03d9ea7b8416eb6)`(std::string subfolder_name,std::string field_name)` | -`public inline std::vector< std::string > `[`ExtractStringVector`](#classJsonCpp_1a1e643cadad2cca2d10b6a5fec165320b)`(std::string field_name)` | -`public inline std::vector< std::string > `[`ExtractStringVectorSubfolder`](#classJsonCpp_1a730ce7e046e63bdc93214bb5c8aee749)`(std::string subfolder_name,std::string field_name)` | +`public inline py::array_t< double > `[`ExtractDoubleVector`](#classJsonCpp_1ac71eff7e2832e3f70bd992de3817085c)`(std::string field_name)` | +`public inline py::array_t< double > `[`ExtractDoubleVectorSubfolder`](#classJsonCpp_1a2c6861d2c23e2b3c6a5ac3c1ca20f6b6)`(std::string subfolder_name,std::string field_name)` | +`public inline std::vector< std::string > `[`ExtractStringVector`](#classJsonCpp_1a15339f9324472de7cc20ac8150e54e62)`(std::string field_name)` | +`public inline std::vector< std::string > `[`ExtractStringVectorSubfolder`](#classJsonCpp_1a42b03d1192062d6b89c37a3380e43a97)`(std::string subfolder_name,std::string field_name)` | `public inline nlohmann::json `[`SubsetJsonForest`](#classJsonCpp_1a104498c45cc52bebae67b35e73d2c8d1)`(std::string forest_label)` | ## Members @@ -91,13 +91,13 @@ title: class `JsonCpp` #### `public inline std::string `[`ExtractStringSubfolder`](#classJsonCpp_1a8654f6e9a42841a88a6309584306ebd2)`(std::string subfolder_name,std::string field_name)` -#### `public inline py::array_t< double > `[`ExtractDoubleVector`](#classJsonCpp_1aa1dae9756f87ce20be18ddf40444740e)`(std::string field_name)` +#### `public inline py::array_t< double > `[`ExtractDoubleVector`](#classJsonCpp_1ac71eff7e2832e3f70bd992de3817085c)`(std::string field_name)` -#### `public inline py::array_t< double > `[`ExtractDoubleVectorSubfolder`](#classJsonCpp_1acb5dbc28a3c8eafad03d9ea7b8416eb6)`(std::string subfolder_name,std::string field_name)` +#### `public inline py::array_t< double > `[`ExtractDoubleVectorSubfolder`](#classJsonCpp_1a2c6861d2c23e2b3c6a5ac3c1ca20f6b6)`(std::string subfolder_name,std::string field_name)` -#### `public inline std::vector< std::string > `[`ExtractStringVector`](#classJsonCpp_1a1e643cadad2cca2d10b6a5fec165320b)`(std::string field_name)` +#### `public inline std::vector< std::string > `[`ExtractStringVector`](#classJsonCpp_1a15339f9324472de7cc20ac8150e54e62)`(std::string field_name)` -#### `public inline std::vector< std::string > `[`ExtractStringVectorSubfolder`](#classJsonCpp_1a730ce7e046e63bdc93214bb5c8aee749)`(std::string subfolder_name,std::string field_name)` +#### `public inline std::vector< std::string > `[`ExtractStringVectorSubfolder`](#classJsonCpp_1a42b03d1192062d6b89c37a3380e43a97)`(std::string subfolder_name,std::string field_name)` #### `public inline nlohmann::json `[`SubsetJsonForest`](#classJsonCpp_1a104498c45cc52bebae67b35e73d2c8d1)`(std::string forest_label)` diff --git a/docs/c-documentation-markdown/class_`ResidualCpp`.md b/docs/c-documentation-markdown/class_`ResidualCpp`.md index fafe0a9b6..c89030c78 100644 --- a/docs/c-documentation-markdown/class_`ResidualCpp`.md +++ b/docs/c-documentation-markdown/class_`ResidualCpp`.md @@ -10,8 +10,8 @@ title: class `ResidualCpp` --------------------------------|--------------------------------------------- `public inline `[`ResidualCpp`](#classResidualCpp_1adb478fa40a537bcb0cc35cd29eb2ed15)`(py::array_t< double > residual_array,data_size_t num_row)` | `public inline `[`~ResidualCpp`](#classResidualCpp_1aa70f69a386d046c3830a0ef76ff50006)`()` | -`public inline StochTree::ColumnVector * `[`GetData`](#classResidualCpp_1ae02233f2a241829079206242301c2bee)`()` | -`public inline py::array_t< double > `[`GetResidualArray`](#classResidualCpp_1abf5c81dc92851ccd58ea1ee82a43860d)`()` | +`public inline StochTree::ColumnVector * `[`GetData`](#classResidualCpp_1a8604cddb29170f76a14ab18ea818a361)`()` | +`public inline py::array_t< double > `[`GetResidualArray`](#classResidualCpp_1a1f5173c71d90eef4a422e4c0e8f4ddaa)`()` | `public inline void `[`ReplaceData`](#classResidualCpp_1af7a420603f4a74d951750af1863bef16)`(py::array_t< double > new_vector,data_size_t num_row)` | ## Members @@ -20,9 +20,9 @@ title: class `ResidualCpp` #### `public inline `[`~ResidualCpp`](#classResidualCpp_1aa70f69a386d046c3830a0ef76ff50006)`()` -#### `public inline StochTree::ColumnVector * `[`GetData`](#classResidualCpp_1ae02233f2a241829079206242301c2bee)`()` +#### `public inline StochTree::ColumnVector * `[`GetData`](#classResidualCpp_1a8604cddb29170f76a14ab18ea818a361)`()` -#### `public inline py::array_t< double > `[`GetResidualArray`](#classResidualCpp_1abf5c81dc92851ccd58ea1ee82a43860d)`()` +#### `public inline py::array_t< double > `[`GetResidualArray`](#classResidualCpp_1a1f5173c71d90eef4a422e4c0e8f4ddaa)`()` #### `public inline void `[`ReplaceData`](#classResidualCpp_1af7a420603f4a74d951750af1863bef16)`(py::array_t< double > new_vector,data_size_t num_row)` diff --git a/docs/c-documentation-markdown/class_`RngCpp`.md b/docs/c-documentation-markdown/class_`RngCpp`.md index b67e879f9..da26fde67 100644 --- a/docs/c-documentation-markdown/class_`RngCpp`.md +++ b/docs/c-documentation-markdown/class_`RngCpp`.md @@ -10,7 +10,7 @@ title: class `RngCpp` --------------------------------|--------------------------------------------- `public inline `[`RngCpp`](#classRngCpp_1a2c038d51ec10cf984abc17e6a91c4163)`(int random_seed)` | `public inline `[`~RngCpp`](#classRngCpp_1a2595d9b2f18e7ba08733a427fbd7a086)`()` | -`public inline std::mt19937 * `[`GetRng`](#classRngCpp_1af7234752299bcd0df80684c10a7b745d)`()` | +`public inline std::mt19937 * `[`GetRng`](#classRngCpp_1ad619f9fb398e62c79523f68f6401b6eb)`()` | ## Members @@ -18,6 +18,6 @@ title: class `RngCpp` #### `public inline `[`~RngCpp`](#classRngCpp_1a2595d9b2f18e7ba08733a427fbd7a086)`()` -#### `public inline std::mt19937 * `[`GetRng`](#classRngCpp_1af7234752299bcd0df80684c10a7b745d)`()` +#### `public inline std::mt19937 * `[`GetRng`](#classRngCpp_1ad619f9fb398e62c79523f68f6401b6eb)`()` Generated by [Moxygen](https://sourcey.com/moxygen) \ No newline at end of file diff --git a/docs/c-documentation-markdown/namespace_`StochTree`.md b/docs/c-documentation-markdown/namespace_`StochTree`.md index b77b8c534..b76ca0747 100644 --- a/docs/c-documentation-markdown/namespace_`StochTree`.md +++ b/docs/c-documentation-markdown/namespace_`StochTree`.md @@ -26,7 +26,7 @@ Inspired by the design of the tree in the xgboost and treelite package, both rel `public int `[`GetLabelIdxForTSV`](#namespaceStochTree_1aaab0b5a0c1e3a110b07d583a31ef0204)`(const std::string & str,int num_features,int label_idx)` | `public int `[`GetLabelIdxForCSV`](#namespaceStochTree_1ae848b1ac95793c76ca4ed0da9b0d0c68)`(const std::string & str,int num_features,int label_idx)` | `public void `[`GetLine`](#namespaceStochTree_1a42736434dc1da3b939c67f1d18703ae6)`(std::stringstream * ss,std::string * line,const VirtualFileReader * reader,std::vector< char > * buffer,size_t buffer_size)` | -`public std::vector< std::string > `[`ReadKLineFromFile`](#namespaceStochTree_1ad0d56e7e54c33c79beb8b8c6ddd25c5b)`(const char * filename,bool header,int k)` | +`public std::vector< std::string > `[`ReadKLineFromFile`](#namespaceStochTree_1ab4d25456f1457e33bc011d0ac619cbc6)`(const char * filename,bool header,int k)` | `public int `[`GetNumColFromLIBSVMFile`](#namespaceStochTree_1a73eb7b1b4cbc5dc88be3454e5e9fcfbf)`(const char * filename,bool header)` | `public DataType `[`GetDataType`](#namespaceStochTree_1a13ee5cdb09aa6e4fcab6b5d46653e4e4)`(const char * filename,bool header,const std::vector< std::string > & lines,int * num_col)` | `public void `[`TreeNodeVectorsToJson`](#namespaceStochTree_1ab98c941b48d9e2d5688e0cc92a53f0cc)`(json & obj,Tree * tree)` | @@ -64,7 +64,7 @@ LIBSVM | #### `public void `[`GetLine`](#namespaceStochTree_1a42736434dc1da3b939c67f1d18703ae6)`(std::stringstream * ss,std::string * line,const VirtualFileReader * reader,std::vector< char > * buffer,size_t buffer_size)` -#### `public std::vector< std::string > `[`ReadKLineFromFile`](#namespaceStochTree_1ad0d56e7e54c33c79beb8b8c6ddd25c5b)`(const char * filename,bool header,int k)` +#### `public std::vector< std::string > `[`ReadKLineFromFile`](#namespaceStochTree_1ab4d25456f1457e33bc011d0ac619cbc6)`(const char * filename,bool header,int k)` #### `public int `[`GetNumColFromLIBSVMFile`](#namespaceStochTree_1a73eb7b1b4cbc5dc88be3454e5e9fcfbf)`(const char * filename,bool header)` From 7d21c0e9e5e5fa604d3053eddc4f60257b869fae Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 10 Dec 2024 00:38:45 -0600 Subject: [PATCH 02/55] Initial WIP documentation of the doc build process --- dev/README.md | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++ dev/build.sh | 53 +++++++++++++++ 2 files changed, 235 insertions(+) create mode 100644 dev/README.md create mode 100644 dev/build.sh diff --git a/dev/README.md b/dev/README.md new file mode 100644 index 000000000..064d43c09 --- /dev/null +++ b/dev/README.md @@ -0,0 +1,182 @@ +# Building the Doc Site Locally + +## MacOS + +### Dependency installation + +Install nodejs and doxygen at the command line via [homebrew](https://brew.sh). + +```{bash} +brew install doxygen +brew install node@22 +``` + +Check that the installation worked correctly with + +```{bash} +node -v +npm -v +``` + +which should display "`v22.11.0`" and "`10.9.0`" at the command line. + +Now, install [`moxygen`](https://github.com/sourcey/moxygen) via `npm`: + +```{bash} +npm install moxygen -g +``` + +### Building the C++ docs + +Navigate to the `documentation` repo in your terminal (*replace `~/path/to/documentation` with the path to the documentation repo on your local system*). + +```{bash} +cd ~/path/to/documentation +``` + +Now, recursively clone the main `stochtree` repo into a `stochtree-repo` subfolder of the `documentation` repo + +```{bash} +git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree-repo +``` + +**To redo this step, remove the repo and then re-run the recursive clone above** + +```{bash} +rm -rf stochtree-repo +``` + +Update the Doxygen file in the `cpp_docs` subfolder (*note that the default `sed` utility available on MacOS requires an argument to the `-i` flag, unlike on many linux systems. See [here](https://stackoverflow.com/questions/28592043/what-is-wrong-with-my-string-substitution-using-sed-on-mac-os-x) for more detail*) + +```{bash} +sed -i '' 's|^INPUT *=.*|INPUT = stochtree-repo/include/stochtree|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^RECURSIVE *= NO|RECURSIVE = YES|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_XML *= NO|GENERATE_XML = YES|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^XML_OUTPUT *= xml|XML_OUTPUT = doxygen_xml|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = doxygen_output|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^PROJECT_NAME *=.*|PROJECT_NAME = "stochtree"|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_HTML *= YES|GENERATE_HTML = NO|' stochtree-repo/cpp_docs/Doxyfile +``` + +Now, build the C++ docs, into the `doxygen_output/doxygen_xml` subfolder of the `documentation` repo + +```{bash} +doxygen stochtree-repo/cpp_docs/Doxyfile +``` + +Convert the XML doxygen output to markdown using `moxygen` + +```{bash} +mkdir -p docs/c-documentation-markdown +moxygen doxygen_output/doxygen_xml -o docs/c-documentation-markdown/combined.md +``` + +This generates a single "combined" markdown file, which can then be split into separate pages via javascript + +```{bash} +cat > splitMarkdown.js << 'END_SCRIPT' +const fs = require('fs'); +const path = require('path'); + +const inputFile = 'docs/c-documentation-markdown/combined.md'; +const outputDir = 'docs/c-documentation-markdown'; + +if (!fs.existsSync(inputFile)) { +console.error(`Input file ${inputFile} does not exist.`); +process.exit(1); +} + +const data = fs.readFileSync(inputFile, 'utf8'); + +// Split the file on level 1 headers (e.g., "# ClassName") +const sections = data.split(/^# /gm).filter(section => section.trim() !== ''); + +sections.forEach(section => { +// Get the title of the section +const lines = section.split('\n'); +const title = lines[0].trim(); +const content = lines.slice(1).join('\n'); + +// Sanitize the title to create a filename +const filename = title.replace(/[<>:"\/\\|?*]/g, '').replace(/\s+/g, '_') + '.md'; +const filepath = path.join(outputDir, filename); + +// Write the section to a file with front matter +const frontMatter = `---\n` + + `title: ${title}\n` + + `---\n\n`; +fs.writeFileSync(filepath, frontMatter + `# ${title}\n${content}`, 'utf8'); +}); +END_SCRIPT +``` + +Execute this script using [node](https://nodejs.org/) + +```{bash} +node splitMarkdown.js +``` + +Remove `combined.md` + +```{bash} +rm docs/c-documentation-markdown/combined.md +``` + +### Building the Python docs + +Install dependencies in a local virtual environment + +```{bash} +python -m venv venv +source venv/bin/activate +cd stochtree-repo +pip install --upgrade pip +pip install -r python_docs/requirements.txt +pip install sphinx-markdown-builder +pip install . +cd .. +``` + +Build the sphinx documentation as markdown output + +```{bash} +sphinx-build -b markdown stochtree-repo/python_docs/source/ stochtree-repo/python_docs/_build/markdown/ +``` + +Copy results into the `docs/` folder + +```{bash} +mkdir -p docs/python-documentation-markdown +rm -rf docs/python-documentation-markdown/* +cp -r stochtree-repo/python_docs/_build/markdown/* docs/python-documentation-markdown/ +``` + +### Building the R docs + + + +### Building the doc site + +Make sure `yarn` is enabled globally which you can do via the homebrew installation of node with + +```{bash} +corepack enable +``` + +Now, install the website dependencies (`docusaurus` and other packages) + +```{bash} +yarn install +``` + +Build the site using + +```{bash} +yarn build +``` + +Render it locally with + +```{bash} +npm run serve +``` diff --git a/dev/build.sh b/dev/build.sh new file mode 100644 index 000000000..2b11080ca --- /dev/null +++ b/dev/build.sh @@ -0,0 +1,53 @@ +#!/bin/bash +sed -i '' 's|^INPUT *=.*|INPUT = stochtree-repo/include/stochtree|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^RECURSIVE *= NO|RECURSIVE = YES|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_XML *= NO|GENERATE_XML = YES|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^XML_OUTPUT *= xml|XML_OUTPUT = doxygen_xml|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = doxygen_output|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^PROJECT_NAME *=.*|PROJECT_NAME = "stochtree"|' stochtree-repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_HTML *= YES|GENERATE_HTML = NO|' stochtree-repo/cpp_docs/Doxyfile + +doxygen stochtree-repo/cpp_docs/Doxyfile +mkdir -p docs/c-documentation-markdown +moxygen doxygen_output/doxygen_xml -o docs/c-documentation-markdown/combined.md + +cat > splitMarkdown.js << 'END_SCRIPT' +const fs = require('fs'); +const path = require('path'); + +const inputFile = 'docs/c-documentation-markdown/combined.md'; +const outputDir = 'docs/c-documentation-markdown'; + +if (!fs.existsSync(inputFile)) { +console.error(`Input file ${inputFile} does not exist.`); +process.exit(1); +} + +const data = fs.readFileSync(inputFile, 'utf8'); + +// Split the file on level 1 headers (e.g., "# ClassName") +const sections = data.split(/^# /gm).filter(section => section.trim() !== ''); + +sections.forEach(section => { +// Get the title of the section +const lines = section.split('\n'); +const title = lines[0].trim(); +const content = lines.slice(1).join('\n'); + +// Sanitize the title to create a filename +const filename = title.replace(/[<>:"\/\\|?*]/g, '').replace(/\s+/g, '_') + '.md'; +const filepath = path.join(outputDir, filename); + +// Write the section to a file with front matter +const frontMatter = `---\n` + + `title: ${title}\n` + + `---\n\n`; +fs.writeFileSync(filepath, frontMatter + `# ${title}\n${content}`, 'utf8'); +}); +END_SCRIPT + +node splitMarkdown.js + +rm docs/c-documentation-markdown/combined.md + +yarn build From de2e0636b11aa6e68f282ec0e8dccb5e54865e8f Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 10 Dec 2024 00:57:37 -0600 Subject: [PATCH 03/55] Update to C++ doc build --- README.md | 2 +- dev/README.md | 82 ++------- docs/c-documentation-markdown/Summary.md | 18 -- .../class_`ForestContainerCpp`.md | 160 ------------------ .../class_`ForestDatasetCpp`.md | 37 ---- .../class_`ForestSamplerCpp`.md | 34 ---- .../class_`GlobalVarianceModelCpp`.md | 22 --- .../class_`JsonCpp`.md | 103 ----------- .../class_`LeafVarianceModelCpp`.md | 22 --- .../class_`ResidualCpp`.md | 28 --- .../class_`RngCpp`.md | 23 --- .../namespace_`StochTree`.md | 88 ---------- .../struct_`StochTreeLocalFile`.md | 37 ---- docs/cpp-documentation-markdown/dataset.md | 35 ++++ docs/cpp-documentation-markdown/index.md | 14 ++ docs/cpp-documentation-markdown/tracking.md | 33 ++++ docs/cpp-documentation-markdown/tree.md | 15 ++ docs/python-documentation-markdown/api.md | 22 ++- docusaurus.config.ts | 29 +--- package.json | 3 +- sidebars.ts | 2 +- splitMarkdown.js | 32 ++++ src/css/custom.css | 2 +- 23 files changed, 174 insertions(+), 669 deletions(-) delete mode 100644 docs/c-documentation-markdown/Summary.md delete mode 100644 docs/c-documentation-markdown/class_`ForestContainerCpp`.md delete mode 100644 docs/c-documentation-markdown/class_`ForestDatasetCpp`.md delete mode 100644 docs/c-documentation-markdown/class_`ForestSamplerCpp`.md delete mode 100644 docs/c-documentation-markdown/class_`GlobalVarianceModelCpp`.md delete mode 100644 docs/c-documentation-markdown/class_`JsonCpp`.md delete mode 100644 docs/c-documentation-markdown/class_`LeafVarianceModelCpp`.md delete mode 100644 docs/c-documentation-markdown/class_`ResidualCpp`.md delete mode 100644 docs/c-documentation-markdown/class_`RngCpp`.md delete mode 100644 docs/c-documentation-markdown/namespace_`StochTree`.md delete mode 100644 docs/c-documentation-markdown/struct_`StochTreeLocalFile`.md create mode 100644 docs/cpp-documentation-markdown/dataset.md create mode 100644 docs/cpp-documentation-markdown/index.md create mode 100644 docs/cpp-documentation-markdown/tracking.md create mode 100644 docs/cpp-documentation-markdown/tree.md create mode 100644 splitMarkdown.js diff --git a/README.md b/README.md index ea6a11472..c1d21779d 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ The GitHub Actions workflow for our `documentation` repository automates the pro - **Build HTML Documentation**: Uses Sphinx to build the HTML documentation from the Doxygen XML output. 10. **Copies C++ Documentation to Docs Directory**: - - The generated C++ documentation is copied from `stochtree-repo/docs/cpp/build/html/` to `docs/c-documentation/` in the root of the `documentation` repository. This ensures that the C++ documentation is located within the `docs/` directory alongside the Python and R documentation. + - The generated C++ documentation is copied from `stochtree-repo/docs/cpp/build/html/` to `docs/cpp-documentation/` in the root of the `documentation` repository. This ensures that the C++ documentation is located within the `docs/` directory alongside the Python and R documentation. 11. **Commits and Pushes the Updated Documentation**: - **Branch Creation**: The workflow checks if there are any changes to the documentation. If there are, it creates a new temporary branch (e.g., `docs-temp-11060215628`). diff --git a/dev/README.md b/dev/README.md index 064d43c09..c3823084f 100644 --- a/dev/README.md +++ b/dev/README.md @@ -46,80 +46,24 @@ git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree-repo rm -rf stochtree-repo ``` -Update the Doxygen file in the `cpp_docs` subfolder (*note that the default `sed` utility available on MacOS requires an argument to the `-i` flag, unlike on many linux systems. See [here](https://stackoverflow.com/questions/28592043/what-is-wrong-with-my-string-substitution-using-sed-on-mac-os-x) for more detail*) - -```{bash} -sed -i '' 's|^INPUT *=.*|INPUT = stochtree-repo/include/stochtree|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^RECURSIVE *= NO|RECURSIVE = YES|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_XML *= NO|GENERATE_XML = YES|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^XML_OUTPUT *= xml|XML_OUTPUT = doxygen_xml|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = doxygen_output|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^PROJECT_NAME *=.*|PROJECT_NAME = "stochtree"|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_HTML *= YES|GENERATE_HTML = NO|' stochtree-repo/cpp_docs/Doxyfile -``` - -Now, build the C++ docs, into the `doxygen_output/doxygen_xml` subfolder of the `documentation` repo +Build the sphinx documentation as markdown output ```{bash} +python -m venv cpp_venv +source cpp_venv/bin/activate +pip install --upgrade pip +pip install -r stochtree-repo/cpp_docs/requirements.txt +pip install sphinx-markdown-builder doxygen stochtree-repo/cpp_docs/Doxyfile +sphinx-build -b markdown stochtree-repo/cpp_docs/ stochtree-repo/cpp_docs/_build/markdown/ ``` -Convert the XML doxygen output to markdown using `moxygen` - -```{bash} -mkdir -p docs/c-documentation-markdown -moxygen doxygen_output/doxygen_xml -o docs/c-documentation-markdown/combined.md -``` - -This generates a single "combined" markdown file, which can then be split into separate pages via javascript - -```{bash} -cat > splitMarkdown.js << 'END_SCRIPT' -const fs = require('fs'); -const path = require('path'); - -const inputFile = 'docs/c-documentation-markdown/combined.md'; -const outputDir = 'docs/c-documentation-markdown'; - -if (!fs.existsSync(inputFile)) { -console.error(`Input file ${inputFile} does not exist.`); -process.exit(1); -} - -const data = fs.readFileSync(inputFile, 'utf8'); - -// Split the file on level 1 headers (e.g., "# ClassName") -const sections = data.split(/^# /gm).filter(section => section.trim() !== ''); - -sections.forEach(section => { -// Get the title of the section -const lines = section.split('\n'); -const title = lines[0].trim(); -const content = lines.slice(1).join('\n'); - -// Sanitize the title to create a filename -const filename = title.replace(/[<>:"\/\\|?*]/g, '').replace(/\s+/g, '_') + '.md'; -const filepath = path.join(outputDir, filename); - -// Write the section to a file with front matter -const frontMatter = `---\n` + - `title: ${title}\n` + - `---\n\n`; -fs.writeFileSync(filepath, frontMatter + `# ${title}\n${content}`, 'utf8'); -}); -END_SCRIPT -``` - -Execute this script using [node](https://nodejs.org/) - -```{bash} -node splitMarkdown.js -``` - -Remove `combined.md` +Copy results into the `docs/` folder ```{bash} -rm docs/c-documentation-markdown/combined.md +mkdir -p docs/cpp-documentation-markdown +rm -rf docs/cpp-documentation-markdown/* +cp -r stochtree-repo/cpp_docs/_build/markdown/* docs/cpp-documentation-markdown/ ``` ### Building the Python docs @@ -127,8 +71,8 @@ rm docs/c-documentation-markdown/combined.md Install dependencies in a local virtual environment ```{bash} -python -m venv venv -source venv/bin/activate +python -m venv python_venv +source python_venv/bin/activate cd stochtree-repo pip install --upgrade pip pip install -r python_docs/requirements.txt diff --git a/docs/c-documentation-markdown/Summary.md b/docs/c-documentation-markdown/Summary.md deleted file mode 100644 index 97d8fd6d3..000000000 --- a/docs/c-documentation-markdown/Summary.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Summary ---- - -# Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`namespace `[`StochTree`](#namespaceStochTree) | Copyright (c) 2024 by stochtree authors -`class `[`ForestContainerCpp`](#classForestContainerCpp) | -`class `[`ForestDatasetCpp`](#classForestDatasetCpp) | -`class `[`ForestSamplerCpp`](#classForestSamplerCpp) | -`class `[`GlobalVarianceModelCpp`](#classGlobalVarianceModelCpp) | -`class `[`JsonCpp`](#classJsonCpp) | -`class `[`LeafVarianceModelCpp`](#classLeafVarianceModelCpp) | -`class `[`ResidualCpp`](#classResidualCpp) | -`class `[`RngCpp`](#classRngCpp) | - diff --git a/docs/c-documentation-markdown/class_`ForestContainerCpp`.md b/docs/c-documentation-markdown/class_`ForestContainerCpp`.md deleted file mode 100644 index 98f476750..000000000 --- a/docs/c-documentation-markdown/class_`ForestContainerCpp`.md +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: class `ForestContainerCpp` ---- - -# class `ForestContainerCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`ForestContainerCpp`](#classForestContainerCpp_1a0fef3ffe1672ca77891544f3d0716e6b)`(int num_trees,int output_dimension,bool is_leaf_constant,bool is_exponentiated)` | -`public inline `[`~ForestContainerCpp`](#classForestContainerCpp_1aaf6e33c00c6b6c4838079ea3cbf53674)`()` | -`public inline int `[`OutputDimension`](#classForestContainerCpp_1a13c991845a804a8f39b7b05d93a88dc0)`()` | -`public inline int `[`NumSamples`](#classForestContainerCpp_1a79d220afd860e3697fb20b4ba0ed6e6e)`()` | -`public inline int `[`NumLeavesForest`](#classForestContainerCpp_1aaef9c9d9c0463a71571308981a2929ad)`(int forest_num)` | -`public inline double `[`SumLeafSquared`](#classForestContainerCpp_1a7d625fdf2b189349aa9d5c0c86606965)`(int forest_num)` | -`public inline py::array_t< double > `[`Predict`](#classForestContainerCpp_1a2db2e6b954f08a94cd1eb6119f2ee768)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | -`public inline py::array_t< double > `[`PredictRaw`](#classForestContainerCpp_1a7571c4ffe69a319360e485b697a5ba12)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | -`public inline py::array_t< double > `[`PredictRawSingleForest`](#classForestContainerCpp_1abb59e21562dd76e6eaf467f443ca8eb9)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num)` | -`public inline py::array_t< double > `[`PredictRawSingleTree`](#classForestContainerCpp_1ae633f36e5088076fc625bc8e06a7b211)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num,int tree_num)` | -`public inline void `[`SetRootValue`](#classForestContainerCpp_1a1d85e6b963eeb042dcdea70c47f45d3f)`(int forest_num,double leaf_value)` | -`public inline void `[`SetRootVector`](#classForestContainerCpp_1a492b80b03c79bfa94d59c7de11303abd)`(int forest_num,py::array_t< double > & leaf_vector,int leaf_size)` | -`public inline void `[`InitializeRootValue`](#classForestContainerCpp_1a4715522f9b93610451cb792aee74c15f)`(double val)` | -`public inline void `[`InitializeRootVector`](#classForestContainerCpp_1a650ae9edb6785705969fe8d9266cd588)`(std::vector< double > vals)` | -`public void `[`AdjustResidual`](#classForestContainerCpp_1a1ef71ac20bff3ae308a8daff78da06f8)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestSamplerCpp`](#classForestSamplerCpp)` & sampler,bool requires_basis,int forest_num,bool add)` | -`public inline void `[`SaveToJsonFile`](#classForestContainerCpp_1a30841ef6d674959e412aec7d677f58e8)`(std::string json_filename)` | -`public inline void `[`LoadFromJsonFile`](#classForestContainerCpp_1a1169f0e3c9f2f33fca6da0fd61820c0f)`(std::string json_filename)` | -`public void `[`LoadFromJson`](#classForestContainerCpp_1adce3d8dd9ca9866e06cc7cefb11ac010)`(`[`JsonCpp`](#classJsonCpp)` & json,std::string forest_label)` | -`public inline std::string `[`DumpJsonString`](#classForestContainerCpp_1a78b5cee874333c52d7b0ca5d9af4da31)`()` | -`public inline void `[`LoadFromJsonString`](#classForestContainerCpp_1a8325daf220502cf275c2e83681d40ed9)`(std::string & json_string)` | -`public inline StochTree::ForestContainer * `[`GetContainer`](#classForestContainerCpp_1a56e7247fcef3f4ff370f7ab50e092d0a)`()` | -`public inline StochTree::TreeEnsemble * `[`GetForest`](#classForestContainerCpp_1afca04cd37b2973e41f5bbf529e61946c)`(int i)` | -`public inline nlohmann::json `[`ToJson`](#classForestContainerCpp_1aedc3756fab2320ff704e507ed4229766)`()` | -`public inline void `[`AddSampleValue`](#classForestContainerCpp_1ab9ef774f9d03be1b6027e77c9a87801f)`(double leaf_value)` | -`public inline void `[`AddSampleVector`](#classForestContainerCpp_1a614daa8ea9cbee47b6f5582874bd32bb)`(py::array_t< double > leaf_vector)` | -`public inline void `[`AddNumericSplitVector`](#classForestContainerCpp_1ae5c5e5444d988e72d097c965b876324c)`(int forest_num,int tree_num,int leaf_num,int feature_num,double split_threshold,py::array_t< double > left_leaf_vector,py::array_t< double > right_leaf_vector)` | -`public inline void `[`AddNumericSplitValue`](#classForestContainerCpp_1ab898857480955a868d0d356f2e534ae8)`(int forest_num,int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` | -`public inline py::array_t< int > `[`GetTreeLeaves`](#classForestContainerCpp_1a146de93a75e64e18ce721c145f684207)`(int forest_num,int tree_num)` | -`public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestContainerCpp_1a8377a17e8b4f27523775130849f92d8c)`(int forest_num,int tree_num,int num_features)` | -`public inline py::array_t< int > `[`GetForestSplitCounts`](#classForestContainerCpp_1a2d0a8067ddfb2d3b703307725205f002)`(int forest_num,int num_features)` | -`public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestContainerCpp_1a3b2bff3c52a603480ffe77b1671eae61)`(int num_features)` | -`public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestContainerCpp_1a64428c5deaaf26733a8d94cd7bd5fb71)`(int num_features)` | -`public inline bool `[`IsLeafNode`](#classForestContainerCpp_1a37e496b5c0caa7a0420e073607d32fa0)`(int forest_id,int tree_id,int node_id)` | -`public inline bool `[`IsNumericSplitNode`](#classForestContainerCpp_1a86154e0a0f794637a748d62cdd3b662a)`(int forest_id,int tree_id,int node_id)` | -`public inline bool `[`IsCategoricalSplitNode`](#classForestContainerCpp_1a0f542f3cca9b87a72dde44910db5d27f)`(int forest_id,int tree_id,int node_id)` | -`public inline int `[`ParentNode`](#classForestContainerCpp_1a4064dfbf5232aee6fd80c8b86774eee1)`(int forest_id,int tree_id,int node_id)` | -`public inline int `[`LeftChildNode`](#classForestContainerCpp_1a8d529a702c1ca97266bb72f05eda37be)`(int forest_id,int tree_id,int node_id)` | -`public inline int `[`RightChildNode`](#classForestContainerCpp_1ac7950e8703636f8bb235fe75dd960265)`(int forest_id,int tree_id,int node_id)` | -`public inline int `[`SplitIndex`](#classForestContainerCpp_1a7dd8e6e0282043920a503581e9b43cd3)`(int forest_id,int tree_id,int node_id)` | -`public inline int `[`NodeDepth`](#classForestContainerCpp_1ae73b1c0fdc9ab3a3c30c31c2e4b7cb9a)`(int forest_id,int tree_id,int node_id)` | -`public inline double `[`SplitThreshold`](#classForestContainerCpp_1a4bac1c1cdd1a56bdfff32cb0ff576142)`(int forest_id,int tree_id,int node_id)` | -`public inline py::array_t< int > `[`SplitCategories`](#classForestContainerCpp_1a62d0aadc6af7218e808c825fff561661)`(int forest_id,int tree_id,int node_id)` | -`public inline py::array_t< double > `[`NodeLeafValues`](#classForestContainerCpp_1a27def7ae5ea2272274518280882f6b87)`(int forest_id,int tree_id,int node_id)` | -`public inline int `[`NumNodes`](#classForestContainerCpp_1ad456f4a52d2cef77cf72939e992ebd3b)`(int forest_id,int tree_id)` | -`public inline int `[`NumLeaves`](#classForestContainerCpp_1a5e567f2b6c4291bc061358616c259de0)`(int forest_id,int tree_id)` | -`public inline int `[`NumLeafParents`](#classForestContainerCpp_1a1bc9fb5b355a50d8439dd5a46a7da17e)`(int forest_id,int tree_id)` | -`public inline int `[`NumSplitNodes`](#classForestContainerCpp_1a4a97cc11868360dd617236319dec49f8)`(int forest_id,int tree_id)` | -`public inline py::array_t< int > `[`Nodes`](#classForestContainerCpp_1a95b373bbda33767a1c939587571d9b91)`(int forest_id,int tree_id)` | -`public inline py::array_t< int > `[`Leaves`](#classForestContainerCpp_1a496ea57b9cbe444f66c810476e21bf0e)`(int forest_id,int tree_id)` | - -## Members - -#### `public inline `[`ForestContainerCpp`](#classForestContainerCpp_1a0fef3ffe1672ca77891544f3d0716e6b)`(int num_trees,int output_dimension,bool is_leaf_constant,bool is_exponentiated)` - -#### `public inline `[`~ForestContainerCpp`](#classForestContainerCpp_1aaf6e33c00c6b6c4838079ea3cbf53674)`()` - -#### `public inline int `[`OutputDimension`](#classForestContainerCpp_1a13c991845a804a8f39b7b05d93a88dc0)`()` - -#### `public inline int `[`NumSamples`](#classForestContainerCpp_1a79d220afd860e3697fb20b4ba0ed6e6e)`()` - -#### `public inline int `[`NumLeavesForest`](#classForestContainerCpp_1aaef9c9d9c0463a71571308981a2929ad)`(int forest_num)` - -#### `public inline double `[`SumLeafSquared`](#classForestContainerCpp_1a7d625fdf2b189349aa9d5c0c86606965)`(int forest_num)` - -#### `public inline py::array_t< double > `[`Predict`](#classForestContainerCpp_1a2db2e6b954f08a94cd1eb6119f2ee768)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` - -#### `public inline py::array_t< double > `[`PredictRaw`](#classForestContainerCpp_1a7571c4ffe69a319360e485b697a5ba12)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` - -#### `public inline py::array_t< double > `[`PredictRawSingleForest`](#classForestContainerCpp_1abb59e21562dd76e6eaf467f443ca8eb9)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num)` - -#### `public inline py::array_t< double > `[`PredictRawSingleTree`](#classForestContainerCpp_1ae633f36e5088076fc625bc8e06a7b211)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,int forest_num,int tree_num)` - -#### `public inline void `[`SetRootValue`](#classForestContainerCpp_1a1d85e6b963eeb042dcdea70c47f45d3f)`(int forest_num,double leaf_value)` - -#### `public inline void `[`SetRootVector`](#classForestContainerCpp_1a492b80b03c79bfa94d59c7de11303abd)`(int forest_num,py::array_t< double > & leaf_vector,int leaf_size)` - -#### `public inline void `[`InitializeRootValue`](#classForestContainerCpp_1a4715522f9b93610451cb792aee74c15f)`(double val)` - -#### `public inline void `[`InitializeRootVector`](#classForestContainerCpp_1a650ae9edb6785705969fe8d9266cd588)`(std::vector< double > vals)` - -#### `public void `[`AdjustResidual`](#classForestContainerCpp_1a1ef71ac20bff3ae308a8daff78da06f8)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestSamplerCpp`](#classForestSamplerCpp)` & sampler,bool requires_basis,int forest_num,bool add)` - -#### `public inline void `[`SaveToJsonFile`](#classForestContainerCpp_1a30841ef6d674959e412aec7d677f58e8)`(std::string json_filename)` - -#### `public inline void `[`LoadFromJsonFile`](#classForestContainerCpp_1a1169f0e3c9f2f33fca6da0fd61820c0f)`(std::string json_filename)` - -#### `public void `[`LoadFromJson`](#classForestContainerCpp_1adce3d8dd9ca9866e06cc7cefb11ac010)`(`[`JsonCpp`](#classJsonCpp)` & json,std::string forest_label)` - -#### `public inline std::string `[`DumpJsonString`](#classForestContainerCpp_1a78b5cee874333c52d7b0ca5d9af4da31)`()` - -#### `public inline void `[`LoadFromJsonString`](#classForestContainerCpp_1a8325daf220502cf275c2e83681d40ed9)`(std::string & json_string)` - -#### `public inline StochTree::ForestContainer * `[`GetContainer`](#classForestContainerCpp_1a56e7247fcef3f4ff370f7ab50e092d0a)`()` - -#### `public inline StochTree::TreeEnsemble * `[`GetForest`](#classForestContainerCpp_1afca04cd37b2973e41f5bbf529e61946c)`(int i)` - -#### `public inline nlohmann::json `[`ToJson`](#classForestContainerCpp_1aedc3756fab2320ff704e507ed4229766)`()` - -#### `public inline void `[`AddSampleValue`](#classForestContainerCpp_1ab9ef774f9d03be1b6027e77c9a87801f)`(double leaf_value)` - -#### `public inline void `[`AddSampleVector`](#classForestContainerCpp_1a614daa8ea9cbee47b6f5582874bd32bb)`(py::array_t< double > leaf_vector)` - -#### `public inline void `[`AddNumericSplitVector`](#classForestContainerCpp_1ae5c5e5444d988e72d097c965b876324c)`(int forest_num,int tree_num,int leaf_num,int feature_num,double split_threshold,py::array_t< double > left_leaf_vector,py::array_t< double > right_leaf_vector)` - -#### `public inline void `[`AddNumericSplitValue`](#classForestContainerCpp_1ab898857480955a868d0d356f2e534ae8)`(int forest_num,int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` - -#### `public inline py::array_t< int > `[`GetTreeLeaves`](#classForestContainerCpp_1a146de93a75e64e18ce721c145f684207)`(int forest_num,int tree_num)` - -#### `public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestContainerCpp_1a8377a17e8b4f27523775130849f92d8c)`(int forest_num,int tree_num,int num_features)` - -#### `public inline py::array_t< int > `[`GetForestSplitCounts`](#classForestContainerCpp_1a2d0a8067ddfb2d3b703307725205f002)`(int forest_num,int num_features)` - -#### `public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestContainerCpp_1a3b2bff3c52a603480ffe77b1671eae61)`(int num_features)` - -#### `public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestContainerCpp_1a64428c5deaaf26733a8d94cd7bd5fb71)`(int num_features)` - -#### `public inline bool `[`IsLeafNode`](#classForestContainerCpp_1a37e496b5c0caa7a0420e073607d32fa0)`(int forest_id,int tree_id,int node_id)` - -#### `public inline bool `[`IsNumericSplitNode`](#classForestContainerCpp_1a86154e0a0f794637a748d62cdd3b662a)`(int forest_id,int tree_id,int node_id)` - -#### `public inline bool `[`IsCategoricalSplitNode`](#classForestContainerCpp_1a0f542f3cca9b87a72dde44910db5d27f)`(int forest_id,int tree_id,int node_id)` - -#### `public inline int `[`ParentNode`](#classForestContainerCpp_1a4064dfbf5232aee6fd80c8b86774eee1)`(int forest_id,int tree_id,int node_id)` - -#### `public inline int `[`LeftChildNode`](#classForestContainerCpp_1a8d529a702c1ca97266bb72f05eda37be)`(int forest_id,int tree_id,int node_id)` - -#### `public inline int `[`RightChildNode`](#classForestContainerCpp_1ac7950e8703636f8bb235fe75dd960265)`(int forest_id,int tree_id,int node_id)` - -#### `public inline int `[`SplitIndex`](#classForestContainerCpp_1a7dd8e6e0282043920a503581e9b43cd3)`(int forest_id,int tree_id,int node_id)` - -#### `public inline int `[`NodeDepth`](#classForestContainerCpp_1ae73b1c0fdc9ab3a3c30c31c2e4b7cb9a)`(int forest_id,int tree_id,int node_id)` - -#### `public inline double `[`SplitThreshold`](#classForestContainerCpp_1a4bac1c1cdd1a56bdfff32cb0ff576142)`(int forest_id,int tree_id,int node_id)` - -#### `public inline py::array_t< int > `[`SplitCategories`](#classForestContainerCpp_1a62d0aadc6af7218e808c825fff561661)`(int forest_id,int tree_id,int node_id)` - -#### `public inline py::array_t< double > `[`NodeLeafValues`](#classForestContainerCpp_1a27def7ae5ea2272274518280882f6b87)`(int forest_id,int tree_id,int node_id)` - -#### `public inline int `[`NumNodes`](#classForestContainerCpp_1ad456f4a52d2cef77cf72939e992ebd3b)`(int forest_id,int tree_id)` - -#### `public inline int `[`NumLeaves`](#classForestContainerCpp_1a5e567f2b6c4291bc061358616c259de0)`(int forest_id,int tree_id)` - -#### `public inline int `[`NumLeafParents`](#classForestContainerCpp_1a1bc9fb5b355a50d8439dd5a46a7da17e)`(int forest_id,int tree_id)` - -#### `public inline int `[`NumSplitNodes`](#classForestContainerCpp_1a4a97cc11868360dd617236319dec49f8)`(int forest_id,int tree_id)` - -#### `public inline py::array_t< int > `[`Nodes`](#classForestContainerCpp_1a95b373bbda33767a1c939587571d9b91)`(int forest_id,int tree_id)` - -#### `public inline py::array_t< int > `[`Leaves`](#classForestContainerCpp_1a496ea57b9cbe444f66c810476e21bf0e)`(int forest_id,int tree_id)` - diff --git a/docs/c-documentation-markdown/class_`ForestDatasetCpp`.md b/docs/c-documentation-markdown/class_`ForestDatasetCpp`.md deleted file mode 100644 index 589e8946c..000000000 --- a/docs/c-documentation-markdown/class_`ForestDatasetCpp`.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: class `ForestDatasetCpp` ---- - -# class `ForestDatasetCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`ForestDatasetCpp`](#classForestDatasetCpp_1a6f80db6df23042846f8b20f91397e73f)`()` | -`public inline `[`~ForestDatasetCpp`](#classForestDatasetCpp_1a4be2a60c8fe950bb9e23b9d6f6e945f9)`()` | -`public inline void `[`AddCovariates`](#classForestDatasetCpp_1ad8924778d19e4d780b3762e9af1878fe)`(py::array_t< double > covariate_matrix,data_size_t num_row,int num_col,bool row_major)` | -`public inline void `[`AddBasis`](#classForestDatasetCpp_1a22439774d7add849768680a0dfdc03d7)`(py::array_t< double > basis_matrix,data_size_t num_row,int num_col,bool row_major)` | -`public inline void `[`UpdateBasis`](#classForestDatasetCpp_1a41aa7a00787f8ddc1897f656884c3582)`(py::array_t< double > basis_matrix,data_size_t num_row,int num_col,bool row_major)` | -`public inline void `[`AddVarianceWeights`](#classForestDatasetCpp_1ac8d722192ac8d8b36434deb2892d5db2)`(py::array_t< double > weight_vector,data_size_t num_row)` | -`public inline data_size_t `[`NumRows`](#classForestDatasetCpp_1a8b11609225839609d6bcbc05e8e5a81e)`()` | -`public inline StochTree::ForestDataset * `[`GetDataset`](#classForestDatasetCpp_1a931778b318957e9d7da00a6d4710132b)`()` | - -## Members - -#### `public inline `[`ForestDatasetCpp`](#classForestDatasetCpp_1a6f80db6df23042846f8b20f91397e73f)`()` - -#### `public inline `[`~ForestDatasetCpp`](#classForestDatasetCpp_1a4be2a60c8fe950bb9e23b9d6f6e945f9)`()` - -#### `public inline void `[`AddCovariates`](#classForestDatasetCpp_1ad8924778d19e4d780b3762e9af1878fe)`(py::array_t< double > covariate_matrix,data_size_t num_row,int num_col,bool row_major)` - -#### `public inline void `[`AddBasis`](#classForestDatasetCpp_1a22439774d7add849768680a0dfdc03d7)`(py::array_t< double > basis_matrix,data_size_t num_row,int num_col,bool row_major)` - -#### `public inline void `[`UpdateBasis`](#classForestDatasetCpp_1a41aa7a00787f8ddc1897f656884c3582)`(py::array_t< double > basis_matrix,data_size_t num_row,int num_col,bool row_major)` - -#### `public inline void `[`AddVarianceWeights`](#classForestDatasetCpp_1ac8d722192ac8d8b36434deb2892d5db2)`(py::array_t< double > weight_vector,data_size_t num_row)` - -#### `public inline data_size_t `[`NumRows`](#classForestDatasetCpp_1a8b11609225839609d6bcbc05e8e5a81e)`()` - -#### `public inline StochTree::ForestDataset * `[`GetDataset`](#classForestDatasetCpp_1a931778b318957e9d7da00a6d4710132b)`()` - diff --git a/docs/c-documentation-markdown/class_`ForestSamplerCpp`.md b/docs/c-documentation-markdown/class_`ForestSamplerCpp`.md deleted file mode 100644 index ab1900593..000000000 --- a/docs/c-documentation-markdown/class_`ForestSamplerCpp`.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: class `ForestSamplerCpp` ---- - -# class `ForestSamplerCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`ForestSamplerCpp`](#classForestSamplerCpp_1a716e2183d9ee5577e19e33b7b6221d93)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,py::array_t< int > feature_types,int num_trees,data_size_t num_obs,double alpha,double beta,int min_samples_leaf,int max_depth)` | -`public inline `[`~ForestSamplerCpp`](#classForestSamplerCpp_1a6ebd4b2b5b43fc2efa43bcf67fe611e3)`()` | -`public inline StochTree::ForestTracker * `[`GetTracker`](#classForestSamplerCpp_1ac01993c23e40d2519a2cd554982c0c03)`()` | -`public inline void `[`SampleOneIteration`](#classForestSamplerCpp_1a897b657f4df5049c1839e1b729d01b05)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`RngCpp`](#classRngCpp)` & rng,py::array_t< int > feature_types,int cutpoint_grid_size,py::array_t< double > leaf_model_scale_input,py::array_t< double > variable_weights,double a_forest,double b_forest,double global_variance,int leaf_model_int,bool gfr,bool pre_initialized)` | -`public inline void `[`InitializeForestModel`](#classForestSamplerCpp_1ab04639d7daaadd32f3ba71aba1d7cbed)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,int leaf_model_int,py::array_t< double > initial_values)` | -`public inline void `[`PropagateBasisUpdate`](#classForestSamplerCpp_1aac739a6f76c718a65e9359565da9be1b)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,int forest_num)` | -`public inline void `[`PropagateResidualUpdate`](#classForestSamplerCpp_1af17503801ae8a23510d7ed33ec663958)`(`[`ResidualCpp`](#classResidualCpp)` & residual)` | - -## Members - -#### `public inline `[`ForestSamplerCpp`](#classForestSamplerCpp_1a716e2183d9ee5577e19e33b7b6221d93)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,py::array_t< int > feature_types,int num_trees,data_size_t num_obs,double alpha,double beta,int min_samples_leaf,int max_depth)` - -#### `public inline `[`~ForestSamplerCpp`](#classForestSamplerCpp_1a6ebd4b2b5b43fc2efa43bcf67fe611e3)`()` - -#### `public inline StochTree::ForestTracker * `[`GetTracker`](#classForestSamplerCpp_1ac01993c23e40d2519a2cd554982c0c03)`()` - -#### `public inline void `[`SampleOneIteration`](#classForestSamplerCpp_1a897b657f4df5049c1839e1b729d01b05)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`RngCpp`](#classRngCpp)` & rng,py::array_t< int > feature_types,int cutpoint_grid_size,py::array_t< double > leaf_model_scale_input,py::array_t< double > variable_weights,double a_forest,double b_forest,double global_variance,int leaf_model_int,bool gfr,bool pre_initialized)` - -#### `public inline void `[`InitializeForestModel`](#classForestSamplerCpp_1ab04639d7daaadd32f3ba71aba1d7cbed)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,int leaf_model_int,py::array_t< double > initial_values)` - -#### `public inline void `[`PropagateBasisUpdate`](#classForestSamplerCpp_1aac739a6f76c718a65e9359565da9be1b)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,int forest_num)` - -#### `public inline void `[`PropagateResidualUpdate`](#classForestSamplerCpp_1af17503801ae8a23510d7ed33ec663958)`(`[`ResidualCpp`](#classResidualCpp)` & residual)` - diff --git a/docs/c-documentation-markdown/class_`GlobalVarianceModelCpp`.md b/docs/c-documentation-markdown/class_`GlobalVarianceModelCpp`.md deleted file mode 100644 index 8775be2dd..000000000 --- a/docs/c-documentation-markdown/class_`GlobalVarianceModelCpp`.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: class `GlobalVarianceModelCpp` ---- - -# class `GlobalVarianceModelCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`GlobalVarianceModelCpp`](#classGlobalVarianceModelCpp_1a5b8f8daf4c15b2c533f399e61cccab08)`()` | -`public inline `[`~GlobalVarianceModelCpp`](#classGlobalVarianceModelCpp_1a96886587c2c8b2d4cd9d8e2f5177ab83)`()` | -`public inline double `[`SampleOneIteration`](#classGlobalVarianceModelCpp_1a9a867b460dd2a3291d392c3a61ad524c)`(`[`ResidualCpp`](#classResidualCpp)` & residual,`[`RngCpp`](#classRngCpp)` & rng,double a,double b)` | - -## Members - -#### `public inline `[`GlobalVarianceModelCpp`](#classGlobalVarianceModelCpp_1a5b8f8daf4c15b2c533f399e61cccab08)`()` - -#### `public inline `[`~GlobalVarianceModelCpp`](#classGlobalVarianceModelCpp_1a96886587c2c8b2d4cd9d8e2f5177ab83)`()` - -#### `public inline double `[`SampleOneIteration`](#classGlobalVarianceModelCpp_1a9a867b460dd2a3291d392c3a61ad524c)`(`[`ResidualCpp`](#classResidualCpp)` & residual,`[`RngCpp`](#classRngCpp)` & rng,double a,double b)` - diff --git a/docs/c-documentation-markdown/class_`JsonCpp`.md b/docs/c-documentation-markdown/class_`JsonCpp`.md deleted file mode 100644 index 11d50840f..000000000 --- a/docs/c-documentation-markdown/class_`JsonCpp`.md +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: class `JsonCpp` ---- - -# class `JsonCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`JsonCpp`](#classJsonCpp_1a6752360f1c4ee58bf2ce97c74c913358)`()` | -`public inline `[`~JsonCpp`](#classJsonCpp_1a9a2addd32da5664837830db3d55a6cd8)`()` | -`public inline void `[`LoadFile`](#classJsonCpp_1ab74bad931397c3c8fea780c1d592f54a)`(std::string filename)` | -`public inline void `[`SaveFile`](#classJsonCpp_1adaca7db574f603f43f514541ec93c466)`(std::string filename)` | -`public inline void `[`LoadFromString`](#classJsonCpp_1ad47ae83c8a7c0eaa8c545d7b7e13d06d)`(std::string & json_string)` | -`public inline std::string `[`DumpJson`](#classJsonCpp_1a6a7d2af034373a6a04d290410ad8d324)`()` | -`public inline std::string `[`AddForest`](#classJsonCpp_1a2d3e0410f56f10a4bfc4b4371b5fca80)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples)` | -`public inline void `[`AddDouble`](#classJsonCpp_1a1333ac93e1734bf36880302aed0d3c3e)`(std::string field_name,double field_value)` | -`public inline void `[`AddDoubleSubfolder`](#classJsonCpp_1ae01fb3ea5ec4488a3bd123f32b2f80e9)`(std::string subfolder_name,std::string field_name,double field_value)` | -`public inline void `[`AddBool`](#classJsonCpp_1a4450825f6ea4d51542ae09a37dafc474)`(std::string field_name,bool field_value)` | -`public inline void `[`AddBoolSubfolder`](#classJsonCpp_1a7ec65310666c485b57ca81442674fe52)`(std::string subfolder_name,std::string field_name,bool field_value)` | -`public inline void `[`AddString`](#classJsonCpp_1a0ffef39433c6218865dabda8195bcc5a)`(std::string field_name,std::string field_value)` | -`public inline void `[`AddStringSubfolder`](#classJsonCpp_1a96d2033a5c73a82a35a13f45f0f5bdc1)`(std::string subfolder_name,std::string field_name,std::string field_value)` | -`public inline void `[`AddDoubleVector`](#classJsonCpp_1a9ccf9ffc1405fe11d92742db1decbe41)`(std::string field_name,py::array_t< double > field_vector)` | -`public inline void `[`AddDoubleVectorSubfolder`](#classJsonCpp_1acfba76184cdb603e53d7f88611d4bc90)`(std::string subfolder_name,std::string field_name,py::array_t< double > field_vector)` | -`public inline void `[`AddStringVector`](#classJsonCpp_1a8f43c0c42f81d018c4467e2453a0a3bc)`(std::string field_name,std::vector< std::string > & field_vector)` | -`public inline void `[`AddStringVectorSubfolder`](#classJsonCpp_1adef46c168faa1580336dc4bf359448ed)`(std::string subfolder_name,std::string field_name,std::vector< std::string > & field_vector)` | -`public inline bool `[`ContainsField`](#classJsonCpp_1a098c6e90264117e48d6aff6f651ce64c)`(std::string field_name)` | -`public inline bool `[`ContainsFieldSubfolder`](#classJsonCpp_1a388825667d9b67428757b3660e4c4fbe)`(std::string subfolder_name,std::string field_name)` | -`public inline double `[`ExtractDouble`](#classJsonCpp_1a52e4cbe7868575dff061a92703872046)`(std::string field_name)` | -`public inline double `[`ExtractDoubleSubfolder`](#classJsonCpp_1a49eb6123e3d647effd3aeaf230597369)`(std::string subfolder_name,std::string field_name)` | -`public inline bool `[`ExtractBool`](#classJsonCpp_1a009fa243b45e44532970da15459c2fce)`(std::string field_name)` | -`public inline bool `[`ExtractBoolSubfolder`](#classJsonCpp_1ae040b066fc7c7ae34cc4147b9a60175e)`(std::string subfolder_name,std::string field_name)` | -`public inline std::string `[`ExtractString`](#classJsonCpp_1ab0b6b218f814bfa9b34e93d5b868386a)`(std::string field_name)` | -`public inline std::string `[`ExtractStringSubfolder`](#classJsonCpp_1a8654f6e9a42841a88a6309584306ebd2)`(std::string subfolder_name,std::string field_name)` | -`public inline py::array_t< double > `[`ExtractDoubleVector`](#classJsonCpp_1aa1dae9756f87ce20be18ddf40444740e)`(std::string field_name)` | -`public inline py::array_t< double > `[`ExtractDoubleVectorSubfolder`](#classJsonCpp_1acb5dbc28a3c8eafad03d9ea7b8416eb6)`(std::string subfolder_name,std::string field_name)` | -`public inline std::vector< std::string > `[`ExtractStringVector`](#classJsonCpp_1a1e643cadad2cca2d10b6a5fec165320b)`(std::string field_name)` | -`public inline std::vector< std::string > `[`ExtractStringVectorSubfolder`](#classJsonCpp_1a730ce7e046e63bdc93214bb5c8aee749)`(std::string subfolder_name,std::string field_name)` | -`public inline nlohmann::json `[`SubsetJsonForest`](#classJsonCpp_1a104498c45cc52bebae67b35e73d2c8d1)`(std::string forest_label)` | - -## Members - -#### `public inline `[`JsonCpp`](#classJsonCpp_1a6752360f1c4ee58bf2ce97c74c913358)`()` - -#### `public inline `[`~JsonCpp`](#classJsonCpp_1a9a2addd32da5664837830db3d55a6cd8)`()` - -#### `public inline void `[`LoadFile`](#classJsonCpp_1ab74bad931397c3c8fea780c1d592f54a)`(std::string filename)` - -#### `public inline void `[`SaveFile`](#classJsonCpp_1adaca7db574f603f43f514541ec93c466)`(std::string filename)` - -#### `public inline void `[`LoadFromString`](#classJsonCpp_1ad47ae83c8a7c0eaa8c545d7b7e13d06d)`(std::string & json_string)` - -#### `public inline std::string `[`DumpJson`](#classJsonCpp_1a6a7d2af034373a6a04d290410ad8d324)`()` - -#### `public inline std::string `[`AddForest`](#classJsonCpp_1a2d3e0410f56f10a4bfc4b4371b5fca80)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples)` - -#### `public inline void `[`AddDouble`](#classJsonCpp_1a1333ac93e1734bf36880302aed0d3c3e)`(std::string field_name,double field_value)` - -#### `public inline void `[`AddDoubleSubfolder`](#classJsonCpp_1ae01fb3ea5ec4488a3bd123f32b2f80e9)`(std::string subfolder_name,std::string field_name,double field_value)` - -#### `public inline void `[`AddBool`](#classJsonCpp_1a4450825f6ea4d51542ae09a37dafc474)`(std::string field_name,bool field_value)` - -#### `public inline void `[`AddBoolSubfolder`](#classJsonCpp_1a7ec65310666c485b57ca81442674fe52)`(std::string subfolder_name,std::string field_name,bool field_value)` - -#### `public inline void `[`AddString`](#classJsonCpp_1a0ffef39433c6218865dabda8195bcc5a)`(std::string field_name,std::string field_value)` - -#### `public inline void `[`AddStringSubfolder`](#classJsonCpp_1a96d2033a5c73a82a35a13f45f0f5bdc1)`(std::string subfolder_name,std::string field_name,std::string field_value)` - -#### `public inline void `[`AddDoubleVector`](#classJsonCpp_1a9ccf9ffc1405fe11d92742db1decbe41)`(std::string field_name,py::array_t< double > field_vector)` - -#### `public inline void `[`AddDoubleVectorSubfolder`](#classJsonCpp_1acfba76184cdb603e53d7f88611d4bc90)`(std::string subfolder_name,std::string field_name,py::array_t< double > field_vector)` - -#### `public inline void `[`AddStringVector`](#classJsonCpp_1a8f43c0c42f81d018c4467e2453a0a3bc)`(std::string field_name,std::vector< std::string > & field_vector)` - -#### `public inline void `[`AddStringVectorSubfolder`](#classJsonCpp_1adef46c168faa1580336dc4bf359448ed)`(std::string subfolder_name,std::string field_name,std::vector< std::string > & field_vector)` - -#### `public inline bool `[`ContainsField`](#classJsonCpp_1a098c6e90264117e48d6aff6f651ce64c)`(std::string field_name)` - -#### `public inline bool `[`ContainsFieldSubfolder`](#classJsonCpp_1a388825667d9b67428757b3660e4c4fbe)`(std::string subfolder_name,std::string field_name)` - -#### `public inline double `[`ExtractDouble`](#classJsonCpp_1a52e4cbe7868575dff061a92703872046)`(std::string field_name)` - -#### `public inline double `[`ExtractDoubleSubfolder`](#classJsonCpp_1a49eb6123e3d647effd3aeaf230597369)`(std::string subfolder_name,std::string field_name)` - -#### `public inline bool `[`ExtractBool`](#classJsonCpp_1a009fa243b45e44532970da15459c2fce)`(std::string field_name)` - -#### `public inline bool `[`ExtractBoolSubfolder`](#classJsonCpp_1ae040b066fc7c7ae34cc4147b9a60175e)`(std::string subfolder_name,std::string field_name)` - -#### `public inline std::string `[`ExtractString`](#classJsonCpp_1ab0b6b218f814bfa9b34e93d5b868386a)`(std::string field_name)` - -#### `public inline std::string `[`ExtractStringSubfolder`](#classJsonCpp_1a8654f6e9a42841a88a6309584306ebd2)`(std::string subfolder_name,std::string field_name)` - -#### `public inline py::array_t< double > `[`ExtractDoubleVector`](#classJsonCpp_1aa1dae9756f87ce20be18ddf40444740e)`(std::string field_name)` - -#### `public inline py::array_t< double > `[`ExtractDoubleVectorSubfolder`](#classJsonCpp_1acb5dbc28a3c8eafad03d9ea7b8416eb6)`(std::string subfolder_name,std::string field_name)` - -#### `public inline std::vector< std::string > `[`ExtractStringVector`](#classJsonCpp_1a1e643cadad2cca2d10b6a5fec165320b)`(std::string field_name)` - -#### `public inline std::vector< std::string > `[`ExtractStringVectorSubfolder`](#classJsonCpp_1a730ce7e046e63bdc93214bb5c8aee749)`(std::string subfolder_name,std::string field_name)` - -#### `public inline nlohmann::json `[`SubsetJsonForest`](#classJsonCpp_1a104498c45cc52bebae67b35e73d2c8d1)`(std::string forest_label)` - diff --git a/docs/c-documentation-markdown/class_`LeafVarianceModelCpp`.md b/docs/c-documentation-markdown/class_`LeafVarianceModelCpp`.md deleted file mode 100644 index 0c93c6aa4..000000000 --- a/docs/c-documentation-markdown/class_`LeafVarianceModelCpp`.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: class `LeafVarianceModelCpp` ---- - -# class `LeafVarianceModelCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`LeafVarianceModelCpp`](#classLeafVarianceModelCpp_1a264f72a04372c974cba5df5f9211e47c)`()` | -`public inline `[`~LeafVarianceModelCpp`](#classLeafVarianceModelCpp_1aaacec80798b5d3d0de671420700f1256)`()` | -`public inline double `[`SampleOneIteration`](#classLeafVarianceModelCpp_1aec246504233c4504a927edf4af8cb06c)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,`[`RngCpp`](#classRngCpp)` & rng,double a,double b,int sample_num)` | - -## Members - -#### `public inline `[`LeafVarianceModelCpp`](#classLeafVarianceModelCpp_1a264f72a04372c974cba5df5f9211e47c)`()` - -#### `public inline `[`~LeafVarianceModelCpp`](#classLeafVarianceModelCpp_1aaacec80798b5d3d0de671420700f1256)`()` - -#### `public inline double `[`SampleOneIteration`](#classLeafVarianceModelCpp_1aec246504233c4504a927edf4af8cb06c)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_samples,`[`RngCpp`](#classRngCpp)` & rng,double a,double b,int sample_num)` - diff --git a/docs/c-documentation-markdown/class_`ResidualCpp`.md b/docs/c-documentation-markdown/class_`ResidualCpp`.md deleted file mode 100644 index fafe0a9b6..000000000 --- a/docs/c-documentation-markdown/class_`ResidualCpp`.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: class `ResidualCpp` ---- - -# class `ResidualCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`ResidualCpp`](#classResidualCpp_1adb478fa40a537bcb0cc35cd29eb2ed15)`(py::array_t< double > residual_array,data_size_t num_row)` | -`public inline `[`~ResidualCpp`](#classResidualCpp_1aa70f69a386d046c3830a0ef76ff50006)`()` | -`public inline StochTree::ColumnVector * `[`GetData`](#classResidualCpp_1ae02233f2a241829079206242301c2bee)`()` | -`public inline py::array_t< double > `[`GetResidualArray`](#classResidualCpp_1abf5c81dc92851ccd58ea1ee82a43860d)`()` | -`public inline void `[`ReplaceData`](#classResidualCpp_1af7a420603f4a74d951750af1863bef16)`(py::array_t< double > new_vector,data_size_t num_row)` | - -## Members - -#### `public inline `[`ResidualCpp`](#classResidualCpp_1adb478fa40a537bcb0cc35cd29eb2ed15)`(py::array_t< double > residual_array,data_size_t num_row)` - -#### `public inline `[`~ResidualCpp`](#classResidualCpp_1aa70f69a386d046c3830a0ef76ff50006)`()` - -#### `public inline StochTree::ColumnVector * `[`GetData`](#classResidualCpp_1ae02233f2a241829079206242301c2bee)`()` - -#### `public inline py::array_t< double > `[`GetResidualArray`](#classResidualCpp_1abf5c81dc92851ccd58ea1ee82a43860d)`()` - -#### `public inline void `[`ReplaceData`](#classResidualCpp_1af7a420603f4a74d951750af1863bef16)`(py::array_t< double > new_vector,data_size_t num_row)` - diff --git a/docs/c-documentation-markdown/class_`RngCpp`.md b/docs/c-documentation-markdown/class_`RngCpp`.md deleted file mode 100644 index b67e879f9..000000000 --- a/docs/c-documentation-markdown/class_`RngCpp`.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: class `RngCpp` ---- - -# class `RngCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`RngCpp`](#classRngCpp_1a2c038d51ec10cf984abc17e6a91c4163)`(int random_seed)` | -`public inline `[`~RngCpp`](#classRngCpp_1a2595d9b2f18e7ba08733a427fbd7a086)`()` | -`public inline std::mt19937 * `[`GetRng`](#classRngCpp_1af7234752299bcd0df80684c10a7b745d)`()` | - -## Members - -#### `public inline `[`RngCpp`](#classRngCpp_1a2c038d51ec10cf984abc17e6a91c4163)`(int random_seed)` - -#### `public inline `[`~RngCpp`](#classRngCpp_1a2595d9b2f18e7ba08733a427fbd7a086)`()` - -#### `public inline std::mt19937 * `[`GetRng`](#classRngCpp_1af7234752299bcd0df80684c10a7b745d)`()` - -Generated by [Moxygen](https://sourcey.com/moxygen) \ No newline at end of file diff --git a/docs/c-documentation-markdown/namespace_`StochTree`.md b/docs/c-documentation-markdown/namespace_`StochTree`.md deleted file mode 100644 index b77b8c534..000000000 --- a/docs/c-documentation-markdown/namespace_`StochTree`.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: namespace `StochTree` ---- - -# namespace `StochTree` - -Copyright (c) 2024 by stochtree authors - -Copyright (c) 2018 Microsoft Corporation. All rights reserved. Licensed under the MIT License. See LICENSE file in the project root for license information. - -Copyright (c) 2016 Microsoft Corporation. All rights reserved. Licensed under the MIT License. See LICENSE file in the project root for license information. - -Copyright (c) 2024 stochtree authors - -Inspired by the design of the tree in the xgboost and treelite package, both released under the Apache license with the following copyright: Copyright 2015-2023 by XGBoost Contributors Copyright 2017-2021 by [treelite] Contributors - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`enum `[`DataType`](#namespaceStochTree_1aadac066fad287a876d82d215034ddece) | -`public void `[`LoadData`](#namespaceStochTree_1a79b3e91f2279b0faa67b197d9bebe364)`(double * data_ptr,int num_row,int num_col,bool is_row_major,Eigen::MatrixXd & data_matrix)` | -`public void `[`LoadData`](#namespaceStochTree_1a37009d39fc8c804523961c8437794be2)`(double * data_ptr,int num_row,Eigen::VectorXd & data_vector)` | -`public void `[`GetStatistic`](#namespaceStochTree_1adadf702449bc25e53e4c87dd281f6c16)`(const char * str,int * comma_cnt,int * tab_cnt,int * colon_cnt)` | -`public int `[`GetLabelIdxForLibsvm`](#namespaceStochTree_1a441e9253ebe4a33d2269a09464a9adc3)`(const std::string & str,int num_features,int label_idx)` | -`public int `[`GetLabelIdxForTSV`](#namespaceStochTree_1aaab0b5a0c1e3a110b07d583a31ef0204)`(const std::string & str,int num_features,int label_idx)` | -`public int `[`GetLabelIdxForCSV`](#namespaceStochTree_1ae848b1ac95793c76ca4ed0da9b0d0c68)`(const std::string & str,int num_features,int label_idx)` | -`public void `[`GetLine`](#namespaceStochTree_1a42736434dc1da3b939c67f1d18703ae6)`(std::stringstream * ss,std::string * line,const VirtualFileReader * reader,std::vector< char > * buffer,size_t buffer_size)` | -`public std::vector< std::string > `[`ReadKLineFromFile`](#namespaceStochTree_1ad0d56e7e54c33c79beb8b8c6ddd25c5b)`(const char * filename,bool header,int k)` | -`public int `[`GetNumColFromLIBSVMFile`](#namespaceStochTree_1a73eb7b1b4cbc5dc88be3454e5e9fcfbf)`(const char * filename,bool header)` | -`public DataType `[`GetDataType`](#namespaceStochTree_1a13ee5cdb09aa6e4fcab6b5d46653e4e4)`(const char * filename,bool header,const std::vector< std::string > & lines,int * num_col)` | -`public void `[`TreeNodeVectorsToJson`](#namespaceStochTree_1ab98c941b48d9e2d5688e0cc92a53f0cc)`(json & obj,Tree * tree)` | -`public void `[`MultivariateLeafVectorToJson`](#namespaceStochTree_1ac61d620ff7b2527c0f1027277202d06f)`(json & obj,Tree * tree)` | -`public void `[`SplitCategoryVectorToJson`](#namespaceStochTree_1aa0f0949f876dba5db4ace80f8173394a)`(json & obj,Tree * tree)` | -`public void `[`NodeListsToJson`](#namespaceStochTree_1a529f34e95318a5e2786f54a44e18d2af)`(json & obj,Tree * tree)` | -`public void `[`JsonToTreeNodeVectors`](#namespaceStochTree_1afb228b4aafb891869faf5382451e5720)`(const json & tree_json,Tree * tree)` | -`public void `[`JsonToMultivariateLeafVector`](#namespaceStochTree_1a76dca66692932497995dd1cf74ba611e)`(const json & tree_json,Tree * tree)` | -`public void `[`JsonToSplitCategoryVector`](#namespaceStochTree_1a859fbb7cd257d38c26e50f5684a1a7f3)`(const json & tree_json,Tree * tree)` | -`public void `[`JsonToNodeLists`](#namespaceStochTree_1a04d09843b9c34aad2f6a9dbeb3babbfe)`(const json & tree_json,Tree * tree)` | -`struct `[`StochTree::LocalFile`](#structStochTree_1_1LocalFile) | - -## Members - -#### `enum `[`DataType`](#namespaceStochTree_1aadac066fad287a876d82d215034ddece) - - Values | Descriptions ---------------------------------|--------------------------------------------- -INVALID | -CSV | -TSV | -LIBSVM | - -#### `public void `[`LoadData`](#namespaceStochTree_1a79b3e91f2279b0faa67b197d9bebe364)`(double * data_ptr,int num_row,int num_col,bool is_row_major,Eigen::MatrixXd & data_matrix)` - -#### `public void `[`LoadData`](#namespaceStochTree_1a37009d39fc8c804523961c8437794be2)`(double * data_ptr,int num_row,Eigen::VectorXd & data_vector)` - -#### `public void `[`GetStatistic`](#namespaceStochTree_1adadf702449bc25e53e4c87dd281f6c16)`(const char * str,int * comma_cnt,int * tab_cnt,int * colon_cnt)` - -#### `public int `[`GetLabelIdxForLibsvm`](#namespaceStochTree_1a441e9253ebe4a33d2269a09464a9adc3)`(const std::string & str,int num_features,int label_idx)` - -#### `public int `[`GetLabelIdxForTSV`](#namespaceStochTree_1aaab0b5a0c1e3a110b07d583a31ef0204)`(const std::string & str,int num_features,int label_idx)` - -#### `public int `[`GetLabelIdxForCSV`](#namespaceStochTree_1ae848b1ac95793c76ca4ed0da9b0d0c68)`(const std::string & str,int num_features,int label_idx)` - -#### `public void `[`GetLine`](#namespaceStochTree_1a42736434dc1da3b939c67f1d18703ae6)`(std::stringstream * ss,std::string * line,const VirtualFileReader * reader,std::vector< char > * buffer,size_t buffer_size)` - -#### `public std::vector< std::string > `[`ReadKLineFromFile`](#namespaceStochTree_1ad0d56e7e54c33c79beb8b8c6ddd25c5b)`(const char * filename,bool header,int k)` - -#### `public int `[`GetNumColFromLIBSVMFile`](#namespaceStochTree_1a73eb7b1b4cbc5dc88be3454e5e9fcfbf)`(const char * filename,bool header)` - -#### `public DataType `[`GetDataType`](#namespaceStochTree_1a13ee5cdb09aa6e4fcab6b5d46653e4e4)`(const char * filename,bool header,const std::vector< std::string > & lines,int * num_col)` - -#### `public void `[`TreeNodeVectorsToJson`](#namespaceStochTree_1ab98c941b48d9e2d5688e0cc92a53f0cc)`(json & obj,Tree * tree)` - -#### `public void `[`MultivariateLeafVectorToJson`](#namespaceStochTree_1ac61d620ff7b2527c0f1027277202d06f)`(json & obj,Tree * tree)` - -#### `public void `[`SplitCategoryVectorToJson`](#namespaceStochTree_1aa0f0949f876dba5db4ace80f8173394a)`(json & obj,Tree * tree)` - -#### `public void `[`NodeListsToJson`](#namespaceStochTree_1a529f34e95318a5e2786f54a44e18d2af)`(json & obj,Tree * tree)` - -#### `public void `[`JsonToTreeNodeVectors`](#namespaceStochTree_1afb228b4aafb891869faf5382451e5720)`(const json & tree_json,Tree * tree)` - -#### `public void `[`JsonToMultivariateLeafVector`](#namespaceStochTree_1a76dca66692932497995dd1cf74ba611e)`(const json & tree_json,Tree * tree)` - -#### `public void `[`JsonToSplitCategoryVector`](#namespaceStochTree_1a859fbb7cd257d38c26e50f5684a1a7f3)`(const json & tree_json,Tree * tree)` - -#### `public void `[`JsonToNodeLists`](#namespaceStochTree_1a04d09843b9c34aad2f6a9dbeb3babbfe)`(const json & tree_json,Tree * tree)` - diff --git a/docs/c-documentation-markdown/struct_`StochTreeLocalFile`.md b/docs/c-documentation-markdown/struct_`StochTreeLocalFile`.md deleted file mode 100644 index 7ef4540ea..000000000 --- a/docs/c-documentation-markdown/struct_`StochTreeLocalFile`.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: struct `StochTree::LocalFile` ---- - -# struct `StochTree::LocalFile` - -``` -struct StochTree::LocalFile - : public VirtualFileReader - : public VirtualFileWriter -``` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`LocalFile`](#structStochTree_1_1LocalFile_1a2cbf1943e92e22307da4dd8855f5ac16)`(const std::string & filename,const std::string & mode)` | -`public inline virtual `[`~LocalFile`](#structStochTree_1_1LocalFile_1a3080edd46769dfe884815ed681bc3840)`()` | -`public inline bool `[`Init`](#structStochTree_1_1LocalFile_1a57fb1a30b8065b0174488f083855feb8)`()` | -`public inline bool `[`Exists`](#structStochTree_1_1LocalFile_1a2aa2049991077e83e2bb068c5c665df0)`() const` | -`public inline size_t `[`Read`](#structStochTree_1_1LocalFile_1a30d0e68e91249a179549a7991f049011)`(void * buffer,size_t bytes) const` | -`public inline size_t `[`Write`](#structStochTree_1_1LocalFile_1af79f901f74294bd870bcd80b92fb4f08)`(const void * buffer,size_t bytes)` | - -## Members - -#### `public inline `[`LocalFile`](#structStochTree_1_1LocalFile_1a2cbf1943e92e22307da4dd8855f5ac16)`(const std::string & filename,const std::string & mode)` - -#### `public inline virtual `[`~LocalFile`](#structStochTree_1_1LocalFile_1a3080edd46769dfe884815ed681bc3840)`()` - -#### `public inline bool `[`Init`](#structStochTree_1_1LocalFile_1a57fb1a30b8065b0174488f083855feb8)`()` - -#### `public inline bool `[`Exists`](#structStochTree_1_1LocalFile_1a2aa2049991077e83e2bb068c5c665df0)`() const` - -#### `public inline size_t `[`Read`](#structStochTree_1_1LocalFile_1a30d0e68e91249a179549a7991f049011)`(void * buffer,size_t bytes) const` - -#### `public inline size_t `[`Write`](#structStochTree_1_1LocalFile_1af79f901f74294bd870bcd80b92fb4f08)`(const void * buffer,size_t bytes)` - diff --git a/docs/cpp-documentation-markdown/dataset.md b/docs/cpp-documentation-markdown/dataset.md new file mode 100644 index 000000000..8ca536c8d --- /dev/null +++ b/docs/cpp-documentation-markdown/dataset.md @@ -0,0 +1,35 @@ +# Dataset API + +## Forest Dataset + +The `ForestDataset` class is a wrapper around data needed to sample one or more tree ensembles. +Its core elements are + +* **Covariates**: Features / variables used to partition the forests. Stored internally as a (column-major) `Eigen::MatrixXd`. +* **Basis**: *[Optional]* basis vector used to define a “leaf regression” — a partitioned linear model where covariates define the partitions and basis defines the regression variables. + Also stored internally as a (column-major) `Eigen::MatrixXd`. +* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. + Stored internally as an `Eigen::VectorXd`. + +#### WARNING +doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml + +## Random Effects Dataset + +The `RandomEffectsDataset` class is a wrapper around data needed to sample one or more tree ensembles. +Its core elements are + +* **Basis**: Vector of variables that have group-specific random coefficients. In the simplest additive group random effects model, this is a constant intercept of all ones. + Stored internally as a (column-major) `Eigen::MatrixXd`. +* **Group Indices**: Integer-valued indices of group membership. In a model with three groups, these indices would typically be 0, 1, and 2 (remapped from perhaps more descriptive labels in R or Python). + Stored internally as an `std::vector` of integers. +* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. + Stored internally as an `Eigen::VectorXd`. + +#### WARNING +doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml + +## Other Classes and Types + +#### WARNING +doxygenenum: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml diff --git a/docs/cpp-documentation-markdown/index.md b/docs/cpp-documentation-markdown/index.md new file mode 100644 index 000000000..46310fbe5 --- /dev/null +++ b/docs/cpp-documentation-markdown/index.md @@ -0,0 +1,14 @@ +# StochTree C++ API and Implementations + +This page documents the data structures and interfaces that constitute the `stochtree` C++ core. +It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in `stochtree`. + +* [Dataset API](dataset.md) + * [Forest Dataset](dataset.md#forest-dataset) + * [Random Effects Dataset](dataset.md#random-effects-dataset) + * [Other Classes and Types](dataset.md#other-classes-and-types) +* [Forest Sampling Tracker API](tracking.md) + * [Forest Tracker](tracking.md#forest-tracker) +* [Decision Tree API](tree.md) + * [Tree](tree.md#tree) + * [Tree Split](tree.md#tree-split) diff --git a/docs/cpp-documentation-markdown/tracking.md b/docs/cpp-documentation-markdown/tracking.md new file mode 100644 index 000000000..257892a2c --- /dev/null +++ b/docs/cpp-documentation-markdown/tracking.md @@ -0,0 +1,33 @@ +# Forest Sampling Tracker API + +A truly minimalist tree ensemble library only needs + +* A representation of a decision tree +* A container for grouping / storing ensembles of trees +* In-memory access to / representation of training data +* Routines / functions to construct the trees + +Most algorithms for optimizing or sampling tree ensembles frequently perform the following operations + +* Determine which leaf a training observation falls into for a decision tree (to compute its prediction and update the residual / outcome) +* Evaluate potential split candidates for a leaf of a decision + +With only the “minimalist” tools above, these two tasks proceed largely as follows + +* For every observation in the dataset, traverse the tree (runtime depends on the tree topology but in a fully balanced tree with $k$ nodes, this has time complexity $O(\log (k))$). +* For every observation in the dataset, determine whether an observation falls into a given node and whether or not a proposed decision rule would be true + +These operations both perform unnecessary computation which can be avoided with some additional real-time tracking. Essentially, we want + +1. A mapping from dataset row index to leaf node id for every tree in an ensemble (so that we can skip the tree traversal during prediction) +2. A mapping from leaf node id to dataset row indices every tree in an ensemble (so that we can skip the full pass through the training data at split evaluation) + + + + +## Forest Tracker + +The `ForestTracker` class is a wrapper around several implementations of the mappings discussed above. + +#### WARNING +doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml diff --git a/docs/cpp-documentation-markdown/tree.md b/docs/cpp-documentation-markdown/tree.md new file mode 100644 index 000000000..a3e3e4a3a --- /dev/null +++ b/docs/cpp-documentation-markdown/tree.md @@ -0,0 +1,15 @@ +# Decision Tree API + +## Tree + +The fundamental building block of the C++ tree interface is the `Tree` class. + +#### WARNING +doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml + +## Tree Split + +Numeric and categorical splits are represented by a `TreeSplit` class. + +#### WARNING +doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml diff --git a/docs/python-documentation-markdown/api.md b/docs/python-documentation-markdown/api.md index aa046d8bc..84929e375 100644 --- a/docs/python-documentation-markdown/api.md +++ b/docs/python-documentation-markdown/api.md @@ -80,7 +80,7 @@ params * `pct_var_variance_forest_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`. * `variance_scale` (`float`): Variance after the data have been scaled. Default: `1`. * `variable_weights_mean` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the mean forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. - * `variable_weights_forest` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. + * `variable_weights_variance` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. * `num_trees_mean` (`int`): Number of trees in the ensemble for the conditional mean model. Defaults to `200`. If `num_trees_mean = 0`, the conditional mean will not be modeled using a forest and the function will only proceed if `num_trees_variance > 0`. * `num_trees_variance` (`int`): Number of trees in the ensemble for the conditional variance model. Defaults to `0`. Variance is only modeled using a tree / forest if `num_trees_variance > 0`. * `sample_sigma_global` (`bool`): Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Defaults to `True`. @@ -88,6 +88,7 @@ params * `random_seed` (`int`): Integer parameterizing the C++ random number generator. If not specified, the C++ random number generator is seeded according to `std::random_device`. * `keep_burnin` (`bool`): Whether or not “burnin” samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. * `keep_gfr` (`bool`): Whether or not “warm-start” / grow-from-root samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. + * `keep_every` (`int`): How many iterations of the burned-in MCMC sampler should be run before forests and parameters are retained. Defaults to `1`. Setting `keep_every = k` for some `k > 1` will “thin” the MCMC samples by retaining every `k`-th sample, rather than simply every sample. This can reduce the autocorrelation of the MCMC samples. ### Returns @@ -121,7 +122,8 @@ propensity tuple of np.array : Tuple of arrays with as many rows as in `X` and as many columns as retained samples of the algorithm. The first entry of the tuple contains conditional average treatment effect (CATE) samples, - the second entry contains prognostic effect samples, and the third entry contains outcome prediction samples + the second entry contains prognostic effect samples, and the third entry contains outcome prediction samples. + The optional fourth array contains variance forest samples. #### predict_tau(X: array, Z: array, propensity: array | None = None) → array @@ -196,29 +198,40 @@ params : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. * `alpha_tau` (`float`): Prior probability of splitting for a tree of depth 0 for the treatment effect forest. : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. + * `alpha_variance` (`float`): Prior probability of splitting for a tree of depth 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. * `beta_mu` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 for the prognostic forest. : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. * `beta_tau` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 for the treatment effect forest. : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. + * `beta_variance` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. * `min_samples_leaf_mu` (`int`): Minimum allowable size of a leaf, in terms of training samples, for the prognostic forest. Defaults to `5`. * `min_samples_leaf_tau` (`int`): Minimum allowable size of a leaf, in terms of training samples, for the treatment effect forest. Defaults to `5`. + * `min_samples_leaf_variance` (`int`): Minimum allowable size of a leaf, in terms of training samples in the conditional variance model. Defaults to `5`. * `max_depth_mu` (`int`): Maximum depth of any tree in the mu ensemble. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. * `max_depth_tau` (`int`): Maximum depth of any tree in the tau ensemble. Defaults to `5`. Can be overriden with `-1` which does not enforce any depth limits on trees. + * `max_depth_variance` (`int`): Maximum depth of any tree in the ensemble in the conditional variance model. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. * `a_global` (`float`): Shape parameter in the `IG(a_global, b_global)` global error variance model. Defaults to `0`. * `b_global` (`float`): Component of the scale parameter in the `IG(a_global, b_global)` global error variance prior. Defaults to `0`. * `a_leaf_mu` (`float`): Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the prognostic forest. Defaults to `3`. * `a_leaf_tau` (`float`): Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Defaults to `3`. * `b_leaf_mu` (`float`): Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the prognostic forest. Calibrated internally as `0.5/num_trees` if not set here. * `b_leaf_tau` (`float`): Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Calibrated internally as `0.5/num_trees` if not set here. - * `sigma2` (`float`): Starting value of global variance parameter. Calibrated internally as in Sparapani et al (2021) if not set here. + * `sigma2_init` (`float`): Starting value of global variance parameter. Calibrated internally as in Sparapani et al (2021) if not set here. + * `variance_forest_leaf_init` (`float`): Starting value of root forest prediction in conditional (heteroskedastic) error variance model. Calibrated internally as `np.log(pct_var_variance_forest_init*np.var((y-np.mean(y))/np.std(y)))/num_trees_variance` if not set. * `pct_var_sigma2_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Superseded by `sigma2`. Defaults to `0.25`. - * `variable_weights` (np.\`array\`): Numeric weights reflecting the relative probability of splitting on each variable. Does not need to sum to 1 but cannot be negative. Defaults to `np.repeat(1/X_train.shape[1], X_train.shape[1])` if not set here. Note that if the propensity score is included as a covariate in either forest, its weight will default to `1/X_train.shape[1]`. A workaround if you wish to provide a custom weight for the propensity score is to include it as a column in `X_train` and then set `propensity_covariate` to `'none'` and adjust `keep_vars_mu` and `keep_vars_tau` accordingly. + * `pct_var_variance_forest_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`. + * `variable_weights_mean` (np.\`array\`): Numeric weights reflecting the relative probability of splitting on each variable in the prognostic and treatment effect forests. Does not need to sum to 1 but cannot be negative. Defaults to `np.repeat(1/X_train.shape[1], X_train.shape[1])` if not set here. Note that if the propensity score is included as a covariate in either forest, its weight will default to `1/X_train.shape[1]`. A workaround if you wish to provide a custom weight for the propensity score is to include it as a column in `X_train` and then set `propensity_covariate` to `'none'` and adjust `keep_vars_mu` and `keep_vars_tau` accordingly. + * `variable_weights_variance` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. * `keep_vars_mu` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the prognostic (`mu(X)`) forest. Defaults to `None`. * `drop_vars_mu` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the prognostic (`mu(X)`) forest. Defaults to `None`. If both `drop_vars_mu` and `keep_vars_mu` are set, `drop_vars_mu` will be ignored. + * `drop_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the variance (`sigma^2(X)`) forest. Defaults to `None`. If both `drop_vars_variance` and `keep_vars_variance` are set, `drop_vars_variance` will be ignored. * `keep_vars_tau` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the treatment effect (`tau(X)`) forest. Defaults to `None`. * `drop_vars_tau` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the treatment effect (`tau(X)`) forest. Defaults to `None`. If both `drop_vars_tau` and `keep_vars_tau` are set, `drop_vars_tau` will be ignored. + * `drop_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the variance (`sigma^2(X)`) forest. Defaults to `None`. If both `drop_vars_variance` and `keep_vars_variance` are set, `drop_vars_variance` will be ignored. + * `keep_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the variance (`sigma^2(X)`) forest. Defaults to `None`. * `num_trees_mu` (`int`): Number of trees in the prognostic forest. Defaults to `200`. * `num_trees_tau` (`int`): Number of trees in the treatment effect forest. Defaults to `50`. + * `num_trees_variance` (`int`): Number of trees in the ensemble for the conditional variance model. Defaults to `0`. Variance is only modeled using a tree / forest if `num_trees_variance > 0`. * `sample_sigma_global` (`bool`): Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Defaults to `True`. * `sample_sigma_leaf_mu` (`bool`): Whether or not to update the `tau` leaf scale variance parameter based on `IG(a_leaf, b_leaf)` for the prognostic forest. : Cannot (currently) be set to true if `basis_train` has more than one column. Defaults to `True`. @@ -233,6 +246,7 @@ params * `random_seed` (`int`): Integer parameterizing the C++ random number generator. If not specified, the C++ random number generator is seeded according to `std::random_device`. * `keep_burnin` (`bool`): Whether or not “burnin” samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. * `keep_gfr` (`bool`): Whether or not “warm-start” / grow-from-root samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. + * `keep_every` (`int`): How many iterations of the burned-in MCMC sampler should be run before forests and parameters are retained. Defaults to `1`. Setting `keep_every = k` for some `k > 1` will “thin” the MCMC samples by retaining every `k`-th sample, rather than simply every sample. This can reduce the autocorrelation of the MCMC samples. ### Returns diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 3041a41e9..f89084390 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -91,21 +91,9 @@ const config: Config = { title: 'GitHub Repos', items: [ { - label: 'Arborist App', - href: 'https://github.com/silicontwin/arborist-app', - }, - { - label: 'StochTree C++ Core', + label: 'StochTree', href: 'https://github.com/StochasticTree/stochtree', }, - { - label: 'StochTree R', - href: 'https://github.com/StochasticTree/stochtree/tree/main/R', - }, - { - label: 'StochTree Python', - href: 'https://github.com/StochasticTree/stochtree/tree/main/stochtree', - }, ], }, { @@ -115,18 +103,19 @@ const config: Config = { label: 'Blog', to: '/blog', }, - { - label: 'GitHub', - href: 'https://github.com/StochasticTree', - }, ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} Andrew Herren, Jared Murray, and Nicholas Warren.`, + copyright: `Copyright © ${new Date().getFullYear()} Andrew Herren, Carlos Carvalho, Richard Hahn, Jared Murray, and Nicholas Warren.`, + }, + colorMode: { + defaultMode: 'light', + disableSwitch: false, + respectPrefersColorScheme: true, }, prism: { - theme: prismThemes.github, - darkTheme: prismThemes.dracula, + theme: prismThemes.nightOwlLight, + darkTheme: prismThemes.nightOwl, }, } satisfies Preset.ThemeConfig, }; diff --git a/package.json b/package.json index 59d671d6d..e59acd0b7 100644 --- a/package.json +++ b/package.json @@ -44,5 +44,6 @@ }, "engines": { "node": ">=18.0" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/sidebars.ts b/sidebars.ts index 92b317945..a3c5fef7d 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -8,7 +8,7 @@ const sidebars: SidebarsConfig = { items: [ { type: 'autogenerated', - dirName: 'c-documentation-markdown', + dirName: 'cpp-documentation-markdown', }, ], collapsed: true, diff --git a/splitMarkdown.js b/splitMarkdown.js new file mode 100644 index 000000000..2b3409d2d --- /dev/null +++ b/splitMarkdown.js @@ -0,0 +1,32 @@ +const fs = require('fs'); +const path = require('path'); + +const inputFile = 'docs/cpp-documentation-markdown/combined.md'; +const outputDir = 'docs/cpp-documentation-markdown'; + +if (!fs.existsSync(inputFile)) { +console.error(`Input file ${inputFile} does not exist.`); +process.exit(1); +} + +const data = fs.readFileSync(inputFile, 'utf8'); + +// Split the file on level 1 headers (e.g., "# ClassName") +const sections = data.split(/^# /gm).filter(section => section.trim() !== ''); + +sections.forEach(section => { +// Get the title of the section +const lines = section.split('\n'); +const title = lines[0].trim(); +const content = lines.slice(1).join('\n'); + +// Sanitize the title to create a filename +const filename = title.replace(/[<>:"\/\\|?*]/g, '').replace(/\s+/g, '_') + '.md'; +const filepath = path.join(outputDir, filename); + +// Write the section to a file with front matter +const frontMatter = `---\n` + + `title: ${title}\n` + + `---\n\n`; +fs.writeFileSync(filepath, frontMatter + `# ${title}\n${content}`, 'utf8'); +}); diff --git a/src/css/custom.css b/src/css/custom.css index 2bc6a4cfd..f7dbba6d6 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -10,7 +10,7 @@ --ifm-color-primary-dark: #29784c; --ifm-color-primary-darker: #277148; --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; + --ifm-color-primary-light: #4016ca; --ifm-color-primary-lighter: #359962; --ifm-color-primary-lightest: #3cad6e; --ifm-code-font-size: 95%; From 56c089a6f72a0b6db75b4b4da501b1f249e36aa8 Mon Sep 17 00:00:00 2001 From: silicontwin Date: Wed, 11 Dec 2024 01:23:29 +0000 Subject: [PATCH 04/55] Updated Python documentation --- docs/python-documentation-markdown/api.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/python-documentation-markdown/api.md b/docs/python-documentation-markdown/api.md index 58931258e..84929e375 100644 --- a/docs/python-documentation-markdown/api.md +++ b/docs/python-documentation-markdown/api.md @@ -80,7 +80,7 @@ params * `pct_var_variance_forest_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`. * `variance_scale` (`float`): Variance after the data have been scaled. Default: `1`. * `variable_weights_mean` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the mean forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. - * `variable_weights_forest` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. + * `variable_weights_variance` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. * `num_trees_mean` (`int`): Number of trees in the ensemble for the conditional mean model. Defaults to `200`. If `num_trees_mean = 0`, the conditional mean will not be modeled using a forest and the function will only proceed if `num_trees_variance > 0`. * `num_trees_variance` (`int`): Number of trees in the ensemble for the conditional variance model. Defaults to `0`. Variance is only modeled using a tree / forest if `num_trees_variance > 0`. * `sample_sigma_global` (`bool`): Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Defaults to `True`. @@ -122,7 +122,8 @@ propensity tuple of np.array : Tuple of arrays with as many rows as in `X` and as many columns as retained samples of the algorithm. The first entry of the tuple contains conditional average treatment effect (CATE) samples, - the second entry contains prognostic effect samples, and the third entry contains outcome prediction samples + the second entry contains prognostic effect samples, and the third entry contains outcome prediction samples. + The optional fourth array contains variance forest samples. #### predict_tau(X: array, Z: array, propensity: array | None = None) → array @@ -197,29 +198,40 @@ params : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. * `alpha_tau` (`float`): Prior probability of splitting for a tree of depth 0 for the treatment effect forest. : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. + * `alpha_variance` (`float`): Prior probability of splitting for a tree of depth 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. * `beta_mu` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 for the prognostic forest. : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. * `beta_tau` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 for the treatment effect forest. : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. + * `beta_variance` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. * `min_samples_leaf_mu` (`int`): Minimum allowable size of a leaf, in terms of training samples, for the prognostic forest. Defaults to `5`. * `min_samples_leaf_tau` (`int`): Minimum allowable size of a leaf, in terms of training samples, for the treatment effect forest. Defaults to `5`. + * `min_samples_leaf_variance` (`int`): Minimum allowable size of a leaf, in terms of training samples in the conditional variance model. Defaults to `5`. * `max_depth_mu` (`int`): Maximum depth of any tree in the mu ensemble. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. * `max_depth_tau` (`int`): Maximum depth of any tree in the tau ensemble. Defaults to `5`. Can be overriden with `-1` which does not enforce any depth limits on trees. + * `max_depth_variance` (`int`): Maximum depth of any tree in the ensemble in the conditional variance model. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. * `a_global` (`float`): Shape parameter in the `IG(a_global, b_global)` global error variance model. Defaults to `0`. * `b_global` (`float`): Component of the scale parameter in the `IG(a_global, b_global)` global error variance prior. Defaults to `0`. * `a_leaf_mu` (`float`): Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the prognostic forest. Defaults to `3`. * `a_leaf_tau` (`float`): Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Defaults to `3`. * `b_leaf_mu` (`float`): Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the prognostic forest. Calibrated internally as `0.5/num_trees` if not set here. * `b_leaf_tau` (`float`): Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Calibrated internally as `0.5/num_trees` if not set here. - * `sigma2` (`float`): Starting value of global variance parameter. Calibrated internally as in Sparapani et al (2021) if not set here. + * `sigma2_init` (`float`): Starting value of global variance parameter. Calibrated internally as in Sparapani et al (2021) if not set here. + * `variance_forest_leaf_init` (`float`): Starting value of root forest prediction in conditional (heteroskedastic) error variance model. Calibrated internally as `np.log(pct_var_variance_forest_init*np.var((y-np.mean(y))/np.std(y)))/num_trees_variance` if not set. * `pct_var_sigma2_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Superseded by `sigma2`. Defaults to `0.25`. - * `variable_weights` (np.\`array\`): Numeric weights reflecting the relative probability of splitting on each variable. Does not need to sum to 1 but cannot be negative. Defaults to `np.repeat(1/X_train.shape[1], X_train.shape[1])` if not set here. Note that if the propensity score is included as a covariate in either forest, its weight will default to `1/X_train.shape[1]`. A workaround if you wish to provide a custom weight for the propensity score is to include it as a column in `X_train` and then set `propensity_covariate` to `'none'` and adjust `keep_vars_mu` and `keep_vars_tau` accordingly. + * `pct_var_variance_forest_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`. + * `variable_weights_mean` (np.\`array\`): Numeric weights reflecting the relative probability of splitting on each variable in the prognostic and treatment effect forests. Does not need to sum to 1 but cannot be negative. Defaults to `np.repeat(1/X_train.shape[1], X_train.shape[1])` if not set here. Note that if the propensity score is included as a covariate in either forest, its weight will default to `1/X_train.shape[1]`. A workaround if you wish to provide a custom weight for the propensity score is to include it as a column in `X_train` and then set `propensity_covariate` to `'none'` and adjust `keep_vars_mu` and `keep_vars_tau` accordingly. + * `variable_weights_variance` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. * `keep_vars_mu` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the prognostic (`mu(X)`) forest. Defaults to `None`. * `drop_vars_mu` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the prognostic (`mu(X)`) forest. Defaults to `None`. If both `drop_vars_mu` and `keep_vars_mu` are set, `drop_vars_mu` will be ignored. + * `drop_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the variance (`sigma^2(X)`) forest. Defaults to `None`. If both `drop_vars_variance` and `keep_vars_variance` are set, `drop_vars_variance` will be ignored. * `keep_vars_tau` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the treatment effect (`tau(X)`) forest. Defaults to `None`. * `drop_vars_tau` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the treatment effect (`tau(X)`) forest. Defaults to `None`. If both `drop_vars_tau` and `keep_vars_tau` are set, `drop_vars_tau` will be ignored. + * `drop_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the variance (`sigma^2(X)`) forest. Defaults to `None`. If both `drop_vars_variance` and `keep_vars_variance` are set, `drop_vars_variance` will be ignored. + * `keep_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the variance (`sigma^2(X)`) forest. Defaults to `None`. * `num_trees_mu` (`int`): Number of trees in the prognostic forest. Defaults to `200`. * `num_trees_tau` (`int`): Number of trees in the treatment effect forest. Defaults to `50`. + * `num_trees_variance` (`int`): Number of trees in the ensemble for the conditional variance model. Defaults to `0`. Variance is only modeled using a tree / forest if `num_trees_variance > 0`. * `sample_sigma_global` (`bool`): Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Defaults to `True`. * `sample_sigma_leaf_mu` (`bool`): Whether or not to update the `tau` leaf scale variance parameter based on `IG(a_leaf, b_leaf)` for the prognostic forest. : Cannot (currently) be set to true if `basis_train` has more than one column. Defaults to `True`. From df10dc7015fed5d354e724b6a63eb7675f8bdfcf Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 11 Dec 2024 00:12:04 -0600 Subject: [PATCH 05/55] Updated dependencies --- package-lock.json | 16098 -------------------------------------------- package.json | 10 +- yarn.lock | 2110 +++--- 3 files changed, 1359 insertions(+), 16859 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index fe54f99f3..000000000 --- a/package-lock.json +++ /dev/null @@ -1,16098 +0,0 @@ -{ - "name": "documentation", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "documentation", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/preset-classic": "3.6.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.3.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "3.6.0", - "@docusaurus/tsconfig": "3.6.0", - "@docusaurus/types": "3.6.0", - "typescript": "~5.6.2" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.6.tgz", - "integrity": "sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.6" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia/node_modules/@algolia/autocomplete-shared": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.6.tgz", - "integrity": "sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==", - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", - "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", - "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", - "license": "MIT" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", - "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.24.0" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.12.0.tgz", - "integrity": "sha512-hx4eVydkm3yrFCFxmcBtSzI/ykt0cZ6sDWch+v3JTgKpD2WtosMJU3Upv1AjQ4B6COSHCOWEX3vfFxW6OoH6aA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", - "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-account/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", - "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-analytics/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.12.0.tgz", - "integrity": "sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.12.0.tgz", - "integrity": "sha512-8alajmsYUd+7vfX5lpRNdxqv3Xx9clIHLUItyQK0Z6gwGMbVEFe6YYhgDtwslMAP0y6b0WeJEIZJMLgT7VYpRw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", - "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-personalization/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.12.0.tgz", - "integrity": "sha512-Q5CszzGWfxbIDs9DJ/QJsL7bP6h+lJMg27KxieEnI9KGCu0Jt5iFA3GkREkgRZxRdzlHbZKkrIzhtHVbSHw/rg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.12.0.tgz", - "integrity": "sha512-R3qzEytgVLHOGNri+bpta6NtTt7YtkvUe/QBcAmMDjW4Jk1P0eBYIPfvnzIPbINRsLxIq9fZs9uAYBgsrts4Zg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" - }, - "node_modules/@algolia/ingestion": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.12.0.tgz", - "integrity": "sha512-zpHo6qhR22tL8FsdSI4DvEraPDi/019HmMrCFB/TUX98yzh5ooAU7sNW0qPL1I7+S++VbBmNzJOEU9VI8tEC8A==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/logger-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", - "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", - "license": "MIT" - }, - "node_modules/@algolia/logger-console": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", - "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", - "license": "MIT", - "dependencies": { - "@algolia/logger-common": "4.24.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.12.0.tgz", - "integrity": "sha512-i2AJZED/zf4uhxezAJUhMKoL5QoepCBp2ynOYol0N76+TSoohaMADdPnWCqOULF4RzOwrG8wWynAwBlXsAI1RQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", - "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", - "license": "MIT", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/@algolia/recommend/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz", - "integrity": "sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", - "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", - "license": "MIT" - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz", - "integrity": "sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz", - "integrity": "sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", - "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "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" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "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.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", - "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", - "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", - "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.3.tgz", - "integrity": "sha512-3uvbg8E7rhqE1C4oBAK3tGlS2qfhi9zpfZgH/yjDPF73vd9B41urVIKujF4rczcF4E3qs34SedhehiDJ4UdNBA==", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.3.tgz", - "integrity": "sha512-2munr4uBuZq1PG+Ge+F+ldIdxb3Wi8OmEIv2tQQb4RvEvvph+xtQkxwHzVIEnt5s+HecwucuXwB+3JhcZboFLg==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.17.6", - "@docsearch/css": "3.6.3", - "algoliasearch": "^5.11.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", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/client-analytics": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.12.0.tgz", - "integrity": "sha512-EpTsSv6IW8maCfXCDIptgT7+mQJj7pImEkcNUnxR8yUKAHzTogTXv9yGm2WXOZFVuwstd2i0sImhQ1Vz8RH/hA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/client-personalization": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.12.0.tgz", - "integrity": "sha512-bUV9HtfkTBgpoVhxFrMkmVPG03ZN1Rtn51kiaEtukucdk3ggjR9Qu1YUfRSU2lFgxr9qJc8lTxwfvhjCeJRcqw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@docsearch/react/node_modules/@algolia/recommend": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.12.0.tgz", - "integrity": "sha512-0jmZyKvYnB/Bj5c7WKsKedOUjnr0UtXm0LVFUdQrxXfqOqvWv9n6Vpr65UjdYG4Q49kRQxhlwtal9WJYrYymXg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@docsearch/react/node_modules/algoliasearch": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.12.0.tgz", - "integrity": "sha512-psGBRYdGgik8I6m28iAB8xpubvjEt7UQU+w5MAJUA2324WHiGoHap5BPkkjB14rMaXeRts6pmOsrVIglGyOVwg==", - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.12.0", - "@algolia/client-analytics": "5.12.0", - "@algolia/client-common": "5.12.0", - "@algolia/client-insights": "5.12.0", - "@algolia/client-personalization": "5.12.0", - "@algolia/client-query-suggestions": "5.12.0", - "@algolia/client-search": "5.12.0", - "@algolia/ingestion": "1.12.0", - "@algolia/monitoring": "1.12.0", - "@algolia/recommend": "5.12.0", - "@algolia/requester-browser-xhr": "5.12.0", - "@algolia/requester-fetch": "5.12.0", - "@algolia/requester-node-http": "5.12.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@docusaurus/babel": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.6.0.tgz", - "integrity": "sha512-7CsoQFiadoq7AHSUIQNkI/lGfg9AQ2ZBzsf9BqfZGXkHwWDy6twuohEaG0PgQv1npSRSAB2dioVxhRSErnqKNA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.6.0", - "@docusaurus/utils": "3.6.0", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.6.0.tgz", - "integrity": "sha512-o5T9HXkPKH0OQAifTxEXaebcO8kaz3tU1+wlIShZ2DKJHlsyWX3N4rToWBHroWnV/ZCT2XN3kLRzXASqrnb9Tw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.6.0", - "@docusaurus/cssnano-preset": "3.6.0", - "@docusaurus/logger": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils": "3.6.0", - "autoprefixer": "^10.4.14", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.2", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.1", - "null-loader": "^4.0.1", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "react-dev-utils": "^12.0.1", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/faster": "3.5.2" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.6.0.tgz", - "integrity": "sha512-lvRgMoKJJSRDt9+HhAqFcICV4kp/mw1cJJrLxIw4Q2XZnFGM1XUuwcbuaqWmGog+NcOLZaPCcCtZbn60EMCtjQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.6.0", - "@docusaurus/bundler": "3.6.0", - "@docusaurus/logger": "3.6.0", - "@docusaurus/mdx-loader": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "del": "^6.1.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "rtl-detect": "^1.0.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.0.tgz", - "integrity": "sha512-h3jlOXqqzNSoU+C4CZLNpFtD+v2xr1UBf4idZpwMgqid9r6lb5GS7tWKnQnauio6OipacbHbDXEX3JyT1PlDkg==", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.6.0.tgz", - "integrity": "sha512-BcQhoXilXW0607cH/kO6P5Gt5KxCGfoJ+QDKNf3yO2S09/RsITlW+0QljXPbI3DklTrHrhRDmgGk1yX4nUhWTA==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.6.0.tgz", - "integrity": "sha512-GhRzL1Af/AdSSrGesSPOU/iP/aXadTGmVKuysCxZDrQR2RtBtubQZ9aw+KvdFVV7R4K/CsbgD6J5oqrXlEPk3Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^1.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.0.tgz", - "integrity": "sha512-szTrIN/6/fuk0xkf3XbRfdTFJzRQ8d1s3sQj5++58wltrT7v3yn1149oc9ryYjMpRcbsarGloQwMu7ofPe4XPg==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.6.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@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.0.tgz", - "integrity": "sha512-o4aT1/E0Ldpzs/hQff5uyoSriAhS/yqBhqSn+fvSw465AaqRsva6O7CZSYleuBq6x2bewyE3QJq2PcTiHhAd8g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/logger": "3.6.0", - "@docusaurus/mdx-loader": "3.6.0", - "@docusaurus/theme-common": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.0.tgz", - "integrity": "sha512-c5gZOxocJKO/Zev2MEZInli+b+VNswDGuKHE6QtFgidhAJonwjh2kwj967RvWFaMMk62HlLJLZ+IGK2XsVy4Aw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/logger": "3.6.0", - "@docusaurus/mdx-loader": "3.6.0", - "@docusaurus/module-type-aliases": "3.6.0", - "@docusaurus/theme-common": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.0.tgz", - "integrity": "sha512-RKHhJrfkadHc7+tt1cP48NWifOrhkSRMPdXNYytzhoQrXlP6Ph+3tfQ4/n+nT0S3Y9+wwRxYqRqA380ZLt+QtQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/mdx-loader": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.6.0.tgz", - "integrity": "sha512-o8T1Rl94COLdSlKvjYLQpRJQRU8WWZ8EX1B0yV0dQLNN8reyH7MQW+6z1ig4sQFfH3pnjPWVGHfuEjcib5m7Eg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils": "3.6.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.0.tgz", - "integrity": "sha512-kgRFbfpi6Hshj75YUztKyEMtI/kw0trPRwoTN4g+W1NK99R/vh8phTvhBTIMnDbetU79795LkwfG0rZ/ce6zWQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.0.tgz", - "integrity": "sha512-nqu4IfjaO4UX+dojHL2BxHRS+sKj31CIMWYo49huQ3wTET0Oc3u/WGTaKd3ShTPDhkgiRhTOSTPUwJWrU55nHg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.0.tgz", - "integrity": "sha512-OU6c5xI0nOVbEc9eImGvvsgNWe4vGm97t/W3aLHjWsHyNk3uwFNBQMHRvBUwAi9k/K3kyC5E7DWnc67REhdLOw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.0.tgz", - "integrity": "sha512-YB5XMdf9FjLhgbHY/cDbYhVxsgcpPIjxY9769HUgFOB7GVzItTLOR71W035R1BiR2CA5QAn3XOSg36WLRxlhQQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/logger": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.6.0.tgz", - "integrity": "sha512-kpGNdQzr/Dpm7o3b1iaQrz4DMDx3WIeBbl4V4P4maa2zAQkTdlaP4CMgA5oKrRrpqPLnQFsUM/b+qf2glhl2Tw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/plugin-content-blog": "3.6.0", - "@docusaurus/plugin-content-docs": "3.6.0", - "@docusaurus/plugin-content-pages": "3.6.0", - "@docusaurus/plugin-debug": "3.6.0", - "@docusaurus/plugin-google-analytics": "3.6.0", - "@docusaurus/plugin-google-gtag": "3.6.0", - "@docusaurus/plugin-google-tag-manager": "3.6.0", - "@docusaurus/plugin-sitemap": "3.6.0", - "@docusaurus/theme-classic": "3.6.0", - "@docusaurus/theme-common": "3.6.0", - "@docusaurus/theme-search-algolia": "3.6.0", - "@docusaurus/types": "3.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.6.0.tgz", - "integrity": "sha512-sAXNfwPL6uRD+BuHuKXZfAXud7SS7IK/JdrPuzyQxdO1gJKzI5GFfe1ED1QoJDNWJWJ01JHE5rSnwYLEADc2rQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/logger": "3.6.0", - "@docusaurus/mdx-loader": "3.6.0", - "@docusaurus/module-type-aliases": "3.6.0", - "@docusaurus/plugin-content-blog": "3.6.0", - "@docusaurus/plugin-content-docs": "3.6.0", - "@docusaurus/plugin-content-pages": "3.6.0", - "@docusaurus/theme-common": "3.6.0", - "@docusaurus/theme-translations": "3.6.0", - "@docusaurus/types": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.6.0.tgz", - "integrity": "sha512-frjlYE5sRs+GuPs4XXlp9aMLI2O4H5FPpznDAXBrCm+8EpWRiIb443ePMxM3IyMCQ5bwFlki0PI9C+r4apstnw==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.6.0", - "@docusaurus/module-type-aliases": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.0.tgz", - "integrity": "sha512-4IwRUkxjrisR8LXBHeE4d2btraWdMficbgiVL3UHvJURmyvgzMBZQP8KrK8rjdXeu8SuRxSmeV6NSVomRvdbEg==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.6.0", - "@docusaurus/logger": "3.6.0", - "@docusaurus/plugin-content-docs": "3.6.0", - "@docusaurus/theme-common": "3.6.0", - "@docusaurus/theme-translations": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-validation": "3.6.0", - "algoliasearch": "^4.18.0", - "algoliasearch-helper": "^3.13.3", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.6.0.tgz", - "integrity": "sha512-L555X8lWE3fv8VaF0Bc1VnAgi10UvRKFcvADHiYR7Gj37ItaWP5i7xLHsSw7fi/SHTXe5wfIeCFNqUYHyCOHAQ==", - "license": "MIT", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/tsconfig": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.6.0.tgz", - "integrity": "sha512-1nHsSMlNgEifnvsL4ql9wx7I1xXhrrNZl65IKD11pdo/749oI9fMcvm47dDwgS57x1WEteIAxJjzidffa5J9TQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docusaurus/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.6.0.tgz", - "integrity": "sha512-jADLgoZGWhAzThr+mRiyuFD4OUzt6jHnb7NRArRKorgxckqUBaPyFOau9hhbcSTHtU6ceyeWjN7FDt7uG2Hplw==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.6.0.tgz", - "integrity": "sha512-VKczAutI4mptiAw/WcYEu5WeVhQ6Q1zdIUl64SGw9K++9lziH+Kt10Ee8l2dMpRkiUk6zzK20kMNlX2WCUwXYQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "@svgr/webpack": "^8.1.0", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.6.0.tgz", - "integrity": "sha512-diUDNfbw33GaZMmKwdTckT2IBfVouXLXRD+zphH9ywswuaEIKqixvuf5g41H7MBBrlMsxhna3uTMoB4B/OPDcA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.6.0.tgz", - "integrity": "sha512-CRHiKKJEKA0GFlfOf71JWHl7PtwOyX0+Zg9ep9NFEZv6Lcx3RJ9nhl7p8HRjPL6deyYceavM//BsfW4pCI4BtA==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.6.0", - "@docusaurus/utils": "3.6.0", - "@docusaurus/utils-common": "3.6.0", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.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" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", - "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-scope": "^1.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "recma-build-jsx": "^1.0.0", - "recma-jsx": "^1.0.0", - "recma-stringify": "^1.0.0", - "rehype-recma": "^1.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "license": "MIT", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "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", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "license": "MIT" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "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==", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "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": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "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": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "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": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "license": "MIT" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", - "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz", - "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.8" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, - "node_modules/@types/prismjs": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", - "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", - "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/algoliasearch": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", - "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", - "license": "MIT", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.24.0", - "@algolia/cache-common": "4.24.0", - "@algolia/cache-in-memory": "4.24.0", - "@algolia/client-account": "4.24.0", - "@algolia/client-analytics": "4.24.0", - "@algolia/client-common": "4.24.0", - "@algolia/client-personalization": "4.24.0", - "@algolia/client-search": "4.24.0", - "@algolia/logger-common": "4.24.0", - "@algolia/logger-console": "4.24.0", - "@algolia/recommend": "4.24.0", - "@algolia/requester-browser-xhr": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/requester-node-http": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz", - "integrity": "sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==", - "license": "MIT", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-common": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/client-search": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.24.0", - "@algolia/requester-common": "4.24.0", - "@algolia/transporter": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-browser-xhr": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/algoliasearch/node_modules/@algolia/requester-node-http": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.24.0" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "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/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", - "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", - "license": "MIT", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "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.13.0", - "raw-body": "2.5.2", - "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", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "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/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "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.30001677", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz", - "integrity": "sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "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", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "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/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "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" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "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/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "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", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "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", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", - "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", - "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "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/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "license": "CC0-1.0" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "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", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "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", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "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", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "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", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "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.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.50", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz", - "integrity": "sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", - "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "license": "MIT" - }, - "node_modules/esast-util-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", - "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/esast-util-from-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", - "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "acorn": "^8.0.0", - "esast-util-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-scope": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", - "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.2.1.tgz", - "integrity": "sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "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/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "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", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "license": "MIT" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "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", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "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/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "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/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/file-loader/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==", - "license": "MIT" - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "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/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "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", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "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/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "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/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "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", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "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/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==", - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "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/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "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", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "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", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "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", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "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/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "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", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "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", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", - "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree/node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "license": "MIT" - }, - "node_modules/hast-util-to-estree/node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", - "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "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", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "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", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "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", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", - "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": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "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/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "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.3", - "domutils": "^3.0.1", - "entities": "^4.4.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==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "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", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "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.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", - "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", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "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": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", - "license": "MIT" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "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", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "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-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "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==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "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==", - "license": "MIT", - "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": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "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", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", - "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", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", - "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", - "license": "MIT", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "license": "MIT", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", - "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "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-space/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "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-character/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "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": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "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.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "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", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "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/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "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/null-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/null-loader/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==", - "license": "MIT" - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "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/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "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", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "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", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "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-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", - "license": "MIT", - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "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-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "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.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "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", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz", - "integrity": "sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==", - "license": "MIT", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "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", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "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", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "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/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "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/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "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/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "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-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "license": "MIT", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "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-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "license": "MIT", - "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" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "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.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "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", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recma-build-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", - "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", - "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", - "license": "MIT", - "dependencies": { - "acorn-jsx": "^5.0.0", - "estree-util-to-js": "^2.0.0", - "recma-parse": "^1.0.0", - "recma-stringify": "^1.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", - "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "esast-util-from-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-to-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", - "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-recma": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", - "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "hast-util-to-estree": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", - "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", - "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", - "license": "MIT", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", - "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "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/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "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/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "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", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "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", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "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", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "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", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtl-detect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", - "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==", - "license": "BSD-3-Clause" - }, - "node_modules/rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/search-insights": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.2.tgz", - "integrity": "sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==", - "license": "MIT", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "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", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "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", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "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", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "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.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "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", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "license": "MIT", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "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.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "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", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "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", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "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/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "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-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "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", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.4" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "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.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "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/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "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/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/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==", - "license": "MIT" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "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-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "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", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "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.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "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/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "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/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/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==", - "license": "MIT" - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "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/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "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", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "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.11", - "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.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "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.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "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-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "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.5", - "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.4", - "ws": "^8.13.0" - }, - "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": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "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": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "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/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/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==", - "license": "MIT" - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "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": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "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/webpackbar/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "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/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "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", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "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.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "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.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "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", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "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.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "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": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/package.json b/package.json index e59acd0b7..c16ec8591 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "3.6.0", - "@docusaurus/preset-classic": "3.6.0", + "@docusaurus/core": "^3.6.3", + "@docusaurus/preset-classic": "^3.6.3", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "gh-pages": "^6.2.0", @@ -25,9 +25,9 @@ "react-dom": "^18.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.6.0", - "@docusaurus/tsconfig": "3.6.0", - "@docusaurus/types": "3.6.0", + "@docusaurus/module-type-aliases": "^3.6.3", + "@docusaurus/tsconfig": "^3.6.3", + "@docusaurus/types": "^3.6.3", "typescript": "~5.6.2" }, "browserslist": { diff --git a/yarn.lock b/yarn.lock index e071c7895..d8f67aad6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,37 +2,32 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7" - integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== +"@algolia/autocomplete-core@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz#2c410baa94a47c5c5f56ed712bb4a00ebe24088b" + integrity sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q== dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" - "@algolia/autocomplete-shared" "1.9.3" + "@algolia/autocomplete-plugin-algolia-insights" "1.17.7" + "@algolia/autocomplete-shared" "1.17.7" -"@algolia/autocomplete-plugin-algolia-insights@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587" - integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== +"@algolia/autocomplete-plugin-algolia-insights@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz#7d2b105f84e7dd8f0370aa4c4ab3b704e6760d82" + integrity sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A== dependencies: - "@algolia/autocomplete-shared" "1.9.3" + "@algolia/autocomplete-shared" "1.17.7" -"@algolia/autocomplete-preset-algolia@1.17.6": - version "1.17.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.6.tgz#465b652bff5c262aad4da2488d78629cfa906be6" - integrity sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA== +"@algolia/autocomplete-preset-algolia@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz#c9badc0d73d62db5bf565d839d94ec0034680ae9" + integrity sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA== dependencies: - "@algolia/autocomplete-shared" "1.17.6" + "@algolia/autocomplete-shared" "1.17.7" -"@algolia/autocomplete-shared@1.17.6": - version "1.17.6" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.6.tgz#ad951632b6d477d4ba9a68a347e1702d26009d58" - integrity sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw== - -"@algolia/autocomplete-shared@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" - integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== +"@algolia/autocomplete-shared@1.17.7": + version "1.17.7" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz#105e84ad9d1a31d3fb86ba20dc890eefe1a313a0" + integrity sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg== "@algolia/cache-browser-local-storage@4.24.0": version "4.24.0" @@ -53,15 +48,15 @@ dependencies: "@algolia/cache-common" "4.24.0" -"@algolia/client-abtesting@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.12.0.tgz#45175422ee85d505ff6a16d1634a739478a6ad0b" - integrity sha512-hx4eVydkm3yrFCFxmcBtSzI/ykt0cZ6sDWch+v3JTgKpD2WtosMJU3Upv1AjQ4B6COSHCOWEX3vfFxW6OoH6aA== +"@algolia/client-abtesting@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.16.0.tgz#806d2da147c7bffab23ea2498e602a73432a8490" + integrity sha512-fqQ2Szc6zxqXyQF8Vr64QMVoqFHHDsR5gEr/Eki+q+lgERvGr3YXruiB7Xs8rDTXP6+NC3tM2sZjdaEXW/P+6Q== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" "@algolia/client-account@4.24.0": version "4.24.0" @@ -82,15 +77,15 @@ "@algolia/requester-common" "4.24.0" "@algolia/transporter" "4.24.0" -"@algolia/client-analytics@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.12.0.tgz#e387f4de01f4fb549b7506762003bef335be2927" - integrity sha512-EpTsSv6IW8maCfXCDIptgT7+mQJj7pImEkcNUnxR8yUKAHzTogTXv9yGm2WXOZFVuwstd2i0sImhQ1Vz8RH/hA== +"@algolia/client-analytics@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.16.0.tgz#a923f43059b674239e6125f9a917cd25104e79dd" + integrity sha512-8HqIoGUwjc/XqjA+AjpRvtB40QzQ067qHuJujkR0k6WBLEM3OiB30FOfLZLabxnPIZgU55zmQ8exe+0WpgyKqA== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" "@algolia/client-common@4.24.0": version "4.24.0" @@ -100,20 +95,20 @@ "@algolia/requester-common" "4.24.0" "@algolia/transporter" "4.24.0" -"@algolia/client-common@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.12.0.tgz#e33b6fefb333beb56eb58ab7424fcd7ec11ac7d0" - integrity sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q== +"@algolia/client-common@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.16.0.tgz#4e53548c6a83fa6c6d1856053347506c426aabae" + integrity sha512-4Bzvs5cdZ2MTMQvDlsmruZfyEk/NhSdsc+tA3vH9iMGIRzOj7Y9mwITpJM+hLFhbSE9Q0p0ojTF03RoDVclsZA== -"@algolia/client-insights@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.12.0.tgz#bb80c4227178b452dd93a649b9991b8140cba52d" - integrity sha512-8alajmsYUd+7vfX5lpRNdxqv3Xx9clIHLUItyQK0Z6gwGMbVEFe6YYhgDtwslMAP0y6b0WeJEIZJMLgT7VYpRw== +"@algolia/client-insights@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.16.0.tgz#69d9d9077a1977320ca325a7f8c9c31b0aaead31" + integrity sha512-vIiOK8+exA0AOlR9mRDUr148Rx3WNU73whaJtciYoqeHoy/utib+m3Lw1+6s0o7OuPb/wGRoJ1l5vQuVezVHgA== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" "@algolia/client-personalization@4.24.0": version "4.24.0" @@ -124,25 +119,25 @@ "@algolia/requester-common" "4.24.0" "@algolia/transporter" "4.24.0" -"@algolia/client-personalization@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.12.0.tgz#ad711245403754686efff6a65d6c83877e64ecfa" - integrity sha512-bUV9HtfkTBgpoVhxFrMkmVPG03ZN1Rtn51kiaEtukucdk3ggjR9Qu1YUfRSU2lFgxr9qJc8lTxwfvhjCeJRcqw== +"@algolia/client-personalization@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.16.0.tgz#dab4d8e694cc0d76196e64e5c90059a78b511450" + integrity sha512-psAzXJgzqPMCID31wrWVRg19K+h5TsLKSv6YfzQhB5munnj4IAE2lxEet2hDkji7vPA0WWpXGAW5Tx0scyMvkA== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" -"@algolia/client-query-suggestions@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.12.0.tgz#fc3bbf6d86e8989bb8487dc69ec49743fa75ceb4" - integrity sha512-Q5CszzGWfxbIDs9DJ/QJsL7bP6h+lJMg27KxieEnI9KGCu0Jt5iFA3GkREkgRZxRdzlHbZKkrIzhtHVbSHw/rg== +"@algolia/client-query-suggestions@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.16.0.tgz#d515b0f246c3872b54053bc57b4c0b3be416ece7" + integrity sha512-ygek1jdrAbw/tUIyHkK4YrH3uQoRmBbSUvZl8NBbz0S0GxjR6bhPbDZT8ny1INIMCA3KlYHPZAlCS+02RtvDyg== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" "@algolia/client-search@4.24.0": version "4.24.0" @@ -153,30 +148,30 @@ "@algolia/requester-common" "4.24.0" "@algolia/transporter" "4.24.0" -"@algolia/client-search@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.12.0.tgz#cd3eb4854664177d6e992bb2b942e2a12e4cb919" - integrity sha512-R3qzEytgVLHOGNri+bpta6NtTt7YtkvUe/QBcAmMDjW4Jk1P0eBYIPfvnzIPbINRsLxIq9fZs9uAYBgsrts4Zg== +"@algolia/client-search@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.16.0.tgz#f9a4d3754b3f0d3ec2ea6af76268edbc9cf39de2" + integrity sha512-mVnkDZjpbiqdXRz0NrQlx6+QsnKYENuruYyjTJNcG3qAe015tvGAHcvvzRT78ZxETS7WjruWSlXBcL5llycNsQ== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.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/ingestion@1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.12.0.tgz#01a297fb2a58019595e5d74e95939da033a18194" - integrity sha512-zpHo6qhR22tL8FsdSI4DvEraPDi/019HmMrCFB/TUX98yzh5ooAU7sNW0qPL1I7+S++VbBmNzJOEU9VI8tEC8A== +"@algolia/ingestion@1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.16.0.tgz#f68a803bf6949a585ccf61021206310930950452" + integrity sha512-nmLcQYeG1YYRDAv2U+ebBD23mBSfkmhSwdDx2DBzqupStNrYWqYHsNgATLTMtMUTfgD0nSgBl5c+03yXg5WpiQ== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" "@algolia/logger-common@4.24.0": version "4.24.0" @@ -190,15 +185,15 @@ dependencies: "@algolia/logger-common" "4.24.0" -"@algolia/monitoring@1.12.0": - version "1.12.0" - resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.12.0.tgz#f510bfd9d09352b31ccce293d1fd84cdea59354c" - integrity sha512-i2AJZED/zf4uhxezAJUhMKoL5QoepCBp2ynOYol0N76+TSoohaMADdPnWCqOULF4RzOwrG8wWynAwBlXsAI1RQ== +"@algolia/monitoring@1.16.0": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.16.0.tgz#f6e838df45f06e951ec7ac40f697b8bc5f3607e0" + integrity sha512-tiDkoQOO/d4o8W6dEnpCIMCWp6mwdjqZ+Q51QiCKvz1vcYU/YEx4lleY9oadjAMoOVWZHL6ItEF1LbQHvVNogQ== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" "@algolia/recommend@4.24.0": version "4.24.0" @@ -217,15 +212,15 @@ "@algolia/requester-node-http" "4.24.0" "@algolia/transporter" "4.24.0" -"@algolia/recommend@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.12.0.tgz#bc9f69c78c08ba9a3579e7fe2a0f4037b494cc55" - integrity sha512-0jmZyKvYnB/Bj5c7WKsKedOUjnr0UtXm0LVFUdQrxXfqOqvWv9n6Vpr65UjdYG4Q49kRQxhlwtal9WJYrYymXg== +"@algolia/recommend@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.16.0.tgz#df9eac25697b3208bd77b72ec5a9e90bcef72a04" + integrity sha512-hehiMLsDnXnnZGXXKdeXUsvP3PwqAKL/rT4XutkYXsqQ1Jnv4EFrMOY8morUT8nlPv7d1bHPF+bTiNaKvkbBbA== dependencies: - "@algolia/client-common" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" + "@algolia/client-common" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" "@algolia/requester-browser-xhr@4.24.0": version "4.24.0" @@ -234,24 +229,24 @@ dependencies: "@algolia/requester-common" "4.24.0" -"@algolia/requester-browser-xhr@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.12.0.tgz#dba0072d5098a145e4724a723ea1c765b4af0cb6" - integrity sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow== +"@algolia/requester-browser-xhr@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.16.0.tgz#ca9da2695844e698add53cf759b80a6a397f0af2" + integrity sha512-s/ty3lN0Bk9EC6VId/JO+AMOy6s0Hb3IpXUIa4iKKrH7p3n+lTEtwltVjFVW0fq9JfvQdECoaM951K23G/nRtQ== dependencies: - "@algolia/client-common" "5.12.0" + "@algolia/client-common" "5.16.0" "@algolia/requester-common@4.24.0": version "4.24.0" resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.24.0.tgz#1c60c198031f48fcdb9e34c4057a3ea987b9a436" integrity sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA== -"@algolia/requester-fetch@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.12.0.tgz#4db2772b9b0699fdfadbcd7b87e0608a4acf8363" - integrity sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ== +"@algolia/requester-fetch@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.16.0.tgz#8e8799c7c8efd07be4ca4fa4d12cee235eaad714" + integrity sha512-E8euSKDkljYpv5QHOZQrBCMZ4W98PKHRp5Cx8JxMYyyPWQ0xkD9b1c5yvOtJJ1lufqDvcuxvrF4eRBwW+BP3QA== dependencies: - "@algolia/client-common" "5.12.0" + "@algolia/client-common" "5.16.0" "@algolia/requester-node-http@4.24.0": version "4.24.0" @@ -260,12 +255,12 @@ dependencies: "@algolia/requester-common" "4.24.0" -"@algolia/requester-node-http@5.12.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.12.0.tgz#6c6bb47df33351b819790f26346632196c97a3c7" - integrity sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw== +"@algolia/requester-node-http@5.16.0": + version "5.16.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.16.0.tgz#fe883a6f92da5afbb3de778f6c0e43c6c7f9e133" + integrity sha512-gzLIQlgvvXzGExBC8xFVtsiDbenGgANQ+p/lcPO5ERs1ZNGXIqLnyqwP8amZl6YwXJEt4PPXL/p4IytBWs0jUw== dependencies: - "@algolia/client-common" "5.12.0" + "@algolia/client-common" "5.16.0" "@algolia/transporter@4.24.0": version "4.24.0" @@ -284,7 +279,7 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.8.3": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -294,9 +289,9 @@ picocolors "^1.0.0" "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" - integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== "@babel/core@^7.21.3", "@babel/core@^7.25.9": version "7.26.0" @@ -319,13 +314,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.9", "@babel/generator@^7.26.0": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" - integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== +"@babel/generator@^7.25.9", "@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== dependencies: - "@babel/parser" "^7.26.2" - "@babel/types" "^7.26.0" + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -337,14 +332,6 @@ dependencies: "@babel/types" "^7.25.9" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz#f41752fe772a578e67286e6779a68a5a92de1ee9" - integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" @@ -370,18 +357,18 @@ semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz#3e8999db94728ad2b2458d7a470e7770b7764e26" - integrity sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" - regexpu-core "^6.1.1" + regexpu-core "^6.2.0" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -444,14 +431,6 @@ "@babel/helper-optimise-call-expression" "^7.25.9" "@babel/traverse" "^7.25.9" -"@babel/helper-simple-access@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz#6d51783299884a2c74618d6ef0f86820ec2e7739" - integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" @@ -492,12 +471,12 @@ "@babel/template" "^7.25.9" "@babel/types" "^7.26.0" -"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" - integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== +"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== dependencies: - "@babel/types" "^7.26.0" + "@babel/types" "^7.26.3" "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": version "7.25.9" @@ -699,11 +678,10 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-exponentiation-operator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz#ece47b70d236c1d99c263a1e22b62dc20a4c8b0f" - integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9" "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-export-namespace-from@^7.25.9": @@ -767,13 +745,12 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-modules-commonjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz#d165c8c569a080baf5467bda88df6425fc060686" - integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-simple-access" "^7.25.9" "@babel/plugin-transform-modules-systemjs@^7.25.9": version "7.25.9" @@ -997,9 +974,9 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-typescript@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz#69267905c2b33c2ac6d8fe765e9dc2ddc9df3849" - integrity sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== dependencies: "@babel/helper-annotate-as-pure" "^7.25.9" "@babel/helper-create-class-features-plugin" "^7.25.9" @@ -1123,9 +1100,9 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.25.9.tgz#5f473035dc2094bcfdbc7392d0766bd42dce173e" - integrity sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== dependencies: "@babel/helper-plugin-utils" "^7.25.9" "@babel/helper-validator-option" "^7.25.9" @@ -1170,22 +1147,22 @@ "@babel/types" "^7.25.9" "@babel/traverse@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" - integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/generator" "^7.25.9" - "@babel/parser" "^7.25.9" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" "@babel/template" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/types" "^7.26.3" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.4.4": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" - integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== +"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.4.4": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== dependencies: "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" @@ -1195,30 +1172,352 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@csstools/cascade-layer-name-parser@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz#64d128529397aa1e1c986f685713363b262b81b1" + integrity sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA== + +"@csstools/color-helpers@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.1.tgz#829f1c76f5800b79c51c709e2f36821b728e0e10" + integrity sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA== + +"@csstools/css-calc@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.0.tgz#3f28b8f8f736b8f78abbc75eebd55c756207e773" + integrity sha512-X69PmFOrjTZfN5ijxtI8hZ9kRADFSLrmmQ6hgDJ272Il049WGKpDY64KhrFm/7rbWve0z81QepawzjkKlqkNGw== + +"@csstools/css-color-parser@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.6.tgz#e646838f6aab4618aeea7ba0c4921a254e180276" + integrity sha512-S/IjXqTHdpI4EtzGoNCHfqraXF37x12ZZHA1Lk7zoT5pm2lMjFuqhX/89L7dqX4CcMacKK+6ZCs5TmEGb/+wKw== + dependencies: + "@csstools/color-helpers" "^5.0.1" + "@csstools/css-calc" "^2.1.0" + +"@csstools/css-parser-algorithms@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz#74426e93bd1c4dcab3e441f5cc7ba4fb35d94356" + integrity sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A== + +"@csstools/css-tokenizer@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz#a5502c8539265fecbd873c1e395a890339f119c2" + integrity sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw== + +"@csstools/media-query-list-parser@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz#e80e17eba1693fceafb8d6f2cfc68c0e7a9ab78a" + integrity sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A== + +"@csstools/postcss-cascade-layers@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz#9640313e64b5e39133de7e38a5aa7f40dc259597" + integrity sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + +"@csstools/postcss-color-function@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.6.tgz#dabd1e516ccd4c7bd5803e37075a503b5f7f0ac4" + integrity sha512-EcvXfC60cTIumzpsxWuvVjb7rsJEHPvqn3jeMEBUaE3JSc4FRuP7mEQ+1eicxWmIrs3FtzMH9gR3sgA5TH+ebQ== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-color-mix-function@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.6.tgz#d971832ec30b3b60363bceddfeb4b90c7cc0f4b8" + integrity sha512-jVKdJn4+JkASYGhyPO+Wa5WXSx1+oUgaXb3JsjJn/BlrtFh5zjocCY7pwWi0nuP24V1fY7glQsxEYcYNy0dMFg== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-content-alt-text@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz#76f4687fb15ed45bc1139bb71e5775779762897a" + integrity sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-exponential-functions@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.5.tgz#0c39f75df3357ee1e444b0aa0ede4e12aafea0e9" + integrity sha512-mi8R6dVfA2nDoKM3wcEi64I8vOYEgQVtVKCfmLHXupeLpACfGAided5ddMt5f+CnEodNu4DifuVwb0I6fQDGGQ== + dependencies: + "@csstools/css-calc" "^2.1.0" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + +"@csstools/postcss-font-format-keywords@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz#6730836eb0153ff4f3840416cc2322f129c086e6" + integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-gamut-mapping@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.6.tgz#04ec6a50fdbca2a30dec56e6bb780c79621e47a7" + integrity sha512-0ke7fmXfc8H+kysZz246yjirAH6JFhyX9GTlyRnM0exHO80XcA9zeJpy5pOp5zo/AZiC/q5Pf+Hw7Pd6/uAoYA== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + +"@csstools/postcss-gradients-interpolation-method@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.6.tgz#67fa61ada95e4534687fa76cd2d15ac74386560e" + integrity sha512-Itrbx6SLUzsZ6Mz3VuOlxhbfuyLTogG5DwEF1V8dAi24iMuvQPIHd7Ti+pNDp7j6WixndJGZaoNR0f9VSzwuTg== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-hwb-function@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.6.tgz#c40f557a54ed45e75c601a9ba7a08d315f64dbd7" + integrity sha512-927Pqy3a1uBP7U8sTfaNdZVB0mNXzIrJO/GZ8us9219q9n06gOqCdfZ0E6d1P66Fm0fYHvxfDbfcUuwAn5UwhQ== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-ic-unit@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz#b60ec06500717c337447c39ae7fe7952eeb9d48f" + integrity sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-initial@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz#a86f5fc59ab9f16f1422dade4c58bd941af5df22" + integrity sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA== + +"@csstools/postcss-is-pseudo-class@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz#12041448fedf01090dd4626022c28b7f7623f58e" + integrity sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + +"@csstools/postcss-light-dark-function@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz#807c170cd28eebb0c00e64dfc6ab0bf418f19209" + integrity sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-logical-float-and-clear@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz#62617564182cf86ab5d4e7485433ad91e4c58571" + integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ== + +"@csstools/postcss-logical-overflow@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz#c6de7c5f04e3d4233731a847f6c62819bcbcfa1d" + integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA== + +"@csstools/postcss-logical-overscroll-behavior@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz#43c03eaecdf34055ef53bfab691db6dc97a53d37" + integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w== + +"@csstools/postcss-logical-resize@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz#4df0eeb1a61d7bd85395e56a5cce350b5dbfdca6" + integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-logical-viewport-units@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz#f6cc63520ca2a6eb76b9cd946070c38dda66d733" + integrity sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw== + dependencies: + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-media-minmax@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.5.tgz#66970aa8d8057f84b88aff21f385194fbe03eb11" + integrity sha512-sdh5i5GToZOIAiwhdntRWv77QDtsxP2r2gXW/WbLSCoLr00KTq/yiF1qlQ5XX2+lmiFa8rATKMcbwl3oXDMNew== + dependencies: + "@csstools/css-calc" "^2.1.0" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/media-query-list-parser" "^4.0.2" + +"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz#d71102172c74baf3f892fac88cf1ea46a961600d" + integrity sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ== + dependencies: + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/media-query-list-parser" "^4.0.2" + +"@csstools/postcss-nested-calc@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz#754e10edc6958d664c11cde917f44ba144141c62" + integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-normalize-display-values@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" + integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.6.tgz#17e8dfb6422dfd8d77256def5d5be8335ea7af34" + integrity sha512-Hptoa0uX+XsNacFBCIQKTUBrFKDiplHan42X73EklG6XmQLG7/aIvxoNhvZ7PvOWMt67Pw3bIlUY2nD6p5vL8A== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-progressive-custom-properties@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz#ecdb85bcdb1852d73970a214a376684a91f82bdc" + integrity sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-random-function@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-1.0.1.tgz#73a0b62b5dbbc03c25a28f085235eb61b09a2fb0" + integrity sha512-Ab/tF8/RXktQlFwVhiC70UNfpFQRhtE5fQQoP2pO+KCPGLsLdWFiOuHgSRtBOqEshCVAzR4H6o38nhvRZq8deA== + dependencies: + "@csstools/css-calc" "^2.1.0" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + +"@csstools/postcss-relative-color-syntax@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.6.tgz#4b8bc219b34b16f5abdbbcf09ac13e65bff6ef16" + integrity sha512-yxP618Xb+ji1I624jILaYM62uEmZcmbdmFoZHoaThw896sq0vU39kqTTF+ZNic9XyPtPMvq0vyvbgmHaszq8xg== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +"@csstools/postcss-scope-pseudo-class@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz#9fe60e9d6d91d58fb5fc6c768a40f6e47e89a235" + integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q== + dependencies: + postcss-selector-parser "^7.0.0" + +"@csstools/postcss-sign-functions@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.0.tgz#a524fae1374b0e167729f612ca875d7b1b334262" + integrity sha512-SLcc20Nujx/kqbSwDmj6oaXgpy3UjFhBy1sfcqPgDkHfOIfUtUVH7OXO+j7BU4v/At5s61N5ZX6shvgPwluhsA== + dependencies: + "@csstools/css-calc" "^2.1.0" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + +"@csstools/postcss-stepped-value-functions@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.5.tgz#4d68633d502fbe2b6ef3898e368e3540488a0d8a" + integrity sha512-G6SJ6hZJkhxo6UZojVlLo14MohH4J5J7z8CRBrxxUYy9JuZiIqUo5TBYyDGcE0PLdzpg63a7mHSJz3VD+gMwqw== + dependencies: + "@csstools/css-calc" "^2.1.0" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + +"@csstools/postcss-text-decoration-shorthand@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz#251fab0939d50c6fd73bb2b830b2574188efa087" + integrity sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw== + dependencies: + "@csstools/color-helpers" "^5.0.1" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.5.tgz#267b95a8bd45536e0360596b6da660a9eb6aac83" + integrity sha512-/YQThYkt5MLvAmVu7zxjhceCYlKrYddK6LEmK5I4ojlS6BmO9u2yO4+xjXzu2+NPYmHSTtP4NFSamBCMmJ1NJA== + dependencies: + "@csstools/css-calc" "^2.1.0" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + +"@csstools/postcss-unset-value@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba" + integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== + +"@csstools/selector-resolve-nested@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz#704a9b637975680e025e069a4c58b3beb3e2752a" + integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ== + +"@csstools/selector-specificity@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" + integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== + +"@csstools/utilities@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" + integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== + "@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.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.6.3.tgz#d787cc9d27a7e67305fa47d668656eb2e64c4526" - integrity sha512-3uvbg8E7rhqE1C4oBAK3tGlS2qfhi9zpfZgH/yjDPF73vd9B41urVIKujF4rczcF4E3qs34SedhehiDJ4UdNBA== +"@docsearch/css@3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.8.0.tgz#c70a1a326249d878ab7c630d7a908c6769a38db3" + integrity sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA== "@docsearch/react@^3.5.2": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.6.3.tgz#326a0811306060bfb481df3cd0db51adaa9f737c" - integrity sha512-2munr4uBuZq1PG+Ge+F+ldIdxb3Wi8OmEIv2tQQb4RvEvvph+xtQkxwHzVIEnt5s+HecwucuXwB+3JhcZboFLg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.8.0.tgz#c32165e34fadea8a0283c8b61cd73e6e1844797d" + integrity sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q== dependencies: - "@algolia/autocomplete-core" "1.9.3" - "@algolia/autocomplete-preset-algolia" "1.17.6" - "@docsearch/css" "3.6.3" - algoliasearch "^5.11.0" + "@algolia/autocomplete-core" "1.17.7" + "@algolia/autocomplete-preset-algolia" "1.17.7" + "@docsearch/css" "3.8.0" + algoliasearch "^5.12.0" -"@docusaurus/babel@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.6.0.tgz#735a003207925bd782dd08ffa5d8b3503c1f8d72" - integrity sha512-7CsoQFiadoq7AHSUIQNkI/lGfg9AQ2ZBzsf9BqfZGXkHwWDy6twuohEaG0PgQv1npSRSAB2dioVxhRSErnqKNA== +"@docusaurus/babel@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.6.3.tgz#016714fe7a8807d0fc2f7180eace5e82bebbb8a6" + integrity sha512-7dW9Hat9EHYCVicFXYA4hjxBY38+hPuCURL8oRF9fySRm7vzNWuEOghA1TXcykuXZp0HLG2td4RhDxCvGG7tNw== dependencies: "@babel/core" "^7.25.9" "@babel/generator" "^7.25.9" @@ -1230,24 +1529,23 @@ "@babel/runtime" "^7.25.9" "@babel/runtime-corejs3" "^7.25.9" "@babel/traverse" "^7.25.9" - "@docusaurus/logger" "3.6.0" - "@docusaurus/utils" "3.6.0" + "@docusaurus/logger" "3.6.3" + "@docusaurus/utils" "3.6.3" babel-plugin-dynamic-import-node "^2.3.3" fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/bundler@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.6.0.tgz#bdd060ba4d009211348e4e973a3bf4861cf0996b" - integrity sha512-o5T9HXkPKH0OQAifTxEXaebcO8kaz3tU1+wlIShZ2DKJHlsyWX3N4rToWBHroWnV/ZCT2XN3kLRzXASqrnb9Tw== +"@docusaurus/bundler@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.6.3.tgz#f09c2e29613f988b874a4be2247708e121b7fc5c" + integrity sha512-47JLuc8D4wA+6VOvmMd5fUC9rFppBQpQOnxDYiVXffm/DeV/wmm3sbpNd5Y+O+G2+nevLTRnvCm/qyancv0Y3A== dependencies: "@babel/core" "^7.25.9" - "@docusaurus/babel" "3.6.0" - "@docusaurus/cssnano-preset" "3.6.0" - "@docusaurus/logger" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils" "3.6.0" - autoprefixer "^10.4.14" + "@docusaurus/babel" "3.6.3" + "@docusaurus/cssnano-preset" "3.6.3" + "@docusaurus/logger" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils" "3.6.3" babel-loader "^9.2.1" clean-css "^5.3.2" copy-webpack-plugin "^11.0.0" @@ -1260,6 +1558,7 @@ null-loader "^4.0.1" postcss "^8.4.26" postcss-loader "^7.3.3" + postcss-preset-env "^10.1.0" react-dev-utils "^12.0.1" terser-webpack-plugin "^5.3.9" tslib "^2.6.0" @@ -1267,18 +1566,18 @@ webpack "^5.95.0" webpackbar "^6.0.1" -"@docusaurus/core@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.6.0.tgz#b23fc7e253a49cc3e5ac9e091354f497cc0b101b" - integrity sha512-lvRgMoKJJSRDt9+HhAqFcICV4kp/mw1cJJrLxIw4Q2XZnFGM1XUuwcbuaqWmGog+NcOLZaPCcCtZbn60EMCtjQ== - dependencies: - "@docusaurus/babel" "3.6.0" - "@docusaurus/bundler" "3.6.0" - "@docusaurus/logger" "3.6.0" - "@docusaurus/mdx-loader" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-common" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" +"@docusaurus/core@3.6.3", "@docusaurus/core@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.6.3.tgz#6bf968ee26a36d71387bab293f27ccffc0e428b6" + integrity sha512-xL7FRY9Jr5DWqB6pEnqgKqcMPJOX5V0pgWXi5lCiih11sUBmcFKM7c3+GyxcVeeWFxyYSDP3grLTWqJoP4P9Vw== + dependencies: + "@docusaurus/babel" "3.6.3" + "@docusaurus/bundler" "3.6.3" + "@docusaurus/logger" "3.6.3" + "@docusaurus/mdx-loader" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-common" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" boxen "^6.2.1" chalk "^4.1.2" chokidar "^3.5.3" @@ -1316,32 +1615,32 @@ webpack-dev-server "^4.15.2" webpack-merge "^6.0.1" -"@docusaurus/cssnano-preset@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.0.tgz#02378e53e9568ed5fc8871d4fc158ea96fd7421c" - integrity sha512-h3jlOXqqzNSoU+C4CZLNpFtD+v2xr1UBf4idZpwMgqid9r6lb5GS7tWKnQnauio6OipacbHbDXEX3JyT1PlDkg== +"@docusaurus/cssnano-preset@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.3.tgz#ea19b307183ec20dea4927efc4ddf249150b8c6a" + integrity sha512-qP7SXrwZ+23GFJdPN4aIHQrZW+oH/7tzwEuc/RNL0+BdZdmIjYQqUxdXsjE4lFxLNZjj0eUrSNYIS6xwfij+5Q== dependencies: cssnano-preset-advanced "^6.1.2" postcss "^8.4.38" postcss-sort-media-queries "^5.2.0" tslib "^2.6.0" -"@docusaurus/logger@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.6.0.tgz#c7349c2636087f55f573a60a3c7f69b87d59974d" - integrity sha512-BcQhoXilXW0607cH/kO6P5Gt5KxCGfoJ+QDKNf3yO2S09/RsITlW+0QljXPbI3DklTrHrhRDmgGk1yX4nUhWTA== +"@docusaurus/logger@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.6.3.tgz#c6e514c9429487ef38be2f2129b2b842740d92fd" + integrity sha512-xSubJixcNyMV9wMV4q0s47CBz3Rlc5jbcCCuij8pfQP8qn/DIpt0ks8W6hQWzHAedg/J/EwxxUOUrnEoKzJo8g== dependencies: chalk "^4.1.2" tslib "^2.6.0" -"@docusaurus/mdx-loader@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.6.0.tgz#f8ba7af9d59473a7182f6a9307e0432f8dce905b" - integrity sha512-GhRzL1Af/AdSSrGesSPOU/iP/aXadTGmVKuysCxZDrQR2RtBtubQZ9aw+KvdFVV7R4K/CsbgD6J5oqrXlEPk3Q== +"@docusaurus/mdx-loader@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.6.3.tgz#127babc7cdb26d37c723bc3ae518bda17ce40160" + integrity sha512-3iJdiDz9540ppBseeI93tWTDtUGVkxzh59nMq4ignylxMuXBLK8dFqVeaEor23v1vx6TrGKZ2FuLaTB+U7C0QQ== dependencies: - "@docusaurus/logger" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" + "@docusaurus/logger" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" "@mdx-js/mdx" "^3.0.0" "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" @@ -1364,12 +1663,12 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.0.tgz#44083c34a53db1dde06364b4e7f2d144fa2d5394" - integrity sha512-szTrIN/6/fuk0xkf3XbRfdTFJzRQ8d1s3sQj5++58wltrT7v3yn1149oc9ryYjMpRcbsarGloQwMu7ofPe4XPg== +"@docusaurus/module-type-aliases@3.6.3", "@docusaurus/module-type-aliases@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.3.tgz#1f7030b1cf1f658cf664d41b6eadba93bbe51d87" + integrity sha512-MjaXX9PN/k5ugNvfRZdWyKWq4FsrhN4LEXaj0pEmMebJuBNlFeGyKQUa9DRhJHpadNaiMLrbo9m3U7Ig5YlsZg== dependencies: - "@docusaurus/types" "3.6.0" + "@docusaurus/types" "3.6.3" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1377,19 +1676,19 @@ react-helmet-async "*" react-loadable "npm:@docusaurus/react-loadable@6.0.0" -"@docusaurus/plugin-content-blog@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.0.tgz#9128175b4c3ce885d9090183d74c60813844ea8d" - integrity sha512-o4aT1/E0Ldpzs/hQff5uyoSriAhS/yqBhqSn+fvSw465AaqRsva6O7CZSYleuBq6x2bewyE3QJq2PcTiHhAd8g== - dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/logger" "3.6.0" - "@docusaurus/mdx-loader" "3.6.0" - "@docusaurus/theme-common" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-common" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" +"@docusaurus/plugin-content-blog@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.3.tgz#d6a597e4bfdeb3f1f6ce06d2ac86207296988cc9" + integrity sha512-k0ogWwwJU3pFRFfvW1kRVHxzf2DutLGaaLjAnHVEU6ju+aRP0Z5ap/13DHyPOfHeE4WKpn/M0TqjdwZAcY3kAw== + dependencies: + "@docusaurus/core" "3.6.3" + "@docusaurus/logger" "3.6.3" + "@docusaurus/mdx-loader" "3.6.3" + "@docusaurus/theme-common" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-common" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" cheerio "1.0.0-rc.12" feed "^4.2.2" fs-extra "^11.1.1" @@ -1401,20 +1700,20 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.0.tgz#15cae4bf81da0b0ddce09d53b10b7209116ea9c2" - integrity sha512-c5gZOxocJKO/Zev2MEZInli+b+VNswDGuKHE6QtFgidhAJonwjh2kwj967RvWFaMMk62HlLJLZ+IGK2XsVy4Aw== - dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/logger" "3.6.0" - "@docusaurus/mdx-loader" "3.6.0" - "@docusaurus/module-type-aliases" "3.6.0" - "@docusaurus/theme-common" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-common" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" +"@docusaurus/plugin-content-docs@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.3.tgz#aae044d2af6996d1a6de8d815aca8a83b485e0a5" + integrity sha512-r2wS8y/fsaDcxkm20W5bbYJFPzdWdEaTWVYjNxlHlcmX086eqQR1Fomlg9BHTJ0dLXPzAlbC8EN4XqMr3QzNCQ== + dependencies: + "@docusaurus/core" "3.6.3" + "@docusaurus/logger" "3.6.3" + "@docusaurus/mdx-loader" "3.6.3" + "@docusaurus/module-type-aliases" "3.6.3" + "@docusaurus/theme-common" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-common" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" "@types/react-router-config" "^5.0.7" combine-promises "^1.1.0" fs-extra "^11.1.1" @@ -1424,115 +1723,115 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-pages@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.0.tgz#5dd284bf063baaba1e0305c90b1dd0d5acc7e466" - integrity sha512-RKHhJrfkadHc7+tt1cP48NWifOrhkSRMPdXNYytzhoQrXlP6Ph+3tfQ4/n+nT0S3Y9+wwRxYqRqA380ZLt+QtQ== - dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/mdx-loader" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" +"@docusaurus/plugin-content-pages@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.3.tgz#0a5a43d1677ee519f63a54634653c54ddf41f475" + integrity sha512-eHrmTgjgLZsuqfsYr5X2xEwyIcck0wseSofWrjTwT9FLOWp+KDmMAuVK+wRo7sFImWXZk3oV/xX/g9aZrhD7OA== + dependencies: + "@docusaurus/core" "3.6.3" + "@docusaurus/mdx-loader" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" fs-extra "^11.1.1" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/plugin-debug@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.6.0.tgz#0a6da9ba31a0acb176ae2762b4d6b96b1906c826" - integrity sha512-o8T1Rl94COLdSlKvjYLQpRJQRU8WWZ8EX1B0yV0dQLNN8reyH7MQW+6z1ig4sQFfH3pnjPWVGHfuEjcib5m7Eg== +"@docusaurus/plugin-debug@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.6.3.tgz#4e62ddfbae4d597b073f8e3c632cc12d012339e3" + integrity sha512-zB9GXfIZNPRfzKnNjU6xGVrqn9bPXuGhpjgsuc/YtcTDjnjhasg38NdYd5LEqXex5G/zIorQgWB3n6x/Ut62vQ== dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils" "3.6.0" + "@docusaurus/core" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils" "3.6.3" fs-extra "^11.1.1" react-json-view-lite "^1.2.0" tslib "^2.6.0" -"@docusaurus/plugin-google-analytics@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.0.tgz#9e8245eef1bee95e44ef2af92ce3e844a8e93e64" - integrity sha512-kgRFbfpi6Hshj75YUztKyEMtI/kw0trPRwoTN4g+W1NK99R/vh8phTvhBTIMnDbetU79795LkwfG0rZ/ce6zWQ== +"@docusaurus/plugin-google-analytics@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.3.tgz#63648d469b1e3c50fad8878e7a7db9856e503d5f" + integrity sha512-rCDNy1QW8Dag7nZq67pcum0bpFLrwvxJhYuVprhFh8BMBDxV0bY+bAkGHbSf68P3Bk9C3hNOAXX1srGLIDvcTA== dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" + "@docusaurus/core" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" tslib "^2.6.0" -"@docusaurus/plugin-google-gtag@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.0.tgz#bed8381fe3ab357d56a565f657e38d8ea6272703" - integrity sha512-nqu4IfjaO4UX+dojHL2BxHRS+sKj31CIMWYo49huQ3wTET0Oc3u/WGTaKd3ShTPDhkgiRhTOSTPUwJWrU55nHg== +"@docusaurus/plugin-google-gtag@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.3.tgz#8a1388b4123904be17e661ea7aa71d798d0c046e" + integrity sha512-+OyDvhM6rqVkQOmLVkQWVJAizEEfkPzVWtIHXlWPOCFGK9X4/AWeBSrU0WG4iMg9Z4zD4YDRrU+lvI4s6DSC+w== dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" + "@docusaurus/core" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" "@types/gtag.js" "^0.0.12" tslib "^2.6.0" -"@docusaurus/plugin-google-tag-manager@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.0.tgz#326382de05888ea4317837be736eabd635adbc71" - integrity sha512-OU6c5xI0nOVbEc9eImGvvsgNWe4vGm97t/W3aLHjWsHyNk3uwFNBQMHRvBUwAi9k/K3kyC5E7DWnc67REhdLOw== +"@docusaurus/plugin-google-tag-manager@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.3.tgz#38cbe416803f29782807cebf3ebf240cb47c3c74" + integrity sha512-1M6UPB13gWUtN2UHX083/beTn85PlRI9ABItTl/JL1FJ5dJTWWFXXsHf9WW/6hrVwthwTeV/AGbGKvLKV+IlCA== dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" + "@docusaurus/core" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" tslib "^2.6.0" -"@docusaurus/plugin-sitemap@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.0.tgz#c7c93f75f03391ca9071da48563fc4faa84966bc" - integrity sha512-YB5XMdf9FjLhgbHY/cDbYhVxsgcpPIjxY9769HUgFOB7GVzItTLOR71W035R1BiR2CA5QAn3XOSg36WLRxlhQQ== - dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/logger" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-common" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" +"@docusaurus/plugin-sitemap@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.3.tgz#0458e6f7476ab6fd1466e01b153a3211d3223c53" + integrity sha512-94qOO4M9Fwv9KfVQJsgbe91k+fPJ4byf1L3Ez8TUa6TAFPo/BrLwQ80zclHkENlL1824TuxkcMKv33u6eydQCg== + dependencies: + "@docusaurus/core" "3.6.3" + "@docusaurus/logger" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-common" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" fs-extra "^11.1.1" sitemap "^7.1.1" tslib "^2.6.0" -"@docusaurus/preset-classic@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.6.0.tgz#71561f366a266be571022764eb8b9e5618f573eb" - integrity sha512-kpGNdQzr/Dpm7o3b1iaQrz4DMDx3WIeBbl4V4P4maa2zAQkTdlaP4CMgA5oKrRrpqPLnQFsUM/b+qf2glhl2Tw== - dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/plugin-content-blog" "3.6.0" - "@docusaurus/plugin-content-docs" "3.6.0" - "@docusaurus/plugin-content-pages" "3.6.0" - "@docusaurus/plugin-debug" "3.6.0" - "@docusaurus/plugin-google-analytics" "3.6.0" - "@docusaurus/plugin-google-gtag" "3.6.0" - "@docusaurus/plugin-google-tag-manager" "3.6.0" - "@docusaurus/plugin-sitemap" "3.6.0" - "@docusaurus/theme-classic" "3.6.0" - "@docusaurus/theme-common" "3.6.0" - "@docusaurus/theme-search-algolia" "3.6.0" - "@docusaurus/types" "3.6.0" - -"@docusaurus/theme-classic@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.6.0.tgz#8f34b65c85f5082deb3633a893974d2eee309121" - integrity sha512-sAXNfwPL6uRD+BuHuKXZfAXud7SS7IK/JdrPuzyQxdO1gJKzI5GFfe1ED1QoJDNWJWJ01JHE5rSnwYLEADc2rQ== - dependencies: - "@docusaurus/core" "3.6.0" - "@docusaurus/logger" "3.6.0" - "@docusaurus/mdx-loader" "3.6.0" - "@docusaurus/module-type-aliases" "3.6.0" - "@docusaurus/plugin-content-blog" "3.6.0" - "@docusaurus/plugin-content-docs" "3.6.0" - "@docusaurus/plugin-content-pages" "3.6.0" - "@docusaurus/theme-common" "3.6.0" - "@docusaurus/theme-translations" "3.6.0" - "@docusaurus/types" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-common" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" +"@docusaurus/preset-classic@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.6.3.tgz#072298b5b6d0de7d0346b1e9b550a30ef2add56d" + integrity sha512-VHSYWROT3flvNNI1SrnMOtW1EsjeHNK9dhU6s9eY5hryZe79lUqnZJyze/ymDe2LXAqzyj6y5oYvyBoZZk6ErA== + dependencies: + "@docusaurus/core" "3.6.3" + "@docusaurus/plugin-content-blog" "3.6.3" + "@docusaurus/plugin-content-docs" "3.6.3" + "@docusaurus/plugin-content-pages" "3.6.3" + "@docusaurus/plugin-debug" "3.6.3" + "@docusaurus/plugin-google-analytics" "3.6.3" + "@docusaurus/plugin-google-gtag" "3.6.3" + "@docusaurus/plugin-google-tag-manager" "3.6.3" + "@docusaurus/plugin-sitemap" "3.6.3" + "@docusaurus/theme-classic" "3.6.3" + "@docusaurus/theme-common" "3.6.3" + "@docusaurus/theme-search-algolia" "3.6.3" + "@docusaurus/types" "3.6.3" + +"@docusaurus/theme-classic@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.6.3.tgz#00599a9de5fd5c122fd1b8c59d3b755878f2a72c" + integrity sha512-1RRLK1tSArI2c00qugWYO3jRocjOZwGF1mBzPPylDVRwWCS/rnWWR91ChdbbaxIupRJ+hX8ZBYrwr5bbU0oztQ== + dependencies: + "@docusaurus/core" "3.6.3" + "@docusaurus/logger" "3.6.3" + "@docusaurus/mdx-loader" "3.6.3" + "@docusaurus/module-type-aliases" "3.6.3" + "@docusaurus/plugin-content-blog" "3.6.3" + "@docusaurus/plugin-content-docs" "3.6.3" + "@docusaurus/plugin-content-pages" "3.6.3" + "@docusaurus/theme-common" "3.6.3" + "@docusaurus/theme-translations" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-common" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" "@mdx-js/react" "^3.0.0" clsx "^2.0.0" copy-text-to-clipboard "^3.2.0" @@ -1547,15 +1846,15 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.6.0.tgz#9a061d278df76da0f70a9465cd0b7299c14d03d3" - integrity sha512-frjlYE5sRs+GuPs4XXlp9aMLI2O4H5FPpznDAXBrCm+8EpWRiIb443ePMxM3IyMCQ5bwFlki0PI9C+r4apstnw== +"@docusaurus/theme-common@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.6.3.tgz#a8a6ebd2b0fd7a5cca4d0c6a2f9ccff905fa7438" + integrity sha512-b8ZkhczXHDxWWyvz+YJy4t/PlPbEogTTbgnHoflYnH7rmRtyoodTsu8WVM12la5LmlMJBclBXFl29OH8kPE7gg== dependencies: - "@docusaurus/mdx-loader" "3.6.0" - "@docusaurus/module-type-aliases" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-common" "3.6.0" + "@docusaurus/mdx-loader" "3.6.3" + "@docusaurus/module-type-aliases" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-common" "3.6.3" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1565,19 +1864,19 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.0.tgz#47dcfca68f50163abce411dd9b181855a9ec9c83" - integrity sha512-4IwRUkxjrisR8LXBHeE4d2btraWdMficbgiVL3UHvJURmyvgzMBZQP8KrK8rjdXeu8SuRxSmeV6NSVomRvdbEg== +"@docusaurus/theme-search-algolia@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.3.tgz#1a3331a489f392f5b032c4efc5f431e57eddf7ce" + integrity sha512-rt+MGCCpYgPyWCGXtbxlwFbTSobu15jWBTPI2LHsHNa5B0zSmOISX6FWYAPt5X1rNDOqMGM0FATnh7TBHRohVA== dependencies: "@docsearch/react" "^3.5.2" - "@docusaurus/core" "3.6.0" - "@docusaurus/logger" "3.6.0" - "@docusaurus/plugin-content-docs" "3.6.0" - "@docusaurus/theme-common" "3.6.0" - "@docusaurus/theme-translations" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-validation" "3.6.0" + "@docusaurus/core" "3.6.3" + "@docusaurus/logger" "3.6.3" + "@docusaurus/plugin-content-docs" "3.6.3" + "@docusaurus/theme-common" "3.6.3" + "@docusaurus/theme-translations" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-validation" "3.6.3" algoliasearch "^4.18.0" algoliasearch-helper "^3.13.3" clsx "^2.0.0" @@ -1587,23 +1886,23 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.6.0.tgz#93994e931f340c1712c81ac80dbab5750c24634f" - integrity sha512-L555X8lWE3fv8VaF0Bc1VnAgi10UvRKFcvADHiYR7Gj37ItaWP5i7xLHsSw7fi/SHTXe5wfIeCFNqUYHyCOHAQ== +"@docusaurus/theme-translations@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.6.3.tgz#6e473835ea016ce4acd7d2997f411811db8c4f6b" + integrity sha512-Gb0regclToVlngSIIwUCtBMQBq48qVUaN1XQNKW4XwlsgUyk0vP01LULdqbem7czSwIeBAFXFoORJ0RPX7ht/w== dependencies: fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/tsconfig@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.6.0.tgz#4be9d0469e5f3683cd6e2d33bc8e963d9878f751" - integrity sha512-1nHsSMlNgEifnvsL4ql9wx7I1xXhrrNZl65IKD11pdo/749oI9fMcvm47dDwgS57x1WEteIAxJjzidffa5J9TQ== +"@docusaurus/tsconfig@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.6.3.tgz#8af20c45f0a67e193debedcb341c0a1e78b1dd63" + integrity sha512-1pT/rTrRpMV15E4tJH95W5PrjboMn5JkKF+Ys8cTjMegetiXjs0gPFOSDA5hdTlberKQLDO50xPjMJHondLuzA== -"@docusaurus/types@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.6.0.tgz#8fa82332a7c7b8093b5c55e1115f5854ce484978" - integrity sha512-jADLgoZGWhAzThr+mRiyuFD4OUzt6jHnb7NRArRKorgxckqUBaPyFOau9hhbcSTHtU6ceyeWjN7FDt7uG2Hplw== +"@docusaurus/types@3.6.3", "@docusaurus/types@^3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.6.3.tgz#e87592e31616da1b8dc473e4c8205c61885a1518" + integrity sha512-xD9oTGDrouWzefkhe9ogB2fDV96/82cRpNGx2HIvI5L87JHNhQVIWimQ/3JIiiX/TEd5S9s+VO6FFguwKNRVow== dependencies: "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" @@ -1615,34 +1914,36 @@ webpack "^5.95.0" webpack-merge "^5.9.0" -"@docusaurus/utils-common@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.6.0.tgz#11855ea503132bbcaba6ca4d351293ff10a75d34" - integrity sha512-diUDNfbw33GaZMmKwdTckT2IBfVouXLXRD+zphH9ywswuaEIKqixvuf5g41H7MBBrlMsxhna3uTMoB4B/OPDcA== +"@docusaurus/utils-common@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.6.3.tgz#57f840bd6f0928cf10060198cb421f1b9212c8f5" + integrity sha512-v4nKDaANLgT3pMBewHYEMAl/ufY0LkXao1QkFWzI5huWFOmNQ2UFzv2BiKeHX5Ownis0/w6cAyoxPhVdDonlSQ== dependencies: + "@docusaurus/types" "3.6.3" tslib "^2.6.0" -"@docusaurus/utils-validation@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.6.0.tgz#5557ca14fa64ac29e6f70e61006be721395ecde5" - integrity sha512-CRHiKKJEKA0GFlfOf71JWHl7PtwOyX0+Zg9ep9NFEZv6Lcx3RJ9nhl7p8HRjPL6deyYceavM//BsfW4pCI4BtA== +"@docusaurus/utils-validation@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.6.3.tgz#3eca7125235eb90983ff660b97a71f331e331f57" + integrity sha512-bhEGGiN5BE38h21vjqD70Gxg++j+PfYVddDUE5UFvLDup68QOcpD33CLr+2knPorlxRbEaNfz6HQDUMQ3HuqKw== dependencies: - "@docusaurus/logger" "3.6.0" - "@docusaurus/utils" "3.6.0" - "@docusaurus/utils-common" "3.6.0" + "@docusaurus/logger" "3.6.3" + "@docusaurus/utils" "3.6.3" + "@docusaurus/utils-common" "3.6.3" fs-extra "^11.2.0" joi "^17.9.2" js-yaml "^4.1.0" lodash "^4.17.21" tslib "^2.6.0" -"@docusaurus/utils@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.6.0.tgz#192785da6fd62dfd83d6f1879c3aa45547f5df23" - integrity sha512-VKczAutI4mptiAw/WcYEu5WeVhQ6Q1zdIUl64SGw9K++9lziH+Kt10Ee8l2dMpRkiUk6zzK20kMNlX2WCUwXYQ== +"@docusaurus/utils@3.6.3": + version "3.6.3" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.6.3.tgz#8dcb1969e4011a84dfb0a031da806dadddebf0ea" + integrity sha512-0R/FR3bKVl4yl8QwbL4TYFfR+OXBRpVUaTJdENapBGR3YMwfM6/JnhGilWQO8AOwPJGtGoDK7ib8+8UF9f3OZQ== dependencies: - "@docusaurus/logger" "3.6.0" - "@docusaurus/utils-common" "3.6.0" + "@docusaurus/logger" "3.6.3" + "@docusaurus/types" "3.6.3" + "@docusaurus/utils-common" "3.6.3" "@svgr/webpack" "^8.1.0" escape-string-regexp "^4.0.0" file-loader "^6.2.0" @@ -2054,9 +2355,9 @@ integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz#3c9997ae9d00bc236e45c6374e84f2596458d9db" - integrity sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA== + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz#812d2871e5eea17fb0bd5214dda7a7b748c0e12a" + integrity sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2186,11 +2487,11 @@ "@types/node" "*" "@types/node@*": - version "22.8.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.8.7.tgz#04ab7a073d95b4a6ee899f235d43f3c320a976f4" - integrity sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q== + version "22.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" + integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== dependencies: - undici-types "~6.19.8" + undici-types "~6.20.0" "@types/node@^17.0.5": version "17.0.45" @@ -2207,15 +2508,10 @@ resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6" integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== -"@types/prop-types@*": - version "15.7.13" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451" - integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== - "@types/qs@*": - version "6.9.16" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + version "6.9.17" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a" + integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== "@types/range-parser@*": version "1.2.7" @@ -2249,11 +2545,10 @@ "@types/react" "*" "@types/react@*": - version "18.3.12" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" - integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== + version "19.0.1" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.1.tgz#a000d5b78f473732a08cecbead0f3751e550b3df" + integrity sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ== dependencies: - "@types/prop-types" "*" csstype "^3.0.2" "@types/retry@0.12.0": @@ -2329,129 +2624,129 @@ "@types/yargs-parser" "*" "@ungap/structured-clone@^1.0.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" - integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" - integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" + version "1.2.1" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" + integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== + +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== + +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== + +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== + +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-wasm-section@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" - integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.12.1" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" - integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-opt" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - "@webassemblyjs/wast-printer" "1.12.1" - -"@webassemblyjs/wasm-gen@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" - integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" - integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" - integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" - integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== - dependencies: - "@webassemblyjs/ast" "1.12.1" +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -2542,9 +2837,9 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" algoliasearch-helper@^3.13.3: - version "3.22.5" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz#2fcc26814e10a121a2c2526a1b05c754061c56c0" - integrity sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw== + version "3.22.6" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.22.6.tgz#6a31c67d277a32f3f7ae1b8a6e57ca73f1e1a0b0" + integrity sha512-F2gSb43QHyvZmvH/2hxIjbk/uFdO2MguQYTFP7J+RowMW1csjIODMobEnpLI8nbLQuzZnGZdIxl5Bpy1k9+CFQ== dependencies: "@algolia/events" "^4.0.1" @@ -2569,24 +2864,24 @@ algoliasearch@^4.18.0: "@algolia/requester-node-http" "4.24.0" "@algolia/transporter" "4.24.0" -algoliasearch@^5.11.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.12.0.tgz#2e822a7916d691e55058ea7dba277d5110969dd0" - integrity sha512-psGBRYdGgik8I6m28iAB8xpubvjEt7UQU+w5MAJUA2324WHiGoHap5BPkkjB14rMaXeRts6pmOsrVIglGyOVwg== - dependencies: - "@algolia/client-abtesting" "5.12.0" - "@algolia/client-analytics" "5.12.0" - "@algolia/client-common" "5.12.0" - "@algolia/client-insights" "5.12.0" - "@algolia/client-personalization" "5.12.0" - "@algolia/client-query-suggestions" "5.12.0" - "@algolia/client-search" "5.12.0" - "@algolia/ingestion" "1.12.0" - "@algolia/monitoring" "1.12.0" - "@algolia/recommend" "5.12.0" - "@algolia/requester-browser-xhr" "5.12.0" - "@algolia/requester-fetch" "5.12.0" - "@algolia/requester-node-http" "5.12.0" +algoliasearch@^5.12.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.16.0.tgz#5a1768ae6846c93a8314ecdf1521dd11ce6c80b0" + integrity sha512-0zWz0LGfB0MLrhcnyGDpvVWPSsZnECNU6V/GPtNkHHSgaUj/7i+j36bZm6HClCvo8GvuxbN+ccbFREWUouHlfg== + dependencies: + "@algolia/client-abtesting" "5.16.0" + "@algolia/client-analytics" "5.16.0" + "@algolia/client-common" "5.16.0" + "@algolia/client-insights" "5.16.0" + "@algolia/client-personalization" "5.16.0" + "@algolia/client-query-suggestions" "5.16.0" + "@algolia/client-search" "5.16.0" + "@algolia/ingestion" "1.16.0" + "@algolia/monitoring" "1.16.0" + "@algolia/recommend" "5.16.0" + "@algolia/requester-browser-xhr" "5.16.0" + "@algolia/requester-fetch" "5.16.0" + "@algolia/requester-node-http" "5.16.0" ansi-align@^3.0.1: version "3.0.1" @@ -2679,7 +2974,7 @@ at-least-node@^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.4.14, autoprefixer@^10.4.19: +autoprefixer@^10.4.19: version "10.4.20" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== @@ -2707,12 +3002,12 @@ babel-plugin-dynamic-import-node@^2.3.3: object.assign "^4.1.0" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.3" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.6: @@ -2724,11 +3019,11 @@ babel-plugin-polyfill-corejs3@^0.10.6: core-js-compat "^3.38.0" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.3" bail@^2.0.0: version "2.0.2" @@ -2774,9 +3069,9 @@ body-parser@1.20.3: unpipe "1.0.0" bonjour-service@^1.0.11: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" - integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== dependencies: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -2829,7 +3124,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.23.0, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.2: +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.2: version "4.24.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== @@ -2872,16 +3167,23 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" -call-bind@^1.0.5, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind-apply-helpers@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== dependencies: - es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" + +call-bind@^1.0.5, call-bind@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + set-function-length "^1.2.2" callsites@^3.0.0: version "3.1.0" @@ -2917,9 +3219,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: - version "1.0.30001677" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz#27c2e2c637e007cfa864a16f7dfe7cde66b38b5f" - integrity sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog== + version "1.0.30001687" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz#d0ac634d043648498eedf7a3932836beba90ebae" + integrity sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ== ccount@^2.0.0: version "2.0.1" @@ -3278,9 +3580,9 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: path-type "^4.0.0" 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== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -3293,11 +3595,27 @@ crypto-random-string@^4.0.0: dependencies: type-fest "^1.0.1" +css-blank-pseudo@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46" + integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== + dependencies: + postcss-selector-parser "^7.0.0" + css-declaration-sorter@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== +css-has-pseudo@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.1.tgz#adbb51821e51f7a7c1d2df4d12827870cc311137" + integrity sha512-EOcoyJt+OsuKfCADgLT7gADZI5jMzIe/AeI6MeAYKiFBDmNmM7kk46DtSfMj5AohUJisqVzopBpnQTlvbyaBWg== + dependencies: + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.2.0" + css-loader@^6.8.1: version "6.11.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" @@ -3324,6 +3642,11 @@ css-minimizer-webpack-plugin@^5.0.1: schema-utils "^4.0.1" serialize-javascript "^6.0.1" +css-prefers-color-scheme@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c" + integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== + css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -3367,6 +3690,11 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +cssdb@^8.2.1: + version "8.2.3" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.2.3.tgz#7e6980bb5a785a9b4eb2a21bd38d50624b56cb46" + integrity sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3459,9 +3787,9 @@ debug@2.6.9, debug@^2.6.0: ms "2.0.0" debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" @@ -3677,6 +4005,15 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" +dunder-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80" + integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -3693,9 +4030,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.5.41: - version "1.5.50" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz#d9ba818da7b2b5ef1f3dd32bce7046feb7e93234" - integrity sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw== + version "1.5.72" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz#a732805986d3a5b5fedd438ddf4616c7d78ac2df" + integrity sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw== email-addresses@^5.0.0: version "5.0.0" @@ -3762,12 +4099,10 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" @@ -3969,9 +4304,9 @@ execa@^5.0.0: strip-final-newline "^2.0.0" express@^4.17.3: - version "4.21.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" - integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== + version "4.21.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" @@ -3992,7 +4327,7 @@ express@^4.17.3: methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.10" + path-to-regexp "0.1.12" proxy-addr "~2.0.7" qs "6.13.0" range-parser "~1.2.1" @@ -4271,16 +4606,19 @@ gensync@^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.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.5.tgz#dfe7dd1b30761b464fe51bf4bb00ac7c37b681e7" + integrity sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg== dependencies: + call-bind-apply-helpers "^1.0.0" + dunder-proto "^1.0.0" + es-define-property "^1.0.1" es-errors "^1.3.0" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" @@ -4392,12 +4730,10 @@ globby@^13.1.1: 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" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== got@^12.1.0: version "12.6.1" @@ -4460,22 +4796,17 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -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-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-yarn@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== -hasown@^2.0.0, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -4483,14 +4814,14 @@ hasown@^2.0.0, hasown@^2.0.2: function-bind "^1.1.2" hast-util-from-parse5@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz#654a5676a41211e14ee80d1b1758c399a0327651" - integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== + version "8.0.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz#29b42758ba96535fd6021f0f533c000886c0f00f" + integrity sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" devlop "^1.0.0" - hastscript "^8.0.0" + hastscript "^9.0.0" property-information "^6.0.0" vfile "^6.0.0" vfile-location "^5.0.0" @@ -4504,9 +4835,9 @@ hast-util-parse-selector@^4.0.0: "@types/hast" "^3.0.0" hast-util-raw@^9.0.0: - version "9.0.4" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.0.4.tgz#2da03e37c46eb1a6f1391f02f9b84ae65818f7ed" - integrity sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA== + version "9.1.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" + integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -4585,10 +4916,10 @@ hast-util-whitespace@^3.0.0: dependencies: "@types/hast" "^3.0.0" -hastscript@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-8.0.0.tgz#4ef795ec8dee867101b9f23cc830d4baf4fd781a" - integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== +hastscript@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.0.tgz#2b76b9aa3cba8bf6d5280869f6f6f7165c230763" + integrity sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw== dependencies: "@types/hast" "^3.0.0" comma-separated-tokens "^2.0.0" @@ -5220,9 +5551,9 @@ leven@^3.1.0: integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== lilconfig@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" - integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: version "1.2.4" @@ -5612,9 +5943,9 @@ methods@~1.1.2: integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromark-core-commonmark@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz#9a45510557d068605c6e9a80f282b2bb8581e43d" - integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" + integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== dependencies: decode-named-character-reference "^1.0.0" devlop "^1.0.0" @@ -5803,18 +6134,18 @@ micromark-extension-mdxjs@^3.0.0: micromark-util-types "^2.0.0" micromark-factory-destination@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" - integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== dependencies: micromark-util-character "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-factory-label@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" - integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== dependencies: devlop "^1.0.0" micromark-util-character "^2.0.0" @@ -5845,17 +6176,17 @@ micromark-factory-space@^1.0.0: micromark-util-types "^1.0.0" micromark-factory-space@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" - integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== dependencies: micromark-util-character "^2.0.0" micromark-util-types "^2.0.0" micromark-factory-title@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" - integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== dependencies: micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" @@ -5863,9 +6194,9 @@ micromark-factory-title@^2.0.0: micromark-util-types "^2.0.0" micromark-factory-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" - integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== dependencies: micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" @@ -5881,48 +6212,48 @@ micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: micromark-util-types "^1.0.0" micromark-util-character@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" - integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== dependencies: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-util-chunked@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" - integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== dependencies: micromark-util-symbol "^2.0.0" micromark-util-classify-character@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" - integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== dependencies: micromark-util-character "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-util-combine-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" - integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== dependencies: micromark-util-chunked "^2.0.0" micromark-util-types "^2.0.0" micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" - integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== dependencies: micromark-util-symbol "^2.0.0" micromark-util-decode-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" - integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== dependencies: decode-named-character-reference "^1.0.0" micromark-util-character "^2.0.0" @@ -5930,9 +6261,9 @@ micromark-util-decode-string@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" - integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== micromark-util-events-to-acorn@^2.0.0: version "2.0.2" @@ -5949,37 +6280,37 @@ micromark-util-events-to-acorn@^2.0.0: vfile-message "^4.0.0" micromark-util-html-tag-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" - integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== micromark-util-normalize-identifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" - integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== dependencies: micromark-util-symbol "^2.0.0" micromark-util-resolve-all@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" - integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== dependencies: micromark-util-types "^2.0.0" micromark-util-sanitize-uri@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" - integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== dependencies: micromark-util-character "^2.0.0" micromark-util-encode "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-subtokenize@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz#76129c49ac65da6e479c09d0ec4b5f29ec6eace5" - integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== + version "2.0.3" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz#70ffb99a454bd8c913c8b709c3dc97baefb65f96" + integrity sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -5992,9 +6323,9 @@ micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== micromark-util-symbol@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" - integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== micromark-util-types@^1.0.0: version "1.1.0" @@ -6002,14 +6333,14 @@ micromark-util-types@^1.0.0: integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== micromark-util-types@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" - integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" + integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== micromark@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" - integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" + integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== dependencies: "@types/debug" "^4.0.0" debug "^4.0.0" @@ -6135,9 +6466,9 @@ multicast-dns@^7.2.5: thunky "^1.0.2" nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== negotiator@0.6.3: version "0.6.3" @@ -6163,9 +6494,9 @@ no-case@^3.0.4: tslib "^2.0.3" node-emoji@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.1.3.tgz#93cfabb5cc7c3653aa52f29d6ffb7927d8047c06" - integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" + integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== dependencies: "@sindresorhus/is" "^4.6.0" char-regex "^1.0.2" @@ -6178,9 +6509,9 @@ node-forge@^1: integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -6230,9 +6561,9 @@ object-assign@^4.1.1: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== object-keys@^1.1.1: version "1.1.1" @@ -6485,10 +6816,10 @@ path-parse@^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.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== path-to-regexp@3.3.0: version "3.3.0" @@ -6507,7 +6838,7 @@ path-type@^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, picocolors@^1.0.1, picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -6538,6 +6869,13 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +postcss-attribute-case-insensitive@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" + integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-calc@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" @@ -6546,6 +6884,40 @@ postcss-calc@^9.0.1: postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-functional-notation@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.6.tgz#d74c1e2294b72287eb9af079c04b7ddeff7ec5b3" + integrity sha512-wLXvm8RmLs14Z2nVpB4CWlnvaWPRcOZFltJSlcbYwSJ1EDZKsKDhPKIMecCnuU054KSmlmubkqczmm6qBPCBhA== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + +postcss-color-hex-alpha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76" + integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-color-rebeccapurple@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98" + integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + postcss-colormin@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" @@ -6564,6 +6936,44 @@ postcss-convert-values@^6.1.0: browserslist "^4.23.0" postcss-value-parser "^4.2.0" +postcss-custom-media@^11.0.5: + version "11.0.5" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz#2fcd88a9b1d4da41c67dac6f2def903063a3377d" + integrity sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/media-query-list-parser" "^4.0.2" + +postcss-custom-properties@^14.0.4: + version "14.0.4" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz#de9c663285a98833a946d7003a34369d3ce373a9" + integrity sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz#95ef8268fdbbbd84f34cf84a4517c9d99d419c5a" + integrity sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg== + dependencies: + "@csstools/cascade-layer-name-parser" "^2.0.4" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + postcss-selector-parser "^7.0.0" + +postcss-dir-pseudo-class@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca" + integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-discard-comments@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" @@ -6591,6 +7001,58 @@ postcss-discard-unused@^6.0.5: dependencies: postcss-selector-parser "^6.0.16" +postcss-double-position-gradients@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz#eddd424ec754bb543d057d4d2180b1848095d4d2" + integrity sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-focus-visible@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868" + integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-focus-within@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7" + integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed" + integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== + +postcss-image-set-function@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53" + integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== + dependencies: + "@csstools/utilities" "^2.0.0" + postcss-value-parser "^4.2.0" + +postcss-lab-function@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.6.tgz#3121800fc7939ed1d9a1e87abeb33c407151252c" + integrity sha512-HPwvsoK7C949vBZ+eMyvH2cQeMr3UREoHvbtra76/UhDuiViZH6pir+z71UaJQohd7VDSVUdR6TkWYKExEc9aQ== + dependencies: + "@csstools/css-color-parser" "^3.0.6" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/utilities" "^2.0.0" + postcss-loader@^7.3.3: version "7.3.4" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" @@ -6600,6 +7062,13 @@ postcss-loader@^7.3.3: jiti "^1.20.0" semver "^7.5.4" +postcss-logical@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.0.0.tgz#0db0b90c2dc53b485a8074a4b7a906297544f58d" + integrity sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg== + dependencies: + postcss-value-parser "^4.2.0" + postcss-merge-idents@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65" @@ -6664,20 +7133,20 @@ postcss-modules-extract-imports@^3.1.0: integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== postcss-modules-local-by-default@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" - integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz#b0db6bc81ffc7bdc52eb0f84d6ca0bedf0e36d21" + integrity sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q== dependencies: icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" + postcss-selector-parser "^7.0.0" postcss-value-parser "^4.1.0" postcss-modules-scope@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" - integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: - postcss-selector-parser "^6.0.4" + postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" @@ -6686,6 +7155,15 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" +postcss-nesting@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.1.tgz#c405796d7245a3e4c267a9956cacfe9670b5d43e" + integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ== + dependencies: + "@csstools/selector-resolve-nested" "^3.0.0" + "@csstools/selector-specificity" "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-normalize-charset@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" @@ -6748,6 +7226,11 @@ postcss-normalize-whitespace@^6.0.2: dependencies: postcss-value-parser "^4.2.0" +postcss-opacity-percentage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a" + integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== + postcss-ordered-values@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" @@ -6756,6 +7239,101 @@ postcss-ordered-values@^6.0.2: cssnano-utils "^4.0.2" postcss-value-parser "^4.2.0" +postcss-overflow-shorthand@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af" + integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9" + integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.1.1.tgz#6ee631272353fb1c4a9711943e9b80a178ffce44" + integrity sha512-wqqsnBFD6VIwcHHRbhjTOcOi4qRVlB26RwSr0ordPj7OubRRxdWebv/aLjKLRR8zkZrbxZyuus03nOIgC5elMQ== + dependencies: + "@csstools/postcss-cascade-layers" "^5.0.1" + "@csstools/postcss-color-function" "^4.0.6" + "@csstools/postcss-color-mix-function" "^3.0.6" + "@csstools/postcss-content-alt-text" "^2.0.4" + "@csstools/postcss-exponential-functions" "^2.0.5" + "@csstools/postcss-font-format-keywords" "^4.0.0" + "@csstools/postcss-gamut-mapping" "^2.0.6" + "@csstools/postcss-gradients-interpolation-method" "^5.0.6" + "@csstools/postcss-hwb-function" "^4.0.6" + "@csstools/postcss-ic-unit" "^4.0.0" + "@csstools/postcss-initial" "^2.0.0" + "@csstools/postcss-is-pseudo-class" "^5.0.1" + "@csstools/postcss-light-dark-function" "^2.0.7" + "@csstools/postcss-logical-float-and-clear" "^3.0.0" + "@csstools/postcss-logical-overflow" "^2.0.0" + "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" + "@csstools/postcss-logical-resize" "^3.0.0" + "@csstools/postcss-logical-viewport-units" "^3.0.3" + "@csstools/postcss-media-minmax" "^2.0.5" + "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.4" + "@csstools/postcss-nested-calc" "^4.0.0" + "@csstools/postcss-normalize-display-values" "^4.0.0" + "@csstools/postcss-oklab-function" "^4.0.6" + "@csstools/postcss-progressive-custom-properties" "^4.0.0" + "@csstools/postcss-random-function" "^1.0.1" + "@csstools/postcss-relative-color-syntax" "^3.0.6" + "@csstools/postcss-scope-pseudo-class" "^4.0.1" + "@csstools/postcss-sign-functions" "^1.1.0" + "@csstools/postcss-stepped-value-functions" "^4.0.5" + "@csstools/postcss-text-decoration-shorthand" "^4.0.1" + "@csstools/postcss-trigonometric-functions" "^4.0.5" + "@csstools/postcss-unset-value" "^4.0.0" + autoprefixer "^10.4.19" + browserslist "^4.23.1" + css-blank-pseudo "^7.0.1" + css-has-pseudo "^7.0.1" + css-prefers-color-scheme "^10.0.0" + cssdb "^8.2.1" + postcss-attribute-case-insensitive "^7.0.1" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^7.0.6" + postcss-color-hex-alpha "^10.0.0" + postcss-color-rebeccapurple "^10.0.0" + postcss-custom-media "^11.0.5" + postcss-custom-properties "^14.0.4" + postcss-custom-selectors "^8.0.4" + postcss-dir-pseudo-class "^9.0.1" + postcss-double-position-gradients "^6.0.0" + postcss-focus-visible "^10.0.1" + postcss-focus-within "^9.0.1" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^6.0.0" + postcss-image-set-function "^7.0.0" + postcss-lab-function "^7.0.6" + postcss-logical "^8.0.0" + postcss-nesting "^13.0.1" + postcss-opacity-percentage "^3.0.0" + postcss-overflow-shorthand "^6.0.0" + postcss-page-break "^3.0.4" + postcss-place "^10.0.0" + postcss-pseudo-class-any-link "^10.0.1" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^8.0.1" + +postcss-pseudo-class-any-link@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544" + integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== + dependencies: + postcss-selector-parser "^7.0.0" + postcss-reduce-idents@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486" @@ -6778,7 +7356,19 @@ postcss-reduce-transforms@^6.0.2: dependencies: postcss-value-parser "^4.2.0" -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172" + integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: version "6.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== @@ -6786,6 +7376,14 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16, postcss-select cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz#41bd8b56f177c093ca49435f65731befe25d6b9c" + integrity sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-sort-media-queries@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97" @@ -6819,12 +7417,12 @@ postcss-zindex@^6.0.2: integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4.38: - version "8.4.47" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== dependencies: nanoid "^3.3.7" - picocolors "^1.1.0" + picocolors "^1.1.1" source-map-js "^1.2.1" pretty-error@^4.0.0: @@ -7212,22 +7810,22 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexpu-core@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.1.1.tgz#b469b245594cb2d088ceebc6369dceb8c00becac" - integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw== +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: regenerate "^1.4.2" regenerate-unicode-properties "^10.2.0" regjsgen "^0.8.0" - regjsparser "^0.11.0" + regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" registry-auth-token@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" - integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== + version "5.0.3" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.3.tgz#417d758c8164569de8cf5cabff16cc937902dcc6" + integrity sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA== dependencies: "@pnpm/npm-conf" "^2.1.0" @@ -7243,10 +7841,10 @@ regjsgen@^0.8.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== -regjsparser@^0.11.0: - version "0.11.2" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.2.tgz#7404ad42be00226d72bcf1f003f1f441861913d8" - integrity sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA== +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: jsesc "~3.0.2" @@ -7610,7 +8208,7 @@ serve-static@1.16.2: parseurl "~1.3.3" send "0.19.0" -set-function-length@^1.2.1: +set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -7657,9 +8255,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3, shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + version "1.8.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" + integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== shelljs@^0.8.5: version "0.8.5" @@ -7820,9 +8418,9 @@ statuses@2.0.1: integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" + integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" @@ -7995,9 +8593,9 @@ terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.9: terser "^5.26.0" terser@^5.10.0, terser@^5.15.1, terser@^5.26.0: - version "5.36.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.36.0.tgz#8b0dbed459ac40ff7b4c9fd5a3a2029de105180e" - integrity sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w== + version "5.37.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3" + integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -8098,10 +8696,10 @@ typescript@~5.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== -undici-types@~6.19.8: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.1" @@ -8418,15 +9016,15 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.88.1, webpack@^5.95.0: - version "5.96.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.96.1.tgz#3676d1626d8312b6b10d0c18cc049fba7ac01f0c" - integrity sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA== + version "5.97.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.97.1.tgz#972a8320a438b56ff0f1d94ade9e82eac155fa58" + integrity sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg== dependencies: "@types/eslint-scope" "^3.7.7" "@types/estree" "^1.0.6" - "@webassemblyjs/ast" "^1.12.1" - "@webassemblyjs/wasm-edit" "^1.12.1" - "@webassemblyjs/wasm-parser" "^1.12.1" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" acorn "^8.14.0" browserslist "^4.24.0" chrome-trace-event "^1.0.2" From 9e0c089abc006055a62d0adce2113900b539102b Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 11 Dec 2024 13:39:54 -0600 Subject: [PATCH 06/55] WIP linking to existing R and Python docs --- .gitignore | 8 +++++ dev/README.md | 24 +++++++++---- docs/python-installation.md | 72 +++++++++++++++++++++++++++++++++++++ docs/r-installation.md | 7 ++++ docusaurus.config.ts | 15 ++++++-- sidebars.ts | 30 ++++------------ 6 files changed, 125 insertions(+), 31 deletions(-) create mode 100644 docs/python-installation.md create mode 100644 docs/r-installation.md diff --git a/.gitignore b/.gitignore index b2d6de306..4f36a88d7 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,11 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +# Clone of stochtree repo +/stochtree-repo + +# Virtual environments +/python_venv +/cpp_venv +/venv diff --git a/dev/README.md b/dev/README.md index c3823084f..43a99f024 100644 --- a/dev/README.md +++ b/dev/README.md @@ -76,28 +76,40 @@ source python_venv/bin/activate cd stochtree-repo pip install --upgrade pip pip install -r python_docs/requirements.txt -pip install sphinx-markdown-builder pip install . -cd .. ``` -Build the sphinx documentation as markdown output + -Copy results into the `docs/` folder + + +Build the sphinx documentation + +```{bash} +sphinx-build -M html python_docs/source/ ../static/python_docs/ +cd .. ``` ### Building the R docs - +```{bash} +cd stochtree-repo +Rscript cran-bootstrap.R +cp _pkgdown.yml stochtree_cran/_pkgdown.yml +cp R_README.md stochtree_cran/README.md +Rscript -e 'pkgdown::build_site_github_pages("stochtree_cran", dest_dir = "../../static/R_docs", install = TRUE)' +cd .. +``` ### Building the doc site diff --git a/docs/python-installation.md b/docs/python-installation.md new file mode 100644 index 000000000..4bb7a240c --- /dev/null +++ b/docs/python-installation.md @@ -0,0 +1,72 @@ +# StochTree Python Package + +The python package is not yet on PyPI but can be installed from source using pip's [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). +To proceed, you will need a working version of [git](https://git-scm.com) and python 3.8 or greater (available from several sources, one of the most +straightforward being the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite). + +## Quick start + +Without worrying about virtual environments (detailed further below), `stochtree` can be installed from the command line + +``` +pip install numpy scipy pytest pandas scikit-learn pybind11 +pip install git+https://github.com/StochasticTree/stochtree.git +``` + +## Virtual environment installation + +Often, users prefer to manage different projects (with different package / python version requirements) in virtual environments. + +### Conda + +Conda provides a straightforward experience in managing python dependencies, avoiding version conflicts / ABI issues / etc. + +To build stochtree using a `conda` based workflow, first create and activate a conda environment with the requisite dependencies + +```{bash} +conda create -n stochtree-dev -c conda-forge python=3.10 numpy scipy pytest pandas pybind11 scikit-learn matplotlib seaborn +conda activate stochtree-dev +``` + +Then install the package from github via pip + +```{bash} +pip install git+https://github.com/StochasticTree/stochtree.git +``` + +(*Note*: if you'd also like to run `stochtree`'s notebook examples, you will also need jupyterlab, seaborn, and matplotlib) + +```{bash} +conda install matplotlib seaborn +pip install jupyterlab +``` + +With these dependencies installed, you can [clone the repo](###cloning-the-repository) and run the `demo/` examples. + +### Venv + +You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments +(i.e. `cd /path/to/envs`) and create and activate a virtual environment: + +```{bash} +python -m venv venv +source venv/bin/activate +``` + +Install all of the package (and demo notebook) dependencies + +```{bash} +pip install numpy scipy pytest pandas scikit-learn pybind11 +``` + +Then install stochtree via + +```{bash} +pip install git+https://github.com/StochasticTree/stochtree.git +``` + +As above, if you'd like to run the notebook examples in the `stochtree` repo, you will also need jupyterlab, seaborn, and matplotlib and you will have to [clone the repo](###cloning-the-repository) + +```{bash} +pip install matplotlib seaborn jupyterlab +``` diff --git a/docs/r-installation.md b/docs/r-installation.md new file mode 100644 index 000000000..60bda6112 --- /dev/null +++ b/docs/r-installation.md @@ -0,0 +1,7 @@ +# StochTree R Package + +The package can be installed in R via + +``` +remotes::install_github("StochasticTree/stochtree", ref="r-dev") +``` diff --git a/docusaurus.config.ts b/docusaurus.config.ts index f89084390..f437a657a 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -73,9 +73,20 @@ const config: Config = { type: 'docSidebar', sidebarId: 'tutorialSidebar', position: 'left', - label: 'Docs', + label: 'Getting Started', }, - { to: '/blog', label: 'Roadmap', position: 'left' }, + { + href: 'pathname:///R_docs/index.html', + label: 'R Package Docs', + position: 'left', + }, + { + href: 'pathname:///python_docs/html/index.html', + label: 'Python Package Docs', + position: 'left', + }, + { to: '/roadmap', label: 'Roadmap', position: 'left' }, + { to: '/blog', label: 'Blog', position: 'left' }, { to: '/team', label: 'Team', position: 'left' }, { href: 'https://github.com/StochasticTree', diff --git a/sidebars.ts b/sidebars.ts index a3c5fef7d..faa64cb2b 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -4,33 +4,17 @@ const sidebars: SidebarsConfig = { tutorialSidebar: [ { type: 'category', - label: 'C++ Core', + label: 'Installation', items: [ { - type: 'autogenerated', - dirName: 'cpp-documentation-markdown', + type: 'doc', + label: 'Python', + id: 'python-installation' }, - ], - collapsed: true, - }, - { - type: 'category', - label: 'R Package', - items: [ - { - type: 'autogenerated', - dirName: 'r-documentation-markdown', - }, - ], - collapsed: true, - }, - { - type: 'category', - label: 'Python Package', - items: [ { - type: 'autogenerated', - dirName: 'python-documentation-markdown', + type: 'doc', + label: 'R', + id: 'r-installation' }, ], collapsed: true, From a2e6cc2baa02d6bb31bba6f94a4e1d2d9ea89ed7 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 12 Dec 2024 16:03:27 -0600 Subject: [PATCH 07/55] Removed docs and added sphinx structure --- .gitignore | 8 +- README.md | 143 +- dev/README.md | 138 - docs/cpp-documentation-markdown/dataset.md | 35 - docs/cpp-documentation-markdown/index.md | 14 - docs/cpp-documentation-markdown/tracking.md | 33 - docs/cpp-documentation-markdown/tree.md | 15 - docs/intro.md | 47 - docs/python-documentation-markdown/api.md | 254 - docs/python-documentation-markdown/causal.md | 63 - docs/python-documentation-markdown/index.md | 31 - docs/python-documentation-markdown/install.md | 97 - .../supervised.md | 70 - docs/python-installation.md | 72 - docs/r-documentation-markdown/CppJson.md | 435 - docs/r-documentation-markdown/CppRNG.md | 40 - .../r-documentation-markdown/ForestDataset.md | 132 - docs/r-documentation-markdown/ForestModel.md | 149 - .../r-documentation-markdown/ForestSamples.md | 932 -- docs/r-documentation-markdown/Outcome.md | 115 - .../RandomEffectSamples.md | 227 - .../RandomEffectsDataset.md | 101 - .../RandomEffectsModel.md | 215 - .../RandomEffectsTracker.md | 40 - docs/r-documentation-markdown/bart.md | 128 - docs/r-documentation-markdown/bcf.md | 166 - .../calibrate_inverse_gamma_error_variance.md | 49 - .../computeForestLeafIndices.md | 49 - .../computeForestLeafVariances.md | 36 - .../computeMaxLeafIndex.md | 35 - .../convertBARTModelToJson.md | 53 - .../convertBCFModelToJson.md | 89 - .../createBARTModelFromCombinedJson.md | 55 - .../createBARTModelFromCombinedJsonString.md | 55 - .../createBARTModelFromJson.md | 55 - .../createBARTModelFromJsonFile.md | 55 - .../createBARTModelFromJsonString.md | 58 - .../createBCFModelFromJson.md | 91 - .../createBCFModelFromJsonFile.md | 91 - .../createBCFModelFromJsonString.md | 91 - .../r-documentation-markdown/createCppJson.md | 20 - .../createCppJsonFile.md | 24 - .../createCppJsonString.md | 24 - .../createForestContainer.md | 32 - .../createForestCovariates.md | 43 - .../createForestCovariatesFromMetadata.md | 40 - .../createForestDataset.md | 26 - .../createForestModel.md | 39 - .../r-documentation-markdown/createOutcome.md | 24 - docs/r-documentation-markdown/createRNG.md | 24 - .../createRandomEffectSamples.md | 26 - .../createRandomEffectsDataset.md | 26 - .../createRandomEffectsModel.md | 25 - .../createRandomEffectsTracker.md | 24 - .../getRandomEffectSamples.bartmodel.md | 73 - .../getRandomEffectSamples.bcf.md | 93 - .../getRandomEffectSamples.md | 25 - .../loadForestContainerCombinedJson.md | 25 - .../loadForestContainerCombinedJsonString.md | 25 - .../loadForestContainerJson.md | 25 - .../loadRandomEffectSamplesCombinedJson.md | 25 - ...adRandomEffectSamplesCombinedJsonString.md | 25 - .../loadRandomEffectSamplesJson.md | 25 - .../loadScalarJson.md | 26 - .../loadVectorJson.md | 26 - docs/r-documentation-markdown/oneHotEncode.md | 40 - .../oneHotInitializeAndEncode.md | 35 - .../orderedCatInitializeAndPreprocess.md | 38 - .../orderedCatPreprocess.md | 40 - .../predict.bartmodel.md | 69 - docs/r-documentation-markdown/predict.bcf.md | 90 - .../preprocessBartParams.md | 24 - .../preprocessBcfParams.md | 24 - .../preprocessPredictionData.md | 38 - .../preprocessPredictionDataFrame.md | 39 - .../preprocessPredictionMatrix.md | 37 - .../preprocessTrainData.md | 36 - .../preprocessTrainDataFrame.md | 37 - .../preprocessTrainMatrix.md | 35 - .../sample_sigma2_one_iteration.md | 24 - .../sample_tau_one_iteration.md | 24 - .../saveBARTModelToJsonFile.md | 50 - .../saveBARTModelToJsonString.md | 53 - .../saveBCFModelToJsonFile.md | 86 - .../saveBCFModelToJsonString.md | 89 - .../stochtree-package.md | 26 - docs/r-installation.md | 7 - docs/tutorial-basics/_category_.json | 8 - docs/tutorial-basics/congratulations.md | 23 - docs/tutorial-basics/create-a-blog-post.md | 34 - docs/tutorial-basics/create-a-document.md | 57 - docs/tutorial-basics/create-a-page.md | 43 - docs/tutorial-basics/deploy-your-site.md | 31 - docs/tutorial-basics/markdown-features.mdx | 152 - docs/tutorial-extras/_category_.json | 7 - .../img/docsVersionDropdown.png | Bin 25427 -> 0 bytes docs/tutorial-extras/img/localeDropdown.png | Bin 27841 -> 0 bytes docs/tutorial-extras/manage-docs-versions.md | 55 - docs/tutorial-extras/translate-your-site.md | 88 - docusaurus.config.ts | 134 - package.json | 49 - sidebars.ts | 25 - sphinx_docs/Makefile | 20 + sphinx_docs/make.bat | 35 + sphinx_docs/requirements.txt | 39 + splitMarkdown.js | 32 - src/components/HomepageFeatures/index.tsx | 70 - .../HomepageFeatures/styles.module.css | 11 - src/css/custom.css | 30 - src/pages/index.module.css | 23 - src/pages/index.tsx | 45 - src/pages/markdown-page.md | 7 - static/.nojekyll | 0 static/img/docusaurus-social-card.jpg | Bin 55746 -> 0 bytes static/img/docusaurus.png | Bin 5142 -> 0 bytes static/img/favicon.ico | Bin 3626 -> 0 bytes static/img/logo.svg | 1 - static/img/undraw_docusaurus_mountain.svg | 171 - static/img/undraw_docusaurus_react.svg | 170 - static/img/undraw_docusaurus_tree.svg | 40 - tsconfig.json | 7 - yarn.lock | 9179 ----------------- 122 files changed, 180 insertions(+), 16699 deletions(-) delete mode 100644 dev/README.md delete mode 100644 docs/cpp-documentation-markdown/dataset.md delete mode 100644 docs/cpp-documentation-markdown/index.md delete mode 100644 docs/cpp-documentation-markdown/tracking.md delete mode 100644 docs/cpp-documentation-markdown/tree.md delete mode 100644 docs/intro.md delete mode 100644 docs/python-documentation-markdown/api.md delete mode 100644 docs/python-documentation-markdown/causal.md delete mode 100644 docs/python-documentation-markdown/index.md delete mode 100644 docs/python-documentation-markdown/install.md delete mode 100644 docs/python-documentation-markdown/supervised.md delete mode 100644 docs/python-installation.md delete mode 100644 docs/r-documentation-markdown/CppJson.md delete mode 100644 docs/r-documentation-markdown/CppRNG.md delete mode 100644 docs/r-documentation-markdown/ForestDataset.md delete mode 100644 docs/r-documentation-markdown/ForestModel.md delete mode 100644 docs/r-documentation-markdown/ForestSamples.md delete mode 100644 docs/r-documentation-markdown/Outcome.md delete mode 100644 docs/r-documentation-markdown/RandomEffectSamples.md delete mode 100644 docs/r-documentation-markdown/RandomEffectsDataset.md delete mode 100644 docs/r-documentation-markdown/RandomEffectsModel.md delete mode 100644 docs/r-documentation-markdown/RandomEffectsTracker.md delete mode 100644 docs/r-documentation-markdown/bart.md delete mode 100644 docs/r-documentation-markdown/bcf.md delete mode 100644 docs/r-documentation-markdown/calibrate_inverse_gamma_error_variance.md delete mode 100644 docs/r-documentation-markdown/computeForestLeafIndices.md delete mode 100644 docs/r-documentation-markdown/computeForestLeafVariances.md delete mode 100644 docs/r-documentation-markdown/computeMaxLeafIndex.md delete mode 100644 docs/r-documentation-markdown/convertBARTModelToJson.md delete mode 100644 docs/r-documentation-markdown/convertBCFModelToJson.md delete mode 100644 docs/r-documentation-markdown/createBARTModelFromCombinedJson.md delete mode 100644 docs/r-documentation-markdown/createBARTModelFromCombinedJsonString.md delete mode 100644 docs/r-documentation-markdown/createBARTModelFromJson.md delete mode 100644 docs/r-documentation-markdown/createBARTModelFromJsonFile.md delete mode 100644 docs/r-documentation-markdown/createBARTModelFromJsonString.md delete mode 100644 docs/r-documentation-markdown/createBCFModelFromJson.md delete mode 100644 docs/r-documentation-markdown/createBCFModelFromJsonFile.md delete mode 100644 docs/r-documentation-markdown/createBCFModelFromJsonString.md delete mode 100644 docs/r-documentation-markdown/createCppJson.md delete mode 100644 docs/r-documentation-markdown/createCppJsonFile.md delete mode 100644 docs/r-documentation-markdown/createCppJsonString.md delete mode 100644 docs/r-documentation-markdown/createForestContainer.md delete mode 100644 docs/r-documentation-markdown/createForestCovariates.md delete mode 100644 docs/r-documentation-markdown/createForestCovariatesFromMetadata.md delete mode 100644 docs/r-documentation-markdown/createForestDataset.md delete mode 100644 docs/r-documentation-markdown/createForestModel.md delete mode 100644 docs/r-documentation-markdown/createOutcome.md delete mode 100644 docs/r-documentation-markdown/createRNG.md delete mode 100644 docs/r-documentation-markdown/createRandomEffectSamples.md delete mode 100644 docs/r-documentation-markdown/createRandomEffectsDataset.md delete mode 100644 docs/r-documentation-markdown/createRandomEffectsModel.md delete mode 100644 docs/r-documentation-markdown/createRandomEffectsTracker.md delete mode 100644 docs/r-documentation-markdown/getRandomEffectSamples.bartmodel.md delete mode 100644 docs/r-documentation-markdown/getRandomEffectSamples.bcf.md delete mode 100644 docs/r-documentation-markdown/getRandomEffectSamples.md delete mode 100644 docs/r-documentation-markdown/loadForestContainerCombinedJson.md delete mode 100644 docs/r-documentation-markdown/loadForestContainerCombinedJsonString.md delete mode 100644 docs/r-documentation-markdown/loadForestContainerJson.md delete mode 100644 docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJson.md delete mode 100644 docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJsonString.md delete mode 100644 docs/r-documentation-markdown/loadRandomEffectSamplesJson.md delete mode 100644 docs/r-documentation-markdown/loadScalarJson.md delete mode 100644 docs/r-documentation-markdown/loadVectorJson.md delete mode 100644 docs/r-documentation-markdown/oneHotEncode.md delete mode 100644 docs/r-documentation-markdown/oneHotInitializeAndEncode.md delete mode 100644 docs/r-documentation-markdown/orderedCatInitializeAndPreprocess.md delete mode 100644 docs/r-documentation-markdown/orderedCatPreprocess.md delete mode 100644 docs/r-documentation-markdown/predict.bartmodel.md delete mode 100644 docs/r-documentation-markdown/predict.bcf.md delete mode 100644 docs/r-documentation-markdown/preprocessBartParams.md delete mode 100644 docs/r-documentation-markdown/preprocessBcfParams.md delete mode 100644 docs/r-documentation-markdown/preprocessPredictionData.md delete mode 100644 docs/r-documentation-markdown/preprocessPredictionDataFrame.md delete mode 100644 docs/r-documentation-markdown/preprocessPredictionMatrix.md delete mode 100644 docs/r-documentation-markdown/preprocessTrainData.md delete mode 100644 docs/r-documentation-markdown/preprocessTrainDataFrame.md delete mode 100644 docs/r-documentation-markdown/preprocessTrainMatrix.md delete mode 100644 docs/r-documentation-markdown/sample_sigma2_one_iteration.md delete mode 100644 docs/r-documentation-markdown/sample_tau_one_iteration.md delete mode 100644 docs/r-documentation-markdown/saveBARTModelToJsonFile.md delete mode 100644 docs/r-documentation-markdown/saveBARTModelToJsonString.md delete mode 100644 docs/r-documentation-markdown/saveBCFModelToJsonFile.md delete mode 100644 docs/r-documentation-markdown/saveBCFModelToJsonString.md delete mode 100644 docs/r-documentation-markdown/stochtree-package.md delete mode 100644 docs/r-installation.md delete mode 100644 docs/tutorial-basics/_category_.json delete mode 100644 docs/tutorial-basics/congratulations.md delete mode 100644 docs/tutorial-basics/create-a-blog-post.md delete mode 100644 docs/tutorial-basics/create-a-document.md delete mode 100644 docs/tutorial-basics/create-a-page.md delete mode 100644 docs/tutorial-basics/deploy-your-site.md delete mode 100644 docs/tutorial-basics/markdown-features.mdx delete mode 100644 docs/tutorial-extras/_category_.json delete mode 100644 docs/tutorial-extras/img/docsVersionDropdown.png delete mode 100644 docs/tutorial-extras/img/localeDropdown.png delete mode 100644 docs/tutorial-extras/manage-docs-versions.md delete mode 100644 docs/tutorial-extras/translate-your-site.md delete mode 100644 docusaurus.config.ts delete mode 100644 package.json delete mode 100644 sidebars.ts create mode 100644 sphinx_docs/Makefile create mode 100644 sphinx_docs/make.bat create mode 100644 sphinx_docs/requirements.txt delete mode 100644 splitMarkdown.js delete mode 100644 src/components/HomepageFeatures/index.tsx delete mode 100644 src/components/HomepageFeatures/styles.module.css delete mode 100644 src/css/custom.css delete mode 100644 src/pages/index.module.css delete mode 100644 src/pages/index.tsx delete mode 100644 src/pages/markdown-page.md delete mode 100644 static/.nojekyll delete mode 100644 static/img/docusaurus-social-card.jpg delete mode 100644 static/img/docusaurus.png delete mode 100644 static/img/favicon.ico delete mode 100644 static/img/logo.svg delete mode 100644 static/img/undraw_docusaurus_mountain.svg delete mode 100644 static/img/undraw_docusaurus_react.svg delete mode 100644 static/img/undraw_docusaurus_tree.svg delete mode 100644 tsconfig.json delete mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 4f36a88d7..9fc408e15 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,13 @@ yarn-debug.log* yarn-error.log* # Clone of stochtree repo -/stochtree-repo +/stochtree_repo +stochtree_repo/cpp_docs + +# Output builds +sphinx_docs/_build +sphinx_docs/doxygen_output +sphinx_docs/source # Virtual environments /python_venv diff --git a/README.md b/README.md index c1d21779d..34d0c92e0 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,79 @@ -# Summary of the Documentation Generation Workflow - -The GitHub Actions workflow for our `documentation` repository automates the process of generating and updating the Python, R, and C++ documentation. Here's how it works: - -1. **Clones the Repositories**: - - **Documentation Repo**: It starts by checking out the current `documentation` repository (where this workflow runs). - - **Stochtree Repo**: It then clones the `stochtree` repository into a subfolder (`stochtree-repo`). This allows the workflow to access the source code needed to build the documentation. - -2. **Sets Up the Python Environment**: - - **Python Version**: The workflow sets up Python 3.10 using the `actions/setup-python@v5` action. - - **Dependencies**: It installs all necessary Python packages and dependencies required to build the Python documentation. - -3. **Builds the Python Documentation**: - - **Sphinx**: Using Sphinx, a tool for creating documentation, the workflow generates the HTML files from the Python source code in the `stochtree` repository. This converts the docstrings and comments in the code into readable documentation. - - **Copies Documentation**: The newly generated Python documentation files are copied into the `docs/python-documentation` directory of the `documentation` repository. Any old files in this directory are removed beforehand to ensure only the latest documentation is present. - -4. **Sets Up the R Environment**: - - **Pandoc**: The workflow sets up Pandoc using the `r-lib/actions/setup-pandoc@v2` action, which is required for building R documentation. - - **R Version**: It sets up R using the `r-lib/actions/setup-r@v2` action with `use-public-rspm: true` to utilize the public R package repository. - - **Dependencies**: The workflow installs all necessary R packages, including `remotes`, `pkgdown`, `ggplot2`, `latex2exp`, and `decor`, to build the R documentation. - -5. **Prepares the R Documentation Build Environment**: - - **Directory Setup**: It creates a `stochtree_cran/src` directory and copies the `Makevars` file from `stochtree-repo/src/Makevars` to `stochtree_cran/src/Makevars`. - - **Copies Essential Files**: Copies `DESCRIPTION`, `_pkgdown.yml`, and `R_README.md` into the `stochtree_cran/` directory. - -6. **Builds the R Documentation**: - - **Run Bootstrap Script**: Executes `cran-bootstrap.R` to prepare the R package for documentation. - - **Install Dependencies**: Installs all R package dependencies listed in the `DESCRIPTION` file. - - **Generate Documentation**: Uses `pkgdown` to build the R documentation site, outputting it to `docs/r-documentation`. - -7. **Copies R Documentation to Docs Directory**: - - The built R documentation is copied from `stochtree-repo/docs/r-documentation/` to `docs/r-documentation/` in the root of the `documentation` repository. This ensures that both Python and R documentation are located within the `docs/` directory. - -8. **Sets Up the C++ Environment**: - - **Install Doxygen and Graphviz**: The workflow installs Doxygen and Graphviz, which are required for generating C++ documentation from the source code. - - **Install Sphinx and Breathe**: It installs Sphinx and the Breathe extension to convert Doxygen XML output into HTML documentation. - -9. **Builds the C++ Documentation**: - - **Generate Doxyfile**: Generates a default Doxygen configuration file (`Doxyfile`). - - **Configure Doxyfile**: Adjusts the `Doxyfile` settings to: - - **Input Directory**: Set `INPUT = src` to specify the C++ source code directory. - - **Enable XML Output**: Set `GENERATE_XML = YES` to enable XML output needed by Breathe. - - **Recursive Scanning**: Set `RECURSIVE = YES` to include all subdirectories within `src`. - - **Output Directory**: Set `OUTPUT_DIRECTORY = doxygen_output` to specify where Doxygen outputs files. - - **Project Name**: Set `PROJECT_NAME = "stochtree"` for identification in the documentation. - - **Run Doxygen**: Executes Doxygen to generate XML files from the C++ source code. - - **Set Up Sphinx Project for C++ Documentation**: - - **Initialize Sphinx**: Runs `sphinx-quickstart` to create a new Sphinx project tailored for C++ documentation. - - **Configure Breathe**: Modifies `conf.py` to include the Breathe extension and point it to the Doxygen XML output. - - **Create Sphinx Index File**: Adds a reference to the Doxygen-generated XML in the Sphinx `index.rst` file. - - **Build HTML Documentation**: Uses Sphinx to build the HTML documentation from the Doxygen XML output. - -10. **Copies C++ Documentation to Docs Directory**: - - The generated C++ documentation is copied from `stochtree-repo/docs/cpp/build/html/` to `docs/cpp-documentation/` in the root of the `documentation` repository. This ensures that the C++ documentation is located within the `docs/` directory alongside the Python and R documentation. - -11. **Commits and Pushes the Updated Documentation**: - - **Branch Creation**: The workflow checks if there are any changes to the documentation. If there are, it creates a new temporary branch (e.g., `docs-temp-11060215628`). - - **Commit Changes**: It commits the updated Python, R, and C++ documentation to this temporary branch. - - **Push Branch**: The temporary branch is pushed to the repository. - - **Merge Changes**: The workflow then merges the temporary branch back into the `main` branch, effectively updating the documentation in the repository. - - **Clean Up**: After merging, the temporary branch is deleted to keep the repository clean. - -12. **Automates Documentation Updates**: - - By running this workflow whenever changes are pushed to the `main` branch, it ensures that the Python, R, and C++ documentation are always up-to-date with the latest code changes without any manual effort. +# StochTree Documentation Source Code and Build Workflows + +## Building the Docs Locally + +### MacOS + +#### Cloning the repo + +First, you will need the stochtree repo on your local machine. +Navigate to the `documentation` repo in your terminal (*replace `~/path/to/documentation` with the path to the documentation repo on your local system*). + +```{bash} +cd ~/path/to/documentation +``` + +Now, recursively clone the main `stochtree` repo into a `stochtree_repo` subfolder of the `documentation` repo + +```{bash} +git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree_repo +``` + +#### Setting up build dependencies + +The docs are largely built using [`Sphinx`](https://www.sphinx-doc.org/en/master/) and [`pkgdown`](https://pkgdown.r-lib.org). + +##### Sphinx + +To use Sphinx, you need to install a working verion of python, probably the simplest of which is the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite. + +```{bash} +python -m venv venv +source venv/bin/activate +pip install --upgrade pip +pip install -r sphinx_docs/requirements.txt +cd stochtree_repo +pip install . +cd .. +``` + +##### pkgdown + +To use `pkgdown`, you need to install [R](https://cran.r-project.org). +One R is installed, make sure the dependendencies of the pkgdown build are installed + +```{bash} +Rscript -e 'install.packages(c("remotes", "devtools", "roxygen2", "ggplot2", "latex2exp", "decor", "pkgdown", "cpp11", "BH", "doParallel", "foreach", "knitr", "Matrix", "MASS", "mvtnorm", "rmarkdown", "testthat", "tgp"), repos="https://cloud.r-project.org/")' +``` + +### Building the R docs + +To build the R docs, first run a script that lays out the package as needed + +```{bash} +cd stochtree_repo +Rscript cran-bootstrap.R +cp _pkgdown.yml stochtree_cran/_pkgdown.yml +cp R_README.md stochtree_cran/README.md +cd .. +``` + +Then run the `pkgdown` build workflow to put the R docs in the correct folder + +```{bash} +mkdir -p sphinx_docs/source/_static/R_docs +Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../sphinx_docs/source/_static/R_docs", install = TRUE)' +``` + +### Building the doc site + +Build the sphinx documentation + +```{bash} +source venv/bin/activate +sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = sphinx_docs/doxygen_output|' stochtree_repo/cpp_docs/Doxyfile +mkdir -p sphinx_docs/doxygen_output/ +doxygen stochtree_repo/cpp_docs/Doxyfile +sphinx-build -M html sphinx_docs/source/ sphinx_docs/_build/ +source deactivate +``` diff --git a/dev/README.md b/dev/README.md deleted file mode 100644 index 43a99f024..000000000 --- a/dev/README.md +++ /dev/null @@ -1,138 +0,0 @@ -# Building the Doc Site Locally - -## MacOS - -### Dependency installation - -Install nodejs and doxygen at the command line via [homebrew](https://brew.sh). - -```{bash} -brew install doxygen -brew install node@22 -``` - -Check that the installation worked correctly with - -```{bash} -node -v -npm -v -``` - -which should display "`v22.11.0`" and "`10.9.0`" at the command line. - -Now, install [`moxygen`](https://github.com/sourcey/moxygen) via `npm`: - -```{bash} -npm install moxygen -g -``` - -### Building the C++ docs - -Navigate to the `documentation` repo in your terminal (*replace `~/path/to/documentation` with the path to the documentation repo on your local system*). - -```{bash} -cd ~/path/to/documentation -``` - -Now, recursively clone the main `stochtree` repo into a `stochtree-repo` subfolder of the `documentation` repo - -```{bash} -git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree-repo -``` - -**To redo this step, remove the repo and then re-run the recursive clone above** - -```{bash} -rm -rf stochtree-repo -``` - -Build the sphinx documentation as markdown output - -```{bash} -python -m venv cpp_venv -source cpp_venv/bin/activate -pip install --upgrade pip -pip install -r stochtree-repo/cpp_docs/requirements.txt -pip install sphinx-markdown-builder -doxygen stochtree-repo/cpp_docs/Doxyfile -sphinx-build -b markdown stochtree-repo/cpp_docs/ stochtree-repo/cpp_docs/_build/markdown/ -``` - -Copy results into the `docs/` folder - -```{bash} -mkdir -p docs/cpp-documentation-markdown -rm -rf docs/cpp-documentation-markdown/* -cp -r stochtree-repo/cpp_docs/_build/markdown/* docs/cpp-documentation-markdown/ -``` - -### Building the Python docs - -Install dependencies in a local virtual environment - -```{bash} -python -m venv python_venv -source python_venv/bin/activate -cd stochtree-repo -pip install --upgrade pip -pip install -r python_docs/requirements.txt -pip install . -``` - - - - - -Build the sphinx documentation - -```{bash} -sphinx-build -M html python_docs/source/ ../static/python_docs/ -cd .. -``` - -### Building the R docs - -```{bash} -cd stochtree-repo -Rscript cran-bootstrap.R -cp _pkgdown.yml stochtree_cran/_pkgdown.yml -cp R_README.md stochtree_cran/README.md -Rscript -e 'pkgdown::build_site_github_pages("stochtree_cran", dest_dir = "../../static/R_docs", install = TRUE)' -cd .. -``` - -### Building the doc site - -Make sure `yarn` is enabled globally which you can do via the homebrew installation of node with - -```{bash} -corepack enable -``` - -Now, install the website dependencies (`docusaurus` and other packages) - -```{bash} -yarn install -``` - -Build the site using - -```{bash} -yarn build -``` - -Render it locally with - -```{bash} -npm run serve -``` diff --git a/docs/cpp-documentation-markdown/dataset.md b/docs/cpp-documentation-markdown/dataset.md deleted file mode 100644 index 8ca536c8d..000000000 --- a/docs/cpp-documentation-markdown/dataset.md +++ /dev/null @@ -1,35 +0,0 @@ -# Dataset API - -## Forest Dataset - -The `ForestDataset` class is a wrapper around data needed to sample one or more tree ensembles. -Its core elements are - -* **Covariates**: Features / variables used to partition the forests. Stored internally as a (column-major) `Eigen::MatrixXd`. -* **Basis**: *[Optional]* basis vector used to define a “leaf regression” — a partitioned linear model where covariates define the partitions and basis defines the regression variables. - Also stored internally as a (column-major) `Eigen::MatrixXd`. -* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. - Stored internally as an `Eigen::VectorXd`. - -#### WARNING -doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml - -## Random Effects Dataset - -The `RandomEffectsDataset` class is a wrapper around data needed to sample one or more tree ensembles. -Its core elements are - -* **Basis**: Vector of variables that have group-specific random coefficients. In the simplest additive group random effects model, this is a constant intercept of all ones. - Stored internally as a (column-major) `Eigen::MatrixXd`. -* **Group Indices**: Integer-valued indices of group membership. In a model with three groups, these indices would typically be 0, 1, and 2 (remapped from perhaps more descriptive labels in R or Python). - Stored internally as an `std::vector` of integers. -* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. - Stored internally as an `Eigen::VectorXd`. - -#### WARNING -doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml - -## Other Classes and Types - -#### WARNING -doxygenenum: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml diff --git a/docs/cpp-documentation-markdown/index.md b/docs/cpp-documentation-markdown/index.md deleted file mode 100644 index 46310fbe5..000000000 --- a/docs/cpp-documentation-markdown/index.md +++ /dev/null @@ -1,14 +0,0 @@ -# StochTree C++ API and Implementations - -This page documents the data structures and interfaces that constitute the `stochtree` C++ core. -It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in `stochtree`. - -* [Dataset API](dataset.md) - * [Forest Dataset](dataset.md#forest-dataset) - * [Random Effects Dataset](dataset.md#random-effects-dataset) - * [Other Classes and Types](dataset.md#other-classes-and-types) -* [Forest Sampling Tracker API](tracking.md) - * [Forest Tracker](tracking.md#forest-tracker) -* [Decision Tree API](tree.md) - * [Tree](tree.md#tree) - * [Tree Split](tree.md#tree-split) diff --git a/docs/cpp-documentation-markdown/tracking.md b/docs/cpp-documentation-markdown/tracking.md deleted file mode 100644 index 257892a2c..000000000 --- a/docs/cpp-documentation-markdown/tracking.md +++ /dev/null @@ -1,33 +0,0 @@ -# Forest Sampling Tracker API - -A truly minimalist tree ensemble library only needs - -* A representation of a decision tree -* A container for grouping / storing ensembles of trees -* In-memory access to / representation of training data -* Routines / functions to construct the trees - -Most algorithms for optimizing or sampling tree ensembles frequently perform the following operations - -* Determine which leaf a training observation falls into for a decision tree (to compute its prediction and update the residual / outcome) -* Evaluate potential split candidates for a leaf of a decision - -With only the “minimalist” tools above, these two tasks proceed largely as follows - -* For every observation in the dataset, traverse the tree (runtime depends on the tree topology but in a fully balanced tree with $k$ nodes, this has time complexity $O(\log (k))$). -* For every observation in the dataset, determine whether an observation falls into a given node and whether or not a proposed decision rule would be true - -These operations both perform unnecessary computation which can be avoided with some additional real-time tracking. Essentially, we want - -1. A mapping from dataset row index to leaf node id for every tree in an ensemble (so that we can skip the tree traversal during prediction) -2. A mapping from leaf node id to dataset row indices every tree in an ensemble (so that we can skip the full pass through the training data at split evaluation) - - - - -## Forest Tracker - -The `ForestTracker` class is a wrapper around several implementations of the mappings discussed above. - -#### WARNING -doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml diff --git a/docs/cpp-documentation-markdown/tree.md b/docs/cpp-documentation-markdown/tree.md deleted file mode 100644 index a3e3e4a3a..000000000 --- a/docs/cpp-documentation-markdown/tree.md +++ /dev/null @@ -1,15 +0,0 @@ -# Decision Tree API - -## Tree - -The fundamental building block of the C++ tree interface is the `Tree` class. - -#### WARNING -doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml - -## Tree Split - -Numeric and categorical splits are represented by a `TreeSplit` class. - -#### WARNING -doxygenclass: Cannot find file: /Users/drew/Github/documentation/stochtree-repo/cpp_docs/doxyoutput/xml/index.xml diff --git a/docs/intro.md b/docs/intro.md deleted file mode 100644 index 45e8604c8..000000000 --- a/docs/intro.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Tutorial Intro - -Let's discover **Docusaurus in less than 5 minutes**. - -## Getting Started - -Get started by **creating a new site**. - -Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. - -### What you'll need - -- [Node.js](https://nodejs.org/en/download/) version 18.0 or above: - - When installing Node.js, you are recommended to check all checkboxes related to dependencies. - -## Generate a new site - -Generate a new Docusaurus site using the **classic template**. - -The classic template will automatically be added to your project after you run the command: - -```bash -npm init docusaurus@latest my-website classic -``` - -You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. - -The command also installs all necessary dependencies you need to run Docusaurus. - -## Start your site - -Run the development server: - -```bash -cd my-website -npm run start -``` - -The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. - -The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. - -Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/docs/python-documentation-markdown/api.md b/docs/python-documentation-markdown/api.md deleted file mode 100644 index 84929e375..000000000 --- a/docs/python-documentation-markdown/api.md +++ /dev/null @@ -1,254 +0,0 @@ -# StochTree API - -## BART - -### *class* stochtree.bart.BARTModel - -Class that handles sampling, storage, and serialization of stochastic forest models like BART, XBART, and Warm-Start BART - -#### predict(covariates: array, basis: array | None = None) → array - -Return predictions from every forest sampled (either / both of mean and variance) - -### Parameters - -covariates -: Test set covariates. - -basis_train -: Optional test set basis vector, must be provided if the model was trained with a leaf regression basis. - -### Returns - -tuple of `np.array` -: Tuple of arrays of predictions corresponding to each forest (mean and variance, depending on whether either / both was included). Each array will contain as many rows as in `covariates` and as many columns as retained samples of the algorithm. - -#### sample(X_train: array, y_train: array, basis_train: array | None = None, X_test: array | None = None, basis_test: array | None = None, num_gfr: int = 5, num_burnin: int = 0, num_mcmc: int = 100, params: Dict[str, Any] | None = None) → None - -Runs a BART sampler on provided training set. Predictions will be cached for the training set and (if provided) the test set. -Does not require a leaf regression basis. - -### Parameters - -X_train -: Training set covariates on which trees may be partitioned. - -y_train -: Training set outcome. - -basis_train -: Optional training set basis vector used to define a regression to be run in the leaves of each tree. - -X_test -: Optional test set covariates. - -basis_test -: Optional test set basis vector used to define a regression to be run in the leaves of each tree. - Must be included / omitted consistently (i.e. if basis_train is provided, then basis_test must be provided alongside X_test). - -num_gfr -: Number of “warm-start” iterations run using the grow-from-root algorithm (He and Hahn, 2021). Defaults to `5`. - -num_burnin -: Number of “burn-in” iterations of the MCMC sampler. Defaults to `0`. Ignored if `num_gfr > 0`. - -num_mcmc -: Number of “retained” iterations of the MCMC sampler. Defaults to `100`. If this is set to 0, GFR (XBART) samples will be retained. - -params -: Dictionary of model parameters, each of which has a default value. -
- * `cutpoint_grid_size` (`int`): Maximum number of cutpoints to consider for each feature. Defaults to `100`. - * `sigma_leaf` (`float`): Scale parameter on the (conditional mean) leaf node regression model. - * `alpha_mean` (`float`): Prior probability of splitting for a tree of depth 0 in the conditional mean model. Tree split prior combines `alpha_mean` and `beta_mean` via `alpha_mean*(1+node_depth)^-beta_mean`. - * `beta_mean` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 in the conditional mean model. Tree split prior combines `alpha_mean` and `beta_mean` via `alpha_mean*(1+node_depth)^-beta_mean`. - * `min_samples_leaf_mean` (`int`): Minimum allowable size of a leaf, in terms of training samples, in the conditional mean model. Defaults to `5`. - * `max_depth_mean` (`int`): Maximum depth of any tree in the ensemble in the conditional mean model. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. - * `alpha_variance` (`float`): Prior probability of splitting for a tree of depth 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. - * `beta_variance` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. - * `min_samples_leaf_variance` (`int`): Minimum allowable size of a leaf, in terms of training samples in the conditional variance model. Defaults to `5`. - * `max_depth_variance` (`int`): Maximum depth of any tree in the ensemble in the conditional variance model. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. - * `a_global` (`float`): Shape parameter in the `IG(a_global, b_global)` global error variance model. Defaults to `0`. - * `b_global` (`float`): Scale parameter in the `IG(a_global, b_global)` global error variance prior. Defaults to `0`. - * `a_leaf` (`float`): Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model. Defaults to `3`. - * `b_leaf` (`float`): Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model. Calibrated internally as `0.5/num_trees_mean` if not set here. - * `a_forest` (`float`): Shape parameter in the [optional] `IG(a_forest, b_forest)` conditional error variance forest (which is only sampled if `num_trees_variance > 0`). Calibrated internally as `num_trees_variance / 1.5^2 + 0.5` if not set here. - * `b_forest` (`float`): Scale parameter in the [optional] `IG(a_forest, b_forest)` conditional error variance forest (which is only sampled if `num_trees_variance > 0`). Calibrated internally as `num_trees_variance / 1.5^2` if not set here. - * `sigma2_init` (`float`): Starting value of global variance parameter. Set internally as a percentage of the standardized outcome variance if not set here. - * `variance_forest_leaf_init` (`float`): Starting value of root forest prediction in conditional (heteroskedastic) error variance model. Calibrated internally as `np.log(pct_var_variance_forest_init*np.var((y-np.mean(y))/np.std(y)))/num_trees_variance` if not set. - * `pct_var_sigma2_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Superseded by `sigma2`. Defaults to `1`. - * `pct_var_variance_forest_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`. - * `variance_scale` (`float`): Variance after the data have been scaled. Default: `1`. - * `variable_weights_mean` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the mean forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. - * `variable_weights_variance` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. - * `num_trees_mean` (`int`): Number of trees in the ensemble for the conditional mean model. Defaults to `200`. If `num_trees_mean = 0`, the conditional mean will not be modeled using a forest and the function will only proceed if `num_trees_variance > 0`. - * `num_trees_variance` (`int`): Number of trees in the ensemble for the conditional variance model. Defaults to `0`. Variance is only modeled using a tree / forest if `num_trees_variance > 0`. - * `sample_sigma_global` (`bool`): Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Defaults to `True`. - * `sample_sigma_leaf` (`bool`): Whether or not to update the `tau` leaf scale variance parameter based on `IG(a_leaf, b_leaf)`. Cannot (currently) be set to true if `basis_train` has more than one column. Defaults to `False`. - * `random_seed` (`int`): Integer parameterizing the C++ random number generator. If not specified, the C++ random number generator is seeded according to `std::random_device`. - * `keep_burnin` (`bool`): Whether or not “burnin” samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. - * `keep_gfr` (`bool`): Whether or not “warm-start” / grow-from-root samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. - * `keep_every` (`int`): How many iterations of the burned-in MCMC sampler should be run before forests and parameters are retained. Defaults to `1`. Setting `keep_every = k` for some `k > 1` will “thin” the MCMC samples by retaining every `k`-th sample, rather than simply every sample. This can reduce the autocorrelation of the MCMC samples. - -### Returns - -self -: Sampled BART Model. - -## BCF - -### *class* stochtree.bcf.BCFModel - -Class that handles sampling, storage, and serialization of causal BART models like BCF, XBCF, and Warm-Start BCF - -#### predict(X: array, Z: array, propensity: array | None = None) → array - -Predict outcome model components (CATE function and prognostic function) as well as overall outcome for every provided observation. -Predicted outcomes are computed as `yhat = mu_x + Z*tau_x` where mu_x is a sample of the prognostic function and tau_x is a sample of the treatment effect (CATE) function. - -### Parameters - -X -: Test set covariates. - -Z -: Test set treatment indicators. - -propensity -: Optional test set propensities. Must be provided if propensities were provided when the model was sampled. - -### Returns - -tuple of np.array -: Tuple of arrays with as many rows as in `X` and as many columns as retained samples of the algorithm. - The first entry of the tuple contains conditional average treatment effect (CATE) samples, - the second entry contains prognostic effect samples, and the third entry contains outcome prediction samples. - The optional fourth array contains variance forest samples. - -#### predict_tau(X: array, Z: array, propensity: array | None = None) → array - -Predict CATE function for every provided observation. - -### Parameters - -X -: Test set covariates. - -Z -: Test set treatment indicators. - -propensity -: Optional test set propensities. Must be provided if propensities were provided when the model was sampled. - -### Returns - -np.array -: Array with as many rows as in `X` and as many columns as retained samples of the algorithm. - -#### sample(X_train: DataFrame | array, Z_train: array, y_train: array, pi_train: array | None = None, X_test: DataFrame | array | None = None, Z_test: array | None = None, pi_test: array | None = None, num_gfr: int = 5, num_burnin: int = 0, num_mcmc: int = 100, params: Dict[str, Any] | None = None) → None - -Runs a BCF sampler on provided training set. Outcome predictions and estimates of the prognostic and treatment effect functions -will be cached for the training set and (if provided) the test set. - -### Parameters - -X_train -: Covariates used to split trees in the ensemble. Can be passed as either a matrix or dataframe. - -Z_train -: Array of (continuous or binary; univariate or multivariate) treatment assignments. - -y_train -: Outcome to be modeled by the ensemble. - -pi_train -: Optional vector of propensity scores. If not provided, this will be estimated from the data. - -X_test -: Optional test set of covariates used to define “out of sample” evaluation data. - -Z_test -: Optional test set of (continuous or binary) treatment assignments. - Must be provided if `X_test` is provided. - -pi_test -: Optional test set vector of propensity scores. If not provided (but `X_test` and `Z_test` are), this will be estimated from the data. - -num_gfr -: Number of “warm-start” iterations run using the grow-from-root algorithm (He and Hahn, 2021). Defaults to `5`. - -num_burnin -: Number of “burn-in” iterations of the MCMC sampler. Defaults to `0`. Ignored if `num_gfr > 0`. - -num_mcmc -: Number of “retained” iterations of the MCMC sampler. Defaults to `100`. If this is set to 0, GFR (XBART) samples will be retained. - -params -: Dictionary of model parameters, each of which has a default value. -
- * `cutpoint_grid_size` (`int`): Maximum number of cutpoints to consider for each feature. Defaults to `100`. - * `sigma_leaf_mu` (`float`): Starting value of leaf node scale parameter for the prognostic forest. Calibrated internally as `2/num_trees_mu` if not set here. - * `sigma_leaf_tau` (`float` or `np.array`): Starting value of leaf node scale parameter for the treatment effect forest. - : When treatment (`Z_train`) is multivariate, this can be either a `float` or a square 2-dimensional `np.array` - with `sigma_leaf_tau.shape[0] == Z_train.shape[1]` and `sigma_leaf_tau.shape[1] == Z_train.shape[1]`. - If `sigma_leaf_tau` is provided as a float for multivariate treatment, the leaf scale term will be set as a - diagonal matrix with `sigma_leaf_tau` on every diagonal. If not passed as an argument, this parameter is - calibrated internally as `1/num_trees_tau` (and propagated to a diagonal matrix if necessary). - * `alpha_mu` (`float`): Prior probability of splitting for a tree of depth 0 for the prognostic forest. - : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. - * `alpha_tau` (`float`): Prior probability of splitting for a tree of depth 0 for the treatment effect forest. - : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. - * `alpha_variance` (`float`): Prior probability of splitting for a tree of depth 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. - * `beta_mu` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 for the prognostic forest. - : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. - * `beta_tau` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 for the treatment effect forest. - : Tree split prior combines `alpha` and `beta` via `alpha*(1+node_depth)^-beta`. - * `beta_variance` (`float`): Exponent that decreases split probabilities for nodes of depth > 0 in the conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. - * `min_samples_leaf_mu` (`int`): Minimum allowable size of a leaf, in terms of training samples, for the prognostic forest. Defaults to `5`. - * `min_samples_leaf_tau` (`int`): Minimum allowable size of a leaf, in terms of training samples, for the treatment effect forest. Defaults to `5`. - * `min_samples_leaf_variance` (`int`): Minimum allowable size of a leaf, in terms of training samples in the conditional variance model. Defaults to `5`. - * `max_depth_mu` (`int`): Maximum depth of any tree in the mu ensemble. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. - * `max_depth_tau` (`int`): Maximum depth of any tree in the tau ensemble. Defaults to `5`. Can be overriden with `-1` which does not enforce any depth limits on trees. - * `max_depth_variance` (`int`): Maximum depth of any tree in the ensemble in the conditional variance model. Defaults to `10`. Can be overriden with `-1` which does not enforce any depth limits on trees. - * `a_global` (`float`): Shape parameter in the `IG(a_global, b_global)` global error variance model. Defaults to `0`. - * `b_global` (`float`): Component of the scale parameter in the `IG(a_global, b_global)` global error variance prior. Defaults to `0`. - * `a_leaf_mu` (`float`): Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the prognostic forest. Defaults to `3`. - * `a_leaf_tau` (`float`): Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Defaults to `3`. - * `b_leaf_mu` (`float`): Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the prognostic forest. Calibrated internally as `0.5/num_trees` if not set here. - * `b_leaf_tau` (`float`): Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Calibrated internally as `0.5/num_trees` if not set here. - * `sigma2_init` (`float`): Starting value of global variance parameter. Calibrated internally as in Sparapani et al (2021) if not set here. - * `variance_forest_leaf_init` (`float`): Starting value of root forest prediction in conditional (heteroskedastic) error variance model. Calibrated internally as `np.log(pct_var_variance_forest_init*np.var((y-np.mean(y))/np.std(y)))/num_trees_variance` if not set. - * `pct_var_sigma2_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Superseded by `sigma2`. Defaults to `0.25`. - * `pct_var_variance_forest_init` (`float`): Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`. - * `variable_weights_mean` (np.\`array\`): Numeric weights reflecting the relative probability of splitting on each variable in the prognostic and treatment effect forests. Does not need to sum to 1 but cannot be negative. Defaults to `np.repeat(1/X_train.shape[1], X_train.shape[1])` if not set here. Note that if the propensity score is included as a covariate in either forest, its weight will default to `1/X_train.shape[1]`. A workaround if you wish to provide a custom weight for the propensity score is to include it as a column in `X_train` and then set `propensity_covariate` to `'none'` and adjust `keep_vars_mu` and `keep_vars_tau` accordingly. - * `variable_weights_variance` (`np.array`): Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to uniform over the columns of `X_train` if not provided. - * `keep_vars_mu` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the prognostic (`mu(X)`) forest. Defaults to `None`. - * `drop_vars_mu` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the prognostic (`mu(X)`) forest. Defaults to `None`. If both `drop_vars_mu` and `keep_vars_mu` are set, `drop_vars_mu` will be ignored. - * `drop_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the variance (`sigma^2(X)`) forest. Defaults to `None`. If both `drop_vars_variance` and `keep_vars_variance` are set, `drop_vars_variance` will be ignored. - * `keep_vars_tau` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the treatment effect (`tau(X)`) forest. Defaults to `None`. - * `drop_vars_tau` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the treatment effect (`tau(X)`) forest. Defaults to `None`. If both `drop_vars_tau` and `keep_vars_tau` are set, `drop_vars_tau` will be ignored. - * `drop_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be excluded from the variance (`sigma^2(X)`) forest. Defaults to `None`. If both `drop_vars_variance` and `keep_vars_variance` are set, `drop_vars_variance` will be ignored. - * `keep_vars_variance` (`list` or `np.array`): Vector of variable names or column indices denoting variables that should be included in the variance (`sigma^2(X)`) forest. Defaults to `None`. - * `num_trees_mu` (`int`): Number of trees in the prognostic forest. Defaults to `200`. - * `num_trees_tau` (`int`): Number of trees in the treatment effect forest. Defaults to `50`. - * `num_trees_variance` (`int`): Number of trees in the ensemble for the conditional variance model. Defaults to `0`. Variance is only modeled using a tree / forest if `num_trees_variance > 0`. - * `sample_sigma_global` (`bool`): Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Defaults to `True`. - * `sample_sigma_leaf_mu` (`bool`): Whether or not to update the `tau` leaf scale variance parameter based on `IG(a_leaf, b_leaf)` for the prognostic forest. - : Cannot (currently) be set to true if `basis_train` has more than one column. Defaults to `True`. - * `sample_sigma_leaf_tau` (`bool`): Whether or not to update the `tau` leaf scale variance parameter based on `IG(a_leaf, b_leaf)` for the treatment effect forest. - : Cannot (currently) be set to true if `basis_train` has more than one column. Defaults to `True`. - * `propensity_covariate` (`str`): Whether to include the propensity score as a covariate in either or both of the forests. Enter `"none"` for neither, `"mu"` for the prognostic forest, `"tau"` for the treatment forest, and `"both"` for both forests. - : If this is not `"none"` and a propensity score is not provided, it will be estimated from (`X_train`, `Z_train`) using `BARTModel`. Defaults to `"mu"`. - * `adaptive_coding` (`bool`): Whether or not to use an “adaptive coding” scheme in which a binary treatment variable is not coded manually as (0,1) or (-1,1) but learned via - : parameters `b_0` and `b_1` that attach to the outcome model `[b_0 (1-Z) + b_1 Z] tau(X)`. This is ignored when Z is not binary. Defaults to True. - * `b_0` (`float`): Initial value of the “control” group coding parameter. This is ignored when `Z` is not binary. Default: `-0.5`. - * `b_1` (`float`): Initial value of the “treated” group coding parameter. This is ignored when `Z` is not binary. Default: `0.5`. - * `random_seed` (`int`): Integer parameterizing the C++ random number generator. If not specified, the C++ random number generator is seeded according to `std::random_device`. - * `keep_burnin` (`bool`): Whether or not “burnin” samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. - * `keep_gfr` (`bool`): Whether or not “warm-start” / grow-from-root samples should be included in predictions. Defaults to `False`. Ignored if `num_mcmc == 0`. - * `keep_every` (`int`): How many iterations of the burned-in MCMC sampler should be run before forests and parameters are retained. Defaults to `1`. Setting `keep_every = k` for some `k > 1` will “thin” the MCMC samples by retaining every `k`-th sample, rather than simply every sample. This can reduce the autocorrelation of the MCMC samples. - -### Returns - -self -: Sampled BCF Model. diff --git a/docs/python-documentation-markdown/causal.md b/docs/python-documentation-markdown/causal.md deleted file mode 100644 index bc6931389..000000000 --- a/docs/python-documentation-markdown/causal.md +++ /dev/null @@ -1,63 +0,0 @@ -# Causal Inference - -This vignette provides a quick overview (using simulated data) of how to use `stochtree` for causal inference. -Start by loading stochtree’s `BCFModel` class and a number of other packages. - -```python -import numpy as np -import pandas as pd -import seaborn as sns -import matplotlib.pyplot as plt -from stochtree import BCFModel -from sklearn.model_selection import train_test_split -``` - -Now, we generate a simulated causal inference problem - -```python -# RNG -random_seed = 101 -rng = np.random.default_rng(random_seed) - -# Generate covariates and basis -n = 1000 -p_X = 5 -X = rng.uniform(0, 1, (n, p_X)) -pi_X = 0.25 + 0.5*X[:,0] -Z = rng.binomial(1, pi_X, n).astype(float) - -# Define the outcome mean functions (prognostic and treatment effects) -mu_X = pi_X*5 -# tau_X = np.sin(X[:,1]*2*np.pi) -tau_X = X[:,1]*2 - -# Generate outcome -epsilon = rng.normal(0, 1, n) -y = mu_X + tau_X*Z + epsilon -``` - -Split the dataset into train and test sets - -```python -sample_inds = np.arange(n) -train_inds, test_inds = train_test_split(sample_inds, test_size=0.5) -X_train = X[train_inds,:] -X_test = X[test_inds,:] -Z_train = Z[train_inds] -Z_test = Z[test_inds] -y_train = y[train_inds] -y_test = y[test_inds] -pi_train = pi_X[train_inds] -pi_test = pi_X[test_inds] -mu_train = mu_X[train_inds] -mu_test = mu_X[test_inds] -tau_train = tau_X[train_inds] -tau_test = tau_X[test_inds] -``` - -Initialize and run a BCF sampler for 1000 iterations (after 10 “warm-start” draws) - -```python -bcf_model = BCFModel() -bcf_model.sample(X_train, Z_train, y_train, pi_train, X_test, Z_test, pi_test, num_gfr=10, num_mcmc=1000) -``` diff --git a/docs/python-documentation-markdown/index.md b/docs/python-documentation-markdown/index.md deleted file mode 100644 index 888f71f34..000000000 --- a/docs/python-documentation-markdown/index.md +++ /dev/null @@ -1,31 +0,0 @@ -# StochTree - -`stochtree` runs stochastic machine learning algorithms for supervised learning and causal inference. -For details on installing the package, see the [Installation](install.md) page. Once you have `stochtree` installed, -the [Supervised Learning](supervised.md) and [Causal Inference](causal.md) vignettes provide some guidance on -using the package for your use case. - - - - - -For complete function / class documentation, see the [API](api.md) page. - -* [Installation](install.md) - * [Quick start](install.md#quick-start) - * [Virtual environment installation](install.md#virtual-environment-installation) - * [Conda](install.md#conda) - * [Venv](install.md#venv) - * [Cloning the Repository](install.md#cloning-the-repository) -* [Supervised Learning](supervised.md) -* [Causal Inference](causal.md) -* [StochTree API](api.md) - * [BART](api.md#bart) - * [`BARTModel`](api.md#stochtree.bart.BARTModel) - * [`BARTModel.predict()`](api.md#stochtree.bart.BARTModel.predict) - * [`BARTModel.sample()`](api.md#stochtree.bart.BARTModel.sample) - * [BCF](api.md#bcf) - * [`BCFModel`](api.md#stochtree.bcf.BCFModel) - * [`BCFModel.predict()`](api.md#stochtree.bcf.BCFModel.predict) - * [`BCFModel.predict_tau()`](api.md#stochtree.bcf.BCFModel.predict_tau) - * [`BCFModel.sample()`](api.md#stochtree.bcf.BCFModel.sample) diff --git a/docs/python-documentation-markdown/install.md b/docs/python-documentation-markdown/install.md deleted file mode 100644 index bca0fe77e..000000000 --- a/docs/python-documentation-markdown/install.md +++ /dev/null @@ -1,97 +0,0 @@ -# Installation - -The python package is not yet on PyPI but can be installed from source using pip’s [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). -To proceed, you will need a working version of [git](https://git-scm.com) and python 3.8 or greater (available from several sources, one of the most -straightforward being the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite). - -The python package can be installed from github via pip (and will soon be available on PyPI). -Clone the repo recursively (including git submodules) by running - -```console -$ git clone --recursive https://github.com/StochasticTree/stochtree.git -``` - -## Quick start - -Without worrying about virtual environments (detailed further below), `stochtree` can be installed from the command line - -```console -$ pip install numpy scipy pytest pandas scikit-learn pybind11 -$ pip install git+https://github.com/StochasticTree/stochtree.git -``` - -## Virtual environment installation - -Often, users prefer to manage different projects (with different package / python version requirements) in virtual environments. - -### Conda - -Conda provides a straightforward experience in managing python dependencies, avoiding version conflicts / ABI issues / etc. - -To build stochtree using a `conda` based workflow, first create and activate a conda environment with the requisite dependencies - -```console -$ conda create -n stochtree-dev -c conda-forge python=3.10 numpy scipy pytest pandas pybind11 scikit-learn matplotlib seaborn -$ conda activate stochtree-dev -``` - -Then install the package from github via pip - -```console -$ pip install git+https://github.com/StochasticTree/stochtree.git -``` - -(*Note*: if you’d also like to run `stochtree`’s notebook examples, you will also need jupyterlab, seaborn, and matplotlib) - -```console -$ conda install matplotlib seaborn -$ pip install jupyterlab -``` - -With these dependencies installed, you can [clone the repo](#cloning-the-repository) and run the `demo/` examples. - -### Venv - -You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments -(i.e. `cd /path/to/envs`) and create and activate a virtual environment: - -```console -$ python -m venv venv -$ source venv/bin/activate -``` - -Install all of the package (and demo notebook) dependencies - -```console -$ pip install numpy scipy pytest pandas scikit-learn pybind11 -``` - -Then install stochtree via - -```console -$ pip install git+https://github.com/StochasticTree/stochtree.git -``` - -As above, if you’d like to run the notebook examples in the `demo/` subfolder, you will also need jupyterlab, seaborn, and matplotlib and you will have to [clone the repo](#cloning-the-repository) - -```console -$ pip install matplotlib seaborn jupyterlab -``` - - - -## Cloning the Repository - -To clone the repository, you must have git installed, which you can do following [these instructions](https://learn.microsoft.com/en-us/devops/develop/git/install-and-set-up-git). - -Once git is available at the command line, navigate to the folder that will store this project (in bash / zsh, this is done by running `cd` followed by the path to the directory). -Then, clone the `stochtree` repo as a subfolder by running - -```console -$ git clone --recursive https://github.com/StochasticTree/stochtree.git -``` - -*NOTE*: this project incorporates several dependencies as [git submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules), -which is why the `--recursive` flag is necessary (some systems may perform a recursive clone without this flag, but -`--recursive` ensures this behavior on all platforms). If you have already cloned the repo without the `--recursive` flag, -you can retrieve the submodules recursively by running `git submodule update --init --recursive` in the main repo directory. diff --git a/docs/python-documentation-markdown/supervised.md b/docs/python-documentation-markdown/supervised.md deleted file mode 100644 index 5975cd6bf..000000000 --- a/docs/python-documentation-markdown/supervised.md +++ /dev/null @@ -1,70 +0,0 @@ -# Supervised Learning - -This vignette provides a quick overview (using simulated data) of how to use `stochtree` for supervised learning. -Start by loading stochtree’s `BARTModel` class and a number of other packages. - -```python -import numpy as np -import pandas as pd -import seaborn as sns -import matplotlib.pyplot as plt -from stochtree import BARTModel -from sklearn.model_selection import train_test_split -``` - -Now, we generate a simulated prediction problem - -```python -# RNG -random_seed = 1234 -rng = np.random.default_rng(random_seed) - -# Generate covariates and basis -n = 1000 -p_X = 10 -p_W = 1 -X = rng.uniform(0, 1, (n, p_X)) -W = rng.uniform(0, 1, (n, p_W)) - -# Define the outcome mean function -def outcome_mean(X, W): - return np.where( - (X[:,0] >= 0.0) & (X[:,0] < 0.25), -7.5 * W[:,0], - np.where( - (X[:,0] >= 0.25) & (X[:,0] < 0.5), -2.5 * W[:,0], - np.where( - (X[:,0] >= 0.5) & (X[:,0] < 0.75), 2.5 * W[:,0], - 7.5 * W[:,0] - ) - ) - ) - -# Generate outcome -epsilon = rng.normal(0, 1, n) -y = outcome_mean(X, W) + epsilon - -# Standardize outcome -y_bar = np.mean(y) -y_std = np.std(y) -resid = (y-y_bar)/y_std -``` - -Split the dataset into train and test sets - -```python -sample_inds = np.arange(n) -train_inds, test_inds = train_test_split(sample_inds, test_size=0.5) -X_train = X[train_inds,:] -X_test = X[test_inds,:] -basis_train = W[train_inds,:] -basis_test = W[test_inds,:] -y_train = y[train_inds] -y_test = y[test_inds] -``` - -Initialize and run a BART sampler for 100 iterations (after 10 “warm-start” draws) - -```python -bart_model = BARTModel() -bart_model.sample(X_train=X_train, y_train=y_train, basis_train=basis_train, X_test=X_test, basis_test=basis_test, num_gfr=10, num_mcmc=100) -``` diff --git a/docs/python-installation.md b/docs/python-installation.md deleted file mode 100644 index 4bb7a240c..000000000 --- a/docs/python-installation.md +++ /dev/null @@ -1,72 +0,0 @@ -# StochTree Python Package - -The python package is not yet on PyPI but can be installed from source using pip's [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). -To proceed, you will need a working version of [git](https://git-scm.com) and python 3.8 or greater (available from several sources, one of the most -straightforward being the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite). - -## Quick start - -Without worrying about virtual environments (detailed further below), `stochtree` can be installed from the command line - -``` -pip install numpy scipy pytest pandas scikit-learn pybind11 -pip install git+https://github.com/StochasticTree/stochtree.git -``` - -## Virtual environment installation - -Often, users prefer to manage different projects (with different package / python version requirements) in virtual environments. - -### Conda - -Conda provides a straightforward experience in managing python dependencies, avoiding version conflicts / ABI issues / etc. - -To build stochtree using a `conda` based workflow, first create and activate a conda environment with the requisite dependencies - -```{bash} -conda create -n stochtree-dev -c conda-forge python=3.10 numpy scipy pytest pandas pybind11 scikit-learn matplotlib seaborn -conda activate stochtree-dev -``` - -Then install the package from github via pip - -```{bash} -pip install git+https://github.com/StochasticTree/stochtree.git -``` - -(*Note*: if you'd also like to run `stochtree`'s notebook examples, you will also need jupyterlab, seaborn, and matplotlib) - -```{bash} -conda install matplotlib seaborn -pip install jupyterlab -``` - -With these dependencies installed, you can [clone the repo](###cloning-the-repository) and run the `demo/` examples. - -### Venv - -You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments -(i.e. `cd /path/to/envs`) and create and activate a virtual environment: - -```{bash} -python -m venv venv -source venv/bin/activate -``` - -Install all of the package (and demo notebook) dependencies - -```{bash} -pip install numpy scipy pytest pandas scikit-learn pybind11 -``` - -Then install stochtree via - -```{bash} -pip install git+https://github.com/StochasticTree/stochtree.git -``` - -As above, if you'd like to run the notebook examples in the `stochtree` repo, you will also need jupyterlab, seaborn, and matplotlib and you will have to [clone the repo](###cloning-the-repository) - -```{bash} -pip install matplotlib seaborn jupyterlab -``` diff --git a/docs/r-documentation-markdown/CppJson.md b/docs/r-documentation-markdown/CppJson.md deleted file mode 100644 index 67fcdbb05..000000000 --- a/docs/r-documentation-markdown/CppJson.md +++ /dev/null @@ -1,435 +0,0 @@ ---- -title: CppJson ---- - -# Class that stores draws from an random ensemble of decision trees - -## Description - -Wrapper around a C++ container of tree ensembles - -## Public fields - -* `json_ptr`: External pointer to a C++ nlohmann::json object -* `num_forests`: Number of forests in the nlohmann::json object -* `forest_labels`: Names of forest objects in the overall nlohmann::json object -* `num_rfx`: Number of random effects terms in the nlohman::json object -* `rfx_container_labels`: Names of rfx container objects in the overall nlohmann::json object -* `rfx_mapper_labels`: Names of rfx label mapper objects in the overall nlohmann::json object -* `rfx_groupid_labels`: Names of rfx group id objects in the overall nlohmann::json object - -## Methods - -### Public methods - -* [`CppJson$new()`](#method-CppJson-new) -* [`CppJson$add_forest()`](#method-CppJson-add_forest) -* [`CppJson$add_random_effects()`](#method-CppJson-add_random_effects) -* [`CppJson$add_scalar()`](#method-CppJson-add_scalar) -* [`CppJson$add_boolean()`](#method-CppJson-add_boolean) -* [`CppJson$add_string()`](#method-CppJson-add_string) -* [`CppJson$add_vector()`](#method-CppJson-add_vector) -* [`CppJson$add_string_vector()`](#method-CppJson-add_string_vector) -* [`CppJson$add_list()`](#method-CppJson-add_list) -* [`CppJson$add_string_list()`](#method-CppJson-add_string_list) -* [`CppJson$get_scalar()`](#method-CppJson-get_scalar) -* [`CppJson$get_boolean()`](#method-CppJson-get_boolean) -* [`CppJson$get_string()`](#method-CppJson-get_string) -* [`CppJson$get_vector()`](#method-CppJson-get_vector) -* [`CppJson$get_string_vector()`](#method-CppJson-get_string_vector) -* [`CppJson$get_numeric_list()`](#method-CppJson-get_numeric_list) -* [`CppJson$get_string_list()`](#method-CppJson-get_string_list) -* [`CppJson$return_json_string()`](#method-CppJson-return_json_string) -* [`CppJson$save_file()`](#method-CppJson-save_file) -* [`CppJson$load_from_file()`](#method-CppJson-load_from_file) -* [`CppJson$load_from_string()`](#method-CppJson-load_from_string) - -### Method `new()` - -Create a new CppJson object. - -#### Usage - -``` -CppJson$new() -``` - -#### Returns - -A new `CppJson` object. - -### Method `add_forest()` - -Convert a forest container to json and add to the current `CppJson` object - -#### Usage - -``` -CppJson$add_forest(forest_samples) -``` - -#### Arguments - -* `forest_samples`: `ForestSamples` R class - -#### Returns - -NULL - -### Method `add_random_effects()` - -Convert a random effects container to json and add to the current `CppJson` object - -#### Usage - -``` -CppJson$add_random_effects(rfx_samples) -``` - -#### Arguments - -* `rfx_samples`: `RandomEffectSamples` R class - -#### Returns - -NULL - -### Method `add_scalar()` - -Add a scalar to the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$add_scalar(field_name, field_value, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `field_value`: Numeric value of the field to be added to json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which to place the value - -#### Returns - -NULL - -### Method `add_boolean()` - -Add a boolean value to the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$add_boolean(field_name, field_value, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `field_value`: Numeric value of the field to be added to json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which to place the value - -#### Returns - -NULL - -### Method `add_string()` - -Add a string value to the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$add_string(field_name, field_value, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `field_value`: Numeric value of the field to be added to json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which to place the value - -#### Returns - -NULL - -### Method `add_vector()` - -Add an array to the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$add_vector(field_name, field_vector, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `field_vector`: Vector to be stored in json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which to place the value - -#### Returns - -NULL - -### Method `add_string_vector()` - -Add an array to the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$add_string_vector(field_name, field_vector, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `field_vector`: Character vector to be stored in json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which to place the value - -#### Returns - -NULL - -### Method `add_list()` - -Add a list of vectors (as an object map of arrays) to the json object under the name "field_name" - -#### Usage - -``` -CppJson$add_list(field_name, field_list) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `field_list`: List to be stored in json - -#### Returns - -NULL - -### Method `add_string_list()` - -Add a list of vectors (as an object map of arrays) to the json object under the name "field_name" - -#### Usage - -``` -CppJson$add_string_list(field_name, field_list) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `field_list`: List to be stored in json - -#### Returns - -NULL - -### Method `get_scalar()` - -Retrieve a scalar value from the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$get_scalar(field_name, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be accessed from json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which the field is stored - -#### Returns - -NULL - -### Method `get_boolean()` - -Retrieve a boolean value from the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$get_boolean(field_name, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be accessed from json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which the field is stored - -#### Returns - -NULL - -### Method `get_string()` - -Retrieve a string value from the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$get_string(field_name, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be accessed from json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which the field is stored - -#### Returns - -NULL - -### Method `get_vector()` - -Retrieve a vector from the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$get_vector(field_name, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be accessed from json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which the field is stored - -#### Returns - -NULL - -### Method `get_string_vector()` - -Retrieve a character vector from the json object under the name "field_name" (with optional subfolder "subfolder_name") - -#### Usage - -``` -CppJson$get_string_vector(field_name, subfolder_name = NULL) -``` - -#### Arguments - -* `field_name`: The name of the field to be accessed from json -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which the field is stored - -#### Returns - -NULL - -### Method `get_numeric_list()` - -Reconstruct a list of numeric vectors from the json object stored under "field_name" - -#### Usage - -``` -CppJson$get_numeric_list(field_name, key_names) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `key_names`: Vector of names of list elements (each of which is a vector) - -#### Returns - -NULL - -### Method `get_string_list()` - -Reconstruct a list of string vectors from the json object stored under "field_name" - -#### Usage - -``` -CppJson$get_string_list(field_name, key_names) -``` - -#### Arguments - -* `field_name`: The name of the field to be added to json -* `key_names`: Vector of names of list elements (each of which is a vector) - -#### Returns - -NULL - -### Method `return_json_string()` - -Convert a JSON object to in-memory string - -#### Usage - -``` -CppJson$return_json_string() -``` - -#### Returns - -JSON string - -### Method `save_file()` - -Save a json object to file - -#### Usage - -``` -CppJson$save_file(filename) -``` - -#### Arguments - -* `filename`: String of filepath, must end in ".json" - -#### Returns - -NULL - -### Method `load_from_file()` - -Load a json object from file - -#### Usage - -``` -CppJson$load_from_file(filename) -``` - -#### Arguments - -* `filename`: String of filepath, must end in ".json" - -#### Returns - -NULL - -### Method `load_from_string()` - -Load a json object from string - -#### Usage - -``` -CppJson$load_from_string(json_string) -``` - -#### Arguments - -* `json_string`: JSON string dump - -#### Returns - -NULL - diff --git a/docs/r-documentation-markdown/CppRNG.md b/docs/r-documentation-markdown/CppRNG.md deleted file mode 100644 index a5e6d06aa..000000000 --- a/docs/r-documentation-markdown/CppRNG.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: CppRNG ---- - -# Class that wraps a C++ random number generator (for reproducibility) - -## Description - -Persists a C++ random number generator throughout an R session to -ensure reproducibility from a given random seed. If no seed is provided, -the C++ random number generator is initialized using `std::random_device`. - -## Public fields - -* `rng_ptr`: External pointer to a C++ std::mt19937 class - -## Methods - -### Public methods - -* [`CppRNG$new()`](#method-CppRNG-new) - -### Method `new()` - -Create a new CppRNG object. - -#### Usage - -``` -CppRNG$new(random_seed = -1) -``` - -#### Arguments - -* `random_seed`: (Optional) random seed for sampling - -#### Returns - -A new `CppRNG` object. - diff --git a/docs/r-documentation-markdown/ForestDataset.md b/docs/r-documentation-markdown/ForestDataset.md deleted file mode 100644 index 98135f86e..000000000 --- a/docs/r-documentation-markdown/ForestDataset.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: ForestDataset ---- - -# Dataset used to sample a forest - -## Description - -A dataset consists of three matrices / vectors: covariates, -bases, and variance weights. Both the basis vector and variance -weights are optional. - -## Public fields - -* `data_ptr`: External pointer to a C++ ForestDataset class - -## Methods - -### Public methods - -* [`ForestDataset$new()`](#method-ForestDataset-new) -* [`ForestDataset$update_basis()`](#method-ForestDataset-update_basis) -* [`ForestDataset$num_observations()`](#method-ForestDataset-num_observations) -* [`ForestDataset$num_covariates()`](#method-ForestDataset-num_covariates) -* [`ForestDataset$num_basis()`](#method-ForestDataset-num_basis) -* [`ForestDataset$has_basis()`](#method-ForestDataset-has_basis) -* [`ForestDataset$has_variance_weights()`](#method-ForestDataset-has_variance_weights) - -### Method `new()` - -Create a new ForestDataset object. - -#### Usage - -``` -ForestDataset$new(covariates, basis = NULL, variance_weights = NULL) -``` - -#### Arguments - -* `covariates`: Matrix of covariates -* `basis`: (Optional) Matrix of bases used to define a leaf regression -* `variance_weights`: (Optional) Vector of observation-specific variance weights - -#### Returns - -A new `ForestDataset` object. - -### Method `update_basis()` - -Update basis matrix in a dataset - -#### Usage - -``` -ForestDataset$update_basis(basis) -``` - -#### Arguments - -* `basis`: Updated matrix of bases used to define a leaf regression - -### Method `num_observations()` - -Return number of observations in a `ForestDataset` object - -#### Usage - -``` -ForestDataset$num_observations() -``` - -#### Returns - -Observation count - -### Method `num_covariates()` - -Return number of covariates in a `ForestDataset` object - -#### Usage - -``` -ForestDataset$num_covariates() -``` - -#### Returns - -Covariate count - -### Method `num_basis()` - -Return number of bases in a `ForestDataset` object - -#### Usage - -``` -ForestDataset$num_basis() -``` - -#### Returns - -Basis count - -### Method `has_basis()` - -Whether or not a dataset has a basis matrix - -#### Usage - -``` -ForestDataset$has_basis() -``` - -#### Returns - -True if basis matrix is loaded, false otherwise - -### Method `has_variance_weights()` - -Whether or not a dataset has variance weights - -#### Usage - -``` -ForestDataset$has_variance_weights() -``` - -#### Returns - -True if variance weights are loaded, false otherwise - diff --git a/docs/r-documentation-markdown/ForestModel.md b/docs/r-documentation-markdown/ForestModel.md deleted file mode 100644 index eda4cfe85..000000000 --- a/docs/r-documentation-markdown/ForestModel.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: ForestModel ---- - -# Class that defines and samples a forest model - -## Description - -Hosts the C++ data structures needed to sample an ensemble of decision -trees, and exposes functionality to run a forest sampler -(using either MCMC or the grow-from-root algorithm). - -## Public fields - -* `tracker_ptr`: External pointer to a C++ ForestTracker class -* `tree_prior_ptr`: External pointer to a C++ TreePrior class - -## Methods - -### Public methods - -* [`ForestModel$new()`](#method-ForestModel-new) -* [`ForestModel$sample_one_iteration()`](#method-ForestModel-sample_one_iteration) -* [`ForestModel$propagate_basis_update()`](#method-ForestModel-propagate_basis_update) -* [`ForestModel$propagate_residual_update()`](#method-ForestModel-propagate_residual_update) - -### Method `new()` - -Create a new ForestModel object. - -#### Usage - -``` -ForestModel$new( - forest_dataset, - feature_types, - num_trees, - n, - alpha, - beta, - min_samples_leaf, - max_depth = -1 -) -``` - -#### Arguments - -* `forest_dataset`: `ForestDataset` object, used to initialize forest sampling data structures -* `feature_types`: Feature types (integers where 0 = numeric, 1 = ordered categorical, 2 = unordered categorical) -* `num_trees`: Number of trees in the forest being sampled -* `n`: Number of observations in `forest_dataset` -* `alpha`: Root node split probability in tree prior -* `beta`: Depth prior penalty in tree prior -* `min_samples_leaf`: Minimum number of samples in a tree leaf -* `max_depth`: Maximum depth that any tree can reach - -#### Returns - -A new `ForestModel` object. - -### Method `sample_one_iteration()` - -Run a single iteration of the forest sampling algorithm (MCMC or GFR) - -#### Usage - -``` -ForestModel$sample_one_iteration( - forest_dataset, - residual, - forest_samples, - rng, - feature_types, - leaf_model_int, - leaf_model_scale, - variable_weights, - a_forest, - b_forest, - global_scale, - cutpoint_grid_size = 500, - gfr = T, - pre_initialized = F -) -``` - -#### Arguments - -* `forest_dataset`: Dataset used to sample the forest -* `residual`: Outcome used to sample the forest -* `forest_samples`: Container of forest samples -* `rng`: Wrapper around C++ random number generator -* `feature_types`: Vector specifying the type of all p covariates in `forest_dataset` (0 = numeric, 1 = ordered categorical, 2 = unordered categorical) -* `leaf_model_int`: Integer specifying the leaf model type (0 = constant leaf, 1 = univariate leaf regression, 2 = multivariate leaf regression) -* `leaf_model_scale`: Scale parameter used in the leaf node model (should be a q x q matrix where q is the dimensionality of the basis and is only \>1 when `leaf_model_int = 2`) -* `variable_weights`: Vector specifying sampling probability for all p covariates in `forest_dataset` -* `a_forest`: Shape parameter on variance forest model (if applicable) -* `b_forest`: Scale parameter on variance forest model (if applicable) -* `global_scale`: Global variance parameter -* `cutpoint_grid_size`: (Optional) Number of unique cutpoints to consider (default: 500, currently only used when `GFR = TRUE`) -* `gfr`: (Optional) Whether or not the forest should be sampled using the "grow-from-root" (GFR) algorithm -* `pre_initialized`: (Optional) Whether or not the leaves are pre-initialized outside of the sampling loop (before any samples are drawn). In multi-forest implementations like BCF, this is true, though in the single-forest supervised learning implementation, we can let C++ do the initialization. Default: F. - -### Method `propagate_basis_update()` - -Propagates basis update through to the (full/partial) residual by iteratively -(a) adding back in the previous prediction of each tree, (b) recomputing predictions -for each tree (caching on the C++ side), (c) subtracting the new predictions from the residual. -This is useful in cases where a basis (for e.g. leaf regression) is updated outside -of a tree sampler (as with e.g. adaptive coding for binary treatment BCF). -Once a basis has been updated, the overall "function" represented by a tree model has -changed and this should be reflected through to the residual before the next sampling loop is run. - -#### Usage - -``` -ForestModel$propagate_basis_update( - dataset, - outcome, - forest_samples, - forest_num -) -``` - -#### Arguments - -* `dataset`: `ForestDataset` object storing the covariates and bases for a given forest -* `outcome`: `Outcome` object storing the residuals to be updated based on forest predictions -* `forest_samples`: `ForestSamples` object storing draws of tree ensembles -* `forest_num`: Index of forest used to update residuals (starting at 1, in R style) - -### Method `propagate_residual_update()` - -Update the current state of the outcome (i.e. partial residual) data by subtracting the current predictions of each tree. -This function is run after the `Outcome` class's `update_data` method, which overwrites the partial residual with an entirely new stream of outcome data. - -#### Usage - -``` -ForestModel$propagate_residual_update(residual) -``` - -#### Arguments - -* `residual`: Outcome used to sample the forest - -#### Returns - -NULL - diff --git a/docs/r-documentation-markdown/ForestSamples.md b/docs/r-documentation-markdown/ForestSamples.md deleted file mode 100644 index bf5671916..000000000 --- a/docs/r-documentation-markdown/ForestSamples.md +++ /dev/null @@ -1,932 +0,0 @@ ---- -title: ForestSamples ---- - -# Class that stores draws from an random ensemble of decision trees - -## Description - -Wrapper around a C++ container of tree ensembles - -## Public fields - -* `forest_container_ptr`: External pointer to a C++ ForestContainer class - -## Methods - -### Public methods - -* [`ForestSamples$new()`](#method-ForestSamples-new) -* [`ForestSamples$load_from_json()`](#method-ForestSamples-load_from_json) -* [`ForestSamples$append_from_json()`](#method-ForestSamples-append_from_json) -* [`ForestSamples$load_from_json_string()`](#method-ForestSamples-load_from_json_string) -* [`ForestSamples$append_from_json_string()`](#method-ForestSamples-append_from_json_string) -* [`ForestSamples$predict()`](#method-ForestSamples-predict) -* [`ForestSamples$predict_raw()`](#method-ForestSamples-predict_raw) -* [`ForestSamples$predict_raw_single_forest()`](#method-ForestSamples-predict_raw_single_forest) -* [`ForestSamples$predict_raw_single_tree()`](#method-ForestSamples-predict_raw_single_tree) -* [`ForestSamples$set_root_leaves()`](#method-ForestSamples-set_root_leaves) -* [`ForestSamples$prepare_for_sampler()`](#method-ForestSamples-prepare_for_sampler) -* [`ForestSamples$adjust_residual()`](#method-ForestSamples-adjust_residual) -* [`ForestSamples$save_json()`](#method-ForestSamples-save_json) -* [`ForestSamples$load_json()`](#method-ForestSamples-load_json) -* [`ForestSamples$num_samples()`](#method-ForestSamples-num_samples) -* [`ForestSamples$num_trees()`](#method-ForestSamples-num_trees) -* [`ForestSamples$output_dimension()`](#method-ForestSamples-output_dimension) -* [`ForestSamples$add_forest_with_constant_leaves()`](#method-ForestSamples-add_forest_with_constant_leaves) -* [`ForestSamples$add_numeric_split_tree()`](#method-ForestSamples-add_numeric_split_tree) -* [`ForestSamples$get_tree_leaves()`](#method-ForestSamples-get_tree_leaves) -* [`ForestSamples$get_tree_split_counts()`](#method-ForestSamples-get_tree_split_counts) -* [`ForestSamples$get_forest_split_counts()`](#method-ForestSamples-get_forest_split_counts) -* [`ForestSamples$get_aggregate_split_counts()`](#method-ForestSamples-get_aggregate_split_counts) -* [`ForestSamples$get_granular_split_counts()`](#method-ForestSamples-get_granular_split_counts) -* [`ForestSamples$ensemble_tree_max_depth()`](#method-ForestSamples-ensemble_tree_max_depth) -* [`ForestSamples$average_ensemble_max_depth()`](#method-ForestSamples-average_ensemble_max_depth) -* [`ForestSamples$average_max_depth()`](#method-ForestSamples-average_max_depth) -* [`ForestSamples$num_forest_leaves()`](#method-ForestSamples-num_forest_leaves) -* [`ForestSamples$sum_leaves_squared()`](#method-ForestSamples-sum_leaves_squared) -* [`ForestSamples$is_leaf_node()`](#method-ForestSamples-is_leaf_node) -* [`ForestSamples$is_numeric_split_node()`](#method-ForestSamples-is_numeric_split_node) -* [`ForestSamples$is_categorical_split_node()`](#method-ForestSamples-is_categorical_split_node) -* [`ForestSamples$parent_node()`](#method-ForestSamples-parent_node) -* [`ForestSamples$left_child_node()`](#method-ForestSamples-left_child_node) -* [`ForestSamples$right_child_node()`](#method-ForestSamples-right_child_node) -* [`ForestSamples$node_depth()`](#method-ForestSamples-node_depth) -* [`ForestSamples$node_split_index()`](#method-ForestSamples-node_split_index) -* [`ForestSamples$node_split_threshold()`](#method-ForestSamples-node_split_threshold) -* [`ForestSamples$node_split_categories()`](#method-ForestSamples-node_split_categories) -* [`ForestSamples$node_leaf_values()`](#method-ForestSamples-node_leaf_values) -* [`ForestSamples$num_nodes()`](#method-ForestSamples-num_nodes) -* [`ForestSamples$num_leaves()`](#method-ForestSamples-num_leaves) -* [`ForestSamples$num_leaf_parents()`](#method-ForestSamples-num_leaf_parents) -* [`ForestSamples$num_split_nodes()`](#method-ForestSamples-num_split_nodes) -* [`ForestSamples$nodes()`](#method-ForestSamples-nodes) -* [`ForestSamples$leaves()`](#method-ForestSamples-leaves) - -### Method `new()` - -Create a new ForestContainer object. - -#### Usage - -``` -ForestSamples$new( - num_trees, - output_dimension = 1, - is_leaf_constant = F, - is_exponentiated = F -) -``` - -#### Arguments - -* `num_trees`: Number of trees -* `output_dimension`: Dimensionality of the outcome model -* `is_leaf_constant`: Whether leaf is constant -* `is_exponentiated`: Whether forest predictions should be exponentiated before being returned - -#### Returns - -A new `ForestContainer` object. - -### Method `load_from_json()` - -Create a new `ForestContainer` object from a json object - -#### Usage - -``` -ForestSamples$load_from_json(json_object, json_forest_label) -``` - -#### Arguments - -* `json_object`: Object of class `CppJson` -* `json_forest_label`: Label referring to a particular forest (i.e. "forest_0") in the overall json hierarchy - -#### Returns - -A new `ForestContainer` object. - -### Method `append_from_json()` - -Append to a `ForestContainer` object from a json object - -#### Usage - -``` -ForestSamples$append_from_json(json_object, json_forest_label) -``` - -#### Arguments - -* `json_object`: Object of class `CppJson` -* `json_forest_label`: Label referring to a particular forest (i.e. "forest_0") in the overall json hierarchy - -#### Returns - -NULL - -### Method `load_from_json_string()` - -Create a new `ForestContainer` object from a json object - -#### Usage - -``` -ForestSamples$load_from_json_string(json_string, json_forest_label) -``` - -#### Arguments - -* `json_string`: JSON string which parses into object of class `CppJson` -* `json_forest_label`: Label referring to a particular forest (i.e. "forest_0") in the overall json hierarchy - -#### Returns - -A new `ForestContainer` object. - -### Method `append_from_json_string()` - -Append to a `ForestContainer` object from a json object - -#### Usage - -``` -ForestSamples$append_from_json_string(json_string, json_forest_label) -``` - -#### Arguments - -* `json_string`: JSON string which parses into object of class `CppJson` -* `json_forest_label`: Label referring to a particular forest (i.e. "forest_0") in the overall json hierarchy - -#### Returns - -NULL - -### Method `predict()` - -Predict every tree ensemble on every sample in `forest_dataset` - -#### Usage - -``` -ForestSamples$predict(forest_dataset) -``` - -#### Arguments - -* `forest_dataset`: `ForestDataset` R class - -#### Returns - -matrix of predictions with as many rows as in forest_dataset -and as many columns as samples in the `ForestContainer` - -### Method `predict_raw()` - -Predict "raw" leaf values (without being multiplied by basis) for every tree ensemble on every sample in `forest_dataset` - -#### Usage - -``` -ForestSamples$predict_raw(forest_dataset) -``` - -#### Arguments - -* `forest_dataset`: `ForestDataset` R class - -#### Returns - -Array of predictions for each observation in `forest_dataset` and -each sample in the `ForestSamples` class with each prediction having the -dimensionality of the forests' leaf model. In the case of a constant leaf model -or univariate leaf regression, this array is two-dimensional (number of observations, -number of forest samples). In the case of a multivariate leaf regression, -this array is three-dimension (number of observations, leaf model dimension, -number of samples). - -### Method `predict_raw_single_forest()` - -Predict "raw" leaf values (without being multiplied by basis) for a specific forest on every sample in `forest_dataset` - -#### Usage - -``` -ForestSamples$predict_raw_single_forest(forest_dataset, forest_num) -``` - -#### Arguments - -* `forest_dataset`: `ForestDataset` R class -* `forest_num`: Index of the forest sample within the container - -#### Returns - -matrix of predictions with as many rows as in forest_dataset -and as many columns as dimensions in the leaves of trees in `ForestContainer` - -### Method `predict_raw_single_tree()` - -Predict "raw" leaf values (without being multiplied by basis) for a specific tree in a specific forest on every observation in `forest_dataset` - -#### Usage - -``` -ForestSamples$predict_raw_single_tree(forest_dataset, forest_num, tree_num) -``` - -#### Arguments - -* `forest_dataset`: `ForestDataset` R class -* `forest_num`: Index of the forest sample within the container -* `tree_num`: Index of the tree to be queried - -#### Returns - -matrix of predictions with as many rows as in `forest_dataset`and as many columns as dimensions in the leaves of trees in `ForestContainer` - -### Method `set_root_leaves()` - -Set a constant predicted value for every tree in the ensemble. -Stops program if any tree is more than a root node. - -#### Usage - -``` -ForestSamples$set_root_leaves(forest_num, leaf_value) -``` - -#### Arguments - -* `forest_num`: Index of the forest sample within the container. -* `leaf_value`: Constant leaf value(s) to be fixed for each tree in the ensemble indexed by `forest_num`. Can be either a single number or a vector, depending on the forest's leaf dimension. - -### Method `prepare_for_sampler()` - -Set a constant predicted value for every tree in the ensemble. -Stops program if any tree is more than a root node. - -#### Usage - -``` -ForestSamples$prepare_for_sampler( - dataset, - outcome, - forest_model, - leaf_model_int, - leaf_value -) -``` - -#### Arguments - -* `dataset`: `ForestDataset` Dataset class (covariates, basis, etc...) -* `outcome`: `Outcome` Outcome class (residual / partial residual) -* `forest_model`: `ForestModel` object storing tracking structures used in training / sampling -* `leaf_model_int`: Integer value encoding the leaf model type (0 = constant gaussian, 1 = univariate gaussian, 2 = multivariate gaussian, 3 = log linear variance). -* `leaf_value`: Constant leaf value(s) to be fixed for each tree in the ensemble indexed by `forest_num`. Can be either a single number or a vector, depending on the forest's leaf dimension. - -### Method `adjust_residual()` - -Adjusts residual based on the predictions of a forest -This is typically run just once at the beginning of a forest sampling algorithm. -After trees are initialized with constant root node predictions, their root predictions are subtracted out of the residual. - -#### Usage - -``` -ForestSamples$adjust_residual( - dataset, - outcome, - forest_model, - requires_basis, - forest_num, - add -) -``` - -#### Arguments - -* `dataset`: `ForestDataset` object storing the covariates and bases for a given forest -* `outcome`: `Outcome` object storing the residuals to be updated based on forest predictions -* `forest_model`: `ForestModel` object storing tracking structures used in training / sampling -* `requires_basis`: Whether or not a forest requires a basis for prediction -* `forest_num`: Index of forest used to update residuals -* `add`: Whether forest predictions should be added to or subtracted from residuals - -### Method `save_json()` - -Store the trees and metadata of `ForestDataset` class in a json file - -#### Usage - -``` -ForestSamples$save_json(json_filename) -``` - -#### Arguments - -* `json_filename`: Name of output json file (must end in ".json") - -### Method `load_json()` - -Load trees and metadata for an ensemble from a json file. Note that -any trees and metadata already present in `ForestDataset` class will -be overwritten. - -#### Usage - -``` -ForestSamples$load_json(json_filename) -``` - -#### Arguments - -* `json_filename`: Name of model input json file (must end in ".json") - -### Method `num_samples()` - -Return number of samples in a `ForestContainer` object - -#### Usage - -``` -ForestSamples$num_samples() -``` - -#### Returns - -Sample count - -### Method `num_trees()` - -Return number of trees in each ensemble of a `ForestContainer` object - -#### Usage - -``` -ForestSamples$num_trees() -``` - -#### Returns - -Tree count - -### Method `output_dimension()` - -Return output dimension of trees in a `ForestContainer` object - -#### Usage - -``` -ForestSamples$output_dimension() -``` - -#### Returns - -Leaf node parameter size - -### Method `add_forest_with_constant_leaves()` - -Add a new all-root ensemble to the container, with all of the leaves -set to the value / vector provided - -#### Usage - -``` -ForestSamples$add_forest_with_constant_leaves(leaf_value) -``` - -#### Arguments - -* `leaf_value`: Value (or vector of values) to initialize root nodes in tree - -### Method `add_numeric_split_tree()` - -Add a numeric (i.e. X[,i](,i) \<= c) split to a given tree in the ensemble - -#### Usage - -``` -ForestSamples$add_numeric_split_tree( - forest_num, - tree_num, - leaf_num, - feature_num, - split_threshold, - left_leaf_value, - right_leaf_value -) -``` - -#### Arguments - -* `forest_num`: Index of the forest which contains the tree to be split -* `tree_num`: Index of the tree to be split -* `leaf_num`: Leaf to be split -* `feature_num`: Feature that defines the new split -* `split_threshold`: Value that defines the cutoff of the new split -* `left_leaf_value`: Value (or vector of values) to assign to the newly created left node -* `right_leaf_value`: Value (or vector of values) to assign to the newly created right node - -### Method `get_tree_leaves()` - -Retrieve a vector of indices of leaf nodes for a given tree in a given forest - -#### Usage - -``` -ForestSamples$get_tree_leaves(forest_num, tree_num) -``` - -#### Arguments - -* `forest_num`: Index of the forest which contains tree `tree_num` -* `tree_num`: Index of the tree for which leaf indices will be retrieved - -### Method `get_tree_split_counts()` - -Retrieve a vector of split counts for every training set variable in a given tree in a given forest - -#### Usage - -``` -ForestSamples$get_tree_split_counts(forest_num, tree_num, num_features) -``` - -#### Arguments - -* `forest_num`: Index of the forest which contains tree `tree_num` -* `tree_num`: Index of the tree for which split counts will be retrieved -* `num_features`: Total number of features in the training set - -### Method `get_forest_split_counts()` - -Retrieve a vector of split counts for every training set variable in a given forest - -#### Usage - -``` -ForestSamples$get_forest_split_counts(forest_num, num_features) -``` - -#### Arguments - -* `forest_num`: Index of the forest for which split counts will be retrieved -* `num_features`: Total number of features in the training set - -### Method `get_aggregate_split_counts()` - -Retrieve a vector of split counts for every training set variable in a given forest, aggregated across ensembles and trees - -#### Usage - -``` -ForestSamples$get_aggregate_split_counts(num_features) -``` - -#### Arguments - -* `num_features`: Total number of features in the training set - -### Method `get_granular_split_counts()` - -Retrieve a vector of split counts for every training set variable in a given forest, reported separately for each ensemble and tree - -#### Usage - -``` -ForestSamples$get_granular_split_counts(num_features) -``` - -#### Arguments - -* `num_features`: Total number of features in the training set - -### Method `ensemble_tree_max_depth()` - -Maximum depth of a specific tree in a specific ensemble in a `ForestSamples` object - -#### Usage - -``` -ForestSamples$ensemble_tree_max_depth(ensemble_num, tree_num) -``` - -#### Arguments - -* `ensemble_num`: Ensemble number -* `tree_num`: Tree index within ensemble `ensemble_num` - -#### Returns - -Maximum leaf depth - -### Method `average_ensemble_max_depth()` - -Average the maximum depth of each tree in a given ensemble in a `ForestSamples` object - -#### Usage - -``` -ForestSamples$average_ensemble_max_depth(ensemble_num) -``` - -#### Arguments - -* `ensemble_num`: Ensemble number - -#### Returns - -Average maximum depth - -### Method `average_max_depth()` - -Average the maximum depth of each tree in each ensemble in a `ForestContainer` object - -#### Usage - -``` -ForestSamples$average_max_depth() -``` - -#### Returns - -Average maximum depth - -### Method `num_forest_leaves()` - -Number of leaves in a given ensemble in a `ForestSamples` object - -#### Usage - -``` -ForestSamples$num_forest_leaves(forest_num) -``` - -#### Arguments - -* `forest_num`: Index of the ensemble to be queried - -#### Returns - -Count of leaves in the ensemble stored at `forest_num` - -### Method `sum_leaves_squared()` - -Sum of squared (raw) leaf values in a given ensemble in a `ForestSamples` object - -#### Usage - -``` -ForestSamples$sum_leaves_squared(forest_num) -``` - -#### Arguments - -* `forest_num`: Index of the ensemble to be queried - -#### Returns - -Average maximum depth - -### Method `is_leaf_node()` - -Whether or not a given node of a given tree in a given forest in the `ForestSamples` is a leaf - -#### Usage - -``` -ForestSamples$is_leaf_node(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -`TRUE` if node is a leaf, `FALSE` otherwise - -### Method `is_numeric_split_node()` - -Whether or not a given node of a given tree in a given forest in the `ForestSamples` is a numeric split node - -#### Usage - -``` -ForestSamples$is_numeric_split_node(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -`TRUE` if node is a numeric split node, `FALSE` otherwise - -### Method `is_categorical_split_node()` - -Whether or not a given node of a given tree in a given forest in the `ForestSamples` is a categorical split node - -#### Usage - -``` -ForestSamples$is_categorical_split_node(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -`TRUE` if node is a categorical split node, `FALSE` otherwise - -### Method `parent_node()` - -Parent node of given node of a given tree in a given forest in a `ForestSamples` object - -#### Usage - -``` -ForestSamples$parent_node(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Integer ID of the parent node - -### Method `left_child_node()` - -Left child node of given node of a given tree in a given forest in a `ForestSamples` object - -#### Usage - -``` -ForestSamples$left_child_node(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Integer ID of the left child node - -### Method `right_child_node()` - -Right child node of given node of a given tree in a given forest in a `ForestSamples` object - -#### Usage - -``` -ForestSamples$right_child_node(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Integer ID of the right child node - -### Method `node_depth()` - -Depth of given node of a given tree in a given forest in a `ForestSamples` object, with 0 depth for the root node. - -#### Usage - -``` -ForestSamples$node_depth(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Integer valued depth of the node - -### Method `node_split_index()` - -Split index of given node of a given tree in a given forest in a `ForestSamples` object. Returns `-1` is node is a leaf. - -#### Usage - -``` -ForestSamples$node_split_index(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Integer valued depth of the node - -### Method `node_split_threshold()` - -Threshold that defines a numeric split for a given node of a given tree in a given forest in a `ForestSamples` object. -Returns `Inf` if the node is a leaf or a categorical split node. - -#### Usage - -``` -ForestSamples$node_split_threshold(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Threshold defining a split for the node - -### Method `node_split_categories()` - -Array of category indices that define a categorical split for a given node of a given tree in a given forest in a `ForestSamples` object. -Returns `c(Inf)` if the node is a leaf or a numeric split node. - -#### Usage - -``` -ForestSamples$node_split_categories(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Categories defining a split for the node - -### Method `node_leaf_values()` - -Leaf node value(s) for a given node of a given tree in a given forest in a `ForestSamples` object. -Values are stale if the node is a split node. - -#### Usage - -``` -ForestSamples$node_leaf_values(forest_num, tree_num, node_id) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried -* `node_id`: Index of the node to be queried - -#### Returns - -Vector (often univariate) of leaf values - -### Method `num_nodes()` - -Number of nodes in a given tree in a given forest in a `ForestSamples` object. - -#### Usage - -``` -ForestSamples$num_nodes(forest_num, tree_num) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried - -#### Returns - -Count of total tree nodes - -### Method `num_leaves()` - -Number of leaves in a given tree in a given forest in a `ForestSamples` object. - -#### Usage - -``` -ForestSamples$num_leaves(forest_num, tree_num) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried - -#### Returns - -Count of total tree leaves - -### Method `num_leaf_parents()` - -Number of leaf parents (split nodes with two leaves as children) in a given tree in a given forest in a `ForestSamples` object. - -#### Usage - -``` -ForestSamples$num_leaf_parents(forest_num, tree_num) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried - -#### Returns - -Count of total tree leaf parents - -### Method `num_split_nodes()` - -Number of split nodes in a given tree in a given forest in a `ForestSamples` object. - -#### Usage - -``` -ForestSamples$num_split_nodes(forest_num, tree_num) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried - -#### Returns - -Count of total tree split nodes - -### Method `nodes()` - -Array of node indices in a given tree in a given forest in a `ForestSamples` object. - -#### Usage - -``` -ForestSamples$nodes(forest_num, tree_num) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried - -#### Returns - -Indices of tree nodes - -### Method `leaves()` - -Array of leaf indices in a given tree in a given forest in a `ForestSamples` object. - -#### Usage - -``` -ForestSamples$leaves(forest_num, tree_num) -``` - -#### Arguments - -* `forest_num`: Index of the forest to be queried -* `tree_num`: Index of the tree to be queried - -#### Returns - -Indices of leaf nodes - diff --git a/docs/r-documentation-markdown/Outcome.md b/docs/r-documentation-markdown/Outcome.md deleted file mode 100644 index d09b118c3..000000000 --- a/docs/r-documentation-markdown/Outcome.md +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Outcome ---- - -# Outcome / partial residual used to sample an additive model. - -## Description - -The outcome class is wrapper around a vector of (mutable) -outcomes for ML tasks (supervised learning, causal inference). -When an additive tree ensemble is sampled, the outcome used to -sample a specific model term is the "partial residual" consisting -of the outcome minus the predictions of every other model term -(trees, group random effects, etc...). - -## Public fields - -* `data_ptr`: External pointer to a C++ Outcome class - -## Methods - -### Public methods - -* [`Outcome$new()`](#method-Outcome-new) -* [`Outcome$get_data()`](#method-Outcome-get_data) -* [`Outcome$add_vector()`](#method-Outcome-add_vector) -* [`Outcome$subtract_vector()`](#method-Outcome-subtract_vector) -* [`Outcome$update_data()`](#method-Outcome-update_data) - -### Method `new()` - -Create a new Outcome object. - -#### Usage - -``` -Outcome$new(outcome) -``` - -#### Arguments - -* `outcome`: Vector of outcome values - -#### Returns - -A new `Outcome` object. - -### Method `get_data()` - -Extract raw data in R from the underlying C++ object - -#### Usage - -``` -Outcome$get_data() -``` - -#### Returns - -R vector containing (copy of) the values in `Outcome` object - -### Method `add_vector()` - -Update the current state of the outcome (i.e. partial residual) data by adding the values of `update_vector` - -#### Usage - -``` -Outcome$add_vector(update_vector) -``` - -#### Arguments - -* `update_vector`: Vector to be added to outcome - -#### Returns - -NULL - -### Method `subtract_vector()` - -Update the current state of the outcome (i.e. partial residual) data by subtracting the values of `update_vector` - -#### Usage - -``` -Outcome$subtract_vector(update_vector) -``` - -#### Arguments - -* `update_vector`: Vector to be subtracted from outcome - -#### Returns - -NULL - -### Method `update_data()` - -Update the current state of the outcome (i.e. partial residual) data by replacing each element with the elements of `new_vector` - -#### Usage - -``` -Outcome$update_data(new_vector) -``` - -#### Arguments - -* `new_vector`: Vector from which to overwrite the current data - -#### Returns - -NULL - diff --git a/docs/r-documentation-markdown/RandomEffectSamples.md b/docs/r-documentation-markdown/RandomEffectSamples.md deleted file mode 100644 index 0716ad180..000000000 --- a/docs/r-documentation-markdown/RandomEffectSamples.md +++ /dev/null @@ -1,227 +0,0 @@ ---- -title: RandomEffectSamples ---- - -# Class that wraps the "persistent" aspects of a C++ random effects model - -## Description - -Coordinates various C++ random effects classes and persists those -needed for prediction / serialization - -## Public fields - -* `rfx_container_ptr`: External pointer to a C++ StochTree::RandomEffectsContainer class -* `label_mapper_ptr`: External pointer to a C++ StochTree::LabelMapper class -* `training_group_ids`: Unique vector of group IDs that were in the training dataset - -## Methods - -### Public methods - -* [`RandomEffectSamples$new()`](#method-RandomEffectSamples-new) -* [`RandomEffectSamples$load_in_session()`](#method-RandomEffectSamples-load_in_session) -* [`RandomEffectSamples$load_from_json()`](#method-RandomEffectSamples-load_from_json) -* [`RandomEffectSamples$append_from_json()`](#method-RandomEffectSamples-append_from_json) -* [`RandomEffectSamples$load_from_json_string()`](#method-RandomEffectSamples-load_from_json_string) -* [`RandomEffectSamples$append_from_json_string()`](#method-RandomEffectSamples-append_from_json_string) -* [`RandomEffectSamples$predict()`](#method-RandomEffectSamples-predict) -* [`RandomEffectSamples$extract_parameter_samples()`](#method-RandomEffectSamples-extract_parameter_samples) -* [`RandomEffectSamples$extract_label_mapping()`](#method-RandomEffectSamples-extract_label_mapping) - -### Method `new()` - -Create a new RandomEffectSamples object. - -#### Usage - -``` -RandomEffectSamples$new() -``` - -#### Returns - -A new `RandomEffectSamples` object. - -### Method `load_in_session()` - -Construct RandomEffectSamples object from other "in-session" R objects - -#### Usage - -``` -RandomEffectSamples$load_in_session( - num_components, - num_groups, - random_effects_tracker -) -``` - -#### Arguments - -* `num_components`: Number of "components" or bases defining the random effects regression -* `num_groups`: Number of random effects groups -* `random_effects_tracker`: Object of type `RandomEffectsTracker` - -#### Returns - -NULL - -### Method `load_from_json()` - -Construct RandomEffectSamples object from a json object - -#### Usage - -``` -RandomEffectSamples$load_from_json( - json_object, - json_rfx_container_label, - json_rfx_mapper_label, - json_rfx_groupids_label -) -``` - -#### Arguments - -* `json_object`: Object of class `CppJson` -* `json_rfx_container_label`: Label referring to a particular rfx sample container (i.e. "random_effect_container_0") in the overall json hierarchy -* `json_rfx_mapper_label`: Label referring to a particular rfx label mapper (i.e. "random_effect_label_mapper_0") in the overall json hierarchy -* `json_rfx_groupids_label`: Label referring to a particular set of rfx group IDs (i.e. "random_effect_groupids_0") in the overall json hierarchy - -#### Returns - -A new `RandomEffectSamples` object. - -### Method `append_from_json()` - -Append random effect draws to `RandomEffectSamples` object from a json object - -#### Usage - -``` -RandomEffectSamples$append_from_json( - json_object, - json_rfx_container_label, - json_rfx_mapper_label, - json_rfx_groupids_label -) -``` - -#### Arguments - -* `json_object`: Object of class `CppJson` -* `json_rfx_container_label`: Label referring to a particular rfx sample container (i.e. "random_effect_container_0") in the overall json hierarchy -* `json_rfx_mapper_label`: Label referring to a particular rfx label mapper (i.e. "random_effect_label_mapper_0") in the overall json hierarchy -* `json_rfx_groupids_label`: Label referring to a particular set of rfx group IDs (i.e. "random_effect_groupids_0") in the overall json hierarchy - -#### Returns - -NULL (updates object in-place) - -### Method `load_from_json_string()` - -Construct RandomEffectSamples object from a json object - -#### Usage - -``` -RandomEffectSamples$load_from_json_string( - json_string, - json_rfx_container_label, - json_rfx_mapper_label, - json_rfx_groupids_label -) -``` - -#### Arguments - -* `json_string`: JSON string which parses into object of class `CppJson` -* `json_rfx_container_label`: Label referring to a particular rfx sample container (i.e. "random_effect_container_0") in the overall json hierarchy -* `json_rfx_mapper_label`: Label referring to a particular rfx label mapper (i.e. "random_effect_label_mapper_0") in the overall json hierarchy -* `json_rfx_groupids_label`: Label referring to a particular set of rfx group IDs (i.e. "random_effect_groupids_0") in the overall json hierarchy - -#### Returns - -A new `RandomEffectSamples` object. - -### Method `append_from_json_string()` - -Append random effect draws to `RandomEffectSamples` object from a json object - -#### Usage - -``` -RandomEffectSamples$append_from_json_string( - json_string, - json_rfx_container_label, - json_rfx_mapper_label, - json_rfx_groupids_label -) -``` - -#### Arguments - -* `json_string`: JSON string which parses into object of class `CppJson` -* `json_rfx_container_label`: Label referring to a particular rfx sample container (i.e. "random_effect_container_0") in the overall json hierarchy -* `json_rfx_mapper_label`: Label referring to a particular rfx label mapper (i.e. "random_effect_label_mapper_0") in the overall json hierarchy -* `json_rfx_groupids_label`: Label referring to a particular set of rfx group IDs (i.e. "random_effect_groupids_0") in the overall json hierarchy - -#### Returns - -NULL (updates object in-place) - -### Method `predict()` - -Predict random effects for each observation implied by `rfx_group_ids` and `rfx_basis`. -If a random effects model is "intercept-only" the `rfx_basis` will be a vector of ones of size `length(rfx_group_ids)`. - -#### Usage - -``` -RandomEffectSamples$predict(rfx_group_ids, rfx_basis = NULL) -``` - -#### Arguments - -* `rfx_group_ids`: Indices of random effects groups in a prediction set -* `rfx_basis`: (Optional ) Basis used for random effects prediction - -#### Returns - -Matrix with as many rows as observations provided and as many columns as samples drawn of the model. - -### Method `extract_parameter_samples()` - -Extract the random effects parameters sampled. With the "redundant parameterization" -of Gelman et al (2008), this includes four parameters: alpha (the "working parameter" -shared across every group), xi (the "group parameter" sampled separately for each group), -beta (the product of alpha and xi, which corresponds to the overall group-level random effects), -and sigma (group-independent prior variance for each component of xi). - -#### Usage - -``` -RandomEffectSamples$extract_parameter_samples() -``` - -#### Returns - -List of arrays. The alpha array has dimension (`num_components`, `num_samples`) and is simply a vector if `num_components = 1`. -The xi and beta arrays have dimension (`num_components`, `num_groups`, `num_samples`) and is simply a matrix if `num_components = 1`. -The sigma array has dimension (`num_components`, `num_samples`) and is simply a vector if `num_components = 1`. - -### Method `extract_label_mapping()` - -Convert the mapping of group IDs to random effect components indices from C++ to R native format - -#### Usage - -``` -RandomEffectSamples$extract_label_mapping() -``` - -#### Returns - -List mapping group ID to random effect components. - diff --git a/docs/r-documentation-markdown/RandomEffectsDataset.md b/docs/r-documentation-markdown/RandomEffectsDataset.md deleted file mode 100644 index 92c890b5b..000000000 --- a/docs/r-documentation-markdown/RandomEffectsDataset.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: RandomEffectsDataset ---- - -# Dataset used to sample a random effects model - -## Description - -A dataset consists of three matrices / vectors: group labels, -bases, and variance weights. Variance weights are optional. - -## Public fields - -* `data_ptr`: External pointer to a C++ RandomEffectsDataset class - -## Methods - -### Public methods - -* [`RandomEffectsDataset$new()`](#method-RandomEffectsDataset-new) -* [`RandomEffectsDataset$num_observations()`](#method-RandomEffectsDataset-num_observations) -* [`RandomEffectsDataset$has_group_labels()`](#method-RandomEffectsDataset-has_group_labels) -* [`RandomEffectsDataset$has_basis()`](#method-RandomEffectsDataset-has_basis) -* [`RandomEffectsDataset$has_variance_weights()`](#method-RandomEffectsDataset-has_variance_weights) - -### Method `new()` - -Create a new RandomEffectsDataset object. - -#### Usage - -``` -RandomEffectsDataset$new(group_labels, basis, variance_weights = NULL) -``` - -#### Arguments - -* `group_labels`: Vector of group labels -* `basis`: Matrix of bases used to define the random effects regression (for an intercept-only model, pass an array of ones) -* `variance_weights`: (Optional) Vector of observation-specific variance weights - -#### Returns - -A new `RandomEffectsDataset` object. - -### Method `num_observations()` - -Return number of observations in a `RandomEffectsDataset` object - -#### Usage - -``` -RandomEffectsDataset$num_observations() -``` - -#### Returns - -Observation count - -### Method `has_group_labels()` - -Whether or not a dataset has group label indices - -#### Usage - -``` -RandomEffectsDataset$has_group_labels() -``` - -#### Returns - -True if group label vector is loaded, false otherwise - -### Method `has_basis()` - -Whether or not a dataset has a basis matrix - -#### Usage - -``` -RandomEffectsDataset$has_basis() -``` - -#### Returns - -True if basis matrix is loaded, false otherwise - -### Method `has_variance_weights()` - -Whether or not a dataset has variance weights - -#### Usage - -``` -RandomEffectsDataset$has_variance_weights() -``` - -#### Returns - -True if variance weights are loaded, false otherwise - diff --git a/docs/r-documentation-markdown/RandomEffectsModel.md b/docs/r-documentation-markdown/RandomEffectsModel.md deleted file mode 100644 index ca725a498..000000000 --- a/docs/r-documentation-markdown/RandomEffectsModel.md +++ /dev/null @@ -1,215 +0,0 @@ ---- -title: RandomEffectsModel ---- - -# The core "model" class for sampling random effects. - -## Description - -Stores current model state, prior parameters, and procedures for -sampling from the conditional posterior of each parameter. - -## Public fields - -* `rfx_model_ptr`: External pointer to a C++ StochTree::RandomEffectsModel class -* `num_groups`: Number of groups in the random effects model -* `num_components`: Number of components (i.e. dimension of basis) in the random effects model - -## Methods - -### Public methods - -* [`RandomEffectsModel$new()`](#method-RandomEffectsModel-new) -* [`RandomEffectsModel$sample_random_effect()`](#method-RandomEffectsModel-sample_random_effect) -* [`RandomEffectsModel$predict()`](#method-RandomEffectsModel-predict) -* [`RandomEffectsModel$set_working_parameter()`](#method-RandomEffectsModel-set_working_parameter) -* [`RandomEffectsModel$set_group_parameters()`](#method-RandomEffectsModel-set_group_parameters) -* [`RandomEffectsModel$set_working_parameter_cov()`](#method-RandomEffectsModel-set_working_parameter_cov) -* [`RandomEffectsModel$set_group_parameter_cov()`](#method-RandomEffectsModel-set_group_parameter_cov) -* [`RandomEffectsModel$set_variance_prior_shape()`](#method-RandomEffectsModel-set_variance_prior_shape) -* [`RandomEffectsModel$set_variance_prior_scale()`](#method-RandomEffectsModel-set_variance_prior_scale) - -### Method `new()` - -Create a new RandomEffectsModel object. - -#### Usage - -``` -RandomEffectsModel$new(num_components, num_groups) -``` - -#### Arguments - -* `num_components`: Number of "components" or bases defining the random effects regression -* `num_groups`: Number of random effects groups - -#### Returns - -A new `RandomEffectsModel` object. - -### Method `sample_random_effect()` - -Sample from random effects model. - -#### Usage - -``` -RandomEffectsModel$sample_random_effect( - rfx_dataset, - residual, - rfx_tracker, - rfx_samples, - global_variance, - rng -) -``` - -#### Arguments - -* `rfx_dataset`: Object of type `RandomEffectsDataset` -* `residual`: Object of type `Outcome` -* `rfx_tracker`: Object of type `RandomEffectsTracker` -* `rfx_samples`: Object of type `RandomEffectSamples` -* `global_variance`: Scalar global variance parameter -* `rng`: Object of type `CppRNG` - -#### Returns - -None - -### Method `predict()` - -Predict from (a single sample of a) random effects model. - -#### Usage - -``` -RandomEffectsModel$predict(rfx_dataset, rfx_tracker) -``` - -#### Arguments - -* `rfx_dataset`: Object of type `RandomEffectsDataset` -* `rfx_tracker`: Object of type `RandomEffectsTracker` - -#### Returns - -Vector of predictions with size matching number of observations in rfx_dataset - -### Method `set_working_parameter()` - -Set value for the "working parameter." This is typically -used for initialization, but could also be used to interrupt -or override the sampler. - -#### Usage - -``` -RandomEffectsModel$set_working_parameter(value) -``` - -#### Arguments - -* `value`: Parameter input - -#### Returns - -None - -### Method `set_group_parameters()` - -Set value for the "group parameters." This is typically -used for initialization, but could also be used to interrupt -or override the sampler. - -#### Usage - -``` -RandomEffectsModel$set_group_parameters(value) -``` - -#### Arguments - -* `value`: Parameter input - -#### Returns - -None - -### Method `set_working_parameter_cov()` - -Set value for the working parameter covariance. This is typically -used for initialization, but could also be used to interrupt -or override the sampler. - -#### Usage - -``` -RandomEffectsModel$set_working_parameter_cov(value) -``` - -#### Arguments - -* `value`: Parameter input - -#### Returns - -None - -### Method `set_group_parameter_cov()` - -Set value for the group parameter covariance. This is typically -used for initialization, but could also be used to interrupt -or override the sampler. - -#### Usage - -``` -RandomEffectsModel$set_group_parameter_cov(value) -``` - -#### Arguments - -* `value`: Parameter input - -#### Returns - -None - -### Method `set_variance_prior_shape()` - -Set shape parameter for the group parameter variance prior. - -#### Usage - -``` -RandomEffectsModel$set_variance_prior_shape(value) -``` - -#### Arguments - -* `value`: Parameter input - -#### Returns - -None - -### Method `set_variance_prior_scale()` - -Set shape parameter for the group parameter variance prior. - -#### Usage - -``` -RandomEffectsModel$set_variance_prior_scale(value) -``` - -#### Arguments - -* `value`: Parameter input - -#### Returns - -None - diff --git a/docs/r-documentation-markdown/RandomEffectsTracker.md b/docs/r-documentation-markdown/RandomEffectsTracker.md deleted file mode 100644 index 15b0c2e64..000000000 --- a/docs/r-documentation-markdown/RandomEffectsTracker.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: RandomEffectsTracker ---- - -# Class that defines a "tracker" for random effects models, most notably - -## Description - -Stores a mapping from every observation to its group index, a mapping -from group indices to the training sample observations available in that -group, and predictions for each observation. - -## Public fields - -* `rfx_tracker_ptr`: External pointer to a C++ StochTree::RandomEffectsTracker class - -## Methods - -### Public methods - -* [`RandomEffectsTracker$new()`](#method-RandomEffectsTracker-new) - -### Method `new()` - -Create a new RandomEffectsTracker object. - -#### Usage - -``` -RandomEffectsTracker$new(rfx_group_indices) -``` - -#### Arguments - -* `rfx_group_indices`: Integer indices indicating groups used to define random effects - -#### Returns - -A new `RandomEffectsTracker` object. - diff --git a/docs/r-documentation-markdown/bart.md b/docs/r-documentation-markdown/bart.md deleted file mode 100644 index e45949629..000000000 --- a/docs/r-documentation-markdown/bart.md +++ /dev/null @@ -1,128 +0,0 @@ ---- -title: bart ---- - -# Run the BART algorithm for supervised learning. - -## Description - -Run the BART algorithm for supervised learning. - -## Usage - -```r -bart( - X_train, - y_train, - W_train = NULL, - group_ids_train = NULL, - rfx_basis_train = NULL, - X_test = NULL, - W_test = NULL, - group_ids_test = NULL, - rfx_basis_test = NULL, - num_gfr = 5, - num_burnin = 0, - num_mcmc = 100, - params = list() -) -``` - -## Arguments - -* `X_train`: Covariates used to split trees in the ensemble. May be provided either as a dataframe or a matrix. -Matrix covariates will be assumed to be all numeric. Covariates passed as a dataframe will be -preprocessed based on the variable types (e.g. categorical columns stored as unordered factors will be one-hot encoded, -categorical columns stored as ordered factors will passed as integers to the core algorithm, along with the metadata -that the column is ordered categorical). -* `y_train`: Outcome to be modeled by the ensemble. -* `W_train`: (Optional) Bases used to define a regression model `y ~ W` in -each leaf of each regression tree. By default, BART assumes constant leaf node -parameters, implicitly regressing on a constant basis of ones (i.e. `y ~ 1`). -* `group_ids_train`: (Optional) Group labels used for an additive random effects model. -* `rfx_basis_train`: (Optional) Basis for "random-slope" regression in an additive random effects model. -If `group_ids_train` is provided with a regression basis, an intercept-only random effects model -will be estimated. -* `X_test`: (Optional) Test set of covariates used to define "out of sample" evaluation data. -May be provided either as a dataframe or a matrix, but the format of `X_test` must be consistent with -that of `X_train`. -* `W_test`: (Optional) Test set of bases used to define "out of sample" evaluation data. -While a test set is optional, the structure of any provided test set must match that -of the training set (i.e. if both X_train and W_train are provided, then a test set must -consist of X_test and W_test with the same number of columns). -* `group_ids_test`: (Optional) Test set group labels used for an additive random effects model. -We do not currently support (but plan to in the near future), test set evaluation for group labels -that were not in the training set. -* `rfx_basis_test`: (Optional) Test set basis for "random-slope" regression in additive random effects model. -* `num_gfr`: Number of "warm-start" iterations run using the grow-from-root algorithm (He and Hahn, 2021). Default: 5. -* `num_burnin`: Number of "burn-in" iterations of the MCMC sampler. Default: 0. -* `num_mcmc`: Number of "retained" iterations of the MCMC sampler. Default: 100. -* `params`: The list of model parameters, each of which has a default value.***1. Global Parameters*** -* `cutpoint_grid_size` Maximum size of the "grid" of potential cutpoints to consider. Default: `100`. -* `sigma2_init` Starting value of global error variance parameter. Calibrated internally as `pct_var_sigma2_init*var((y-mean(y))/sd(y))` if not set. -* `pct_var_sigma2_init` Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `sigma2_init`. -* `variance_scale` Variance after the data have been scaled. Default: `1`. -* `a_global` Shape parameter in the `IG(a_global, b_global)` global error variance model. Default: `0`. -* `b_global` Scale parameter in the `IG(a_global, b_global)` global error variance model. Default: `0`. -* `random_seed` Integer parameterizing the C++ random number generator. If not specified, the C++ random number generator is seeded according to `std::random_device`. -* `sample_sigma_global` Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Default: `TRUE`. -* `keep_burnin` Whether or not "burnin" samples should be included in cached predictions. Default `FALSE`. Ignored if `num_mcmc = 0`. -* `keep_gfr` Whether or not "grow-from-root" samples should be included in cached predictions. Default `TRUE`. Ignored if `num_mcmc = 0`. -* `standardize` Whether or not to standardize the outcome (and store the offset / scale in the model object). Default: `TRUE`. -* `verbose` Whether or not to print progress during the sampling loops. Default: `FALSE`.***2. Mean Forest Parameters*** -* `num_trees_mean` Number of trees in the ensemble for the conditional mean model. Default: `200`. If `num_trees_mean = 0`, the conditional mean will not be modeled using a forest, and the function will only proceed if `num_trees_variance \> 0`. -* `sample_sigma_leaf` Whether or not to update the `tau` leaf scale variance parameter based on `IG(a_leaf, b_leaf)`. Cannot (currently) be set to true if `ncol(W_train)\>1`. Default: `FALSE`.***2.1. Tree Prior Parameters*** -* `alpha_mean` Prior probability of splitting for a tree of depth 0 in the mean model. Tree split prior combines `alpha_mean` and `beta_mean` via `alpha_mean*(1+node_depth)^-beta_mean`. Default: `0.95`. -* `beta_mean` Exponent that decreases split probabilities for nodes of depth \> 0 in the mean model. Tree split prior combines `alpha_mean` and `beta_mean` via `alpha_mean*(1+node_depth)^-beta_mean`. Default: `2`. -* `min_samples_leaf_mean` Minimum allowable size of a leaf, in terms of training samples, in the mean model. Default: `5`. -* `max_depth_mean` Maximum depth of any tree in the ensemble in the mean model. Default: `10`. Can be overridden with `-1` which does not enforce any depth limits on trees.***2.2. Leaf Model Parameters*** -* `variable_weights_mean` Numeric weights reflecting the relative probability of splitting on each variable in the mean forest. Does not need to sum to 1 but cannot be negative. Defaults to `rep(1/ncol(X_train), ncol(X_train))` if not set here. -* `sigma_leaf_init` Starting value of leaf node scale parameter. Calibrated internally as `1/num_trees_mean` if not set here. -* `a_leaf` Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model. Default: `3`. -* `b_leaf` Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model. Calibrated internally as `0.5/num_trees_mean` if not set here.***3. Conditional Variance Forest Parameters*** -* `num_trees_variance` Number of trees in the ensemble for the conditional variance model. Default: `0`. Variance is only modeled using a tree / forest if `num_trees_variance \> 0`. -* `variance_forest_init` Starting value of root forest prediction in conditional (heteroskedastic) error variance model. Calibrated internally as `log(pct_var_variance_forest_init*var((y-mean(y))/sd(y)))/num_trees_variance` if not set. -* `pct_var_variance_forest_init` Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`.***3.1. Tree Prior Parameters*** -* `alpha_variance` Prior probability of splitting for a tree of depth 0 in the variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. Default: `0.95`. -* `beta_variance` Exponent that decreases split probabilities for nodes of depth \> 0 in the variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. Default: `2`. -* `min_samples_leaf_variance` Minimum allowable size of a leaf, in terms of training samples, in the variance model. Default: `5`. -* `max_depth_variance` Maximum depth of any tree in the ensemble in the variance model. Default: `10`. Can be overridden with `-1` which does not enforce any depth limits on trees.***3.2. Leaf Model Parameters*** -* `variable_weights_variance` Numeric weights reflecting the relative probability of splitting on each variable in the variance forest. Does not need to sum to 1 but cannot be negative. Defaults to `rep(1/ncol(X_train), ncol(X_train))` if not set here. -* `sigma_leaf_init` Starting value of leaf node scale parameter. Calibrated internally as `1/num_trees_mean` if not set here. -* `a_forest` Shape parameter in the `IG(a_forest, b_forest)` conditional error variance model (which is only sampled if `num_trees_variance \> 0`). Calibrated internally as `num_trees_variance / 1.5^2 + 0.5` if not set. -* `b_forest` Scale parameter in the `IG(a_forest, b_forest)` conditional error variance model (which is only sampled if `num_trees_variance \> 0`). Calibrated internally as `num_trees_variance / 1.5^2` if not set. - -## Value - -List of sampling outputs and a wrapper around the sampled forests (which can be used for in-memory prediction on new data, or serialized to JSON on disk). - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train, X_test = X_test) -# plot(rowMeans(bart_model$y_hat_test), y_test, xlab = "predicted", ylab = "actual") -# abline(0,1,col="red",lty=3,lwd=3) -``` - diff --git a/docs/r-documentation-markdown/bcf.md b/docs/r-documentation-markdown/bcf.md deleted file mode 100644 index a98d8690b..000000000 --- a/docs/r-documentation-markdown/bcf.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: bcf ---- - -# Run the Bayesian Causal Forest (BCF) algorithm for regularized causal effect estimation. - -## Description - -Run the Bayesian Causal Forest (BCF) algorithm for regularized causal effect estimation. - -## Usage - -```r -bcf( - X_train, - Z_train, - y_train, - pi_train = NULL, - group_ids_train = NULL, - rfx_basis_train = NULL, - X_test = NULL, - Z_test = NULL, - pi_test = NULL, - group_ids_test = NULL, - rfx_basis_test = NULL, - num_gfr = 5, - num_burnin = 0, - num_mcmc = 100, - params = list() -) -``` - -## Arguments - -* `X_train`: Covariates used to split trees in the ensemble. May be provided either as a dataframe or a matrix. -Matrix covariates will be assumed to be all numeric. Covariates passed as a dataframe will be -preprocessed based on the variable types (e.g. categorical columns stored as unordered factors will be one-hot encoded, -categorical columns stored as ordered factors will passed as integers to the core algorithm, along with the metadata -that the column is ordered categorical). -* `Z_train`: Vector of (continuous or binary) treatment assignments. -* `y_train`: Outcome to be modeled by the ensemble. -* `pi_train`: (Optional) Vector of propensity scores. If not provided, this will be estimated from the data. -* `group_ids_train`: (Optional) Group labels used for an additive random effects model. -* `rfx_basis_train`: (Optional) Basis for "random-slope" regression in an additive random effects model. -If `group_ids_train` is provided with a regression basis, an intercept-only random effects model -will be estimated. -* `X_test`: (Optional) Test set of covariates used to define "out of sample" evaluation data. -May be provided either as a dataframe or a matrix, but the format of `X_test` must be consistent with -that of `X_train`. -* `Z_test`: (Optional) Test set of (continuous or binary) treatment assignments. -* `pi_test`: (Optional) Vector of propensity scores. If not provided, this will be estimated from the data. -* `group_ids_test`: (Optional) Test set group labels used for an additive random effects model. -We do not currently support (but plan to in the near future), test set evaluation for group labels -that were not in the training set. -* `rfx_basis_test`: (Optional) Test set basis for "random-slope" regression in additive random effects model. -* `num_gfr`: Number of "warm-start" iterations run using the grow-from-root algorithm (He and Hahn, 2021). Default: 5. -* `num_burnin`: Number of "burn-in" iterations of the MCMC sampler. Default: 0. -* `num_mcmc`: Number of "retained" iterations of the MCMC sampler. Default: 100. -* `params`: The list of model parameters, each of which has a default value.***1. Global Parameters*** -* `cutpoint_grid_size` Maximum size of the "grid" of potential cutpoints to consider. Default: `100`. -* `a_global` Shape parameter in the `IG(a_global, b_global)` global error variance model. Default: `0`. -* `b_global` Scale parameter in the `IG(a_global, b_global)` global error variance model. Default: `0`. -* `sigma2_init` Starting value of global error variance parameter. Calibrated internally as `pct_var_sigma2_init*var((y-mean(y))/sd(y))` if not set. -* `pct_var_sigma2_init` Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `sigma2_init`. -* `variable_weights` Numeric weights reflecting the relative probability of splitting on each variable. Does not need to sum to 1 but cannot be negative. Defaults to `rep(1/ncol(X_train), ncol(X_train))` if not set here. Note that if the propensity score is included as a covariate in either forest, its weight will default to `1/ncol(X_train)`. A workaround if you wish to provide a custom weight for the propensity score is to include it as a column in `X_train` and then set `propensity_covariate` to `'none'` adjust `keep_vars_mu`, `keep_vars_tau` and `keep_vars_variance` accordingly. -* `propensity_covariate` Whether to include the propensity score as a covariate in either or both of the forests. Enter `"none"` for neither, `"mu"` for the prognostic forest, `"tau"` for the treatment forest, and `"both"` for both forests. If this is not `"none"` and a propensity score is not provided, it will be estimated from (`X_train`, `Z_train`) using `stochtree::bart()`. Default: `"mu"`. -* `adaptive_coding` Whether or not to use an "adaptive coding" scheme in which a binary treatment variable is not coded manually as (0,1) or (-1,1) but learned via parameters `b_0` and `b_1` that attach to the outcome model `[b_0 (1-Z) + b_1 Z] tau(X)`. This is ignored when Z is not binary. Default: `TRUE`. -* `b_0` Initial value of the "control" group coding parameter. This is ignored when Z is not binary. Default: `-0.5`. -* `b_1` Initial value of the "treatment" group coding parameter. This is ignored when Z is not binary. Default: `0.5`. -* `random_seed` Integer parameterizing the C++ random number generator. If not specified, the C++ random number generator is seeded according to `std::random_device`. -* `keep_burnin` Whether or not "burnin" samples should be included in cached predictions. Default `FALSE`. Ignored if `num_mcmc = 0`. -* `keep_gfr` Whether or not "grow-from-root" samples should be included in cached predictions. Default `FALSE`. Ignored if `num_mcmc = 0`. -* `standardize` Whether or not to standardize the outcome (and store the offset / scale in the model object). Default: `TRUE`. -* `verbose` Whether or not to print progress during the sampling loops. Default: `FALSE`. -* `sample_sigma_global` Whether or not to update the `sigma^2` global error variance parameter based on `IG(a_global, b_global)`. Default: `TRUE`.***2. Prognostic Forest Parameters*** -* `num_trees_mu` Number of trees in the prognostic forest. Default: `200`. -* `sample_sigma_leaf_mu` Whether or not to update the `sigma_leaf_mu` leaf scale variance parameter in the prognostic forest based on `IG(a_leaf_mu, b_leaf_mu)`. Default: `TRUE`.***2.1. Tree Prior Parameters*** -* `alpha_mu` Prior probability of splitting for a tree of depth 0 for the prognostic forest. Tree split prior combines `alpha` and `beta` via `alpha_mu*(1+node_depth)^-beta_mu`. Default: `0.95`. -* `beta_mu` Exponent that decreases split probabilities for nodes of depth \> 0 for the prognostic forest. Tree split prior combines `alpha` and `beta` via `alpha_mu*(1+node_depth)^-beta_mu`. Default: `2.0`. -* `min_samples_leaf_mu` Minimum allowable size of a leaf, in terms of training samples, for the prognostic forest. Default: `5`. -* `max_depth_mu` Maximum depth of any tree in the mu ensemble. Default: `10`. Can be overridden with `-1` which does not enforce any depth limits on trees.***2.2. Leaf Model Parameters*** -* `keep_vars_mu` Vector of variable names or column indices denoting variables that should be included in the prognostic (`mu(X)`) forest. Default: `NULL`. -* `drop_vars_mu` Vector of variable names or column indices denoting variables that should be excluded from the prognostic (`mu(X)`) forest. Default: `NULL`. If both `drop_vars_mu` and `keep_vars_mu` are set, `drop_vars_mu` will be ignored. -* `sigma_leaf_mu` Starting value of leaf node scale parameter for the prognostic forest. Calibrated internally as `1/num_trees_mu` if not set here. -* `a_leaf_mu` Shape parameter in the `IG(a_leaf_mu, b_leaf_mu)` leaf node parameter variance model for the prognostic forest. Default: `3`. -* `b_leaf_mu` Scale parameter in the `IG(a_leaf_mu, b_leaf_mu)` leaf node parameter variance model for the prognostic forest. Calibrated internally as `0.5/num_trees` if not set here.***3. Treatment Effect Forest Parameters*** -* `num_trees_tau` Number of trees in the treatment effect forest. Default: `50`. -* `sample_sigma_leaf_tau` Whether or not to update the `sigma_leaf_tau` leaf scale variance parameter in the treatment effect forest based on `IG(a_leaf_tau, b_leaf_tau)`. Default: `TRUE`.***3.1. Tree Prior Parameters*** -* `alpha_tau` Prior probability of splitting for a tree of depth 0 for the treatment effect forest. Tree split prior combines `alpha` and `beta` via `alpha_tau*(1+node_depth)^-beta_tau`. Default: `0.25`. -* `beta_tau` Exponent that decreases split probabilities for nodes of depth \> 0 for the treatment effect forest. Tree split prior combines `alpha` and `beta` via `alpha_tau*(1+node_depth)^-beta_tau`. Default: `3.0`. -* `min_samples_leaf_tau` Minimum allowable size of a leaf, in terms of training samples, for the treatment effect forest. Default: `5`. -* `max_depth_tau` Maximum depth of any tree in the tau ensemble. Default: `5`. Can be overridden with `-1` which does not enforce any depth limits on trees.***3.2. Leaf Model Parameters*** -* `a_leaf_tau` Shape parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Default: `3`. -* `b_leaf_tau` Scale parameter in the `IG(a_leaf, b_leaf)` leaf node parameter variance model for the treatment effect forest. Calibrated internally as `0.5/num_trees` if not set here. -* `keep_vars_tau` Vector of variable names or column indices denoting variables that should be included in the treatment effect (`tau(X)`) forest. Default: `NULL`. -* `drop_vars_tau` Vector of variable names or column indices denoting variables that should be excluded from the treatment effect (`tau(X)`) forest. Default: `NULL`. If both `drop_vars_tau` and `keep_vars_tau` are set, `drop_vars_tau` will be ignored.***4. Conditional Variance Forest Parameters*** -* `num_trees_variance` Number of trees in the (optional) conditional variance forest model. Default: `0`. -* `variance_forest_init` Starting value of root forest prediction in conditional (heteroskedastic) error variance model. Calibrated internally as `log(pct_var_variance_forest_init*var((y-mean(y))/sd(y)))/num_trees_variance` if not set. -* `pct_var_variance_forest_init` Percentage of standardized outcome variance used to initialize global error variance parameter. Default: `1`. Superseded by `variance_forest_init`.***4.1. Tree Prior Parameters*** -* `alpha_variance` Prior probability of splitting for a tree of depth 0 in the (optional) conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. Default: `0.95`. -* `beta_variance` Exponent that decreases split probabilities for nodes of depth \> 0 in the (optional) conditional variance model. Tree split prior combines `alpha_variance` and `beta_variance` via `alpha_variance*(1+node_depth)^-beta_variance`. Default: `2.0`. -* `min_samples_leaf_variance` Minimum allowable size of a leaf, in terms of training samples, in the (optional) conditional variance model. Default: `5`. -* `max_depth_variance` Maximum depth of any tree in the ensemble in the (optional) conditional variance model. Default: `10`. Can be overridden with `-1` which does not enforce any depth limits on trees.***4.2. Leaf Model Parameters*** -* `a_forest` Shape parameter in the `IG(a_forest, b_forest)` conditional error variance model (which is only sampled if `num_trees_variance \> 0`). Calibrated internally as `num_trees_variance / 1.5^2 + 0.5` if not set. -* `b_forest` Scale parameter in the `IG(a_forest, b_forest)` conditional error variance model (which is only sampled if `num_trees_variance \> 0`). Calibrated internally as `num_trees_variance / 1.5^2` if not set. -* `keep_vars_variance` Vector of variable names or column indices denoting variables that should be included in the (optional) conditional variance forest. Default: `NULL`. -* `drop_vars_variance` Vector of variable names or column indices denoting variables that should be excluded from the (optional) conditional variance forest. Default: NULL. If both `drop_vars_variance` and `keep_vars_variance` are set, `drop_vars_variance` will be ignored.***5. Random Effects Parameters*** -* `rfx_prior_var` Prior on the (diagonals of the) covariance of the additive group-level random regression coefficients. Must be a vector of length `ncol(rfx_basis_train)`. Default: `rep(1, ncol(rfx_basis_train))` - -## Value - -List of sampling outputs and a wrapper around the sampled forests (which can be used for in-memory prediction on new data, or serialized to JSON on disk). - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 4 -y \<- E_XZ + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, pi_train = pi_train, -```r - X_test = X_test, Z_test = Z_test, pi_test = pi_test) -``` -# plot(rowMeans(bcf_model$mu_hat_test), mu_test, xlab = "predicted", ylab = "actual", main = "Prognostic function") -# abline(0,1,col="red",lty=3,lwd=3) -# plot(rowMeans(bcf_model$tau_hat_test), tau_test, xlab = "predicted", ylab = "actual", main = "Treatment effect") -# abline(0,1,col="red",lty=3,lwd=3) -``` - diff --git a/docs/r-documentation-markdown/calibrate_inverse_gamma_error_variance.md b/docs/r-documentation-markdown/calibrate_inverse_gamma_error_variance.md deleted file mode 100644 index f8f9832d9..000000000 --- a/docs/r-documentation-markdown/calibrate_inverse_gamma_error_variance.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: calibrate_inverse_gamma_error_variance ---- - -# Calibrate the scale parameter on an inverse gamma prior for the global error variance as in Chipman et al (2022) - -## Description - -[1](1) Chipman, H., George, E., Hahn, R., McCulloch, R., Pratola, M. and Sparapani, R. (2022). Bayesian Additive Regression Trees, Computational Approaches. In Wiley StatsRef: Statistics Reference Online (eds N. Balakrishnan, T. Colton, B. Everitt, W. Piegorsch, F. Ruggeri and J.L. Teugels). https://doi.org/10.1002/9781118445112.stat08288 - -## Usage - -```r -calibrate_inverse_gamma_error_variance( - y, - X, - W = NULL, - nu = 3, - quant = 0.9, - standardize = TRUE -) -``` - -## Arguments - -* `y`: Outcome to be modeled using BART, BCF or another nonparametric ensemble method. -* `X`: Covariates to be used to partition trees in an ensemble or series of ensemble. -* `W`: [Optional](Optional) Basis used to define a "leaf regression" model for each decision tree. The "classic" BART model assumes a constant leaf parameter, which is equivalent to a "leaf regression" on a basis of all ones, though it is not necessary to pass a vector of ones, here or to the BART function. Default: `NULL`. -* `nu`: The shape parameter for the global error variance's IG prior. The scale parameter in the Sparapani et al (2021) parameterization is defined as `nu*lambda` where `lambda` is the output of this function. Default: `3`. -* `quant`: [Optional](Optional) Quantile of the inverse gamma prior distribution represented by a linear-regression-based overestimate of `sigma^2`. Default: `0.9`. -* `standardize`: [Optional](Optional) Whether or not outcome should be standardized (`(y-mean(y))/sd(y)`) before calibration of `lambda`. Default: `TRUE`. - -## Value - -Value of `lambda` which determines the scale parameter of the global error variance prior (`sigma^2 ~ IG(nu,nu*lambda)`) - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -y \<- 10*X[,1] - 20*X[,2] + rnorm(n) -nu \<- 3 -lambda \<- calibrate_inverse_gamma_error_variance(y, X, nu = nu) -sigma2hat \<- mean(resid(lm(y~X))^2) -mean(var(y)/rgamma(100000, nu, rate = nu*lambda) \< sigma2hat) -``` - diff --git a/docs/r-documentation-markdown/computeForestLeafIndices.md b/docs/r-documentation-markdown/computeForestLeafIndices.md deleted file mode 100644 index 880ad0055..000000000 --- a/docs/r-documentation-markdown/computeForestLeafIndices.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: computeForestLeafIndices ---- - -# Compute vector of forest leaf indices - -## Description - -Compute and return a vector representation of a forest's leaf predictions for -every observation in a dataset. -The vector has a "row-major" format that can be easily re-represented as -as a CSR sparse matrix: elements are organized so that the first `n` elements -correspond to leaf predictions for all `n` observations in a dataset for the -first tree in an ensemble, the next `n` elements correspond to predictions for -the second tree and so on. The "data" for each element corresponds to a uniquely -mapped column index that corresponds to a single leaf of a single tree (i.e. -if tree 1 has 3 leaves, its column indices range from 0 to 2, and then tree 2's -leaf indices begin at 3, etc...). - -## Usage - -```r -computeForestLeafIndices( - model_object, - covariates, - forest_type, - forest_inds = NULL -) -``` - -## Arguments - -* `model_object`: Object of type `bartmodel` or `bcf` corresponding to a BART / BCF model with at least one forest sample -* `covariates`: Covariates to use for prediction. Must have the same dimensions / column types as the data used to train a forest. -* `forest_type`: Which forest to use from `model_object`. -Valid inputs depend on the model type, and whether or not a given forest was sampled in that model.***1. BART*** -* `'mean'`: Extracts leaf indices for the mean forest -* `'variance'`: Extracts leaf indices for the variance forest***2. BCF*** -* `'prognostic'`: Extracts leaf indices for the prognostic forest -* `'treatment'`: Extracts leaf indices for the treatment effect forest -* `'variance'`: Extracts leaf indices for the variance forest -* `forest_inds`: (Optional) Indices of the forest sample(s) for which to compute leaf indices. If not provided, -this function will return leaf indices for every sample of a forest. -This function uses 1-indexing, so the first forest sample corresponds to `forest_num = 1`, and so on. - -## Value - -List of vectors. Each vector is of size `num_obs * num_trees`, where `num_obs = nrow(covariates)`and `num_trees` is the number of trees in the relevant forest of `model_object`. - diff --git a/docs/r-documentation-markdown/computeForestLeafVariances.md b/docs/r-documentation-markdown/computeForestLeafVariances.md deleted file mode 100644 index 456622a0b..000000000 --- a/docs/r-documentation-markdown/computeForestLeafVariances.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: computeForestLeafVariances ---- - -# Compute vector of forest leaf scale parameters - -## Description - -Return each forest's leaf node scale parameters. -If leaf scale is not sampled for the forest in question, throws an error that the -leaf model does not have a stochastic scale parameter. - -## Usage - -```r -computeForestLeafVariances(model_object, forest_type, forest_inds = NULL) -``` - -## Arguments - -* `model_object`: Object of type `bartmodel` or `bcf` corresponding to a BART / BCF model with at least one forest sample -* `forest_type`: Which forest to use from `model_object`. -Valid inputs depend on the model type, and whether or not a given forest was sampled in that model.***1. BART*** -* `'mean'`: Extracts leaf indices for the mean forest -* `'variance'`: Extracts leaf indices for the variance forest***2. BCF*** -* `'prognostic'`: Extracts leaf indices for the prognostic forest -* `'treatment'`: Extracts leaf indices for the treatment effect forest -* `'variance'`: Extracts leaf indices for the variance forest -* `forest_inds`: (Optional) Indices of the forest sample(s) for which to compute leaf indices. If not provided, -this function will return leaf indices for every sample of a forest. -This function uses 1-indexing, so the first forest sample corresponds to `forest_num = 1`, and so on. - -## Value - -Vector of size `length(forest_inds)` with the leaf scale parameter for each requested forest. - diff --git a/docs/r-documentation-markdown/computeMaxLeafIndex.md b/docs/r-documentation-markdown/computeMaxLeafIndex.md deleted file mode 100644 index a6a6f685b..000000000 --- a/docs/r-documentation-markdown/computeMaxLeafIndex.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: computeMaxLeafIndex ---- - -# Compute and return the largest possible leaf index computable by - -## Description - -Compute and return the largest possible leaf index computable by `computeForestLeafIndices` for the forests in a designated forest sample container. - -## Usage - -```r -computeMaxLeafIndex(model_object, covariates, forest_type, forest_inds = NULL) -``` - -## Arguments - -* `model_object`: Object of type `bartmodel` or `bcf` corresponding to a BART / BCF model with at least one forest sample -* `covariates`: Covariates to use for prediction. Must have the same dimensions / column types as the data used to train a forest. -* `forest_type`: Which forest to use from `model_object`. -Valid inputs depend on the model type, and whether or not a***1. BART*** -* `'mean'`: Extracts leaf indices for the mean forest -* `'variance'`: Extracts leaf indices for the variance forest***2. BCF*** -* `'prognostic'`: Extracts leaf indices for the prognostic forest -* `'treatment'`: Extracts leaf indices for the treatment effect forest -* `'variance'`: Extracts leaf indices for the variance forest -* `forest_inds`: (Optional) Indices of the forest sample(s) for which to compute leaf indices. If not provided, -this function will return leaf indices for every sample of a forest. -This function uses 1-indexing, so the first forest sample corresponds to `forest_num = 1`, and so on. - -## Value - -Vector containing the largest possible leaf index computable by `computeForestLeafIndices` for the forests in a designated forest sample container. - diff --git a/docs/r-documentation-markdown/convertBARTModelToJson.md b/docs/r-documentation-markdown/convertBARTModelToJson.md deleted file mode 100644 index c6144ad07..000000000 --- a/docs/r-documentation-markdown/convertBARTModelToJson.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: convertBARTModelToJson ---- - -# Convert the persistent aspects of a BART model to (in-memory) JSON - -## Description - -Convert the persistent aspects of a BART model to (in-memory) JSON - -## Usage - -```r -convertBARTModelToJson(object) -``` - -## Arguments - -* `object`: Object of type `bartmodel` containing draws of a BART model and associated sampling outputs. - -## Value - -Object of type `CppJson` - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# bart_json \<- convertBARTModelToJson(bart_model) -``` - diff --git a/docs/r-documentation-markdown/convertBCFModelToJson.md b/docs/r-documentation-markdown/convertBCFModelToJson.md deleted file mode 100644 index b461bca6c..000000000 --- a/docs/r-documentation-markdown/convertBCFModelToJson.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: convertBCFModelToJson ---- - -# Convert the persistent aspects of a BCF model to (in-memory) JSON - -## Description - -Convert the persistent aspects of a BCF model to (in-memory) JSON - -## Usage - -```r -convertBCFModelToJson(object) -``` - -## Arguments - -* `object`: Object of type `bcf` containing draws of a Bayesian causal forest model and associated sampling outputs. - -## Value - -Object of type `CppJson` - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -y \<- E_XZ + rfx_term + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, -```r - pi_train = pi_train, group_ids_train = group_ids_train, - rfx_basis_train = rfx_basis_train, X_test = X_test, - Z_test = Z_test, pi_test = pi_test, group_ids_test = group_ids_test, - rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100, - sample_sigma_leaf_mu = TRUE, sample_sigma_leaf_tau = FALSE) -``` -# bcf_json \<- convertBCFModelToJson(bcf_model) -``` - diff --git a/docs/r-documentation-markdown/createBARTModelFromCombinedJson.md b/docs/r-documentation-markdown/createBARTModelFromCombinedJson.md deleted file mode 100644 index 8a5b7d366..000000000 --- a/docs/r-documentation-markdown/createBARTModelFromCombinedJson.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: createBARTModelFromCombinedJson ---- - -# Convert a list of (in-memory) JSON representations of a BART model to a single combined BART model object - -## Description - -Convert a list of (in-memory) JSON representations of a BART model to a single combined BART model object -which can be used for prediction, etc... - -## Usage - -```r -createBARTModelFromCombinedJson(json_object_list) -``` - -## Arguments - -* `json_object_list`: List of objects of type `CppJson` containing Json representation of a BART model - -## Value - -Object of type `bartmodel` - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# bart_json \<- list(convertBARTModelToJson(bart_model)) -# bart_model_roundtrip \<- createBARTModelFromCombinedJson(bart_json) -``` - diff --git a/docs/r-documentation-markdown/createBARTModelFromCombinedJsonString.md b/docs/r-documentation-markdown/createBARTModelFromCombinedJsonString.md deleted file mode 100644 index 970aed480..000000000 --- a/docs/r-documentation-markdown/createBARTModelFromCombinedJsonString.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: createBARTModelFromCombinedJsonString ---- - -# Convert a list of (in-memory) JSON strings that represent BART models to a single combined BART model object - -## Description - -Convert a list of (in-memory) JSON strings that represent BART models to a single combined BART model object -which can be used for prediction, etc... - -## Usage - -```r -createBARTModelFromCombinedJsonString(json_string_list) -``` - -## Arguments - -* `json_string_list`: List of JSON strings which can be parsed to objects of type `CppJson` containing Json representation of a BART model - -## Value - -Object of type `bartmodel` - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# bart_json_string_list \<- list(saveBARTModelToJsonString(bart_model)) -# bart_model_roundtrip \<- createBARTModelFromCombinedJsonString(bart_json_string_list) -``` - diff --git a/docs/r-documentation-markdown/createBARTModelFromJson.md b/docs/r-documentation-markdown/createBARTModelFromJson.md deleted file mode 100644 index 668f9f00d..000000000 --- a/docs/r-documentation-markdown/createBARTModelFromJson.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: createBARTModelFromJson ---- - -# Convert an (in-memory) JSON representation of a BART model to a BART model object - -## Description - -Convert an (in-memory) JSON representation of a BART model to a BART model object -which can be used for prediction, etc... - -## Usage - -```r -createBARTModelFromJson(json_object) -``` - -## Arguments - -* `json_object`: Object of type `CppJson` containing Json representation of a BART model - -## Value - -Object of type `bartmodel` - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# bart_json \<- convertBARTModelToJson(bart_model) -# bart_model_roundtrip \<- createBARTModelFromJson(bart_json) -``` - diff --git a/docs/r-documentation-markdown/createBARTModelFromJsonFile.md b/docs/r-documentation-markdown/createBARTModelFromJsonFile.md deleted file mode 100644 index 06e6a5ac1..000000000 --- a/docs/r-documentation-markdown/createBARTModelFromJsonFile.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: createBARTModelFromJsonFile ---- - -# Convert a JSON file containing sample information on a trained BART model - -## Description - -Convert a JSON file containing sample information on a trained BART model -to a BART model object which can be used for prediction, etc... - -## Usage - -```r -createBARTModelFromJsonFile(json_filename) -``` - -## Arguments - -* `json_filename`: String of filepath, must end in ".json" - -## Value - -Object of type `bartmodel` - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# saveBARTModelToJsonFile(bart_model, "test.json") -# bart_model_roundtrip \<- createBARTModelFromJsonFile("test.json") -``` - diff --git a/docs/r-documentation-markdown/createBARTModelFromJsonString.md b/docs/r-documentation-markdown/createBARTModelFromJsonString.md deleted file mode 100644 index 0293f3f2f..000000000 --- a/docs/r-documentation-markdown/createBARTModelFromJsonString.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: createBARTModelFromJsonString ---- - -# Convert a JSON string containing sample information on a trained BART model - -## Description - -Convert a JSON string containing sample information on a trained BART model -to a BART model object which can be used for prediction, etc... - -## Usage - -```r -createBARTModelFromJsonString(json_string) -``` - -## Arguments - -* `json_string`: JSON string dump - -## Value - -Object of type `bartmodel` - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# bart_json \<- saveBARTModelToJsonString(bart_model) -# bart_model_roundtrip \<- createBARTModelFromJsonString(bart_json) -# y_hat_mean_roundtrip \<- rowMeans(predict(bart_model_roundtrip, X_train)$y_hat) -# plot(rowMeans(bart_model$y_hat_train), y_hat_mean_roundtrip, -# xlab = "original", ylab = "roundtrip") -``` - diff --git a/docs/r-documentation-markdown/createBCFModelFromJson.md b/docs/r-documentation-markdown/createBCFModelFromJson.md deleted file mode 100644 index d2e3c450b..000000000 --- a/docs/r-documentation-markdown/createBCFModelFromJson.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: createBCFModelFromJson ---- - -# Convert an (in-memory) JSON representation of a BCF model to a BCF model object - -## Description - -Convert an (in-memory) JSON representation of a BCF model to a BCF model object -which can be used for prediction, etc... - -## Usage - -```r -createBCFModelFromJson(json_object) -``` - -## Arguments - -* `json_object`: Object of type `CppJson` containing Json representation of a BCF model - -## Value - -Object of type `bcf` - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -y \<- E_XZ + rfx_term + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, -```r - pi_train = pi_train, group_ids_train = group_ids_train, - rfx_basis_train = rfx_basis_train, X_test = X_test, - Z_test = Z_test, pi_test = pi_test, group_ids_test = group_ids_test, - rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100, - sample_sigma_leaf_mu = TRUE, sample_sigma_leaf_tau = FALSE) -``` -# bcf_json \<- convertBCFModelToJson(bcf_model) -# bcf_model_roundtrip \<- createBCFModelFromJson(bcf_json) -``` - diff --git a/docs/r-documentation-markdown/createBCFModelFromJsonFile.md b/docs/r-documentation-markdown/createBCFModelFromJsonFile.md deleted file mode 100644 index cae7f13e0..000000000 --- a/docs/r-documentation-markdown/createBCFModelFromJsonFile.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: createBCFModelFromJsonFile ---- - -# Convert a JSON file containing sample information on a trained BCF model - -## Description - -Convert a JSON file containing sample information on a trained BCF model -to a BCF model object which can be used for prediction, etc... - -## Usage - -```r -createBCFModelFromJsonFile(json_filename) -``` - -## Arguments - -* `json_filename`: String of filepath, must end in ".json" - -## Value - -Object of type `bcf` - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -y \<- E_XZ + rfx_term + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, -```r - pi_train = pi_train, group_ids_train = group_ids_train, - rfx_basis_train = rfx_basis_train, X_test = X_test, - Z_test = Z_test, pi_test = pi_test, group_ids_test = group_ids_test, - rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100, - sample_sigma_leaf_mu = TRUE, sample_sigma_leaf_tau = FALSE) -``` -# saveBCFModelToJsonFile(bcf_model, "test.json") -# bcf_model_roundtrip \<- createBCFModelFromJsonFile("test.json") -``` - diff --git a/docs/r-documentation-markdown/createBCFModelFromJsonString.md b/docs/r-documentation-markdown/createBCFModelFromJsonString.md deleted file mode 100644 index d9a94bbe8..000000000 --- a/docs/r-documentation-markdown/createBCFModelFromJsonString.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: createBCFModelFromJsonString ---- - -# Convert a JSON string containing sample information on a trained BCF model - -## Description - -Convert a JSON string containing sample information on a trained BCF model -to a BCF model object which can be used for prediction, etc... - -## Usage - -```r -createBCFModelFromJsonString(json_string) -``` - -## Arguments - -* `json_string`: JSON string dump - -## Value - -Object of type `bcf` - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -y \<- E_XZ + rfx_term + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, -```r - pi_train = pi_train, group_ids_train = group_ids_train, - rfx_basis_train = rfx_basis_train, X_test = X_test, - Z_test = Z_test, pi_test = pi_test, group_ids_test = group_ids_test, - rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100, - sample_sigma_leaf_mu = TRUE, sample_sigma_leaf_tau = FALSE) -``` -# bcf_json \<- saveBCFModelToJsonString(bcf_model) -# bcf_model_roundtrip \<- createBCFModelFromJsonString(bcf_json) -``` - diff --git a/docs/r-documentation-markdown/createCppJson.md b/docs/r-documentation-markdown/createCppJson.md deleted file mode 100644 index f1076abb6..000000000 --- a/docs/r-documentation-markdown/createCppJson.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: createCppJson ---- - -# Create a new (empty) C++ Json object - -## Description - -Create a new (empty) C++ Json object - -## Usage - -```r -createCppJson() -``` - -## Value - -`CppJson` object - diff --git a/docs/r-documentation-markdown/createCppJsonFile.md b/docs/r-documentation-markdown/createCppJsonFile.md deleted file mode 100644 index acabb6323..000000000 --- a/docs/r-documentation-markdown/createCppJsonFile.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: createCppJsonFile ---- - -# Create a C++ Json object from a Json file - -## Description - -Create a C++ Json object from a Json file - -## Usage - -```r -createCppJsonFile(json_filename) -``` - -## Arguments - -* `json_filename`: Name of file to read. Must end in `.json`. - -## Value - -`CppJson` object - diff --git a/docs/r-documentation-markdown/createCppJsonString.md b/docs/r-documentation-markdown/createCppJsonString.md deleted file mode 100644 index e4a449284..000000000 --- a/docs/r-documentation-markdown/createCppJsonString.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: createCppJsonString ---- - -# Create a C++ Json object from a Json string - -## Description - -Create a C++ Json object from a Json string - -## Usage - -```r -createCppJsonString(json_string) -``` - -## Arguments - -* `json_string`: JSON string dump - -## Value - -`CppJson` object - diff --git a/docs/r-documentation-markdown/createForestContainer.md b/docs/r-documentation-markdown/createForestContainer.md deleted file mode 100644 index df46c3f34..000000000 --- a/docs/r-documentation-markdown/createForestContainer.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: createForestContainer ---- - -# Create a container of forest samples - -## Description - -Create a container of forest samples - -## Usage - -```r -createForestContainer( - num_trees, - output_dimension = 1, - is_leaf_constant = F, - is_exponentiated = F -) -``` - -## Arguments - -* `num_trees`: Number of trees -* `output_dimension`: Dimensionality of the outcome model -* `is_leaf_constant`: Whether leaf is constant -* `is_exponentiated`: Whether forest predictions should be exponentiated before being returned - -## Value - -`ForestSamples` object - diff --git a/docs/r-documentation-markdown/createForestCovariates.md b/docs/r-documentation-markdown/createForestCovariates.md deleted file mode 100644 index 1684b33e6..000000000 --- a/docs/r-documentation-markdown/createForestCovariates.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: createForestCovariates ---- - -# Preprocess a dataframe of covariate values, converting categorical variables - -## Description - -Preprocess a dataframe of covariate values, converting categorical variables -to integers and one-hot encoding if need be. Returns a list including a -matrix of preprocessed covariate values and associated tracking. - -## Usage - -```r -createForestCovariates( - input_data, - ordered_cat_vars = NULL, - unordered_cat_vars = NULL -) -``` - -## Arguments - -* `input_data`: Dataframe or matrix of covariates. Users may pre-process any -categorical variables as factors but it is not necessary. -* `ordered_cat_vars`: (Optional) Vector of names of ordered categorical variables, or vector of column indices if `input_data` is a matrix. -* `unordered_cat_vars`: (Optional) Vector of names of unordered categorical variables, or vector of column indices if `input_data` is a matrix. - -## Value - -List with preprocessed data and details on the number of each type -of variable, unique categories associated with categorical variables, and the -vector of feature types needed for calls to BART and BCF. - -## Examples - -```r -cov_df \<- data.frame(x1 = 1:5, x2 = 5:1, x3 = 6:10) -preprocess_list \<- createForestCovariates(cov_df) -X \<- preprocess_list$X -``` - diff --git a/docs/r-documentation-markdown/createForestCovariatesFromMetadata.md b/docs/r-documentation-markdown/createForestCovariatesFromMetadata.md deleted file mode 100644 index 15d97577b..000000000 --- a/docs/r-documentation-markdown/createForestCovariatesFromMetadata.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: createForestCovariatesFromMetadata ---- - -# Preprocess a dataframe of covariate values, converting categorical variables - -## Description - -Preprocess a dataframe of covariate values, converting categorical variables -to integers and one-hot encoding if need be. Returns a list including a -matrix of preprocessed covariate values and associated tracking. - -## Usage - -```r -createForestCovariatesFromMetadata(input_data, metadata) -``` - -## Arguments - -* `input_data`: Dataframe or matrix of covariates. Users may pre-process any -categorical variables as factors but it is not necessary. -* `metadata`: List containing information on variables, including train set -categories for categorical variables - -## Value - -Preprocessed data with categorical variables appropriately preprocessed - -## Examples - -```r -cov_df \<- data.frame(x1 = 1:5, x2 = 5:1, x3 = 6:10) -metadata \<- list(num_ordered_cat_vars = 0, num_unordered_cat_vars = 0, -```r - num_numeric_vars = 3, numeric_vars = c("x1", "x2", "x3")) -``` -X_preprocessed \<- createForestCovariatesFromMetadata(cov_df, metadata) -``` - diff --git a/docs/r-documentation-markdown/createForestDataset.md b/docs/r-documentation-markdown/createForestDataset.md deleted file mode 100644 index 9f6776ff0..000000000 --- a/docs/r-documentation-markdown/createForestDataset.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: createForestDataset ---- - -# Create a forest dataset object - -## Description - -Create a forest dataset object - -## Usage - -```r -createForestDataset(covariates, basis = NULL, variance_weights = NULL) -``` - -## Arguments - -* `covariates`: Matrix of covariates -* `basis`: (Optional) Matrix of bases used to define a leaf regression -* `variance_weights`: (Optional) Vector of observation-specific variance weights - -## Value - -`ForestDataset` object - diff --git a/docs/r-documentation-markdown/createForestModel.md b/docs/r-documentation-markdown/createForestModel.md deleted file mode 100644 index f24c4e5bd..000000000 --- a/docs/r-documentation-markdown/createForestModel.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: createForestModel ---- - -# Create a forest model object - -## Description - -Create a forest model object - -## Usage - -```r -createForestModel( - forest_dataset, - feature_types, - num_trees, - n, - alpha, - beta, - min_samples_leaf, - max_depth -) -``` - -## Arguments - -* `forest_dataset`: `ForestDataset` object, used to initialize forest sampling data structures -* `feature_types`: Feature types (integers where 0 = numeric, 1 = ordered categorical, 2 = unordered categorical) -* `num_trees`: Number of trees in the forest being sampled -* `n`: Number of observations in `forest_dataset` -* `alpha`: Root node split probability in tree prior -* `beta`: Depth prior penalty in tree prior -* `min_samples_leaf`: Minimum number of samples in a tree leaf - -## Value - -`ForestModel` object - diff --git a/docs/r-documentation-markdown/createOutcome.md b/docs/r-documentation-markdown/createOutcome.md deleted file mode 100644 index 0fcc4a862..000000000 --- a/docs/r-documentation-markdown/createOutcome.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: createOutcome ---- - -# Create an outcome object - -## Description - -Create an outcome object - -## Usage - -```r -createOutcome(outcome) -``` - -## Arguments - -* `outcome`: Vector of outcome values - -## Value - -`Outcome` object - diff --git a/docs/r-documentation-markdown/createRNG.md b/docs/r-documentation-markdown/createRNG.md deleted file mode 100644 index 4d82955cc..000000000 --- a/docs/r-documentation-markdown/createRNG.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: createRNG ---- - -# Create an R class that wraps a C++ random number generator - -## Description - -Create an R class that wraps a C++ random number generator - -## Usage - -```r -createRNG(random_seed = -1) -``` - -## Arguments - -* `random_seed`: (Optional) random seed for sampling - -## Value - -`CppRng` object - diff --git a/docs/r-documentation-markdown/createRandomEffectSamples.md b/docs/r-documentation-markdown/createRandomEffectSamples.md deleted file mode 100644 index 5bc405a02..000000000 --- a/docs/r-documentation-markdown/createRandomEffectSamples.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: createRandomEffectSamples ---- - -# Create a - -## Description - -Create a `RandomEffectSamples` object - -## Usage - -```r -createRandomEffectSamples(num_components, num_groups, random_effects_tracker) -``` - -## Arguments - -* `num_components`: Number of "components" or bases defining the random effects regression -* `num_groups`: Number of random effects groups -* `random_effects_tracker`: Object of type `RandomEffectsTracker` - -## Value - -`RandomEffectSamples` object - diff --git a/docs/r-documentation-markdown/createRandomEffectsDataset.md b/docs/r-documentation-markdown/createRandomEffectsDataset.md deleted file mode 100644 index 39a0cc329..000000000 --- a/docs/r-documentation-markdown/createRandomEffectsDataset.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: createRandomEffectsDataset ---- - -# Create a random effects dataset object - -## Description - -Create a random effects dataset object - -## Usage - -```r -createRandomEffectsDataset(group_labels, basis, variance_weights = NULL) -``` - -## Arguments - -* `group_labels`: Vector of group labels -* `basis`: Matrix of bases used to define the random effects regression (for an intercept-only model, pass an array of ones) -* `variance_weights`: (Optional) Vector of observation-specific variance weights - -## Value - -`RandomEffectsDataset` object - diff --git a/docs/r-documentation-markdown/createRandomEffectsModel.md b/docs/r-documentation-markdown/createRandomEffectsModel.md deleted file mode 100644 index 0e3b7cffd..000000000 --- a/docs/r-documentation-markdown/createRandomEffectsModel.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: createRandomEffectsModel ---- - -# Create a - -## Description - -Create a `RandomEffectsModel` object - -## Usage - -```r -createRandomEffectsModel(num_components, num_groups) -``` - -## Arguments - -* `num_components`: Number of "components" or bases defining the random effects regression -* `num_groups`: Number of random effects groups - -## Value - -`RandomEffectsModel` object - diff --git a/docs/r-documentation-markdown/createRandomEffectsTracker.md b/docs/r-documentation-markdown/createRandomEffectsTracker.md deleted file mode 100644 index 19a482f6a..000000000 --- a/docs/r-documentation-markdown/createRandomEffectsTracker.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: createRandomEffectsTracker ---- - -# Create a - -## Description - -Create a `RandomEffectsTracker` object - -## Usage - -```r -createRandomEffectsTracker(rfx_group_indices) -``` - -## Arguments - -* `rfx_group_indices`: Integer indices indicating groups used to define random effects - -## Value - -`RandomEffectsTracker` object - diff --git a/docs/r-documentation-markdown/getRandomEffectSamples.bartmodel.md b/docs/r-documentation-markdown/getRandomEffectSamples.bartmodel.md deleted file mode 100644 index 4229d9b96..000000000 --- a/docs/r-documentation-markdown/getRandomEffectSamples.bartmodel.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: getRandomEffectSamples.bartmodel ---- - -# Extract raw sample values for each of the random effect parameter terms. - -## Description - -Extract raw sample values for each of the random effect parameter terms. - -## Usage - -```r -# S3 method for bartmodel -getRandomEffectSamples(object, ...) -``` - -## Arguments - -* `object`: Object of type `bcf` containing draws of a Bayesian causal forest model and associated sampling outputs. -* `...`: Other parameters to be used in random effects extraction - -## Value - -List of arrays. The alpha array has dimension (`num_components`, `num_samples`) and is simply a vector if `num_components = 1`. -The xi and beta arrays have dimension (`num_components`, `num_groups`, `num_samples`) and is simply a matrix if `num_components = 1`. -The sigma array has dimension (`num_components`, `num_samples`) and is simply a vector if `num_components = 1`. - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -E_y \<- f_XW + rfx_term -y \<- E_y + rnorm(n, 0, 1)*(sd(E_y)/snr) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train, -```r - group_ids_train = group_ids_train, rfx_basis_train = rfx_basis_train, - X_test = X_test, group_ids_test = group_ids_test, rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100) -``` -rfx_samples \<- getRandomEffectSamples(bart_model) -``` - diff --git a/docs/r-documentation-markdown/getRandomEffectSamples.bcf.md b/docs/r-documentation-markdown/getRandomEffectSamples.bcf.md deleted file mode 100644 index c5da3f4d0..000000000 --- a/docs/r-documentation-markdown/getRandomEffectSamples.bcf.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: getRandomEffectSamples.bcf ---- - -# Extract raw sample values for each of the random effect parameter terms. - -## Description - -Extract raw sample values for each of the random effect parameter terms. - -## Usage - -```r -# S3 method for bcf -getRandomEffectSamples(object, ...) -``` - -## Arguments - -* `object`: Object of type `bcf` containing draws of a Bayesian causal forest model and associated sampling outputs. -* `...`: Other parameters to be used in random effects extraction - -## Value - -List of arrays. The alpha array has dimension (`num_components`, `num_samples`) and is simply a vector if `num_components = 1`. -The xi and beta arrays have dimension (`num_components`, `num_groups`, `num_samples`) and is simply a matrix if `num_components = 1`. -The sigma array has dimension (`num_components`, `num_samples`) and is simply a vector if `num_components = 1`. - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -y \<- E_XZ + rfx_term + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, -```r - pi_train = pi_train, group_ids_train = group_ids_train, - rfx_basis_train = rfx_basis_train, X_test = X_test, - Z_test = Z_test, pi_test = pi_test, group_ids_test = group_ids_test, - rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100, - sample_sigma_leaf_mu = TRUE, sample_sigma_leaf_tau = FALSE) -``` -rfx_samples \<- getRandomEffectSamples(bcf_model) -``` - diff --git a/docs/r-documentation-markdown/getRandomEffectSamples.md b/docs/r-documentation-markdown/getRandomEffectSamples.md deleted file mode 100644 index 7317d6adc..000000000 --- a/docs/r-documentation-markdown/getRandomEffectSamples.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: getRandomEffectSamples ---- - -# Generic function for extracting random effect samples from a model object (BCF, BART, etc...) - -## Description - -Generic function for extracting random effect samples from a model object (BCF, BART, etc...) - -## Usage - -```r -getRandomEffectSamples(object, ...) -``` - -## Arguments - -* `object`: Fitted model object from which to extract random effects -* `...`: Other parameters to be used in random effects extraction - -## Value - -List of random effect samples - diff --git a/docs/r-documentation-markdown/loadForestContainerCombinedJson.md b/docs/r-documentation-markdown/loadForestContainerCombinedJson.md deleted file mode 100644 index c81e0e78f..000000000 --- a/docs/r-documentation-markdown/loadForestContainerCombinedJson.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: loadForestContainerCombinedJson ---- - -# Combine multiple JSON model objects containing forests (with the same hierarchy / schema) into a single forest_container - -## Description - -Combine multiple JSON model objects containing forests (with the same hierarchy / schema) into a single forest_container - -## Usage - -```r -loadForestContainerCombinedJson(json_object_list, json_forest_label) -``` - -## Arguments - -* `json_object_list`: List of objects of class `CppJson` -* `json_forest_label`: Label referring to a particular forest (i.e. "forest_0") in the overall json hierarchy (must exist in every json object in the list) - -## Value - -`ForestSamples` object - diff --git a/docs/r-documentation-markdown/loadForestContainerCombinedJsonString.md b/docs/r-documentation-markdown/loadForestContainerCombinedJsonString.md deleted file mode 100644 index 5bdabac1b..000000000 --- a/docs/r-documentation-markdown/loadForestContainerCombinedJsonString.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: loadForestContainerCombinedJsonString ---- - -# Combine multiple JSON strings representing model objects containing forests (with the same hierarchy / schema) into a single forest_container - -## Description - -Combine multiple JSON strings representing model objects containing forests (with the same hierarchy / schema) into a single forest_container - -## Usage - -```r -loadForestContainerCombinedJsonString(json_string_list, json_forest_label) -``` - -## Arguments - -* `json_string_list`: List of strings that parse into objects of type `CppJson` -* `json_forest_label`: Label referring to a particular forest (i.e. "forest_0") in the overall json hierarchy (must exist in every json object in the list) - -## Value - -`ForestSamples` object - diff --git a/docs/r-documentation-markdown/loadForestContainerJson.md b/docs/r-documentation-markdown/loadForestContainerJson.md deleted file mode 100644 index b5af08260..000000000 --- a/docs/r-documentation-markdown/loadForestContainerJson.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: loadForestContainerJson ---- - -# Load a container of forest samples from json - -## Description - -Load a container of forest samples from json - -## Usage - -```r -loadForestContainerJson(json_object, json_forest_label) -``` - -## Arguments - -* `json_object`: Object of class `CppJson` -* `json_forest_label`: Label referring to a particular forest (i.e. "forest_0") in the overall json hierarchy - -## Value - -`ForestSamples` object - diff --git a/docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJson.md b/docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJson.md deleted file mode 100644 index ee545cdcf..000000000 --- a/docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJson.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: loadRandomEffectSamplesCombinedJson ---- - -# Combine multiple JSON model objects containing random effects (with the same hierarchy / schema) into a single container - -## Description - -Combine multiple JSON model objects containing random effects (with the same hierarchy / schema) into a single container - -## Usage - -```r -loadRandomEffectSamplesCombinedJson(json_object_list, json_rfx_num) -``` - -## Arguments - -* `json_object_list`: List of objects of class `CppJson` -* `json_rfx_num`: Integer index indicating the position of the random effects term to be unpacked - -## Value - -`RandomEffectSamples` object - diff --git a/docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJsonString.md b/docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJsonString.md deleted file mode 100644 index 412eec204..000000000 --- a/docs/r-documentation-markdown/loadRandomEffectSamplesCombinedJsonString.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: loadRandomEffectSamplesCombinedJsonString ---- - -# Combine multiple JSON strings representing model objects containing random effects (with the same hierarchy / schema) into a single container - -## Description - -Combine multiple JSON strings representing model objects containing random effects (with the same hierarchy / schema) into a single container - -## Usage - -```r -loadRandomEffectSamplesCombinedJsonString(json_string_list, json_rfx_num) -``` - -## Arguments - -* `json_string_list`: List of objects of class `CppJson` -* `json_rfx_num`: Integer index indicating the position of the random effects term to be unpacked - -## Value - -`RandomEffectSamples` object - diff --git a/docs/r-documentation-markdown/loadRandomEffectSamplesJson.md b/docs/r-documentation-markdown/loadRandomEffectSamplesJson.md deleted file mode 100644 index 1de81ccd3..000000000 --- a/docs/r-documentation-markdown/loadRandomEffectSamplesJson.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: loadRandomEffectSamplesJson ---- - -# Load a container of random effect samples from json - -## Description - -Load a container of random effect samples from json - -## Usage - -```r -loadRandomEffectSamplesJson(json_object, json_rfx_num) -``` - -## Arguments - -* `json_object`: Object of class `CppJson` -* `json_rfx_num`: Integer index indicating the position of the random effects term to be unpacked - -## Value - -`RandomEffectSamples` object - diff --git a/docs/r-documentation-markdown/loadScalarJson.md b/docs/r-documentation-markdown/loadScalarJson.md deleted file mode 100644 index 14e1a6e44..000000000 --- a/docs/r-documentation-markdown/loadScalarJson.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: loadScalarJson ---- - -# Load a scalar from json - -## Description - -Load a scalar from json - -## Usage - -```r -loadScalarJson(json_object, json_scalar_label, subfolder_name = NULL) -``` - -## Arguments - -* `json_object`: Object of class `CppJson` -* `json_scalar_label`: Label referring to a particular scalar / string value (i.e. "num_samples") in the overall json hierarchy -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which vector sits - -## Value - -R vector - diff --git a/docs/r-documentation-markdown/loadVectorJson.md b/docs/r-documentation-markdown/loadVectorJson.md deleted file mode 100644 index e44c0d1e6..000000000 --- a/docs/r-documentation-markdown/loadVectorJson.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: loadVectorJson ---- - -# Load a vector from json - -## Description - -Load a vector from json - -## Usage - -```r -loadVectorJson(json_object, json_vector_label, subfolder_name = NULL) -``` - -## Arguments - -* `json_object`: Object of class `CppJson` -* `json_vector_label`: Label referring to a particular vector (i.e. "sigma2_samples") in the overall json hierarchy -* `subfolder_name`: (Optional) Name of the subfolder / hierarchy under which vector sits - -## Value - -R vector - diff --git a/docs/r-documentation-markdown/oneHotEncode.md b/docs/r-documentation-markdown/oneHotEncode.md deleted file mode 100644 index 2b2343f54..000000000 --- a/docs/r-documentation-markdown/oneHotEncode.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: oneHotEncode ---- - -# Convert a vector of unordered categorical data (either numeric or character - -## Description - -This procedure assumes that a reference set of observations for this variable -(typically a training set that was used to sample a forest) has already been -one-hot encoded and that the unique levels of the training set variable are -available (and passed as `unique_levels`). Test set observations that contain -categories not in `unique_levels` will all be mapped to the last column of -this matrix - -## Usage - -```r -oneHotEncode(x_input, unique_levels) -``` - -## Arguments - -* `x_input`: Vector of unordered categorical data (typically either strings -integers, but this function also accepts floating point data). -* `unique_levels`: Unique values of the categorical variable used to create -the initial one-hot matrix (typically a training set) - -## Value - -Binary one-hot matrix - -## Examples - -```r -x \<- sample(1:8, 100, TRUE) -x_test \<- sample(1:9, 10, TRUE) -x_onehot \<- oneHotEncode(x_test, levels(factor(x))) -``` - diff --git a/docs/r-documentation-markdown/oneHotInitializeAndEncode.md b/docs/r-documentation-markdown/oneHotInitializeAndEncode.md deleted file mode 100644 index d0f571c12..000000000 --- a/docs/r-documentation-markdown/oneHotInitializeAndEncode.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: oneHotInitializeAndEncode ---- - -# Convert a vector of unordered categorical data (either numeric or character - -## Description - -To allow for prediction on "unseen" categories in a test dataset, this -procedure pads the one-hot matrix with a blank "other" column. -Test set observations that contain categories not in `levels(factor(x_input))`will all be mapped to this column. - -## Usage - -```r -oneHotInitializeAndEncode(x_input) -``` - -## Arguments - -* `x_input`: Vector of unordered categorical data (typically either strings -integers, but this function also accepts floating point data). - -## Value - -List containing a binary one-hot matrix and the unique levels of the -input variable. These unique levels are used in the BCF and BART functions. - -## Examples - -```r -x \<- c("a","c","b","c","d","a","c","a","b","d") -x_onehot \<- oneHotInitializeAndEncode(x) -``` - diff --git a/docs/r-documentation-markdown/orderedCatInitializeAndPreprocess.md b/docs/r-documentation-markdown/orderedCatInitializeAndPreprocess.md deleted file mode 100644 index ebfc71676..000000000 --- a/docs/r-documentation-markdown/orderedCatInitializeAndPreprocess.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: orderedCatInitializeAndPreprocess ---- - -# Run some simple preprocessing of ordered categorical variables, converting - -## Description - -Run some simple preprocessing of ordered categorical variables, converting -ordered levels to integers if necessary, and storing the unique levels of a -variable. - -## Usage - -```r -orderedCatInitializeAndPreprocess(x_input) -``` - -## Arguments - -* `x_input`: Vector of ordered categorical data. If the data is not already -stored as an ordered factor, it will be converted to one using the default -sort order. - -## Value - -List containing a preprocessed vector of integer-converted ordered -categorical observations and the unique level of the original ordered -categorical feature. - -## Examples - -```r -x \<- c("1. Strongly disagree", "3. Neither agree nor disagree", "2. Disagree", "4. Agree", "3. Neither agree nor disagree", "5. Strongly agree", "4. Agree") -preprocess_list \<- orderedCatInitializeAndPreprocess(x) -x_preprocessed \<- preprocess_list$x_preprocessed -``` - diff --git a/docs/r-documentation-markdown/orderedCatPreprocess.md b/docs/r-documentation-markdown/orderedCatPreprocess.md deleted file mode 100644 index 8b80af268..000000000 --- a/docs/r-documentation-markdown/orderedCatPreprocess.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: orderedCatPreprocess ---- - -# Run some simple preprocessing of ordered categorical variables, converting - -## Description - -Run some simple preprocessing of ordered categorical variables, converting -ordered levels to integers if necessary, and storing the unique levels of a -variable. - -## Usage - -```r -orderedCatPreprocess(x_input, unique_levels, var_name = NULL) -``` - -## Arguments - -* `x_input`: Vector of ordered categorical data. If the data is not already -stored as an ordered factor, it will be converted to one using the default -sort order. -* `unique_levels`: Vector of unique levels for a categorical feature. -* `var_name`: (Optional) Name of variable. - -## Value - -List containing a preprocessed vector of integer-converted ordered -categorical observations and the unique level of the original ordered -categorical feature. - -## Examples - -```r -x_levels \<- c("1. Strongly disagree", "2. Disagree", "3. Neither agree nor disagree", "4. Agree", "5. Strongly agree") -x \<- c("1. Strongly disagree", "3. Neither agree nor disagree", "2. Disagree", "4. Agree", "3. Neither agree nor disagree", "5. Strongly agree", "4. Agree") -x_processed \<- orderedCatPreprocess(x, x_levels) -``` - diff --git a/docs/r-documentation-markdown/predict.bartmodel.md b/docs/r-documentation-markdown/predict.bartmodel.md deleted file mode 100644 index 0098ddc8a..000000000 --- a/docs/r-documentation-markdown/predict.bartmodel.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: predict.bartmodel ---- - -# Predict from a sampled BART model on new data - -## Description - -Predict from a sampled BART model on new data - -## Usage - -```r -# S3 method for bartmodel -predict( - bart, - X_test, - W_test = NULL, - group_ids_test = NULL, - rfx_basis_test = NULL -) -``` - -## Arguments - -* `bart`: Object of type `bart` containing draws of a regression forest and associated sampling outputs. -* `X_test`: Covariates used to determine tree leaf predictions for each observation. Must be passed as a matrix or dataframe. -* `W_test`: (Optional) Bases used for prediction (by e.g. dot product with leaf values). Default: `NULL`. -* `group_ids_test`: (Optional) Test set group labels used for an additive random effects model. -We do not currently support (but plan to in the near future), test set evaluation for group labels -that were not in the training set. -* `rfx_basis_test`: (Optional) Test set basis for "random-slope" regression in additive random effects model. - -## Value - -List of prediction matrices. If model does not have random effects, the list has one element -- the predictions from the forest. -If the model does have random effects, the list has three elements -- forest predictions, random effects predictions, and their sum (`y_hat`). - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -y_hat_test \<- predict(bart_model, X_test) -# plot(rowMeans(y_hat_test), y_test, xlab = "predicted", ylab = "actual") -# abline(0,1,col="red",lty=3,lwd=3) -``` - diff --git a/docs/r-documentation-markdown/predict.bcf.md b/docs/r-documentation-markdown/predict.bcf.md deleted file mode 100644 index 71dbdae2b..000000000 --- a/docs/r-documentation-markdown/predict.bcf.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: predict.bcf ---- - -# Predict from a sampled BCF model on new data - -## Description - -Predict from a sampled BCF model on new data - -## Usage - -```r -# S3 method for bcf -predict( - bcf, - X_test, - Z_test, - pi_test = NULL, - group_ids_test = NULL, - rfx_basis_test = NULL -) -``` - -## Arguments - -* `bcf`: Object of type `bcf` containing draws of a Bayesian causal forest model and associated sampling outputs. -* `X_test`: Covariates used to determine tree leaf predictions for each observation. Must be passed as a matrix or dataframe. -* `Z_test`: Treatments used for prediction. -* `pi_test`: (Optional) Propensities used for prediction. -* `group_ids_test`: (Optional) Test set group labels used for an additive random effects model. -We do not currently support (but plan to in the near future), test set evaluation for group labels -that were not in the training set. -* `rfx_basis_test`: (Optional) Test set basis for "random-slope" regression in additive random effects model. - -## Value - -List of 3-5 `nrow(X_test)` by `bcf$num_samples` matrices: prognostic function estimates, treatment effect estimates, (optionally) random effects predictions, (optionally) variance forest predictions, and outcome predictions. - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 4 -y \<- E_XZ + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, pi_train = pi_train) -preds \<- predict(bcf_model, X_test, Z_test, pi_test) -# plot(rowMeans(preds$mu_hat), mu_test, xlab = "predicted", ylab = "actual", main = "Prognostic function") -# abline(0,1,col="red",lty=3,lwd=3) -# plot(rowMeans(preds$tau_hat), tau_test, xlab = "predicted", ylab = "actual", main = "Treatment effect") -# abline(0,1,col="red",lty=3,lwd=3) -``` - diff --git a/docs/r-documentation-markdown/preprocessBartParams.md b/docs/r-documentation-markdown/preprocessBartParams.md deleted file mode 100644 index 6e39dbead..000000000 --- a/docs/r-documentation-markdown/preprocessBartParams.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: preprocessBartParams ---- - -# Preprocess BART parameter list. Override defaults with any provided parameters. - -## Description - -Preprocess BART parameter list. Override defaults with any provided parameters. - -## Usage - -```r -preprocessBartParams(params) -``` - -## Arguments - -* `params`: Parameter list - -## Value - -Parameter list with defaults overriden by values supplied in `params` - diff --git a/docs/r-documentation-markdown/preprocessBcfParams.md b/docs/r-documentation-markdown/preprocessBcfParams.md deleted file mode 100644 index 38f13323e..000000000 --- a/docs/r-documentation-markdown/preprocessBcfParams.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: preprocessBcfParams ---- - -# Preprocess BCF parameter list. Override defaults with any provided parameters. - -## Description - -Preprocess BCF parameter list. Override defaults with any provided parameters. - -## Usage - -```r -preprocessBcfParams(params) -``` - -## Arguments - -* `params`: Parameter list - -## Value - -Parameter list with defaults overriden by values supplied in `params` - diff --git a/docs/r-documentation-markdown/preprocessPredictionData.md b/docs/r-documentation-markdown/preprocessPredictionData.md deleted file mode 100644 index ce238a3f8..000000000 --- a/docs/r-documentation-markdown/preprocessPredictionData.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: preprocessPredictionData ---- - -# Preprocess covariates. DataFrames will be preprocessed based on their column - -## Description - -Preprocess covariates. DataFrames will be preprocessed based on their column -types. Matrices will be passed through assuming all columns are numeric. - -## Usage - -```r -preprocessPredictionData(input_data, metadata) -``` - -## Arguments - -* `input_data`: Covariates, provided as either a dataframe or a matrix -* `metadata`: List containing information on variables, including train set -categories for categorical variables - -## Value - -Preprocessed data with categorical variables appropriately handled - -## Examples - -```r -cov_df \<- data.frame(x1 = 1:5, x2 = 5:1, x3 = 6:10) -metadata \<- list(num_ordered_cat_vars = 0, num_unordered_cat_vars = 0, -```r - num_numeric_vars = 3, numeric_vars = c("x1", "x2", "x3")) -``` -X_preprocessed \<- preprocessPredictionData(cov_df, metadata) -``` - diff --git a/docs/r-documentation-markdown/preprocessPredictionDataFrame.md b/docs/r-documentation-markdown/preprocessPredictionDataFrame.md deleted file mode 100644 index e169b2a38..000000000 --- a/docs/r-documentation-markdown/preprocessPredictionDataFrame.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: preprocessPredictionDataFrame ---- - -# Preprocess a dataframe of covariate values, converting categorical variables - -## Description - -Preprocess a dataframe of covariate values, converting categorical variables -to integers and one-hot encoding if need be. - -## Usage - -```r -preprocessPredictionDataFrame(input_df, metadata) -``` - -## Arguments - -* `input_df`: Dataframe of covariates. Users must pre-process any -categorical variables as factors (ordered for ordered categorical). -* `metadata`: List containing information on variables, including train set -categories for categorical variables - -## Value - -Preprocessed data with categorical variables appropriately preprocessed - -## Examples - -```r -cov_df \<- data.frame(x1 = 1:5, x2 = 5:1, x3 = 6:10) -metadata \<- list(num_ordered_cat_vars = 0, num_unordered_cat_vars = 0, -```r - num_numeric_vars = 3, numeric_vars = c("x1", "x2", "x3")) -``` -X_preprocessed \<- preprocessPredictionDataFrame(cov_df, metadata) -``` - diff --git a/docs/r-documentation-markdown/preprocessPredictionMatrix.md b/docs/r-documentation-markdown/preprocessPredictionMatrix.md deleted file mode 100644 index 92cfbf550..000000000 --- a/docs/r-documentation-markdown/preprocessPredictionMatrix.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: preprocessPredictionMatrix ---- - -# Preprocess a matrix of covariate values, assuming all columns are numeric. - -## Description - -Preprocess a matrix of covariate values, assuming all columns are numeric. - -## Usage - -```r -preprocessPredictionMatrix(input_matrix, metadata) -``` - -## Arguments - -* `input_matrix`: Covariate matrix. -* `metadata`: List containing information on variables, including train set -categories for categorical variables - -## Value - -Preprocessed data with categorical variables appropriately preprocessed - -## Examples - -```r -cov_mat \<- matrix(c(1:5, 5:1, 6:10), ncol = 3) -metadata \<- list(num_ordered_cat_vars = 0, num_unordered_cat_vars = 0, -```r - num_numeric_vars = 3, numeric_vars = c("x1", "x2", "x3")) -``` -X_preprocessed \<- preprocessPredictionMatrix(cov_mat, metadata) -``` - diff --git a/docs/r-documentation-markdown/preprocessTrainData.md b/docs/r-documentation-markdown/preprocessTrainData.md deleted file mode 100644 index 73412d516..000000000 --- a/docs/r-documentation-markdown/preprocessTrainData.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: preprocessTrainData ---- - -# Preprocess covariates. DataFrames will be preprocessed based on their column - -## Description - -Preprocess covariates. DataFrames will be preprocessed based on their column -types. Matrices will be passed through assuming all columns are numeric. - -## Usage - -```r -preprocessTrainData(input_data) -``` - -## Arguments - -* `input_data`: Covariates, provided as either a dataframe or a matrix -* `variable_weights`: Numeric weights reflecting the relative probability of splitting on each variable - -## Value - -List with preprocessed (unmodified) data and details on the number of each type -of variable, unique categories associated with categorical variables, and the -vector of feature types needed for calls to BART and BCF. - -## Examples - -```r -cov_mat \<- matrix(1:12, ncol = 3) -preprocess_list \<- preprocessTrainData(cov_mat) -X \<- preprocess_list$X -``` - diff --git a/docs/r-documentation-markdown/preprocessTrainDataFrame.md b/docs/r-documentation-markdown/preprocessTrainDataFrame.md deleted file mode 100644 index b6dd0d078..000000000 --- a/docs/r-documentation-markdown/preprocessTrainDataFrame.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: preprocessTrainDataFrame ---- - -# Preprocess a dataframe of covariate values, converting categorical variables - -## Description - -Preprocess a dataframe of covariate values, converting categorical variables -to integers and one-hot encoding if need be. Returns a list including a -matrix of preprocessed covariate values and associated tracking. - -## Usage - -```r -preprocessTrainDataFrame(input_df) -``` - -## Arguments - -* `input_df`: Dataframe of covariates. Users must pre-process any -categorical variables as factors (ordered for ordered categorical). - -## Value - -List with preprocessed data and details on the number of each type -of variable, unique categories associated with categorical variables, and the -vector of feature types needed for calls to BART and BCF. - -## Examples - -```r -cov_df \<- data.frame(x1 = 1:5, x2 = 5:1, x3 = 6:10) -preprocess_list \<- preprocessTrainDataFrame(cov_df) -X \<- preprocess_list$X -``` - diff --git a/docs/r-documentation-markdown/preprocessTrainMatrix.md b/docs/r-documentation-markdown/preprocessTrainMatrix.md deleted file mode 100644 index a9a9ffcbd..000000000 --- a/docs/r-documentation-markdown/preprocessTrainMatrix.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: preprocessTrainMatrix ---- - -# Preprocess a matrix of covariate values, assuming all columns are numeric. - -## Description - -Preprocess a matrix of covariate values, assuming all columns are numeric. -Returns a list including a matrix of preprocessed covariate values and associated tracking. - -## Usage - -```r -preprocessTrainMatrix(input_matrix) -``` - -## Arguments - -* `input_matrix`: Covariate matrix. - -## Value - -List with preprocessed (unmodified) data and details on the number of each type -of variable, unique categories associated with categorical variables, and the -vector of feature types needed for calls to BART and BCF. - -## Examples - -```r -cov_mat \<- matrix(1:12, ncol = 3) -preprocess_list \<- preprocessTrainMatrix(cov_mat) -X \<- preprocess_list$X -``` - diff --git a/docs/r-documentation-markdown/sample_sigma2_one_iteration.md b/docs/r-documentation-markdown/sample_sigma2_one_iteration.md deleted file mode 100644 index 2e7cba72a..000000000 --- a/docs/r-documentation-markdown/sample_sigma2_one_iteration.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: sample_sigma2_one_iteration ---- - -# Sample one iteration of the (inverse gamma) global variance model - -## Description - -Sample one iteration of the (inverse gamma) global variance model - -## Usage - -```r -sample_sigma2_one_iteration(residual, dataset, rng, a, b) -``` - -## Arguments - -* `residual`: Outcome class -* `dataset`: ForestDataset class -* `rng`: C++ random number generator -* `a`: Global variance shape parameter -* `b`: Global variance scale parameter - diff --git a/docs/r-documentation-markdown/sample_tau_one_iteration.md b/docs/r-documentation-markdown/sample_tau_one_iteration.md deleted file mode 100644 index 6fa293b5e..000000000 --- a/docs/r-documentation-markdown/sample_tau_one_iteration.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: sample_tau_one_iteration ---- - -# Sample one iteration of the leaf parameter variance model (only for univariate basis and constant leaf!) - -## Description - -Sample one iteration of the leaf parameter variance model (only for univariate basis and constant leaf!) - -## Usage - -```r -sample_tau_one_iteration(forest_samples, rng, a, b, sample_num) -``` - -## Arguments - -* `forest_samples`: Container of forest samples -* `rng`: C++ random number generator -* `a`: Leaf variance shape parameter -* `b`: Leaf variance scale parameter -* `sample_num`: Sample index - diff --git a/docs/r-documentation-markdown/saveBARTModelToJsonFile.md b/docs/r-documentation-markdown/saveBARTModelToJsonFile.md deleted file mode 100644 index a27479d7d..000000000 --- a/docs/r-documentation-markdown/saveBARTModelToJsonFile.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: saveBARTModelToJsonFile ---- - -# Convert the persistent aspects of a BART model to (in-memory) JSON and save to a file - -## Description - -Convert the persistent aspects of a BART model to (in-memory) JSON and save to a file - -## Usage - -```r -saveBARTModelToJsonFile(object, filename) -``` - -## Arguments - -* `object`: Object of type `bartmodel` containing draws of a BART model and associated sampling outputs. -* `filename`: String of filepath, must end in ".json" - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# saveBARTModelToJsonFile(bart_model, "test.json") -``` - diff --git a/docs/r-documentation-markdown/saveBARTModelToJsonString.md b/docs/r-documentation-markdown/saveBARTModelToJsonString.md deleted file mode 100644 index a1f34c7aa..000000000 --- a/docs/r-documentation-markdown/saveBARTModelToJsonString.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: saveBARTModelToJsonString ---- - -# Convert the persistent aspects of a BART model to (in-memory) JSON string - -## Description - -Convert the persistent aspects of a BART model to (in-memory) JSON string - -## Usage - -```r -saveBARTModelToJsonString(object) -``` - -## Arguments - -* `object`: Object of type `bartmodel` containing draws of a BART model and associated sampling outputs. - -## Value - -JSON string - -## Examples - -```r -n \<- 100 -p \<- 5 -X \<- matrix(runif(n*p), ncol = p) -f_XW \<- ( -```r -((0 \<= X[,1]) & (0.25 \> X[,1])) * (-7.5) + -((0.25 \<= X[,1]) & (0.5 \> X[,1])) * (-2.5) + -((0.5 \<= X[,1]) & (0.75 \> X[,1])) * (2.5) + -((0.75 \<= X[,1]) & (1 \> X[,1])) * (7.5) -``` -) -noise_sd \<- 1 -y \<- f_XW + rnorm(n, 0, noise_sd) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -bart_model \<- bart(X_train = X_train, y_train = y_train) -# saveBARTModelToJsonString(bart_model) -``` - diff --git a/docs/r-documentation-markdown/saveBCFModelToJsonFile.md b/docs/r-documentation-markdown/saveBCFModelToJsonFile.md deleted file mode 100644 index b92130b2b..000000000 --- a/docs/r-documentation-markdown/saveBCFModelToJsonFile.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: saveBCFModelToJsonFile ---- - -# Convert the persistent aspects of a BCF model to (in-memory) JSON and save to a file - -## Description - -Convert the persistent aspects of a BCF model to (in-memory) JSON and save to a file - -## Usage - -```r -saveBCFModelToJsonFile(object, filename) -``` - -## Arguments - -* `object`: Object of type `bcf` containing draws of a Bayesian causal forest model and associated sampling outputs. -* `filename`: String of filepath, must end in ".json" - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -y \<- E_XZ + rfx_term + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, -```r - pi_train = pi_train, group_ids_train = group_ids_train, - rfx_basis_train = rfx_basis_train, X_test = X_test, - Z_test = Z_test, pi_test = pi_test, group_ids_test = group_ids_test, - rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100, - sample_sigma_leaf_mu = TRUE, sample_sigma_leaf_tau = FALSE) -``` -# saveBCFModelToJsonFile(bcf_model, "test.json") -``` - diff --git a/docs/r-documentation-markdown/saveBCFModelToJsonString.md b/docs/r-documentation-markdown/saveBCFModelToJsonString.md deleted file mode 100644 index 6b220ce6a..000000000 --- a/docs/r-documentation-markdown/saveBCFModelToJsonString.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -title: saveBCFModelToJsonString ---- - -# Convert the persistent aspects of a BCF model to (in-memory) JSON string - -## Description - -Convert the persistent aspects of a BCF model to (in-memory) JSON string - -## Usage - -```r -saveBCFModelToJsonString(object) -``` - -## Arguments - -* `object`: Object of type `bcf` containing draws of a Bayesian causal forest model and associated sampling outputs. - -## Value - -JSON string - -## Examples - -```r -n \<- 500 -x1 \<- rnorm(n) -x2 \<- rnorm(n) -x3 \<- rnorm(n) -x4 \<- as.numeric(rbinom(n,1,0.5)) -x5 \<- as.numeric(sample(1:3,n,replace=TRUE)) -X \<- cbind(x1,x2,x3,x4,x5) -p \<- ncol(X) -g \<- function(x) \{ifelse(x[,5]==1,2,ifelse(x[,5]==2,-1,4))\} -mu1 \<- function(x) \{1+g(x)+x[,1]*x[,3]\} -mu2 \<- function(x) \{1+g(x)+6*abs(x[,3]-1)\} -tau1 \<- function(x) \{rep(3,nrow(x))\} -tau2 \<- function(x) \{1+2*x[,2]*x[,4]\} -mu_x \<- mu1(X) -tau_x \<- tau2(X) -pi_x \<- 0.8*pnorm((3*mu_x/sd(mu_x)) - 0.5*X[,1]) + 0.05 + runif(n)/10 -Z \<- rbinom(n,1,pi_x) -E_XZ \<- mu_x + Z*tau_x -snr \<- 3 -group_ids \<- rep(c(1,2), n %/% 2) -rfx_coefs \<- matrix(c(-1, -1, 1, 1), nrow=2, byrow=TRUE) -rfx_basis \<- cbind(1, runif(n, -1, 1)) -rfx_term \<- rowSums(rfx_coefs[group_ids,] * rfx_basis) -y \<- E_XZ + rfx_term + rnorm(n, 0, 1)*(sd(E_XZ)/snr) -X \<- as.data.frame(X) -X$x4 \<- factor(X$x4, ordered = TRUE) -X$x5 \<- factor(X$x5, ordered = TRUE) -test_set_pct \<- 0.2 -n_test \<- round(test_set_pct*n) -n_train \<- n - n_test -test_inds \<- sort(sample(1:n, n_test, replace = FALSE)) -train_inds \<- (1:n)[!((1:n) %in% test_inds)] -X_test \<- X[test_inds,] -X_train \<- X[train_inds,] -pi_test \<- pi_x[test_inds] -pi_train \<- pi_x[train_inds] -Z_test \<- Z[test_inds] -Z_train \<- Z[train_inds] -y_test \<- y[test_inds] -y_train \<- y[train_inds] -mu_test \<- mu_x[test_inds] -mu_train \<- mu_x[train_inds] -tau_test \<- tau_x[test_inds] -tau_train \<- tau_x[train_inds] -group_ids_test \<- group_ids[test_inds] -group_ids_train \<- group_ids[train_inds] -rfx_basis_test \<- rfx_basis[test_inds,] -rfx_basis_train \<- rfx_basis[train_inds,] -rfx_term_test \<- rfx_term[test_inds] -rfx_term_train \<- rfx_term[train_inds] -bcf_model \<- bcf(X_train = X_train, Z_train = Z_train, y_train = y_train, -```r - pi_train = pi_train, group_ids_train = group_ids_train, - rfx_basis_train = rfx_basis_train, X_test = X_test, - Z_test = Z_test, pi_test = pi_test, group_ids_test = group_ids_test, - rfx_basis_test = rfx_basis_test, - num_gfr = 100, num_burnin = 0, num_mcmc = 100, - sample_sigma_leaf_mu = TRUE, sample_sigma_leaf_tau = FALSE) -``` -# saveBCFModelToJsonString(bcf_model) -``` - diff --git a/docs/r-documentation-markdown/stochtree-package.md b/docs/r-documentation-markdown/stochtree-package.md deleted file mode 100644 index e7b867ccf..000000000 --- a/docs/r-documentation-markdown/stochtree-package.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: stochtree-package ---- - -# stochtree: Stochastic tree ensembles (XBART and BART) for supervised learning and causal inference - -## Description - -Stochastic tree ensembles (XBART and BART) for supervised learning and causal inference. - -## Seealso - -Useful links: - -* [https://stochastictree.github.io/stochtree-r/](https://stochastictree.github.io/stochtree-r/) - -## Author - -***Maintainer***: Drew Herren [drewherrenopensource@gmail.com](mailto:drewherrenopensource@gmail.com) ([ORCID](https://orcid.org/0000-0003-4109-6611)) -Authors: - -* Richard Hahn -* Jared Murray -* Carlos Carvalho -* Jingyu He - diff --git a/docs/r-installation.md b/docs/r-installation.md deleted file mode 100644 index 60bda6112..000000000 --- a/docs/r-installation.md +++ /dev/null @@ -1,7 +0,0 @@ -# StochTree R Package - -The package can be installed in R via - -``` -remotes::install_github("StochasticTree/stochtree", ref="r-dev") -``` diff --git a/docs/tutorial-basics/_category_.json b/docs/tutorial-basics/_category_.json deleted file mode 100644 index 2e6db55b1..000000000 --- a/docs/tutorial-basics/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "Tutorial - Basics", - "position": 2, - "link": { - "type": "generated-index", - "description": "5 minutes to learn the most important Docusaurus concepts." - } -} diff --git a/docs/tutorial-basics/congratulations.md b/docs/tutorial-basics/congratulations.md deleted file mode 100644 index 04771a00b..000000000 --- a/docs/tutorial-basics/congratulations.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -sidebar_position: 6 ---- - -# Congratulations! - -You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. - -Docusaurus has **much more to offer**! - -Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. - -Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) - -## What's next? - -- Read the [official documentation](https://docusaurus.io/) -- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) -- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) -- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) -- Add a [search bar](https://docusaurus.io/docs/search) -- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) -- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/docs/tutorial-basics/create-a-blog-post.md b/docs/tutorial-basics/create-a-blog-post.md deleted file mode 100644 index 550ae17ee..000000000 --- a/docs/tutorial-basics/create-a-blog-post.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -sidebar_position: 3 ---- - -# Create a Blog Post - -Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... - -## Create your first Post - -Create a file at `blog/2021-02-28-greetings.md`: - -```md title="blog/2021-02-28-greetings.md" ---- -slug: greetings -title: Greetings! -authors: - - name: Joel Marcey - title: Co-creator of Docusaurus 1 - url: https://github.com/JoelMarcey - image_url: https://github.com/JoelMarcey.png - - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png -tags: [greetings] ---- - -Congratulations, you have made your first post! - -Feel free to play around and edit this post as much as you like. -``` - -A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/docs/tutorial-basics/create-a-document.md b/docs/tutorial-basics/create-a-document.md deleted file mode 100644 index c22fe2944..000000000 --- a/docs/tutorial-basics/create-a-document.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Create a Document - -Documents are **groups of pages** connected through: - -- a **sidebar** -- **previous/next navigation** -- **versioning** - -## Create your first Doc - -Create a Markdown file at `docs/hello.md`: - -```md title="docs/hello.md" -# Hello - -This is my **first Docusaurus document**! -``` - -A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). - -## Configure the Sidebar - -Docusaurus automatically **creates a sidebar** from the `docs` folder. - -Add metadata to customize the sidebar label and position: - -```md title="docs/hello.md" {1-4} ---- -sidebar_label: 'Hi!' -sidebar_position: 3 ---- - -# Hello - -This is my **first Docusaurus document**! -``` - -It is also possible to create your sidebar explicitly in `sidebars.js`: - -```js title="sidebars.js" -export default { - tutorialSidebar: [ - 'intro', - // highlight-next-line - 'hello', - { - type: 'category', - label: 'Tutorial', - items: ['tutorial-basics/create-a-document'], - }, - ], -}; -``` diff --git a/docs/tutorial-basics/create-a-page.md b/docs/tutorial-basics/create-a-page.md deleted file mode 100644 index 20e2ac300..000000000 --- a/docs/tutorial-basics/create-a-page.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Create a Page - -Add **Markdown or React** files to `src/pages` to create a **standalone page**: - -- `src/pages/index.js` → `localhost:3000/` -- `src/pages/foo.md` → `localhost:3000/foo` -- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` - -## Create your first React Page - -Create a file at `src/pages/my-react-page.js`: - -```jsx title="src/pages/my-react-page.js" -import React from 'react'; -import Layout from '@theme/Layout'; - -export default function MyReactPage() { - return ( - -

My React page

-

This is a React page

-
- ); -} -``` - -A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). - -## Create your first Markdown Page - -Create a file at `src/pages/my-markdown-page.md`: - -```mdx title="src/pages/my-markdown-page.md" -# My Markdown page - -This is a Markdown page -``` - -A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/docs/tutorial-basics/deploy-your-site.md b/docs/tutorial-basics/deploy-your-site.md deleted file mode 100644 index 1c50ee063..000000000 --- a/docs/tutorial-basics/deploy-your-site.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -sidebar_position: 5 ---- - -# Deploy your site - -Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). - -It builds your site as simple **static HTML, JavaScript and CSS files**. - -## Build your site - -Build your site **for production**: - -```bash -npm run build -``` - -The static files are generated in the `build` folder. - -## Deploy your site - -Test your production build locally: - -```bash -npm run serve -``` - -The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). - -You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/docs/tutorial-basics/markdown-features.mdx b/docs/tutorial-basics/markdown-features.mdx deleted file mode 100644 index 35e00825e..000000000 --- a/docs/tutorial-basics/markdown-features.mdx +++ /dev/null @@ -1,152 +0,0 @@ ---- -sidebar_position: 4 ---- - -# Markdown Features - -Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. - -## Front Matter - -Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): - -```text title="my-doc.md" -// highlight-start ---- -id: my-doc-id -title: My document title -description: My document description -slug: /my-custom-url ---- -// highlight-end - -## Markdown heading - -Markdown text with [links](./hello.md) -``` - -## Links - -Regular Markdown links are supported, using url paths or relative file paths. - -```md -Let's see how to [Create a page](/create-a-page). -``` - -```md -Let's see how to [Create a page](./create-a-page.md). -``` - -**Result:** Let's see how to [Create a page](./create-a-page.md). - -## Images - -Regular Markdown images are supported. - -You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): - -```md -![Docusaurus logo](/img/docusaurus.png) -``` - -![Docusaurus logo](/img/docusaurus.png) - -You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them: - -```md -![Docusaurus logo](./img/docusaurus.png) -``` - -## Code Blocks - -Markdown code blocks are supported with Syntax highlighting. - -````md -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` -```` - -```jsx title="src/components/HelloDocusaurus.js" -function HelloDocusaurus() { - return

Hello, Docusaurus!

; -} -``` - -## Admonitions - -Docusaurus has a special syntax to create admonitions and callouts: - -```md -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: -``` - -:::tip My tip - -Use this awesome feature option - -::: - -:::danger Take care - -This action is dangerous - -::: - -## MDX and React Components - -[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: - -```jsx -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`) - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! -``` - -export const Highlight = ({children, color}) => ( - { - alert(`You clicked the color ${color} with label ${children}`); - }}> - {children} - -); - -This is Docusaurus green ! - -This is Facebook blue ! diff --git a/docs/tutorial-extras/_category_.json b/docs/tutorial-extras/_category_.json deleted file mode 100644 index a8ffcc193..000000000 --- a/docs/tutorial-extras/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "label": "Tutorial - Extras", - "position": 3, - "link": { - "type": "generated-index" - } -} diff --git a/docs/tutorial-extras/img/docsVersionDropdown.png b/docs/tutorial-extras/img/docsVersionDropdown.png deleted file mode 100644 index 97e4164618b5f8beda34cfa699720aba0ad2e342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25427 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 diff --git a/docs/tutorial-extras/img/localeDropdown.png b/docs/tutorial-extras/img/localeDropdown.png deleted file mode 100644 index e257edc1f932985396bf59584c7ccfaddf955779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27841 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 JrC|B>e*nH7H{}2T diff --git a/docs/tutorial-extras/manage-docs-versions.md b/docs/tutorial-extras/manage-docs-versions.md deleted file mode 100644 index ccda0b907..000000000 --- a/docs/tutorial-extras/manage-docs-versions.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -sidebar_position: 1 ---- - -# Manage Docs Versions - -Docusaurus can manage multiple versions of your docs. - -## Create a docs version - -Release a version 1.0 of your project: - -```bash -npm run docusaurus docs:version 1.0 -``` - -The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. - -Your docs now have 2 versions: - -- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs -- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** - -## Add a Version Dropdown - -To navigate seamlessly across versions, add a version dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -export default { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'docsVersionDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The docs version dropdown appears in your navbar: - -![Docs Version Dropdown](./img/docsVersionDropdown.png) - -## Update an existing version - -It is possible to edit versioned docs in their respective folder: - -- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` -- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/docs/tutorial-extras/translate-your-site.md b/docs/tutorial-extras/translate-your-site.md deleted file mode 100644 index b5a644abd..000000000 --- a/docs/tutorial-extras/translate-your-site.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -sidebar_position: 2 ---- - -# Translate your site - -Let's translate `docs/intro.md` to French. - -## Configure i18n - -Modify `docusaurus.config.js` to add support for the `fr` locale: - -```js title="docusaurus.config.js" -export default { - i18n: { - defaultLocale: 'en', - locales: ['en', 'fr'], - }, -}; -``` - -## Translate a doc - -Copy the `docs/intro.md` file to the `i18n/fr` folder: - -```bash -mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ - -cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md -``` - -Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. - -## Start your localized site - -Start your site on the French locale: - -```bash -npm run start -- --locale fr -``` - -Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. - -:::caution - -In development, you can only use one locale at a time. - -::: - -## Add a Locale Dropdown - -To navigate seamlessly across languages, add a locale dropdown. - -Modify the `docusaurus.config.js` file: - -```js title="docusaurus.config.js" -export default { - themeConfig: { - navbar: { - items: [ - // highlight-start - { - type: 'localeDropdown', - }, - // highlight-end - ], - }, - }, -}; -``` - -The locale dropdown now appears in your navbar: - -![Locale Dropdown](./img/localeDropdown.png) - -## Build your localized site - -Build your site for a specific locale: - -```bash -npm run build -- --locale fr -``` - -Or build your site to include all the locales at once: - -```bash -npm run build -``` diff --git a/docusaurus.config.ts b/docusaurus.config.ts deleted file mode 100644 index f437a657a..000000000 --- a/docusaurus.config.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { themes as prismThemes } from 'prism-react-renderer'; -import type { Config } from '@docusaurus/types'; -import type * as Preset from '@docusaurus/preset-classic'; - -const config: Config = { - title: 'Leverage the Power of Stochastic Tree Ensembles', - tagline: - 'Go bare metal with StochTree or use the Arborist app to get started in minutes.', - favicon: 'img/favicon.ico', - - url: 'https://stochtree.ai', - baseUrl: '/', - - // GitHub pages deployment config. - organizationName: 'StochasticTree', - projectName: 'documentation', - - onBrokenLinks: 'ignore', - onBrokenMarkdownLinks: 'warn', - - // Even if you don't use internationalization, you can use this field to set - // useful metadata like html lang. For example, if your site is Chinese, you - // may want to replace "en" with "zh-Hans". - i18n: { - defaultLocale: 'en', - locales: ['en'], - }, - - presets: [ - [ - 'classic', - { - docs: { - sidebarPath: './sidebars.ts', - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', - }, - blog: { - showReadingTime: true, - feedOptions: { - type: ['rss', 'atom'], - xslt: true, - }, - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', - // Useful options to enforce blogging best practices - onInlineTags: 'warn', - onInlineAuthors: 'warn', - onUntruncatedBlogPosts: 'warn', - }, - theme: { - customCss: './src/css/custom.css', - }, - } satisfies Preset.Options, - ], - ], - - themeConfig: { - // Replace with your project's social card - image: 'img/docusaurus-social-card.jpg', - navbar: { - title: 'Home', - logo: { - alt: 'My Site Logo', - src: 'img/logo.svg', - }, - items: [ - { - type: 'docSidebar', - sidebarId: 'tutorialSidebar', - position: 'left', - label: 'Getting Started', - }, - { - href: 'pathname:///R_docs/index.html', - label: 'R Package Docs', - position: 'left', - }, - { - href: 'pathname:///python_docs/html/index.html', - label: 'Python Package Docs', - position: 'left', - }, - { to: '/roadmap', label: 'Roadmap', position: 'left' }, - { to: '/blog', label: 'Blog', position: 'left' }, - { to: '/team', label: 'Team', position: 'left' }, - { - href: 'https://github.com/StochasticTree', - label: 'GitHub', - position: 'right', - }, - ], - }, - footer: { - style: 'dark', - links: [ - { - title: 'GitHub Repos', - items: [ - { - label: 'StochTree', - href: 'https://github.com/StochasticTree/stochtree', - }, - ], - }, - { - title: 'More', - items: [ - { - label: 'Blog', - to: '/blog', - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Andrew Herren, Carlos Carvalho, Richard Hahn, Jared Murray, and Nicholas Warren.`, - }, - colorMode: { - defaultMode: 'light', - disableSwitch: false, - respectPrefersColorScheme: true, - }, - prism: { - theme: prismThemes.nightOwlLight, - darkTheme: prismThemes.nightOwl, - }, - } satisfies Preset.ThemeConfig, -}; - -export default config; diff --git a/package.json b/package.json deleted file mode 100644 index c16ec8591..000000000 --- a/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "documentation", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus build && gh-pages -d build", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc" - }, - "dependencies": { - "@docusaurus/core": "^3.6.3", - "@docusaurus/preset-classic": "^3.6.3", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "gh-pages": "^6.2.0", - "prism-react-renderer": "^2.3.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.6.3", - "@docusaurus/tsconfig": "^3.6.3", - "@docusaurus/types": "^3.6.3", - "typescript": "~5.6.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 3 chrome version", - "last 3 firefox version", - "last 5 safari version" - ] - }, - "engines": { - "node": ">=18.0" - }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" -} diff --git a/sidebars.ts b/sidebars.ts deleted file mode 100644 index faa64cb2b..000000000 --- a/sidebars.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; - -const sidebars: SidebarsConfig = { - tutorialSidebar: [ - { - type: 'category', - label: 'Installation', - items: [ - { - type: 'doc', - label: 'Python', - id: 'python-installation' - }, - { - type: 'doc', - label: 'R', - id: 'r-installation' - }, - ], - collapsed: true, - }, - ], -}; - -export default sidebars; diff --git a/sphinx_docs/Makefile b/sphinx_docs/Makefile new file mode 100644 index 000000000..d0c3cbf10 --- /dev/null +++ b/sphinx_docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/sphinx_docs/make.bat b/sphinx_docs/make.bat new file mode 100644 index 000000000..dc1312ab0 --- /dev/null +++ b/sphinx_docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/sphinx_docs/requirements.txt b/sphinx_docs/requirements.txt new file mode 100644 index 000000000..44bfd94d7 --- /dev/null +++ b/sphinx_docs/requirements.txt @@ -0,0 +1,39 @@ +alabaster==0.7.13 +Babel==2.15.0 +beautifulsoup4==4.12.3 +breathe==4.35.0 +certifi==2024.2.2 +charset-normalizer==3.3.2 +docutils==0.20.1 +furo==2024.5.6 +idna==3.7 +imagesize==1.4.1 +importlib_metadata==7.1.0 +Jinja2==3.1.4 +joblib==1.4.2 +MarkupSafe==2.1.5 +numpy==1.24.4 +packaging==24.0 +pandas==2.0.3 +pybind11==2.12.0 +Pygments==2.18.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +requests==2.32.2 +scikit-learn==1.3.2 +scipy==1.10.1 +six==1.16.0 +snowballstemmer==2.2.0 +soupsieve==2.5 +Sphinx==7.1.2 +sphinx-basic-ng==1.0.0b2 +sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.5 +threadpoolctl==3.5.0 +tzdata==2024.1 +urllib3==2.2.1 +zipp==3.18.2 diff --git a/splitMarkdown.js b/splitMarkdown.js deleted file mode 100644 index 2b3409d2d..000000000 --- a/splitMarkdown.js +++ /dev/null @@ -1,32 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -const inputFile = 'docs/cpp-documentation-markdown/combined.md'; -const outputDir = 'docs/cpp-documentation-markdown'; - -if (!fs.existsSync(inputFile)) { -console.error(`Input file ${inputFile} does not exist.`); -process.exit(1); -} - -const data = fs.readFileSync(inputFile, 'utf8'); - -// Split the file on level 1 headers (e.g., "# ClassName") -const sections = data.split(/^# /gm).filter(section => section.trim() !== ''); - -sections.forEach(section => { -// Get the title of the section -const lines = section.split('\n'); -const title = lines[0].trim(); -const content = lines.slice(1).join('\n'); - -// Sanitize the title to create a filename -const filename = title.replace(/[<>:"\/\\|?*]/g, '').replace(/\s+/g, '_') + '.md'; -const filepath = path.join(outputDir, filename); - -// Write the section to a file with front matter -const frontMatter = `---\n` + - `title: ${title}\n` + - `---\n\n`; -fs.writeFileSync(filepath, frontMatter + `# ${title}\n${content}`, 'utf8'); -}); diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx deleted file mode 100644 index 6f62fcfff..000000000 --- a/src/components/HomepageFeatures/index.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import clsx from 'clsx'; -import Heading from '@theme/Heading'; -import styles from './styles.module.css'; - -type FeatureItem = { - title: string; - Svg: React.ComponentType>; - description: JSX.Element; -}; - -const FeatureList: FeatureItem[] = [ - { - title: 'StochTree', - Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, - description: ( - <> - R and Python packages for building stochastic tree ensembles using BCF, - BART, XBART, and more. - - ), - }, - { - title: 'Arborist App', - Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, - description: ( - <> - Cross-platform app for leveraging the power of StochTree quickly for - repeatable analysis. - - ), - }, - { - title: 'Case Studies', - Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, - description: ( - <> - Learn how organizations like UT Austin are using StochTree & - Arborist to solve real-world problems. - - ), - }, -]; - -function Feature({ title, Svg, description }: FeatureItem) { - return ( -
-
- -
-
- {title} -

{description}

-
-
- ); -} - -export default function HomepageFeatures(): JSX.Element { - return ( -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
- ); -} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css deleted file mode 100644 index b248eb2e5..000000000 --- a/src/components/HomepageFeatures/styles.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/src/css/custom.css b/src/css/custom.css deleted file mode 100644 index f7dbba6d6..000000000 --- a/src/css/custom.css +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ -:root { - --ifm-color-primary: #2e8555; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #4016ca; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #25c2a0; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); -} diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 9f71a5da7..000000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,23 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx deleted file mode 100644 index 80fa05122..000000000 --- a/src/pages/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import clsx from 'clsx'; -import Link from '@docusaurus/Link'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Layout from '@theme/Layout'; -import HomepageFeatures from '@site/src/components/HomepageFeatures'; -import Heading from '@theme/Heading'; - -import styles from './index.module.css'; - -function HomepageHeader() { - const { siteConfig } = useDocusaurusContext(); - return ( -
-
- - {siteConfig.title} - -

{siteConfig.tagline}

-
- - Get Started with a Quick Tutorial - -
-
-
- ); -} - -export default function Home(): JSX.Element { - const { siteConfig } = useDocusaurusContext(); - return ( - - -
- -
-
- ); -} diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md deleted file mode 100644 index 9756c5b66..000000000 --- a/src/pages/markdown-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -You don't need React to write simple standalone pages. diff --git a/static/.nojekyll b/static/.nojekyll deleted file mode 100644 index e69de29bb..000000000 diff --git a/static/img/docusaurus-social-card.jpg b/static/img/docusaurus-social-card.jpg deleted file mode 100644 index ffcb448210e1a456cb3588ae8b396a597501f187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55746 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 fgzs%Vr*-jYG(YMS<ttdtee# diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png deleted file mode 100644 index f458149e3c8f53335f28fbc162ae67f55575c881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5142 zcma)=cTf{R(}xj7f`AaDml%oxrAm_`5IRVc-jPtHML-0kDIiip57LWD@4bW~(nB|) z34|^sbOZqj<;8ct`Tl-)=Jw`pZtiw=e$UR_Mn2b8rM$y@hlq%XQe90+?|Mf68-Ux_ zzTBiDn~3P%oVt>{f$z+YC7A)8ak`PktoIXDkpXod+*gQW4fxTWh!EyR9`L|fi4YlH z{IyM;2-~t3s~J-KF~r-Z)FWquQCfG*TQy6w*9#k2zUWV-+tCNvjrtl9(o}V>-)N!) ziZgEgV>EG+b(j@ex!dx5@@nGZim*UfFe<+e;(xL|j-Pxg(PCsTL~f^br)4{n5?OU@ z*pjt{4tG{qBcDSa3;yKlopENd6Yth=+h9)*lkjQ0NwgOOP+5Xf?SEh$x6@l@ZoHoYGc5~d2>pO43s3R|*yZw9yX^kEyUV2Zw1%J4o`X!BX>CwJ zI8rh1-NLH^x1LnaPGki_t#4PEz$ad+hO^$MZ2 ziwt&AR}7_yq-9Pfn}k3`k~dKCbOsHjvWjnLsP1{)rzE8ERxayy?~{Qz zHneZ2gWT3P|H)fmp>vA78a{0&2kk3H1j|n59y{z@$?jmk9yptqCO%* zD2!3GHNEgPX=&Ibw?oU1>RSxw3;hhbOV77-BiL%qQb1(4J|k=Y{dani#g>=Mr?Uyd z)1v~ZXO_LT-*RcG%;i|Wy)MvnBrshlQoPxoO*82pKnFSGNKWrb?$S$4x+24tUdpb= zr$c3K25wQNUku5VG@A=`$K7%?N*K+NUJ(%%)m0Vhwis*iokN#atyu(BbK?+J+=H z!kaHkFGk+qz`uVgAc600d#i}WSs|mtlkuwPvFp) z1{Z%nt|NwDEKj1(dhQ}GRvIj4W?ipD76jZI!PGjd&~AXwLK*98QMwN&+dQN1ML(6< z@+{1`=aIc z9Buqm97vy3RML|NsM@A>Nw2=sY_3Ckk|s;tdn>rf-@Ke1m!%F(9(3>V%L?w#O&>yn z(*VIm;%bgezYB;xRq4?rY})aTRm>+RL&*%2-B%m; zLtxLTBS=G!bC$q;FQ|K3{nrj1fUp`43Qs&V!b%rTVfxlDGsIt3}n4p;1%Llj5ePpI^R} zl$Jhx@E}aetLO!;q+JH@hmelqg-f}8U=XnQ+~$9RHGUDOoR*fR{io*)KtYig%OR|08ygwX%UqtW81b@z0*`csGluzh_lBP=ls#1bwW4^BTl)hd|IIfa zhg|*M%$yt@AP{JD8y!7kCtTmu{`YWw7T1}Xlr;YJTU1mOdaAMD172T8Mw#UaJa1>V zQ6CD0wy9NEwUsor-+y)yc|Vv|H^WENyoa^fWWX zwJz@xTHtfdhF5>*T70(VFGX#8DU<^Z4Gez7vn&4E<1=rdNb_pj@0?Qz?}k;I6qz@| zYdWfcA4tmI@bL5JcXuoOWp?ROVe*&o-T!><4Ie9@ypDc!^X&41u(dFc$K$;Tv$c*o zT1#8mGWI8xj|Hq+)#h5JToW#jXJ73cpG-UE^tsRf4gKw>&%Z9A>q8eFGC zG@Iv(?40^HFuC_-%@u`HLx@*ReU5KC9NZ)bkS|ZWVy|_{BOnlK)(Gc+eYiFpMX>!# zG08xle)tntYZ9b!J8|4H&jaV3oO(-iFqB=d}hGKk0 z%j)johTZhTBE|B-xdinS&8MD=XE2ktMUX8z#eaqyU?jL~PXEKv!^) zeJ~h#R{@O93#A4KC`8@k8N$T3H8EV^E2 z+FWxb6opZnX-av5ojt@`l3TvSZtYLQqjps{v;ig5fDo^}{VP=L0|uiRB@4ww$Eh!CC;75L%7|4}xN+E)3K&^qwJizphcnn=#f<&Np$`Ny%S)1*YJ`#@b_n4q zi%3iZw8(I)Dzp0yY}&?<-`CzYM5Rp+@AZg?cn00DGhf=4|dBF8BO~2`M_My>pGtJwNt4OuQm+dkEVP4 z_f*)ZaG6@t4-!}fViGNd%E|2%ylnzr#x@C!CrZSitkHQ}?_;BKAIk|uW4Zv?_npjk z*f)ztC$Cj6O<_{K=dPwO)Z{I=o9z*lp?~wmeTTP^DMP*=<-CS z2FjPA5KC!wh2A)UzD-^v95}^^tT<4DG17#wa^C^Q`@f@=jLL_c3y8@>vXDJd6~KP( zurtqU1^(rnc=f5s($#IxlkpnU=ATr0jW`)TBlF5$sEwHLR_5VPTGiO?rSW9*ND`bYN*OX&?=>!@61{Z4)@E;VI9 zvz%NmR*tl>p-`xSPx$}4YcdRc{_9k)>4Jh&*TSISYu+Y!so!0JaFENVY3l1n*Fe3_ zRyPJ(CaQ-cNP^!3u-X6j&W5|vC1KU!-*8qCcT_rQN^&yqJ{C(T*`(!A=))=n%*-zp_ewRvYQoJBS7b~ zQlpFPqZXKCXUY3RT{%UFB`I-nJcW0M>1^*+v)AxD13~5#kfSkpWys^#*hu)tcd|VW zEbVTi`dbaM&U485c)8QG#2I#E#h)4Dz8zy8CLaq^W#kXdo0LH=ALhK{m_8N@Bj=Um zTmQOO*ID(;Xm}0kk`5nCInvbW9rs0pEw>zlO`ZzIGkB7e1Afs9<0Z(uS2g*BUMhp> z?XdMh^k}k<72>}p`Gxal3y7-QX&L{&Gf6-TKsE35Pv%1 z;bJcxPO+A9rPGsUs=rX(9^vydg2q`rU~otOJ37zb{Z{|)bAS!v3PQ5?l$+LkpGNJq zzXDLcS$vMy|9sIidXq$NE6A-^v@)Gs_x_3wYxF%y*_e{B6FvN-enGst&nq0z8Hl0< z*p6ZXC*su`M{y|Fv(Vih_F|83=)A6ay-v_&ph1Fqqcro{oeu99Y0*FVvRFmbFa@gs zJ*g%Gik{Sb+_zNNf?Qy7PTf@S*dTGt#O%a9WN1KVNj`q$1Qoiwd|y&_v?}bR#>fdP zSlMy2#KzRq4%?ywXh1w;U&=gKH%L~*m-l%D4Cl?*riF2~r*}ic9_{JYMAwcczTE`!Z z^KfriRf|_YcQ4b8NKi?9N7<4;PvvQQ}*4YxemKK3U-7i}ap8{T7=7`e>PN7BG-Ej;Uti2$o=4T#VPb zm1kISgGzj*b?Q^MSiLxj26ypcLY#RmTPp+1>9zDth7O?w9)onA%xqpXoKA-`Jh8cZ zGE(7763S3qHTKNOtXAUA$H;uhGv75UuBkyyD;eZxzIn6;Ye7JpRQ{-6>)ioiXj4Mr zUzfB1KxvI{ZsNj&UA`+|)~n}96q%_xKV~rs?k=#*r*7%Xs^Hm*0~x>VhuOJh<2tcb zKbO9e-w3zbekha5!N@JhQm7;_X+J!|P?WhssrMv5fnQh$v*986uWGGtS}^szWaJ*W z6fLVt?OpPMD+-_(3x8Ra^sX~PT1t5S6bfk@Jb~f-V)jHRul#Hqu;0(+ER7Z(Z4MTR z+iG>bu+BW2SNh|RAGR2-mN5D1sTcb-rLTha*@1@>P~u;|#2N{^AC1hxMQ|(sp3gTa zDO-E8Yn@S7u=a?iZ!&&Qf2KKKk7IT`HjO`U*j1~Df9Uxz$~@otSCK;)lbLSmBuIj% zPl&YEoRwsk$8~Az>>djrdtp`PX z`Pu#IITS7lw07vx>YE<4pQ!&Z^7L?{Uox`CJnGjYLh1XN^tt#zY*0}tA*a=V)rf=&-kLgD|;t1D|ORVY}8 F{0H{b<4^zq diff --git a/static/img/favicon.ico b/static/img/favicon.ico deleted file mode 100644 index c01d54bcd39a5f853428f3cd5aa0f383d963c484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3626 zcmb`Je@s(X6vrR`EK3%b%orErlDW({vnABqA zcfaS{d+xbU5JKp0*;0YOg+;Fl!eT)XRuapIwFLL`=imZCSon$`se`_<%@MB=M~KG+ z=EW^FL`w|Bo>*ktlaS^(fut!95`iG5u=SZ8nfDHO#GaTlH1-XG^;vsjUb^gWTVz0+ z^=WR1wv9-2oeR=_;fL0H7rNWqAzGtO(D;`~cX(RcN0w2v24Y8)6t`cS^_ghs`_ho? z{0ka~1Dgo8TfAP$r*ua?>$_V+kZ!-(TvEJ7O2f;Y#tezt$&R4 zLI}=-y@Z!grf*h3>}DUL{km4R>ya_I5Ag#{h_&?+HpKS!;$x3LC#CqUQ8&nM?X))Q zXAy2?`YL4FbC5CgJu(M&Q|>1st8XXLZ|5MgwgjP$m_2Vt0(J z&Gu7bOlkbGzGm2sh?X`){7w69Y$1#@P@7DF{ZE=4%T0NDS)iH`tiPSKpDNW)zmtn( zw;4$f>k)4$LBc>eBAaTZeCM2(iD+sHlj!qd z2GjRJ>f_Qes(+mnzdA^NH?^NB(^o-%Gmg$c8MNMq&`vm@9Ut;*&$xSD)PKH{wBCEC z4P9%NQ;n2s59ffMn8*5)5AAg4-93gBXBDX`A7S& zH-|%S3Wd%T79fk-e&l`{!?lve8_epXhE{d3Hn$Cg!t=-4D(t$cK~7f&4s?t7wr3ZP z*!SRQ-+tr|e1|hbc__J`k3S!rMy<0PHy&R`v#aJv?`Y?2{avK5sQz%=Us()jcNuZV z*$>auD4cEw>;t`+m>h?f?%VFJZj8D|Y1e_SjxG%J4{-AkFtT2+ZZS5UScS~%;dp!V>)7zi`w(xwSd*FS;Lml=f6hn#jq)2is4nkp+aTrV?)F6N z>DY#SU0IZ;*?Hu%tSj4edd~kYNHMFvS&5}#3-M;mBCOCZL3&;2obdG?qZ>rD|zC|Lu|sny76pn2xl|6sk~Hs{X9{8iBW zwiwgQt+@hi`FYMEhX2 \ No newline at end of file diff --git a/static/img/undraw_docusaurus_mountain.svg b/static/img/undraw_docusaurus_mountain.svg deleted file mode 100644 index af961c49a..000000000 --- a/static/img/undraw_docusaurus_mountain.svg +++ /dev/null @@ -1,171 +0,0 @@ - - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index 94b5cf08f..000000000 --- a/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,170 +0,0 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index d9161d339..000000000 --- a/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1,40 +0,0 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 314eab8a4..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // This file is not used in compilation. It is here just for a nice editor experience. - "extends": "@docusaurus/tsconfig", - "compilerOptions": { - "baseUrl": "." - } -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index d8f67aad6..000000000 --- a/yarn.lock +++ /dev/null @@ -1,9179 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@algolia/autocomplete-core@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz#2c410baa94a47c5c5f56ed712bb4a00ebe24088b" - integrity sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q== - dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.17.7" - "@algolia/autocomplete-shared" "1.17.7" - -"@algolia/autocomplete-plugin-algolia-insights@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz#7d2b105f84e7dd8f0370aa4c4ab3b704e6760d82" - integrity sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A== - dependencies: - "@algolia/autocomplete-shared" "1.17.7" - -"@algolia/autocomplete-preset-algolia@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz#c9badc0d73d62db5bf565d839d94ec0034680ae9" - integrity sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA== - dependencies: - "@algolia/autocomplete-shared" "1.17.7" - -"@algolia/autocomplete-shared@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz#105e84ad9d1a31d3fb86ba20dc890eefe1a313a0" - integrity sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg== - -"@algolia/cache-browser-local-storage@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz#97bc6d067a9fd932b9c922faa6b7fd6e546e1348" - integrity sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww== - dependencies: - "@algolia/cache-common" "4.24.0" - -"@algolia/cache-common@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.24.0.tgz#81a8d3a82ceb75302abb9b150a52eba9960c9744" - integrity sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g== - -"@algolia/cache-in-memory@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz#ffcf8872f3a10cb85c4f4641bdffd307933a6e44" - integrity sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w== - dependencies: - "@algolia/cache-common" "4.24.0" - -"@algolia/client-abtesting@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.16.0.tgz#806d2da147c7bffab23ea2498e602a73432a8490" - integrity sha512-fqQ2Szc6zxqXyQF8Vr64QMVoqFHHDsR5gEr/Eki+q+lgERvGr3YXruiB7Xs8rDTXP6+NC3tM2sZjdaEXW/P+6Q== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/client-account@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.24.0.tgz#eba7a921d828e7c8c40a32d4add21206c7fe12f1" - integrity sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA== - dependencies: - "@algolia/client-common" "4.24.0" - "@algolia/client-search" "4.24.0" - "@algolia/transporter" "4.24.0" - -"@algolia/client-analytics@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.24.0.tgz#9d2576c46a9093a14e668833c505ea697a1a3e30" - integrity sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg== - dependencies: - "@algolia/client-common" "4.24.0" - "@algolia/client-search" "4.24.0" - "@algolia/requester-common" "4.24.0" - "@algolia/transporter" "4.24.0" - -"@algolia/client-analytics@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.16.0.tgz#a923f43059b674239e6125f9a917cd25104e79dd" - integrity sha512-8HqIoGUwjc/XqjA+AjpRvtB40QzQ067qHuJujkR0k6WBLEM3OiB30FOfLZLabxnPIZgU55zmQ8exe+0WpgyKqA== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/client-common@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.24.0.tgz#77c46eee42b9444a1d1c1583a83f7df4398a649d" - integrity sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA== - dependencies: - "@algolia/requester-common" "4.24.0" - "@algolia/transporter" "4.24.0" - -"@algolia/client-common@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.16.0.tgz#4e53548c6a83fa6c6d1856053347506c426aabae" - integrity sha512-4Bzvs5cdZ2MTMQvDlsmruZfyEk/NhSdsc+tA3vH9iMGIRzOj7Y9mwITpJM+hLFhbSE9Q0p0ojTF03RoDVclsZA== - -"@algolia/client-insights@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.16.0.tgz#69d9d9077a1977320ca325a7f8c9c31b0aaead31" - integrity sha512-vIiOK8+exA0AOlR9mRDUr148Rx3WNU73whaJtciYoqeHoy/utib+m3Lw1+6s0o7OuPb/wGRoJ1l5vQuVezVHgA== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/client-personalization@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.24.0.tgz#8b47789fb1cb0f8efbea0f79295b7c5a3850f6ae" - integrity sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w== - dependencies: - "@algolia/client-common" "4.24.0" - "@algolia/requester-common" "4.24.0" - "@algolia/transporter" "4.24.0" - -"@algolia/client-personalization@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.16.0.tgz#dab4d8e694cc0d76196e64e5c90059a78b511450" - integrity sha512-psAzXJgzqPMCID31wrWVRg19K+h5TsLKSv6YfzQhB5munnj4IAE2lxEet2hDkji7vPA0WWpXGAW5Tx0scyMvkA== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/client-query-suggestions@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.16.0.tgz#d515b0f246c3872b54053bc57b4c0b3be416ece7" - integrity sha512-ygek1jdrAbw/tUIyHkK4YrH3uQoRmBbSUvZl8NBbz0S0GxjR6bhPbDZT8ny1INIMCA3KlYHPZAlCS+02RtvDyg== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/client-search@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.24.0.tgz#75e6c02d33ef3e0f34afd9962c085b856fc4a55f" - integrity sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA== - dependencies: - "@algolia/client-common" "4.24.0" - "@algolia/requester-common" "4.24.0" - "@algolia/transporter" "4.24.0" - -"@algolia/client-search@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.16.0.tgz#f9a4d3754b3f0d3ec2ea6af76268edbc9cf39de2" - integrity sha512-mVnkDZjpbiqdXRz0NrQlx6+QsnKYENuruYyjTJNcG3qAe015tvGAHcvvzRT78ZxETS7WjruWSlXBcL5llycNsQ== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.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/ingestion@1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.16.0.tgz#f68a803bf6949a585ccf61021206310930950452" - integrity sha512-nmLcQYeG1YYRDAv2U+ebBD23mBSfkmhSwdDx2DBzqupStNrYWqYHsNgATLTMtMUTfgD0nSgBl5c+03yXg5WpiQ== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/logger-common@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.24.0.tgz#28d439976019ec0a46ba7a1a739ef493d4ef8123" - integrity sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA== - -"@algolia/logger-console@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.24.0.tgz#c6ff486036cd90b81d07a95aaba04461da7e1c65" - integrity sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg== - dependencies: - "@algolia/logger-common" "4.24.0" - -"@algolia/monitoring@1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.16.0.tgz#f6e838df45f06e951ec7ac40f697b8bc5f3607e0" - integrity sha512-tiDkoQOO/d4o8W6dEnpCIMCWp6mwdjqZ+Q51QiCKvz1vcYU/YEx4lleY9oadjAMoOVWZHL6ItEF1LbQHvVNogQ== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/recommend@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-4.24.0.tgz#8a3f78aea471ee0a4836b78fd2aad4e9abcaaf34" - integrity sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw== - dependencies: - "@algolia/cache-browser-local-storage" "4.24.0" - "@algolia/cache-common" "4.24.0" - "@algolia/cache-in-memory" "4.24.0" - "@algolia/client-common" "4.24.0" - "@algolia/client-search" "4.24.0" - "@algolia/logger-common" "4.24.0" - "@algolia/logger-console" "4.24.0" - "@algolia/requester-browser-xhr" "4.24.0" - "@algolia/requester-common" "4.24.0" - "@algolia/requester-node-http" "4.24.0" - "@algolia/transporter" "4.24.0" - -"@algolia/recommend@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.16.0.tgz#df9eac25697b3208bd77b72ec5a9e90bcef72a04" - integrity sha512-hehiMLsDnXnnZGXXKdeXUsvP3PwqAKL/rT4XutkYXsqQ1Jnv4EFrMOY8morUT8nlPv7d1bHPF+bTiNaKvkbBbA== - dependencies: - "@algolia/client-common" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.0" - -"@algolia/requester-browser-xhr@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz#313c5edab4ed73a052e75803855833b62dd19c16" - integrity sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA== - dependencies: - "@algolia/requester-common" "4.24.0" - -"@algolia/requester-browser-xhr@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.16.0.tgz#ca9da2695844e698add53cf759b80a6a397f0af2" - integrity sha512-s/ty3lN0Bk9EC6VId/JO+AMOy6s0Hb3IpXUIa4iKKrH7p3n+lTEtwltVjFVW0fq9JfvQdECoaM951K23G/nRtQ== - dependencies: - "@algolia/client-common" "5.16.0" - -"@algolia/requester-common@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.24.0.tgz#1c60c198031f48fcdb9e34c4057a3ea987b9a436" - integrity sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA== - -"@algolia/requester-fetch@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.16.0.tgz#8e8799c7c8efd07be4ca4fa4d12cee235eaad714" - integrity sha512-E8euSKDkljYpv5QHOZQrBCMZ4W98PKHRp5Cx8JxMYyyPWQ0xkD9b1c5yvOtJJ1lufqDvcuxvrF4eRBwW+BP3QA== - dependencies: - "@algolia/client-common" "5.16.0" - -"@algolia/requester-node-http@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz#4461593714031d02aa7da221c49df675212f482f" - integrity sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw== - dependencies: - "@algolia/requester-common" "4.24.0" - -"@algolia/requester-node-http@5.16.0": - version "5.16.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.16.0.tgz#fe883a6f92da5afbb3de778f6c0e43c6c7f9e133" - integrity sha512-gzLIQlgvvXzGExBC8xFVtsiDbenGgANQ+p/lcPO5ERs1ZNGXIqLnyqwP8amZl6YwXJEt4PPXL/p4IytBWs0jUw== - dependencies: - "@algolia/client-common" "5.16.0" - -"@algolia/transporter@4.24.0": - version "4.24.0" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.24.0.tgz#226bb1f8af62430374c1972b2e5c8580ab275102" - integrity sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA== - dependencies: - "@algolia/cache-common" "4.24.0" - "@algolia/logger-common" "4.24.0" - "@algolia/requester-common" "4.24.0" - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.8.3": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" - integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== - -"@babel/core@^7.21.3", "@babel/core@^7.25.9": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.25.9", "@babel/generator@^7.26.0", "@babel/generator@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" - integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== - dependencies: - "@babel/parser" "^7.26.3" - "@babel/types" "^7.26.3" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-annotate-as-pure@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" - integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" - integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== - dependencies: - "@babel/compat-data" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" - integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.25.9" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" - integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - regexpu-core "^6.2.0" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" - integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-member-expression-to-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" - integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-optimise-call-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" - integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" - integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== - -"@babel/helper-remap-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" - integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-wrap-function" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-replace-supers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" - integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" - integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-wrap-function@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" - integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== - dependencies: - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== - dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" - -"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" - integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== - dependencies: - "@babel/types" "^7.26.3" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - 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.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@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-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-attributes@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-jsx@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-typescript@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-async-generator-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" - integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" - integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - -"@babel/plugin-transform-block-scoped-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" - integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" - integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" - -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-exponentiation-operator@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" - integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-for-of@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" - integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" - integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== - dependencies: - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" - integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz#08a1de35a301929b60fdf2788a54b46cd8ecd0ef" - integrity sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-react-display-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" - integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-react-jsx-development@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" - integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.25.9" - -"@babel/plugin-transform-react-jsx@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" - integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/plugin-transform-react-pure-annotations@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" - integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" - integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-runtime@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz#62723ea3f5b31ffbe676da9d6dae17138ae580ea" - integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" - babel-plugin-polyfill-regenerator "^0.6.1" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-template-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" - integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-typeof-symbol@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" - integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-typescript@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" - integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-syntax-typescript" "^7.25.9" - -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" - integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== - dependencies: - "@babel/compat-data" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.26.0" - "@babel/plugin-syntax-import-attributes" "^7.26.0" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.9" - "@babel/plugin-transform-async-generator-functions" "^7.25.9" - "@babel/plugin-transform-async-to-generator" "^7.25.9" - "@babel/plugin-transform-block-scoped-functions" "^7.25.9" - "@babel/plugin-transform-block-scoping" "^7.25.9" - "@babel/plugin-transform-class-properties" "^7.25.9" - "@babel/plugin-transform-class-static-block" "^7.26.0" - "@babel/plugin-transform-classes" "^7.25.9" - "@babel/plugin-transform-computed-properties" "^7.25.9" - "@babel/plugin-transform-destructuring" "^7.25.9" - "@babel/plugin-transform-dotall-regex" "^7.25.9" - "@babel/plugin-transform-duplicate-keys" "^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-dynamic-import" "^7.25.9" - "@babel/plugin-transform-exponentiation-operator" "^7.25.9" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-for-of" "^7.25.9" - "@babel/plugin-transform-function-name" "^7.25.9" - "@babel/plugin-transform-json-strings" "^7.25.9" - "@babel/plugin-transform-literals" "^7.25.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" - "@babel/plugin-transform-member-expression-literals" "^7.25.9" - "@babel/plugin-transform-modules-amd" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.25.9" - "@babel/plugin-transform-modules-systemjs" "^7.25.9" - "@babel/plugin-transform-modules-umd" "^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-new-target" "^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" - "@babel/plugin-transform-numeric-separator" "^7.25.9" - "@babel/plugin-transform-object-rest-spread" "^7.25.9" - "@babel/plugin-transform-object-super" "^7.25.9" - "@babel/plugin-transform-optional-catch-binding" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - "@babel/plugin-transform-private-methods" "^7.25.9" - "@babel/plugin-transform-private-property-in-object" "^7.25.9" - "@babel/plugin-transform-property-literals" "^7.25.9" - "@babel/plugin-transform-regenerator" "^7.25.9" - "@babel/plugin-transform-regexp-modifiers" "^7.26.0" - "@babel/plugin-transform-reserved-words" "^7.25.9" - "@babel/plugin-transform-shorthand-properties" "^7.25.9" - "@babel/plugin-transform-spread" "^7.25.9" - "@babel/plugin-transform-sticky-regex" "^7.25.9" - "@babel/plugin-transform-template-literals" "^7.25.9" - "@babel/plugin-transform-typeof-symbol" "^7.25.9" - "@babel/plugin-transform-unicode-escapes" "^7.25.9" - "@babel/plugin-transform-unicode-property-regex" "^7.25.9" - "@babel/plugin-transform-unicode-regex" "^7.25.9" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.38.1" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" - integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-transform-react-display-name" "^7.25.9" - "@babel/plugin-transform-react-jsx" "^7.25.9" - "@babel/plugin-transform-react-jsx-development" "^7.25.9" - "@babel/plugin-transform-react-pure-annotations" "^7.25.9" - -"@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" - integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-syntax-jsx" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.25.9" - "@babel/plugin-transform-typescript" "^7.25.9" - -"@babel/runtime-corejs3@^7.25.9": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz#5af6bed16073eb4a0191233d61e158a5c768c430" - integrity sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w== - dependencies: - core-js-pure "^3.30.2" - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9", "@babel/runtime@^7.8.4": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/traverse@^7.25.9": - version "7.26.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" - integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.3" - "@babel/parser" "^7.26.3" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.3" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.4.4": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" - integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@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== - -"@csstools/cascade-layer-name-parser@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz#64d128529397aa1e1c986f685713363b262b81b1" - integrity sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA== - -"@csstools/color-helpers@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.0.1.tgz#829f1c76f5800b79c51c709e2f36821b728e0e10" - integrity sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA== - -"@csstools/css-calc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.0.tgz#3f28b8f8f736b8f78abbc75eebd55c756207e773" - integrity sha512-X69PmFOrjTZfN5ijxtI8hZ9kRADFSLrmmQ6hgDJ272Il049WGKpDY64KhrFm/7rbWve0z81QepawzjkKlqkNGw== - -"@csstools/css-color-parser@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.0.6.tgz#e646838f6aab4618aeea7ba0c4921a254e180276" - integrity sha512-S/IjXqTHdpI4EtzGoNCHfqraXF37x12ZZHA1Lk7zoT5pm2lMjFuqhX/89L7dqX4CcMacKK+6ZCs5TmEGb/+wKw== - dependencies: - "@csstools/color-helpers" "^5.0.1" - "@csstools/css-calc" "^2.1.0" - -"@csstools/css-parser-algorithms@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz#74426e93bd1c4dcab3e441f5cc7ba4fb35d94356" - integrity sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A== - -"@csstools/css-tokenizer@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz#a5502c8539265fecbd873c1e395a890339f119c2" - integrity sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw== - -"@csstools/media-query-list-parser@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz#e80e17eba1693fceafb8d6f2cfc68c0e7a9ab78a" - integrity sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A== - -"@csstools/postcss-cascade-layers@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz#9640313e64b5e39133de7e38a5aa7f40dc259597" - integrity sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ== - dependencies: - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -"@csstools/postcss-color-function@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-4.0.6.tgz#dabd1e516ccd4c7bd5803e37075a503b5f7f0ac4" - integrity sha512-EcvXfC60cTIumzpsxWuvVjb7rsJEHPvqn3jeMEBUaE3JSc4FRuP7mEQ+1eicxWmIrs3FtzMH9gR3sgA5TH+ebQ== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-color-mix-function@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.6.tgz#d971832ec30b3b60363bceddfeb4b90c7cc0f4b8" - integrity sha512-jVKdJn4+JkASYGhyPO+Wa5WXSx1+oUgaXb3JsjJn/BlrtFh5zjocCY7pwWi0nuP24V1fY7glQsxEYcYNy0dMFg== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-content-alt-text@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.4.tgz#76f4687fb15ed45bc1139bb71e5775779762897a" - integrity sha512-YItlZUOuZJCBlRaCf8Aucc1lgN41qYGALMly0qQllrxYJhiyzlI6RxOTMUvtWk+KhS8GphMDsDhKQ7KTPfEMSw== - dependencies: - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-exponential-functions@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.5.tgz#0c39f75df3357ee1e444b0aa0ede4e12aafea0e9" - integrity sha512-mi8R6dVfA2nDoKM3wcEi64I8vOYEgQVtVKCfmLHXupeLpACfGAided5ddMt5f+CnEodNu4DifuVwb0I6fQDGGQ== - dependencies: - "@csstools/css-calc" "^2.1.0" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - -"@csstools/postcss-font-format-keywords@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz#6730836eb0153ff4f3840416cc2322f129c086e6" - integrity sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-gamut-mapping@^2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.6.tgz#04ec6a50fdbca2a30dec56e6bb780c79621e47a7" - integrity sha512-0ke7fmXfc8H+kysZz246yjirAH6JFhyX9GTlyRnM0exHO80XcA9zeJpy5pOp5zo/AZiC/q5Pf+Hw7Pd6/uAoYA== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - -"@csstools/postcss-gradients-interpolation-method@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.6.tgz#67fa61ada95e4534687fa76cd2d15ac74386560e" - integrity sha512-Itrbx6SLUzsZ6Mz3VuOlxhbfuyLTogG5DwEF1V8dAi24iMuvQPIHd7Ti+pNDp7j6WixndJGZaoNR0f9VSzwuTg== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-hwb-function@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.6.tgz#c40f557a54ed45e75c601a9ba7a08d315f64dbd7" - integrity sha512-927Pqy3a1uBP7U8sTfaNdZVB0mNXzIrJO/GZ8us9219q9n06gOqCdfZ0E6d1P66Fm0fYHvxfDbfcUuwAn5UwhQ== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-ic-unit@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.0.tgz#b60ec06500717c337447c39ae7fe7952eeb9d48f" - integrity sha512-9QT5TDGgx7wD3EEMN3BSUG6ckb6Eh5gSPT5kZoVtUuAonfPmLDJyPhqR4ntPpMYhUKAMVKAg3I/AgzqHMSeLhA== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-initial@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-2.0.0.tgz#a86f5fc59ab9f16f1422dade4c58bd941af5df22" - integrity sha512-dv2lNUKR+JV+OOhZm9paWzYBXOCi+rJPqJ2cJuhh9xd8USVrd0cBEPczla81HNOyThMQWeCcdln3gZkQV2kYxA== - -"@csstools/postcss-is-pseudo-class@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz#12041448fedf01090dd4626022c28b7f7623f58e" - integrity sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ== - dependencies: - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -"@csstools/postcss-light-dark-function@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.7.tgz#807c170cd28eebb0c00e64dfc6ab0bf418f19209" - integrity sha512-ZZ0rwlanYKOHekyIPaU+sVm3BEHCe+Ha0/px+bmHe62n0Uc1lL34vbwrLYn6ote8PHlsqzKeTQdIejQCJ05tfw== - dependencies: - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-logical-float-and-clear@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz#62617564182cf86ab5d4e7485433ad91e4c58571" - integrity sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ== - -"@csstools/postcss-logical-overflow@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz#c6de7c5f04e3d4233731a847f6c62819bcbcfa1d" - integrity sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA== - -"@csstools/postcss-logical-overscroll-behavior@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz#43c03eaecdf34055ef53bfab691db6dc97a53d37" - integrity sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w== - -"@csstools/postcss-logical-resize@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz#4df0eeb1a61d7bd85395e56a5cce350b5dbfdca6" - integrity sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-logical-viewport-units@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz#f6cc63520ca2a6eb76b9cd946070c38dda66d733" - integrity sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw== - dependencies: - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-media-minmax@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.5.tgz#66970aa8d8057f84b88aff21f385194fbe03eb11" - integrity sha512-sdh5i5GToZOIAiwhdntRWv77QDtsxP2r2gXW/WbLSCoLr00KTq/yiF1qlQ5XX2+lmiFa8rATKMcbwl3oXDMNew== - dependencies: - "@csstools/css-calc" "^2.1.0" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/media-query-list-parser" "^4.0.2" - -"@csstools/postcss-media-queries-aspect-ratio-number-values@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz#d71102172c74baf3f892fac88cf1ea46a961600d" - integrity sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ== - dependencies: - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/media-query-list-parser" "^4.0.2" - -"@csstools/postcss-nested-calc@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz#754e10edc6958d664c11cde917f44ba144141c62" - integrity sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#ecdde2daf4e192e5da0c6fd933b6d8aff32f2a36" - integrity sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.6.tgz#17e8dfb6422dfd8d77256def5d5be8335ea7af34" - integrity sha512-Hptoa0uX+XsNacFBCIQKTUBrFKDiplHan42X73EklG6XmQLG7/aIvxoNhvZ7PvOWMt67Pw3bIlUY2nD6p5vL8A== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-progressive-custom-properties@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.0.tgz#ecdb85bcdb1852d73970a214a376684a91f82bdc" - integrity sha512-XQPtROaQjomnvLUSy/bALTR5VCtTVUFwYs1SblvYgLSeTo2a/bMNwUwo2piXw5rTv/FEYiy5yPSXBqg9OKUx7Q== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-random-function@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-random-function/-/postcss-random-function-1.0.1.tgz#73a0b62b5dbbc03c25a28f085235eb61b09a2fb0" - integrity sha512-Ab/tF8/RXktQlFwVhiC70UNfpFQRhtE5fQQoP2pO+KCPGLsLdWFiOuHgSRtBOqEshCVAzR4H6o38nhvRZq8deA== - dependencies: - "@csstools/css-calc" "^2.1.0" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - -"@csstools/postcss-relative-color-syntax@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.6.tgz#4b8bc219b34b16f5abdbbcf09ac13e65bff6ef16" - integrity sha512-yxP618Xb+ji1I624jILaYM62uEmZcmbdmFoZHoaThw896sq0vU39kqTTF+ZNic9XyPtPMvq0vyvbgmHaszq8xg== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-scope-pseudo-class@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz#9fe60e9d6d91d58fb5fc6c768a40f6e47e89a235" - integrity sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q== - dependencies: - postcss-selector-parser "^7.0.0" - -"@csstools/postcss-sign-functions@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.0.tgz#a524fae1374b0e167729f612ca875d7b1b334262" - integrity sha512-SLcc20Nujx/kqbSwDmj6oaXgpy3UjFhBy1sfcqPgDkHfOIfUtUVH7OXO+j7BU4v/At5s61N5ZX6shvgPwluhsA== - dependencies: - "@csstools/css-calc" "^2.1.0" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - -"@csstools/postcss-stepped-value-functions@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.5.tgz#4d68633d502fbe2b6ef3898e368e3540488a0d8a" - integrity sha512-G6SJ6hZJkhxo6UZojVlLo14MohH4J5J7z8CRBrxxUYy9JuZiIqUo5TBYyDGcE0PLdzpg63a7mHSJz3VD+gMwqw== - dependencies: - "@csstools/css-calc" "^2.1.0" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - -"@csstools/postcss-text-decoration-shorthand@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.1.tgz#251fab0939d50c6fd73bb2b830b2574188efa087" - integrity sha512-xPZIikbx6jyzWvhms27uugIc0I4ykH4keRvoa3rxX5K7lEhkbd54rjj/dv60qOCTisoS+3bmwJTeyV1VNBrXaw== - dependencies: - "@csstools/color-helpers" "^5.0.1" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.5.tgz#267b95a8bd45536e0360596b6da660a9eb6aac83" - integrity sha512-/YQThYkt5MLvAmVu7zxjhceCYlKrYddK6LEmK5I4ojlS6BmO9u2yO4+xjXzu2+NPYmHSTtP4NFSamBCMmJ1NJA== - dependencies: - "@csstools/css-calc" "^2.1.0" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - -"@csstools/postcss-unset-value@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz#7caa981a34196d06a737754864baf77d64de4bba" - integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== - -"@csstools/selector-resolve-nested@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz#704a9b637975680e025e069a4c58b3beb3e2752a" - integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ== - -"@csstools/selector-specificity@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz#037817b574262134cabd68fc4ec1a454f168407b" - integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== - -"@csstools/utilities@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-2.0.0.tgz#f7ff0fee38c9ffb5646d47b6906e0bc8868bde60" - integrity sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ== - -"@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.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.8.0.tgz#c70a1a326249d878ab7c630d7a908c6769a38db3" - integrity sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA== - -"@docsearch/react@^3.5.2": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.8.0.tgz#c32165e34fadea8a0283c8b61cd73e6e1844797d" - integrity sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q== - dependencies: - "@algolia/autocomplete-core" "1.17.7" - "@algolia/autocomplete-preset-algolia" "1.17.7" - "@docsearch/css" "3.8.0" - algoliasearch "^5.12.0" - -"@docusaurus/babel@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/babel/-/babel-3.6.3.tgz#016714fe7a8807d0fc2f7180eace5e82bebbb8a6" - integrity sha512-7dW9Hat9EHYCVicFXYA4hjxBY38+hPuCURL8oRF9fySRm7vzNWuEOghA1TXcykuXZp0HLG2td4RhDxCvGG7tNw== - dependencies: - "@babel/core" "^7.25.9" - "@babel/generator" "^7.25.9" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.25.9" - "@babel/preset-env" "^7.25.9" - "@babel/preset-react" "^7.25.9" - "@babel/preset-typescript" "^7.25.9" - "@babel/runtime" "^7.25.9" - "@babel/runtime-corejs3" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@docusaurus/logger" "3.6.3" - "@docusaurus/utils" "3.6.3" - babel-plugin-dynamic-import-node "^2.3.3" - fs-extra "^11.1.1" - tslib "^2.6.0" - -"@docusaurus/bundler@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/bundler/-/bundler-3.6.3.tgz#f09c2e29613f988b874a4be2247708e121b7fc5c" - integrity sha512-47JLuc8D4wA+6VOvmMd5fUC9rFppBQpQOnxDYiVXffm/DeV/wmm3sbpNd5Y+O+G2+nevLTRnvCm/qyancv0Y3A== - dependencies: - "@babel/core" "^7.25.9" - "@docusaurus/babel" "3.6.3" - "@docusaurus/cssnano-preset" "3.6.3" - "@docusaurus/logger" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils" "3.6.3" - babel-loader "^9.2.1" - clean-css "^5.3.2" - copy-webpack-plugin "^11.0.0" - css-loader "^6.8.1" - css-minimizer-webpack-plugin "^5.0.1" - cssnano "^6.1.2" - file-loader "^6.2.0" - html-minifier-terser "^7.2.0" - mini-css-extract-plugin "^2.9.1" - null-loader "^4.0.1" - postcss "^8.4.26" - postcss-loader "^7.3.3" - postcss-preset-env "^10.1.0" - react-dev-utils "^12.0.1" - terser-webpack-plugin "^5.3.9" - tslib "^2.6.0" - url-loader "^4.1.1" - webpack "^5.95.0" - webpackbar "^6.0.1" - -"@docusaurus/core@3.6.3", "@docusaurus/core@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.6.3.tgz#6bf968ee26a36d71387bab293f27ccffc0e428b6" - integrity sha512-xL7FRY9Jr5DWqB6pEnqgKqcMPJOX5V0pgWXi5lCiih11sUBmcFKM7c3+GyxcVeeWFxyYSDP3grLTWqJoP4P9Vw== - dependencies: - "@docusaurus/babel" "3.6.3" - "@docusaurus/bundler" "3.6.3" - "@docusaurus/logger" "3.6.3" - "@docusaurus/mdx-loader" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - boxen "^6.2.1" - chalk "^4.1.2" - chokidar "^3.5.3" - cli-table3 "^0.6.3" - combine-promises "^1.1.0" - commander "^5.1.0" - core-js "^3.31.1" - del "^6.1.1" - detect-port "^1.5.1" - escape-html "^1.0.3" - eta "^2.2.0" - eval "^0.1.8" - fs-extra "^11.1.1" - html-tags "^3.3.1" - html-webpack-plugin "^5.6.0" - leven "^3.1.0" - lodash "^4.17.21" - p-map "^4.0.0" - prompts "^2.4.2" - react-dev-utils "^12.0.1" - react-helmet-async "^1.3.0" - react-loadable "npm:@docusaurus/react-loadable@6.0.0" - react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.3.4" - react-router-config "^5.1.1" - react-router-dom "^5.3.4" - rtl-detect "^1.0.4" - semver "^7.5.4" - serve-handler "^6.1.6" - shelljs "^0.8.5" - tslib "^2.6.0" - update-notifier "^6.0.2" - webpack "^5.95.0" - webpack-bundle-analyzer "^4.10.2" - webpack-dev-server "^4.15.2" - webpack-merge "^6.0.1" - -"@docusaurus/cssnano-preset@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.3.tgz#ea19b307183ec20dea4927efc4ddf249150b8c6a" - integrity sha512-qP7SXrwZ+23GFJdPN4aIHQrZW+oH/7tzwEuc/RNL0+BdZdmIjYQqUxdXsjE4lFxLNZjj0eUrSNYIS6xwfij+5Q== - dependencies: - cssnano-preset-advanced "^6.1.2" - postcss "^8.4.38" - postcss-sort-media-queries "^5.2.0" - tslib "^2.6.0" - -"@docusaurus/logger@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.6.3.tgz#c6e514c9429487ef38be2f2129b2b842740d92fd" - integrity sha512-xSubJixcNyMV9wMV4q0s47CBz3Rlc5jbcCCuij8pfQP8qn/DIpt0ks8W6hQWzHAedg/J/EwxxUOUrnEoKzJo8g== - dependencies: - chalk "^4.1.2" - tslib "^2.6.0" - -"@docusaurus/mdx-loader@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.6.3.tgz#127babc7cdb26d37c723bc3ae518bda17ce40160" - integrity sha512-3iJdiDz9540ppBseeI93tWTDtUGVkxzh59nMq4ignylxMuXBLK8dFqVeaEor23v1vx6TrGKZ2FuLaTB+U7C0QQ== - dependencies: - "@docusaurus/logger" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - "@mdx-js/mdx" "^3.0.0" - "@slorber/remark-comment" "^1.0.0" - escape-html "^1.0.3" - estree-util-value-to-estree "^3.0.1" - file-loader "^6.2.0" - fs-extra "^11.1.1" - image-size "^1.0.2" - mdast-util-mdx "^3.0.0" - mdast-util-to-string "^4.0.0" - rehype-raw "^7.0.0" - remark-directive "^3.0.0" - remark-emoji "^4.0.0" - remark-frontmatter "^5.0.0" - remark-gfm "^4.0.0" - stringify-object "^3.3.0" - tslib "^2.6.0" - unified "^11.0.3" - unist-util-visit "^5.0.0" - url-loader "^4.1.1" - vfile "^6.0.1" - webpack "^5.88.1" - -"@docusaurus/module-type-aliases@3.6.3", "@docusaurus/module-type-aliases@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.3.tgz#1f7030b1cf1f658cf664d41b6eadba93bbe51d87" - integrity sha512-MjaXX9PN/k5ugNvfRZdWyKWq4FsrhN4LEXaj0pEmMebJuBNlFeGyKQUa9DRhJHpadNaiMLrbo9m3U7Ig5YlsZg== - dependencies: - "@docusaurus/types" "3.6.3" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - "@types/react-router-dom" "*" - react-helmet-async "*" - react-loadable "npm:@docusaurus/react-loadable@6.0.0" - -"@docusaurus/plugin-content-blog@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.3.tgz#d6a597e4bfdeb3f1f6ce06d2ac86207296988cc9" - integrity sha512-k0ogWwwJU3pFRFfvW1kRVHxzf2DutLGaaLjAnHVEU6ju+aRP0Z5ap/13DHyPOfHeE4WKpn/M0TqjdwZAcY3kAw== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/logger" "3.6.3" - "@docusaurus/mdx-loader" "3.6.3" - "@docusaurus/theme-common" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - cheerio "1.0.0-rc.12" - feed "^4.2.2" - fs-extra "^11.1.1" - lodash "^4.17.21" - reading-time "^1.5.0" - srcset "^4.0.0" - tslib "^2.6.0" - unist-util-visit "^5.0.0" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@docusaurus/plugin-content-docs@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.3.tgz#aae044d2af6996d1a6de8d815aca8a83b485e0a5" - integrity sha512-r2wS8y/fsaDcxkm20W5bbYJFPzdWdEaTWVYjNxlHlcmX086eqQR1Fomlg9BHTJ0dLXPzAlbC8EN4XqMr3QzNCQ== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/logger" "3.6.3" - "@docusaurus/mdx-loader" "3.6.3" - "@docusaurus/module-type-aliases" "3.6.3" - "@docusaurus/theme-common" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - "@types/react-router-config" "^5.0.7" - combine-promises "^1.1.0" - fs-extra "^11.1.1" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.6.0" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@docusaurus/plugin-content-pages@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.3.tgz#0a5a43d1677ee519f63a54634653c54ddf41f475" - integrity sha512-eHrmTgjgLZsuqfsYr5X2xEwyIcck0wseSofWrjTwT9FLOWp+KDmMAuVK+wRo7sFImWXZk3oV/xX/g9aZrhD7OA== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/mdx-loader" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - fs-extra "^11.1.1" - tslib "^2.6.0" - webpack "^5.88.1" - -"@docusaurus/plugin-debug@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.6.3.tgz#4e62ddfbae4d597b073f8e3c632cc12d012339e3" - integrity sha512-zB9GXfIZNPRfzKnNjU6xGVrqn9bPXuGhpjgsuc/YtcTDjnjhasg38NdYd5LEqXex5G/zIorQgWB3n6x/Ut62vQ== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils" "3.6.3" - fs-extra "^11.1.1" - react-json-view-lite "^1.2.0" - tslib "^2.6.0" - -"@docusaurus/plugin-google-analytics@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.3.tgz#63648d469b1e3c50fad8878e7a7db9856e503d5f" - integrity sha512-rCDNy1QW8Dag7nZq67pcum0bpFLrwvxJhYuVprhFh8BMBDxV0bY+bAkGHbSf68P3Bk9C3hNOAXX1srGLIDvcTA== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - tslib "^2.6.0" - -"@docusaurus/plugin-google-gtag@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.3.tgz#8a1388b4123904be17e661ea7aa71d798d0c046e" - integrity sha512-+OyDvhM6rqVkQOmLVkQWVJAizEEfkPzVWtIHXlWPOCFGK9X4/AWeBSrU0WG4iMg9Z4zD4YDRrU+lvI4s6DSC+w== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - "@types/gtag.js" "^0.0.12" - tslib "^2.6.0" - -"@docusaurus/plugin-google-tag-manager@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.3.tgz#38cbe416803f29782807cebf3ebf240cb47c3c74" - integrity sha512-1M6UPB13gWUtN2UHX083/beTn85PlRI9ABItTl/JL1FJ5dJTWWFXXsHf9WW/6hrVwthwTeV/AGbGKvLKV+IlCA== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - tslib "^2.6.0" - -"@docusaurus/plugin-sitemap@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.3.tgz#0458e6f7476ab6fd1466e01b153a3211d3223c53" - integrity sha512-94qOO4M9Fwv9KfVQJsgbe91k+fPJ4byf1L3Ez8TUa6TAFPo/BrLwQ80zclHkENlL1824TuxkcMKv33u6eydQCg== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/logger" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - fs-extra "^11.1.1" - sitemap "^7.1.1" - tslib "^2.6.0" - -"@docusaurus/preset-classic@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.6.3.tgz#072298b5b6d0de7d0346b1e9b550a30ef2add56d" - integrity sha512-VHSYWROT3flvNNI1SrnMOtW1EsjeHNK9dhU6s9eY5hryZe79lUqnZJyze/ymDe2LXAqzyj6y5oYvyBoZZk6ErA== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/plugin-content-blog" "3.6.3" - "@docusaurus/plugin-content-docs" "3.6.3" - "@docusaurus/plugin-content-pages" "3.6.3" - "@docusaurus/plugin-debug" "3.6.3" - "@docusaurus/plugin-google-analytics" "3.6.3" - "@docusaurus/plugin-google-gtag" "3.6.3" - "@docusaurus/plugin-google-tag-manager" "3.6.3" - "@docusaurus/plugin-sitemap" "3.6.3" - "@docusaurus/theme-classic" "3.6.3" - "@docusaurus/theme-common" "3.6.3" - "@docusaurus/theme-search-algolia" "3.6.3" - "@docusaurus/types" "3.6.3" - -"@docusaurus/theme-classic@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.6.3.tgz#00599a9de5fd5c122fd1b8c59d3b755878f2a72c" - integrity sha512-1RRLK1tSArI2c00qugWYO3jRocjOZwGF1mBzPPylDVRwWCS/rnWWR91ChdbbaxIupRJ+hX8ZBYrwr5bbU0oztQ== - dependencies: - "@docusaurus/core" "3.6.3" - "@docusaurus/logger" "3.6.3" - "@docusaurus/mdx-loader" "3.6.3" - "@docusaurus/module-type-aliases" "3.6.3" - "@docusaurus/plugin-content-blog" "3.6.3" - "@docusaurus/plugin-content-docs" "3.6.3" - "@docusaurus/plugin-content-pages" "3.6.3" - "@docusaurus/theme-common" "3.6.3" - "@docusaurus/theme-translations" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - "@mdx-js/react" "^3.0.0" - clsx "^2.0.0" - copy-text-to-clipboard "^3.2.0" - infima "0.2.0-alpha.45" - lodash "^4.17.21" - nprogress "^0.2.0" - postcss "^8.4.26" - prism-react-renderer "^2.3.0" - prismjs "^1.29.0" - react-router-dom "^5.3.4" - rtlcss "^4.1.0" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-common@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.6.3.tgz#a8a6ebd2b0fd7a5cca4d0c6a2f9ccff905fa7438" - integrity sha512-b8ZkhczXHDxWWyvz+YJy4t/PlPbEogTTbgnHoflYnH7rmRtyoodTsu8WVM12la5LmlMJBclBXFl29OH8kPE7gg== - dependencies: - "@docusaurus/mdx-loader" "3.6.3" - "@docusaurus/module-type-aliases" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - clsx "^2.0.0" - parse-numeric-range "^1.3.0" - prism-react-renderer "^2.3.0" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-search-algolia@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.3.tgz#1a3331a489f392f5b032c4efc5f431e57eddf7ce" - integrity sha512-rt+MGCCpYgPyWCGXtbxlwFbTSobu15jWBTPI2LHsHNa5B0zSmOISX6FWYAPt5X1rNDOqMGM0FATnh7TBHRohVA== - dependencies: - "@docsearch/react" "^3.5.2" - "@docusaurus/core" "3.6.3" - "@docusaurus/logger" "3.6.3" - "@docusaurus/plugin-content-docs" "3.6.3" - "@docusaurus/theme-common" "3.6.3" - "@docusaurus/theme-translations" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-validation" "3.6.3" - algoliasearch "^4.18.0" - algoliasearch-helper "^3.13.3" - clsx "^2.0.0" - eta "^2.2.0" - fs-extra "^11.1.1" - lodash "^4.17.21" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-translations@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.6.3.tgz#6e473835ea016ce4acd7d2997f411811db8c4f6b" - integrity sha512-Gb0regclToVlngSIIwUCtBMQBq48qVUaN1XQNKW4XwlsgUyk0vP01LULdqbem7czSwIeBAFXFoORJ0RPX7ht/w== - dependencies: - fs-extra "^11.1.1" - tslib "^2.6.0" - -"@docusaurus/tsconfig@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/tsconfig/-/tsconfig-3.6.3.tgz#8af20c45f0a67e193debedcb341c0a1e78b1dd63" - integrity sha512-1pT/rTrRpMV15E4tJH95W5PrjboMn5JkKF+Ys8cTjMegetiXjs0gPFOSDA5hdTlberKQLDO50xPjMJHondLuzA== - -"@docusaurus/types@3.6.3", "@docusaurus/types@^3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.6.3.tgz#e87592e31616da1b8dc473e4c8205c61885a1518" - integrity sha512-xD9oTGDrouWzefkhe9ogB2fDV96/82cRpNGx2HIvI5L87JHNhQVIWimQ/3JIiiX/TEd5S9s+VO6FFguwKNRVow== - dependencies: - "@mdx-js/mdx" "^3.0.0" - "@types/history" "^4.7.11" - "@types/react" "*" - commander "^5.1.0" - joi "^17.9.2" - react-helmet-async "^1.3.0" - utility-types "^3.10.0" - webpack "^5.95.0" - webpack-merge "^5.9.0" - -"@docusaurus/utils-common@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.6.3.tgz#57f840bd6f0928cf10060198cb421f1b9212c8f5" - integrity sha512-v4nKDaANLgT3pMBewHYEMAl/ufY0LkXao1QkFWzI5huWFOmNQ2UFzv2BiKeHX5Ownis0/w6cAyoxPhVdDonlSQ== - dependencies: - "@docusaurus/types" "3.6.3" - tslib "^2.6.0" - -"@docusaurus/utils-validation@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.6.3.tgz#3eca7125235eb90983ff660b97a71f331e331f57" - integrity sha512-bhEGGiN5BE38h21vjqD70Gxg++j+PfYVddDUE5UFvLDup68QOcpD33CLr+2knPorlxRbEaNfz6HQDUMQ3HuqKw== - dependencies: - "@docusaurus/logger" "3.6.3" - "@docusaurus/utils" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - fs-extra "^11.2.0" - joi "^17.9.2" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.6.0" - -"@docusaurus/utils@3.6.3": - version "3.6.3" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.6.3.tgz#8dcb1969e4011a84dfb0a031da806dadddebf0ea" - integrity sha512-0R/FR3bKVl4yl8QwbL4TYFfR+OXBRpVUaTJdENapBGR3YMwfM6/JnhGilWQO8AOwPJGtGoDK7ib8+8UF9f3OZQ== - dependencies: - "@docusaurus/logger" "3.6.3" - "@docusaurus/types" "3.6.3" - "@docusaurus/utils-common" "3.6.3" - "@svgr/webpack" "^8.1.0" - escape-string-regexp "^4.0.0" - file-loader "^6.2.0" - fs-extra "^11.1.1" - github-slugger "^1.5.0" - globby "^11.1.0" - gray-matter "^4.0.3" - jiti "^1.20.0" - js-yaml "^4.1.0" - lodash "^4.17.21" - micromatch "^4.0.5" - prompts "^2.4.2" - resolve-pathname "^3.0.0" - shelljs "^0.8.5" - tslib "^2.6.0" - url-loader "^4.1.1" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.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.1.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.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.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.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/source-map@^0.3.3": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" - integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" - integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== - -"@mdx-js/mdx@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-3.1.0.tgz#10235cab8ad7d356c262e8c21c68df5850a97dc3" - integrity sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdx" "^2.0.0" - collapse-white-space "^2.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-util-scope "^1.0.0" - estree-walker "^3.0.0" - hast-util-to-jsx-runtime "^2.0.0" - markdown-extensions "^2.0.0" - recma-build-jsx "^1.0.0" - recma-jsx "^1.0.0" - recma-stringify "^1.0.0" - rehype-recma "^1.0.0" - remark-mdx "^3.0.0" - remark-parse "^11.0.0" - remark-rehype "^11.0.0" - source-map "^0.7.0" - unified "^11.0.0" - unist-util-position-from-estree "^2.0.0" - unist-util-stringify-position "^4.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -"@mdx-js/react@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" - integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== - dependencies: - "@types/mdx" "^2.0.0" - -"@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" - -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" - integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@polka/url@^1.0.0-next.24": - version "1.0.0-next.28" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" - integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== - -"@sideway/address@^4.1.5": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5" - integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== - 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.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/is@^5.2.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" - integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== - -"@slorber/remark-comment@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@slorber/remark-comment/-/remark-comment-1.0.0.tgz#2a020b3f4579c89dec0361673206c28d67e08f5a" - integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.1.0" - micromark-util-symbol "^1.0.1" - -"@svgr/babel-plugin-add-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" - integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== - -"@svgr/babel-plugin-remove-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" - integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== - -"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" - integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" - integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== - -"@svgr/babel-plugin-svg-dynamic-title@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" - integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== - -"@svgr/babel-plugin-svg-em-dimensions@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" - integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== - -"@svgr/babel-plugin-transform-react-native-svg@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" - integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== - -"@svgr/babel-plugin-transform-svg-component@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" - integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== - -"@svgr/babel-preset@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" - integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" - "@svgr/babel-plugin-transform-svg-component" "8.0.0" - -"@svgr/core@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" - integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - camelcase "^6.2.0" - cosmiconfig "^8.1.3" - snake-case "^3.0.4" - -"@svgr/hast-util-to-babel-ast@8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" - integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== - dependencies: - "@babel/types" "^7.21.3" - entities "^4.4.0" - -"@svgr/plugin-jsx@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" - integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - "@svgr/hast-util-to-babel-ast" "8.0.0" - svg-parser "^2.0.4" - -"@svgr/plugin-svgo@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00" - integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== - dependencies: - cosmiconfig "^8.1.3" - deepmerge "^4.3.1" - svgo "^3.0.2" - -"@svgr/webpack@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-8.1.0.tgz#16f1b5346f102f89fda6ec7338b96a701d8be0c2" - integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== - dependencies: - "@babel/core" "^7.21.3" - "@babel/plugin-transform-react-constant-elements" "^7.21.3" - "@babel/preset-env" "^7.20.2" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.21.0" - "@svgr/core" "8.1.0" - "@svgr/plugin-jsx" "8.1.0" - "@svgr/plugin-svgo" "8.1.0" - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.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== - -"@types/acorn@^4.0.0": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" - integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" - integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/eslint-scope@^3.7.7": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" - integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree-jsx@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" - integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== - dependencies: - "@types/estree" "*" - -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz#812d2871e5eea17fb0bd5214dda7a7b748c0e12a" - integrity sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express-serve-static-core@^4.17.33": - version "4.19.6" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" - integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c" - integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^5.0.0" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/express@^4.17.13": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/gtag.js@^0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@types/gtag.js/-/gtag.js-0.0.12.tgz#095122edca896689bdfcdd73b057e23064d23572" - integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== - -"@types/hast@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - 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/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-cache-semantics@^4.0.2": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/http-proxy@^1.17.8": - version "1.17.15" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.15.tgz#12118141ce9775a6499ecb4c01d02f90fc839d36" - integrity sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - 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.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/mdast@^4.0.0", "@types/mdast@^4.0.2": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" - integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== - dependencies: - "@types/unist" "*" - -"@types/mdx@^2.0.0": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" - integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node-forge@^1.3.0": - version "1.3.11" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" - integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "22.10.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" - integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== - dependencies: - undici-types "~6.20.0" - -"@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.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/prismjs@^1.26.0": - version "1.26.5" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.5.tgz#72499abbb4c4ec9982446509d2f14fb8483869d6" - integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== - -"@types/qs@*": - version "6.9.17" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a" - integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/react-router-config@*", "@types/react-router-config@^5.0.7": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.11.tgz#2761a23acc7905a66a94419ee40294a65aaa483a" - integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw== - 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 "19.0.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.1.tgz#a000d5b78f473732a08cecbead0f3751e550b3df" - integrity sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ== - dependencies: - csstype "^3.0.2" - -"@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.7" - resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.7.tgz#ba5fe7df9aa9c89b6dff7688a19023dd2963091d" - integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== - dependencies: - "@types/node" "*" - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.1": - version "1.9.4" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" - integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -"@types/sockjs@^0.3.33": - version "0.3.36" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" - integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== - dependencies: - "@types/node" "*" - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" - integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== - -"@types/unist@^2.0.0": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" - integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== - -"@types/ws@^8.5.5": - version "8.5.13" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.13.tgz#6414c280875e2691d0d1e080b05addbf5cb91e20" - integrity sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - -"@ungap/structured-clone@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" - integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== - -"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" - integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== - dependencies: - "@webassemblyjs/helper-numbers" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - -"@webassemblyjs/floating-point-hex-parser@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" - integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== - -"@webassemblyjs/helper-api-error@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" - integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== - -"@webassemblyjs/helper-buffer@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" - integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== - -"@webassemblyjs/helper-numbers@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" - integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.13.2" - "@webassemblyjs/helper-api-error" "1.13.2" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" - integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== - -"@webassemblyjs/helper-wasm-section@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" - integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/wasm-gen" "1.14.1" - -"@webassemblyjs/ieee754@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" - integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" - integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" - integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== - -"@webassemblyjs/wasm-edit@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" - integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/helper-wasm-section" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-opt" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - "@webassemblyjs/wast-printer" "1.14.1" - -"@webassemblyjs/wasm-gen@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" - integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wasm-opt@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" - integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - -"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" - integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-api-error" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wast-printer@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" - integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== - dependencies: - "@webassemblyjs/ast" "1.14.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.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-jsx@^5.0.0: - 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.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - dependencies: - acorn "^8.11.0" - -acorn@^8.0.0, acorn@^8.0.4, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.2: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - -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.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.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -algoliasearch-helper@^3.13.3: - version "3.22.6" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.22.6.tgz#6a31c67d277a32f3f7ae1b8a6e57ca73f1e1a0b0" - integrity sha512-F2gSb43QHyvZmvH/2hxIjbk/uFdO2MguQYTFP7J+RowMW1csjIODMobEnpLI8nbLQuzZnGZdIxl5Bpy1k9+CFQ== - dependencies: - "@algolia/events" "^4.0.1" - -algoliasearch@^4.18.0: - version "4.24.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.24.0.tgz#b953b3e2309ef8f25da9de311b95b994ac918275" - integrity sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g== - dependencies: - "@algolia/cache-browser-local-storage" "4.24.0" - "@algolia/cache-common" "4.24.0" - "@algolia/cache-in-memory" "4.24.0" - "@algolia/client-account" "4.24.0" - "@algolia/client-analytics" "4.24.0" - "@algolia/client-common" "4.24.0" - "@algolia/client-personalization" "4.24.0" - "@algolia/client-search" "4.24.0" - "@algolia/logger-common" "4.24.0" - "@algolia/logger-console" "4.24.0" - "@algolia/recommend" "4.24.0" - "@algolia/requester-browser-xhr" "4.24.0" - "@algolia/requester-common" "4.24.0" - "@algolia/requester-node-http" "4.24.0" - "@algolia/transporter" "4.24.0" - -algoliasearch@^5.12.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.16.0.tgz#5a1768ae6846c93a8314ecdf1521dd11ce6c80b0" - integrity sha512-0zWz0LGfB0MLrhcnyGDpvVWPSsZnECNU6V/GPtNkHHSgaUj/7i+j36bZm6HClCvo8GvuxbN+ccbFREWUouHlfg== - dependencies: - "@algolia/client-abtesting" "5.16.0" - "@algolia/client-analytics" "5.16.0" - "@algolia/client-common" "5.16.0" - "@algolia/client-insights" "5.16.0" - "@algolia/client-personalization" "5.16.0" - "@algolia/client-query-suggestions" "5.16.0" - "@algolia/client-search" "5.16.0" - "@algolia/ingestion" "1.16.0" - "@algolia/monitoring" "1.16.0" - "@algolia/recommend" "5.16.0" - "@algolia/requester-browser-xhr" "5.16.0" - "@algolia/requester-fetch" "5.16.0" - "@algolia/requester-node-http" "5.16.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-escapes@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -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.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -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== - -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-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-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== - -astring@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" - integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== - -async@^3.2.4: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -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.4.19: - version "10.4.20" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" - integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== - dependencies: - browserslist "^4.23.3" - caniuse-lite "^1.0.30001646" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.1" - postcss-value-parser "^4.2.0" - -babel-loader@^9.2.1: - version "9.2.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" - integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== - dependencies: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - -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-polyfill-corejs2@^0.4.10: - version "0.4.12" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" - integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.3" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" - integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.3" - -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== - -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.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - 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.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.3.0" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" - integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== - dependencies: - 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@^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" - -boxen@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" - integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== - dependencies: - ansi-align "^3.0.1" - camelcase "^7.0.1" - chalk "^5.2.0" - cli-boxes "^3.0.0" - string-width "^5.1.2" - type-fest "^2.13.0" - widest-line "^4.0.1" - wrap-ansi "^8.1.0" - -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" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.23.0, browserslist@^4.23.1, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.2: - version "4.24.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" - integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== - dependencies: - caniuse-lite "^1.0.30001669" - electron-to-chromium "^1.5.41" - node-releases "^2.0.18" - update-browserslist-db "^1.1.1" - -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== - -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-lookup@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" - integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== - -cacheable-request@^10.2.8: - version "10.2.14" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" - integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== - dependencies: - "@types/http-cache-semantics" "^4.0.2" - get-stream "^6.0.1" - http-cache-semantics "^4.1.1" - keyv "^4.5.3" - mimic-response "^4.0.0" - normalize-url "^8.0.0" - responselike "^3.0.0" - -call-bind-apply-helpers@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" - integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.5, call-bind@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" - get-intrinsic "^1.2.4" - set-function-length "^1.2.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@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -camelcase@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" - integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== - -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.30001646, caniuse-lite@^1.0.30001669: - version "1.0.30001687" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz#d0ac634d043648498eedf7a3932836beba90ebae" - integrity sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ== - -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@^4.0.0, 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" - -chalk@^5.0.1, chalk@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -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@^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@^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@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -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.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - 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" - -chrome-trace-event@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" - integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -clean-css@^5.2.2, clean-css@^5.3.2, clean-css@~5.3.2: - version "5.3.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" - integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== - 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@^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.3: - version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - 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" - -clsx@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - -collapse-white-space@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca" - integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== - -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.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== - -colord@^2.9.3: - 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.2.0" - resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.2.0.tgz#5f2e68451862acf85761ded4d9e2af7769c2ca6a" - integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ== - -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@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== - -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.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -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== - -compressible@~2.0.18: - 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.5" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.5.tgz#fdd256c0a642e39e314c478f6c2cd654edd74c93" - integrity sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q== - dependencies: - bytes "3.1.2" - compressible "~2.0.18" - debug "2.6.9" - negotiator "~0.6.4" - on-headers "~1.0.2" - safe-buffer "5.2.1" - vary "~1.1.2" - -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== - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" - integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== - dependencies: - dot-prop "^6.0.1" - graceful-fs "^4.2.6" - unique-string "^3.0.0" - write-file-atomic "^3.0.3" - xdg-basedir "^5.0.1" - -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@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" - integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== - -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, content-type@~1.0.5: - 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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -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.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== - -copy-text-to-clipboard@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b" - integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q== - -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.38.0, core-js-compat@^3.38.1: - version "3.39.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" - integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== - dependencies: - browserslist "^4.24.2" - -core-js-pure@^3.30.2: - version "3.39.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.39.0.tgz#aa0d54d70a15bdc13e7c853db87c10abc30d68f3" - integrity sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg== - -core-js@^3.31.1: - version "3.39.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.39.0.tgz#57f7647f4d2d030c32a72ea23a0555b2eaa30f83" - integrity sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g== - -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@^8.1.3, cosmiconfig@^8.3.5: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -css-blank-pseudo@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46" - integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== - dependencies: - postcss-selector-parser "^7.0.0" - -css-declaration-sorter@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz#6dec1c9523bc4a643e088aab8f09e67a54961024" - integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== - -css-has-pseudo@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.1.tgz#adbb51821e51f7a7c1d2df4d12827870cc311137" - integrity sha512-EOcoyJt+OsuKfCADgLT7gADZI5jMzIe/AeI6MeAYKiFBDmNmM7kk46DtSfMj5AohUJisqVzopBpnQTlvbyaBWg== - dependencies: - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - postcss-value-parser "^4.2.0" - -css-loader@^6.8.1: - version "6.11.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" - integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.33" - postcss-modules-extract-imports "^3.1.0" - postcss-modules-local-by-default "^4.0.5" - postcss-modules-scope "^3.2.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.5.4" - -css-minimizer-webpack-plugin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" - integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - cssnano "^6.0.1" - jest-worker "^29.4.3" - postcss "^8.4.24" - schema-utils "^4.0.1" - serialize-javascript "^6.0.1" - -css-prefers-color-scheme@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c" - integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== - -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-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.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== - -cssdb@^8.2.1: - version "8.2.3" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.2.3.tgz#7e6980bb5a785a9b4eb2a21bd38d50624b56cb46" - integrity sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA== - -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@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz#82b090872b8f98c471f681d541c735acf8b94d3f" - integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ== - dependencies: - autoprefixer "^10.4.19" - browserslist "^4.23.0" - cssnano-preset-default "^6.1.2" - postcss-discard-unused "^6.0.5" - postcss-merge-idents "^6.0.3" - postcss-reduce-idents "^6.0.3" - postcss-zindex "^6.0.2" - -cssnano-preset-default@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" - integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== - dependencies: - browserslist "^4.23.0" - css-declaration-sorter "^7.2.0" - cssnano-utils "^4.0.2" - postcss-calc "^9.0.1" - postcss-colormin "^6.1.0" - postcss-convert-values "^6.1.0" - postcss-discard-comments "^6.0.2" - postcss-discard-duplicates "^6.0.3" - postcss-discard-empty "^6.0.3" - postcss-discard-overridden "^6.0.2" - postcss-merge-longhand "^6.0.5" - postcss-merge-rules "^6.1.1" - postcss-minify-font-values "^6.1.0" - postcss-minify-gradients "^6.0.3" - postcss-minify-params "^6.1.0" - postcss-minify-selectors "^6.0.4" - postcss-normalize-charset "^6.0.2" - postcss-normalize-display-values "^6.0.2" - postcss-normalize-positions "^6.0.2" - postcss-normalize-repeat-style "^6.0.2" - postcss-normalize-string "^6.0.2" - postcss-normalize-timing-functions "^6.0.2" - postcss-normalize-unicode "^6.1.0" - postcss-normalize-url "^6.0.2" - postcss-normalize-whitespace "^6.0.2" - postcss-ordered-values "^6.0.2" - postcss-reduce-initial "^6.1.0" - postcss-reduce-transforms "^6.0.2" - postcss-svgo "^6.0.3" - postcss-unique-selectors "^6.0.4" - -cssnano-utils@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" - integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== - -cssnano@^6.0.1, cssnano@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" - integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== - dependencies: - cssnano-preset-default "^6.1.2" - lilconfig "^3.1.1" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -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.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -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@^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, deepmerge@^4.3.1: - 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@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -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.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - 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== - -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.5.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" - integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== - dependencies: - address "^1.0.1" - debug "4" - -devlop@^1.0.0, devlop@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -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-packet@^5.2.2: - version "5.6.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -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-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.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.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -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@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dunder-proto@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80" - integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-errors "^1.3.0" - gopd "^1.2.0" - -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== - -electron-to-chromium@^1.5.41: - version "1.5.72" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz#a732805986d3a5b5fedd438ddf4616c7d78ac2df" - integrity sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw== - -email-addresses@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6" - integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw== - -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== - -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== - -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@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" - integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== - -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== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -enhanced-resolve@^5.17.1: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== - 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, entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -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-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.2.1: - version "1.5.4" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" - integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== - -esast-util-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad" - integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - unist-util-position-from-estree "^2.0.0" - -esast-util-from-js@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz#5147bec34cc9da44accf52f87f239a40ac3e8225" - integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== - dependencies: - "@types/estree-jsx" "^1.0.0" - acorn "^8.0.0" - esast-util-from-estree "^2.0.0" - vfile-message "^4.0.0" - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-goat@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" - integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== - -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.2, 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== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -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" - -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-util-attach-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d" - integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-build-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1" - integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-walker "^3.0.0" - -estree-util-is-identifier-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" - integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== - -estree-util-scope@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz#9cbdfc77f5cb51e3d9ed4ad9c4adbff22d43e585" - integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - -estree-util-to-js@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17" - integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== - dependencies: - "@types/estree-jsx" "^1.0.0" - astring "^1.8.0" - source-map "^0.7.0" - -estree-util-value-to-estree@^3.0.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.2.1.tgz#f8083e56f51efb4889794490730c036ba6167ee6" - integrity sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-visit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" - integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/unist" "^3.0.0" - -estree-walker@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -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.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" - integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== - -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" - -express@^4.17.3: - version "4.21.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" - integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.3" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.12" - proxy-addr "~2.0.7" - qs "6.13.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" - 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, fast-glob@^3.3.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - 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: - 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-uri@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" - integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fault@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" - integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== - dependencies: - format "^0.2.0" - -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" - -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" - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -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" - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== - -filenamify@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" - integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.1" - trim-repeated "^1.0.0" - -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.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - 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-cache-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" - integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== - dependencies: - common-path-prefix "^3.0.0" - pkg-dir "^7.0.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" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -follow-redirects@^1.0.0: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -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" - -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== - -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.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -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-extra@^11.1.1, fs-extra@^11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.0: - 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.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" - integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== - -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.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -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.2.4: - version "1.2.5" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.5.tgz#dfe7dd1b30761b464fe51bf4bb00ac7c37b681e7" - integrity sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg== - dependencies: - call-bind-apply-helpers "^1.0.0" - dunder-proto "^1.0.0" - es-define-property "^1.0.1" - es-errors "^1.3.0" - function-bind "^1.1.2" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - -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@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -gh-pages@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.2.0.tgz#4a0ca8ab78d273e78b82fbc9bb6e1c27a22ea0b8" - integrity sha512-HMXJ8th9u5wRXaZCnLcs/d3oVvCHiZkaP5KQExQljYGwJjQbSPyTdHe/Gc1IvYUR/rWiZLxNobIqfoMHKTKjHQ== - dependencies: - async "^3.2.4" - commander "^11.0.0" - email-addresses "^5.0.0" - filenamify "^4.3.0" - find-cache-dir "^3.3.1" - fs-extra "^11.1.1" - globby "^11.1.0" - -github-slugger@^1.5.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== - -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.2.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -gopd@^1.0.1, gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -got@^12.1.0: - version "12.6.1" - resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" - integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, 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" - -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-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, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-yarn@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" - integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== - -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hast-util-from-parse5@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.2.tgz#29b42758ba96535fd6021f0f533c000886c0f00f" - integrity sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - hastscript "^9.0.0" - property-information "^6.0.0" - vfile "^6.0.0" - vfile-location "^5.0.0" - web-namespaces "^2.0.0" - -hast-util-parse-selector@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" - integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-raw@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" - integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-from-parse5 "^8.0.0" - hast-util-to-parse5 "^8.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - parse5 "^7.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-to-estree@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz#f2afe5e869ddf0cf690c75f9fc699f3180b51b19" - integrity sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-attach-comments "^3.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^0.4.0" - unist-util-position "^5.0.0" - zwitch "^2.0.0" - -hast-util-to-jsx-runtime@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz#6d11b027473e69adeaa00ca4cfb5bb68e3d282fa" - integrity sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^1.0.0" - unist-util-position "^5.0.0" - vfile-message "^4.0.0" - -hast-util-to-parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz#477cd42d278d4f036bc2ea58586130f6f39ee6ed" - integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-whitespace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" - integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== - dependencies: - "@types/hast" "^3.0.0" - -hastscript@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.0.tgz#2b76b9aa3cba8bf6d5280869f6f6f7165c230763" - integrity sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^4.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.1.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.5.2" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" - integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== - -html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^6.0.2: - 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-minifier-terser@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" - integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== - dependencies: - camel-case "^4.1.2" - clean-css "~5.3.2" - commander "^10.0.0" - entities "^4.4.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.15.1" - -html-tags@^3.3.1: - 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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" - integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== - -html-webpack-plugin@^5.6.0: - version "5.6.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" - integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== - 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.1.1: - 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.7" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6" - integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA== - 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" - -http2-wrapper@^2.1.10: - version "2.2.1" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" - integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.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" - -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== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -image-size@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.1.1.tgz#ddd67d4dc340e52ac29ce5f546a09f4e29e840ac" - integrity sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ== - dependencies: - queue "6.0.2" - -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.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@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -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.45: - version "0.2.0-alpha.45" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" - integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== - -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.1, inherits@^2.0.3, 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.4, 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== - -inline-style-parser@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz#f4af5fe72e612839fcd453d989a586566d695f22" - integrity sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== - -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.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.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-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-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.13.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -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-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@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -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-npm@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.0.0.tgz#b59e75e8915543ca5d881ecff864077cba095261" - integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== - -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@^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-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-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-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-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.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" - integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== - -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== - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -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.4.3: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jiti@^1.20.0: - version "1.21.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" - integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== - -joi@^17.9.2: - version "17.13.3" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" - integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== - dependencies: - "@hapi/hoek" "^9.3.0" - "@hapi/topo" "^5.1.0" - "@sideway/address" "^4.1.5" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -"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@^3.0.2, jsesc@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -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== - -json5@^2.1.2, json5@^2.2.3: - 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" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -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== - -latest-version@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" - integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== - dependencies: - package-json "^8.1.0" - -launch-editor@^2.6.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.9.1.tgz#253f173bd441e342d4344b4dae58291abb425047" - integrity sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" - -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== - -lilconfig@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== - -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.3.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" - integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== - -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" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -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.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.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.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" - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -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" - -make-dir@^3.0.2: - 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-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" - integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== - -markdown-table@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" - integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== - dependencies: - repeat-string "^1.0.0" - -markdown-table@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" - integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== - -mdast-util-directive@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz#3fb1764e705bbdf0afb0d3f889e4404c3e82561f" - integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz#a6fc7b62f0994e973490e45262e4bc07607b04e0" - integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== - dependencies: - "@types/mdast" "^4.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-from-markdown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" - integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - mdast-util-to-string "^4.0.0" - micromark "^4.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-decode-string "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-stringify-position "^4.0.0" - -mdast-util-frontmatter@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" - integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - escape-string-regexp "^5.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - -mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" - integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== - dependencies: - "@types/mdast" "^4.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-find-and-replace "^3.0.0" - micromark-util-character "^2.0.0" - -mdast-util-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz#25a1753c7d16db8bfd53cd84fe50562bd1e6d6a9" - integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - -mdast-util-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" - integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" - integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-task-list-item@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" - integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz#3f2aecc879785c3cb6a81ff3a243dc11eca61095" - integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-gfm-autolink-literal "^2.0.0" - mdast-util-gfm-footnote "^2.0.0" - mdast-util-gfm-strikethrough "^2.0.0" - mdast-util-gfm-table "^2.0.0" - mdast-util-gfm-task-list-item "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-expression@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" - integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-jsx@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" - integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -mdast-util-mdx@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" - integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdxjs-esm@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" - integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== - dependencies: - "@types/mdast" "^4.0.0" - unist-util-is "^6.0.0" - -mdast-util-to-hast@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" - integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - devlop "^1.0.0" - micromark-util-sanitize-uri "^2.0.0" - trim-lines "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -mdast-util-to-markdown@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" - integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-decode-string "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" - integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== - dependencies: - "@types/mdast" "^4.0.0" - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -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.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -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@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz#6a45bbb139e126b3f8b361a10711ccc7c6e15e93" - integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== - dependencies: - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-factory-destination "^2.0.0" - micromark-factory-label "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-title "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-html-tag-name "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-directive@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz#2eb61985d1995a7c1ff7621676a4f32af29409e8" - integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - parse-entities "^4.0.0" - -micromark-extension-frontmatter@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" - integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== - dependencies: - fault "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" - integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" - integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== - dependencies: - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-strikethrough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" - integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-table@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz#5cadedfbb29fca7abf752447967003dc3b6583c9" - integrity sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-tagfilter@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" - integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-gfm-task-list-item@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" - integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" - integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== - dependencies: - micromark-extension-gfm-autolink-literal "^2.0.0" - micromark-extension-gfm-footnote "^2.0.0" - micromark-extension-gfm-strikethrough "^2.0.0" - micromark-extension-gfm-table "^2.0.0" - micromark-extension-gfm-tagfilter "^2.0.0" - micromark-extension-gfm-task-list-item "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-expression@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a" - integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz#5abb83da5ddc8e473a374453e6ea56fbd66b59ad" - integrity sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdx-md@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" - integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-mdxjs-esm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" - integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdxjs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" - integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^3.0.0" - micromark-extension-mdx-jsx "^3.0.0" - micromark-extension-mdx-md "^2.0.0" - micromark-extension-mdxjs-esm "^3.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-destination@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" - integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-label@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" - integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== - dependencies: - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-mdx-expression@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz#2afaa8ba6d5f63e0cead3e4dee643cad184ca260" - integrity sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-factory-space@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" - integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-space@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" - integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-title@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" - integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" - integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" - integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" - integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-chunked@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" - integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-classify-character@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" - integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-combine-extensions@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" - integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== - dependencies: - micromark-util-chunked "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" - integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-decode-string@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" - integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" - integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== - -micromark-util-events-to-acorn@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07" - integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-util-html-tag-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" - integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== - -micromark-util-normalize-identifier@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" - integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-resolve-all@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" - integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" - integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-subtokenize@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz#70ffb99a454bd8c913c8b709c3dc97baefb65f96" - integrity sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" - integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== - -micromark-util-symbol@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" - integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== - -micromark-util-types@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" - integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== - -micromark-util-types@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" - integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== - -micromark@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.1.tgz#294c2f12364759e5f9e925a767ae3dfde72223ff" - integrity sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - 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.43.0 < 2": - version "1.53.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" - integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== - -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: - 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@^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== - -mimic-response@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" - integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== - -mini-css-extract-plugin@^2.9.1: - version "2.9.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz#966031b468917a5446f4c24a80854b2947503c5b" - integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w== - dependencies: - schema-utils "^4.0.0" - tapable "^2.2.1" - -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" - -minimist@^1.2.0: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mrmime@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" - integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== - -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.3, ms@^2.1.3: - 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.7: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== - -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== - -negotiator@~0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - -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-emoji@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" - integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== - dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.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.18: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== - -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@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" - integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== - -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.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" - -null-loader@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" - integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.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.13.1: - version "1.13.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== - -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: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - 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: - 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== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -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-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.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-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -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@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" - integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== - dependencies: - got "^12.1.0" - registry-auth-token "^5.0.1" - registry-url "^6.0.0" - semver "^7.3.7" - -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@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== - dependencies: - "@types/unist" "^2.0.0" - character-entities "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-json@^5.0.0, parse-json@^5.2.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-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.1.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b" - integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== - dependencies: - domhandler "^5.0.3" - parse5 "^7.0.0" - -parse5@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" - integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== - dependencies: - entities "^4.5.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-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -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.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" - integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== - -path-to-regexp@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" - integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== - -path-to-regexp@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" - integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== - 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, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -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-dir@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" - integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== - dependencies: - find-up "^6.3.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-attribute-case-insensitive@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" - integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-calc@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.6.tgz#d74c1e2294b72287eb9af079c04b7ddeff7ec5b3" - integrity sha512-wLXvm8RmLs14Z2nVpB4CWlnvaWPRcOZFltJSlcbYwSJ1EDZKsKDhPKIMecCnuU054KSmlmubkqczmm6qBPCBhA== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -postcss-color-hex-alpha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76" - integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98" - integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" - integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - colord "^2.9.3" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" - integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^11.0.5: - version "11.0.5" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz#2fcd88a9b1d4da41c67dac6f2def903063a3377d" - integrity sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/media-query-list-parser" "^4.0.2" - -postcss-custom-properties@^14.0.4: - version "14.0.4" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz#de9c663285a98833a946d7003a34369d3ce373a9" - integrity sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz#95ef8268fdbbbd84f34cf84a4517c9d99d419c5a" - integrity sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.4" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - postcss-selector-parser "^7.0.0" - -postcss-dir-pseudo-class@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca" - integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-discard-comments@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" - integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== - -postcss-discard-duplicates@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" - integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== - -postcss-discard-empty@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" - integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== - -postcss-discard-overridden@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" - integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== - -postcss-discard-unused@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz#c1b0e8c032c6054c3fbd22aaddba5b248136f338" - integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-double-position-gradients@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.0.tgz#eddd424ec754bb543d057d4d2180b1848095d4d2" - integrity sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868" - integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-focus-within@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7" - integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed" - integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== - -postcss-image-set-function@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53" - integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-lab-function@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.6.tgz#3121800fc7939ed1d9a1e87abeb33c407151252c" - integrity sha512-HPwvsoK7C949vBZ+eMyvH2cQeMr3UREoHvbtra76/UhDuiViZH6pir+z71UaJQohd7VDSVUdR6TkWYKExEc9aQ== - dependencies: - "@csstools/css-color-parser" "^3.0.6" - "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/utilities" "^2.0.0" - -postcss-loader@^7.3.3: - version "7.3.4" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" - integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== - dependencies: - cosmiconfig "^8.3.5" - jiti "^1.20.0" - semver "^7.5.4" - -postcss-logical@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.0.0.tgz#0db0b90c2dc53b485a8074a4b7a906297544f58d" - integrity sha512-HpIdsdieClTjXLOyYdUPAX/XQASNIwdKt5hoZW08ZOAiI+tbV0ta1oclkpVkW5ANU+xJvk3KkA0FejkjGLXUkg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-merge-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65" - integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-merge-longhand@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" - integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.1.1" - -postcss-merge-rules@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" - integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.2" - postcss-selector-parser "^6.0.16" - -postcss-minify-font-values@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" - integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" - integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== - dependencies: - colord "^2.9.3" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" - integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== - dependencies: - browserslist "^4.23.0" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" - integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-modules-extract-imports@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" - integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== - -postcss-modules-local-by-default@^4.0.5: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz#b0db6bc81ffc7bdc52eb0f84d6ca0bedf0e36d21" - integrity sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^7.0.0" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" - integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== - dependencies: - postcss-selector-parser "^7.0.0" - -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-nesting@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.1.tgz#c405796d7245a3e4c267a9956cacfe9670b5d43e" - integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ== - dependencies: - "@csstools/selector-resolve-nested" "^3.0.0" - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -postcss-normalize-charset@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" - integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== - -postcss-normalize-display-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" - integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" - integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" - integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" - integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" - integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" - integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" - integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" - integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-opacity-percentage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a" - integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== - -postcss-ordered-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" - integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af" - integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9" - integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.1.1.tgz#6ee631272353fb1c4a9711943e9b80a178ffce44" - integrity sha512-wqqsnBFD6VIwcHHRbhjTOcOi4qRVlB26RwSr0ordPj7OubRRxdWebv/aLjKLRR8zkZrbxZyuus03nOIgC5elMQ== - dependencies: - "@csstools/postcss-cascade-layers" "^5.0.1" - "@csstools/postcss-color-function" "^4.0.6" - "@csstools/postcss-color-mix-function" "^3.0.6" - "@csstools/postcss-content-alt-text" "^2.0.4" - "@csstools/postcss-exponential-functions" "^2.0.5" - "@csstools/postcss-font-format-keywords" "^4.0.0" - "@csstools/postcss-gamut-mapping" "^2.0.6" - "@csstools/postcss-gradients-interpolation-method" "^5.0.6" - "@csstools/postcss-hwb-function" "^4.0.6" - "@csstools/postcss-ic-unit" "^4.0.0" - "@csstools/postcss-initial" "^2.0.0" - "@csstools/postcss-is-pseudo-class" "^5.0.1" - "@csstools/postcss-light-dark-function" "^2.0.7" - "@csstools/postcss-logical-float-and-clear" "^3.0.0" - "@csstools/postcss-logical-overflow" "^2.0.0" - "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" - "@csstools/postcss-logical-resize" "^3.0.0" - "@csstools/postcss-logical-viewport-units" "^3.0.3" - "@csstools/postcss-media-minmax" "^2.0.5" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.4" - "@csstools/postcss-nested-calc" "^4.0.0" - "@csstools/postcss-normalize-display-values" "^4.0.0" - "@csstools/postcss-oklab-function" "^4.0.6" - "@csstools/postcss-progressive-custom-properties" "^4.0.0" - "@csstools/postcss-random-function" "^1.0.1" - "@csstools/postcss-relative-color-syntax" "^3.0.6" - "@csstools/postcss-scope-pseudo-class" "^4.0.1" - "@csstools/postcss-sign-functions" "^1.1.0" - "@csstools/postcss-stepped-value-functions" "^4.0.5" - "@csstools/postcss-text-decoration-shorthand" "^4.0.1" - "@csstools/postcss-trigonometric-functions" "^4.0.5" - "@csstools/postcss-unset-value" "^4.0.0" - autoprefixer "^10.4.19" - browserslist "^4.23.1" - css-blank-pseudo "^7.0.1" - css-has-pseudo "^7.0.1" - css-prefers-color-scheme "^10.0.0" - cssdb "^8.2.1" - postcss-attribute-case-insensitive "^7.0.1" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^7.0.6" - postcss-color-hex-alpha "^10.0.0" - postcss-color-rebeccapurple "^10.0.0" - postcss-custom-media "^11.0.5" - postcss-custom-properties "^14.0.4" - postcss-custom-selectors "^8.0.4" - postcss-dir-pseudo-class "^9.0.1" - postcss-double-position-gradients "^6.0.0" - postcss-focus-visible "^10.0.1" - postcss-focus-within "^9.0.1" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^6.0.0" - postcss-image-set-function "^7.0.0" - postcss-lab-function "^7.0.6" - postcss-logical "^8.0.0" - postcss-nesting "^13.0.1" - postcss-opacity-percentage "^3.0.0" - postcss-overflow-shorthand "^6.0.0" - postcss-page-break "^3.0.4" - postcss-place "^10.0.0" - postcss-pseudo-class-any-link "^10.0.1" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^8.0.1" - -postcss-pseudo-class-any-link@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544" - integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-reduce-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486" - integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" - integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" - integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172" - integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz#41bd8b56f177c093ca49435f65731befe25d6b9c" - integrity sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-sort-media-queries@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97" - integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA== - dependencies: - sort-css-media-queries "2.2.0" - -postcss-svgo@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" - integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.2.0" - -postcss-unique-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" - integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== - dependencies: - postcss-selector-parser "^6.0.16" - -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@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1" - integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== - -postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.26, postcss@^8.4.33, postcss@^8.4.38: - version "8.4.49" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" - integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -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@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz#c5ea692029c2f8b3fd04f63662d04ffd4eaf10a0" - integrity sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw== - dependencies: - "@types/prismjs" "^1.26.0" - clsx "^2.0.0" - -prismjs@^1.29.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== - -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.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@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -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" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pupa@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" - integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== - dependencies: - escape-goat "^4.0.0" - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -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" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -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.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -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-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@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.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, react-fast-compare@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" - integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== - -react-helmet-async@*: - version "2.0.5" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.5.tgz#cfc70cd7bb32df7883a8ed55502a1513747223ec" - integrity sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg== - dependencies: - invariant "^2.2.4" - react-fast-compare "^3.2.2" - shallowequal "^1.1.0" - -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.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-json-view-lite@^1.2.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz#377cc302821717ac79a1b6d099e1891df54c8662" - integrity sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw== - -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-loadable@npm:@docusaurus/react-loadable@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" - integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== - dependencies: - "@types/react" "*" - -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.4: - 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.4: - 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@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" - integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== - dependencies: - loose-envify "^1.1.0" - -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: - 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" - -recma-build-jsx@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz#c02f29e047e103d2fab2054954e1761b8ea253c4" - integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== - dependencies: - "@types/estree" "^1.0.0" - estree-util-build-jsx "^3.0.0" - vfile "^6.0.0" - -recma-jsx@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-jsx/-/recma-jsx-1.0.0.tgz#f7bef02e571a49d6ba3efdfda8e2efab48dbe3aa" - integrity sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q== - dependencies: - acorn-jsx "^5.0.0" - estree-util-to-js "^2.0.0" - recma-parse "^1.0.0" - recma-stringify "^1.0.0" - unified "^11.0.0" - -recma-parse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-parse/-/recma-parse-1.0.0.tgz#c351e161bb0ab47d86b92a98a9d891f9b6814b52" - integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== - dependencies: - "@types/estree" "^1.0.0" - esast-util-from-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -recma-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-stringify/-/recma-stringify-1.0.0.tgz#54632030631e0c7546136ff9ef8fde8e7b44f130" - integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== - dependencies: - "@types/estree" "^1.0.0" - estree-util-to-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -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.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" - integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== - 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.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" - integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.0" - regjsgen "^0.8.0" - regjsparser "^0.12.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -registry-auth-token@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.3.tgz#417d758c8164569de8cf5cabff16cc937902dcc6" - integrity sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -registry-url@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" - integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== - dependencies: - rc "1.2.8" - -regjsgen@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" - integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== - -regjsparser@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" - integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== - dependencies: - jsesc "~3.0.2" - -rehype-raw@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" - integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== - dependencies: - "@types/hast" "^3.0.0" - hast-util-raw "^9.0.0" - vfile "^6.0.0" - -rehype-recma@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rehype-recma/-/rehype-recma-1.0.0.tgz#d68ef6344d05916bd96e25400c6261775411aa76" - integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - hast-util-to-estree "^3.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-directive@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.0.tgz#34452d951b37e6207d2e2a4f830dc33442923268" - integrity sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-directive "^3.0.0" - micromark-extension-directive "^3.0.0" - unified "^11.0.0" - -remark-emoji@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04" - integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== - dependencies: - "@types/mdast" "^4.0.2" - emoticon "^4.0.1" - mdast-util-find-and-replace "^3.0.1" - node-emoji "^2.1.0" - unified "^11.0.4" - -remark-frontmatter@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2" - integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-frontmatter "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - unified "^11.0.0" - -remark-gfm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.0.tgz#aea777f0744701aa288b67d28c43565c7e8c35de" - integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-gfm "^3.0.0" - micromark-extension-gfm "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - unified "^11.0.0" - -remark-mdx@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.0.tgz#f979be729ecb35318fa48e2135c1169607a78343" - integrity sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA== - dependencies: - mdast-util-mdx "^3.0.0" - micromark-extension-mdxjs "^3.0.0" - -remark-parse@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" - integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - micromark-util-types "^2.0.0" - unified "^11.0.0" - -remark-rehype@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.1.tgz#f864dd2947889a11997c0a2667cd6b38f685bca7" - integrity sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - mdast-util-to-hast "^13.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -remark-stringify@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" - integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-markdown "^2.0.0" - unified "^11.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: - 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== - -resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -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: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.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" - -rtl-detect@^1.0.4: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.1.2.tgz#ca7f0330af5c6bb626c15675c642ba85ad6273c6" - integrity sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ== - -rtlcss@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.3.0.tgz#f8efd4d5b64f640ec4af8fa25b65bacd9e07cc97" - integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - postcss "^8.4.21" - 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" - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, 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-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== - -"safer-buffer@>= 2.1.2 < 3": - 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.4.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" - integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== - -scheduler@^0.23.2: - version "0.23.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== - dependencies: - loose-envify "^1.1.0" - -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@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0, schema-utils@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -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.4.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" - integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== - dependencies: - "@types/node-forge" "^1.3.0" - node-forge "^1" - -semver-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - -semver@^6.0.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== - 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@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-handler@^6.1.6: - version "6.1.6" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1" - integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== - dependencies: - bytes "3.0.0" - content-disposition "0.5.2" - mime-types "2.1.18" - minimatch "3.1.2" - path-is-inside "1.0.2" - path-to-regexp "3.3.0" - 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.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" - -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -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== - -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, shell-quote@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" - integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== - -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.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -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== - -sirv@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" - integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.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.2" - resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.2.tgz#6ce1deb43f6f177c68bc59cf93632f54e3ae6b72" - integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw== - dependencies: - "@types/node" "^17.0.5" - "@types/sax" "^1.2.1" - arg "^5.0.0" - sax "^1.2.4" - -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - -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== - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -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.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c" - integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== - -source-map-js@^1.0.1, source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -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.6.0, 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.7.0: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -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== - -srcset@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" - integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== - -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.7.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" - integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== - -string-width@^4.1.0, string-width@^4.2.0: - 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, string-width@^5.1.2: - 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_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.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - 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.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - 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-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@^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== - -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-outer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -style-to-object@^0.4.0: - version "0.4.4" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.4.4.tgz#266e3dfd56391a7eefb7770423612d043c3f33ec" - integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== - dependencies: - inline-style-parser "0.1.1" - -style-to-object@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.8.tgz#67a29bca47eaa587db18118d68f9d95955e81292" - integrity sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g== - dependencies: - inline-style-parser "0.2.4" - -stylehacks@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" - integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== - dependencies: - browserslist "^4.23.0" - postcss-selector-parser "^6.0.16" - -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@^3.0.2, svgo@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - -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, tapable@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.9: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== - dependencies: - "@jridgewell/trace-mapping" "^0.3.20" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" - -terser@^5.10.0, terser@^5.15.1, terser@^5.26.0: - version "5.37.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3" - integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - 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.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - -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-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" - -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@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -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-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== - dependencies: - escape-string-regexp "^1.0.2" - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -tslib@^2.0.3, tslib@^2.6.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.13.0, 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@~5.6.2: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" - integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -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.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" - integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== - -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@^11.0.0, unified@^11.0.3, unified@^11.0.4: - version "11.0.5" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" - integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== - dependencies: - "@types/unist" "^3.0.0" - bail "^2.0.0" - devlop "^1.0.0" - extend "^3.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^6.0.0" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" - integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" - integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -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== - -update-browserslist-db@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" - integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.0" - -update-notifier@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" - integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== - dependencies: - boxen "^7.0.0" - chalk "^5.0.1" - configstore "^6.0.0" - has-yarn "^3.0.0" - import-lazy "^4.0.0" - is-ci "^3.0.1" - is-installed-globally "^0.4.0" - is-npm "^6.0.0" - is-yarn-global "^0.4.0" - latest-version "^7.0.0" - pupa "^3.1.0" - semver "^7.3.7" - semver-diff "^4.0.0" - xdg-basedir "^5.1.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" - -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== - -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.11.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c" - integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== - -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== - -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@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" - integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== - dependencies: - "@types/unist" "^3.0.0" - vfile "^6.0.0" - -vfile-message@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" - integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile@^6.0.0, vfile@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" - integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== - dependencies: - "@types/unist" "^3.0.0" - vfile-message "^4.0.0" - -watchpack@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" - integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== - 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@^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== - -webpack-bundle-analyzer@^4.10.2: - version "4.10.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" - integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - commander "^7.2.0" - debounce "^1.2.1" - escape-string-regexp "^4.0.0" - gzip-size "^6.0.0" - html-escaper "^2.0.2" - opener "^1.5.2" - picocolors "^1.0.0" - sirv "^2.0.3" - ws "^7.3.1" - -webpack-dev-middleware@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" - integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== - 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.15.2: - version "4.15.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" - integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== - 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.5" - 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.4" - ws "^8.13.0" - -webpack-merge@^5.9.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-merge@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" - integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.1" - -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.88.1, webpack@^5.95.0: - version "5.97.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.97.1.tgz#972a8320a438b56ff0f1d94ade9e82eac155fa58" - integrity sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg== - dependencies: - "@types/eslint-scope" "^3.7.7" - "@types/estree" "^1.0.6" - "@webassemblyjs/ast" "^1.14.1" - "@webassemblyjs/wasm-edit" "^1.14.1" - "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.14.0" - browserslist "^4.24.0" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.1" - 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.11" - 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.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.1" - webpack-sources "^3.2.3" - -webpackbar@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-6.0.1.tgz#5ef57d3bf7ced8b19025477bc7496ea9d502076b" - integrity sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q== - dependencies: - ansi-escapes "^4.3.2" - chalk "^4.1.2" - consola "^3.2.3" - figures "^3.2.0" - markdown-table "^2.0.0" - pretty-time "^1.1.0" - std-env "^3.7.0" - wrap-ansi "^7.0.0" - -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== - -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@^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, wildcard@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -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, wrap-ansi@^8.1.0: - 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.3: - 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.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -ws@^8.13.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" - integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== - -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" - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -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== - -yocto-queue@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" - integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== From 489952ff7853c18e7d9aaa9c251d5718c6984aa4 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 12 Dec 2024 23:04:00 -0600 Subject: [PATCH 08/55] Added sphinx source and moved requirements.txt --- .gitignore | 8 ++-- README.md | 29 +++++++++++-- .../requirements.txt => requirements.txt | 0 sphinx_docs/source/conf.py | 40 ++++++++++++++++++ sphinx_docs/source/dataset.rst | 42 +++++++++++++++++++ sphinx_docs/source/documentation.rst | 4 ++ sphinx_docs/source/index.rst | 13 ++++++ 7 files changed, 128 insertions(+), 8 deletions(-) rename sphinx_docs/requirements.txt => requirements.txt (100%) create mode 100644 sphinx_docs/source/conf.py create mode 100644 sphinx_docs/source/dataset.rst create mode 100644 sphinx_docs/source/documentation.rst create mode 100644 sphinx_docs/source/index.rst diff --git a/.gitignore b/.gitignore index 9fc408e15..37611e541 100644 --- a/.gitignore +++ b/.gitignore @@ -21,12 +21,12 @@ yarn-error.log* # Clone of stochtree repo /stochtree_repo -stochtree_repo/cpp_docs +/stochtree_repo/cpp_docs # Output builds -sphinx_docs/_build -sphinx_docs/doxygen_output -sphinx_docs/source +/sphinx_docs/_build/ +/sphinx_docs/doxygen_output/ +/sphinx_docs/source/_static/ # Virtual environments /python_venv diff --git a/README.md b/README.md index 34d0c92e0..ce0857704 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,8 @@ git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree_repo #### Setting up build dependencies -The docs are largely built using [`Sphinx`](https://www.sphinx-doc.org/en/master/) and [`pkgdown`](https://pkgdown.r-lib.org). +The docs are largely built using [`Sphinx`](https://www.sphinx-doc.org/en/master/) and [`pkgdown`](https://pkgdown.r-lib.org), +with everything tied together using the ["Material for MkDocs"](https://squidfunk.github.io/mkdocs-material/) theme. ##### Sphinx @@ -31,7 +32,23 @@ To use Sphinx, you need to install a working verion of python, probably the simp python -m venv venv source venv/bin/activate pip install --upgrade pip -pip install -r sphinx_docs/requirements.txt +pip install -r requirements.txt +``` + +##### mkdocs-material + +Install the `mkdocs-material` package in the same virtual environment + +```{bash} +pip install mkdocs-material +``` + +##### stochtree + +Some of the vignettes also require having the current version of `stochtree` installed. +We install this into the same virtual environment as `sphinx` and `mkdocs-material`. + +```{bash} cd stochtree_repo pip install . cd .. @@ -65,9 +82,9 @@ mkdir -p sphinx_docs/source/_static/R_docs Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../sphinx_docs/source/_static/R_docs", install = TRUE)' ``` -### Building the doc site +### Building the sphinx doc sites for the Python and C++ APIs -Build the sphinx documentation +Build the sphinx documentation for the C++ API ```{bash} source venv/bin/activate @@ -77,3 +94,7 @@ doxygen stochtree_repo/cpp_docs/Doxyfile sphinx-build -M html sphinx_docs/source/ sphinx_docs/_build/ source deactivate ``` + +### Building the overall website + + diff --git a/sphinx_docs/requirements.txt b/requirements.txt similarity index 100% rename from sphinx_docs/requirements.txt rename to requirements.txt diff --git a/sphinx_docs/source/conf.py b/sphinx_docs/source/conf.py new file mode 100644 index 000000000..6e4b7b223 --- /dev/null +++ b/sphinx_docs/source/conf.py @@ -0,0 +1,40 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# import os +# import sys +# sys.path.insert(0, os.path.abspath('../..')) +from pathlib import Path +DOC_REPO_PATH = Path(__file__).absolute().parent.parent + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'stochtree' +copyright = '2024, Drew Herren' +author = 'Drew Herren' +release = '0.0.1' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'breathe' +] + +templates_path = ['_templates'] +exclude_patterns = [] + +# Breathe Configuration +breathe_projects = {"StochTree": str(DOC_REPO_PATH / "doxygen_output" / "xml")} +breathe_default_project = "StochTree" + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'furo' +html_static_path = ['_static'] diff --git a/sphinx_docs/source/dataset.rst b/sphinx_docs/source/dataset.rst new file mode 100644 index 000000000..30179954e --- /dev/null +++ b/sphinx_docs/source/dataset.rst @@ -0,0 +1,42 @@ +Dataset API +=========== + +Forest Dataset +-------------- + +The ``ForestDataset`` class is a wrapper around data needed to sample one or more tree ensembles. +Its core elements are + +* **Covariates**: Features / variables used to partition the forests. Stored internally as a (column-major) ``Eigen::MatrixXd``. +* **Basis**: *[Optional]* basis vector used to define a "leaf regression" --- a partitioned linear model where covariates define the partitions and basis defines the regression variables. + Also stored internally as a (column-major) ``Eigen::MatrixXd``. +* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. + Stored internally as an ``Eigen::VectorXd``. + +.. doxygenclass:: StochTree::ForestDataset + :project: StochTree + :members: + +Random Effects Dataset +---------------------- + +The ``RandomEffectsDataset`` class is a wrapper around data needed to sample one or more tree ensembles. +Its core elements are + +* **Basis**: Vector of variables that have group-specific random coefficients. In the simplest additive group random effects model, this is a constant intercept of all ones. + Stored internally as a (column-major) ``Eigen::MatrixXd``. +* **Group Indices**: Integer-valued indices of group membership. In a model with three groups, these indices would typically be 0, 1, and 2 (remapped from perhaps more descriptive labels in R or Python). + Stored internally as an ``std::vector`` of integers. +* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. + Stored internally as an ``Eigen::VectorXd``. + +.. doxygenclass:: StochTree::RandomEffectsDataset + :project: StochTree + :members: + +Other Classes and Types +----------------------- + +.. doxygenenum:: StochTree::FeatureType + :project: StochTree + \ No newline at end of file diff --git a/sphinx_docs/source/documentation.rst b/sphinx_docs/source/documentation.rst new file mode 100644 index 000000000..5c810e0b8 --- /dev/null +++ b/sphinx_docs/source/documentation.rst @@ -0,0 +1,4 @@ +Documentation +============= + +The R package documentation is `here <_static/R_docs/index.html>`_. \ No newline at end of file diff --git a/sphinx_docs/source/index.rst b/sphinx_docs/source/index.rst new file mode 100644 index 000000000..045b00448 --- /dev/null +++ b/sphinx_docs/source/index.rst @@ -0,0 +1,13 @@ +StochTree API and Implementations +================================= + +This page documents the data structures and interfaces that constitute the ``stochtree`` C++ core. +It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in ``stochtree``. + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + C++ Dataset API + Documentation + R Package From 67df1014a159c5f1e26c7a051a03aa4313a52b74 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 21:34:02 -0600 Subject: [PATCH 09/55] Prototyping mkdocs for a unified doc build --- .github/workflows/generate-c-docs.yml | 135 ----------------- .github/workflows/generate-python-docs.yml | 97 ------------ .github/workflows/generate-r-docs.yml | 133 ---------------- .gitignore | 4 + README.md | 60 ++++---- dev/build.sh | 93 ++++++------ dev/cleanup.sh | 11 ++ docs/R_docs/.nojekyll | 1 + docs/cpp_docs/index.md | 5 + docs/getting-started.md | 167 +++++++++++++++++++++ docs/index.md | 3 + docs/python_docs/bart.md | 6 + docs/python_docs/index.md | 6 + mkdocs.yml | 60 ++++++++ 14 files changed, 339 insertions(+), 442 deletions(-) delete mode 100644 .github/workflows/generate-c-docs.yml delete mode 100644 .github/workflows/generate-python-docs.yml delete mode 100644 .github/workflows/generate-r-docs.yml create mode 100644 dev/cleanup.sh create mode 100644 docs/R_docs/.nojekyll create mode 100644 docs/cpp_docs/index.md create mode 100644 docs/getting-started.md create mode 100644 docs/index.md create mode 100644 docs/python_docs/bart.md create mode 100644 docs/python_docs/index.md create mode 100644 mkdocs.yml diff --git a/.github/workflows/generate-c-docs.yml b/.github/workflows/generate-c-docs.yml deleted file mode 100644 index 9e02b4167..000000000 --- a/.github/workflows/generate-c-docs.yml +++ /dev/null @@ -1,135 +0,0 @@ -name: Generate C++ Documentation - -on: - pull_request: - branches: [main] - release: - types: [published] - workflow_dispatch: - schedule: - - cron: '0 0 * * *' # Run daily at midnight UTC - -jobs: - build_cpp_docs: - name: Build C++ Documentation - runs-on: ubuntu-latest - - permissions: - contents: write - pull-requests: write - - env: - BRANCH_NAME: docs-temp-${{ github.run_id }} - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - - steps: - - name: Checkout Documentation Repo - uses: actions/checkout@v4 - - - name: Checkout Stochtree Repository - uses: actions/checkout@v4 - with: - repository: 'StochasticTree/stochtree' - path: 'stochtree-repo' - submodules: 'recursive' - - - name: Install Dependencies - run: | - sudo apt-get update - sudo apt-get install doxygen nodejs npm -y - sudo npm install -g moxygen - - - name: Generate Doxygen XML - run: | - cd stochtree-repo - # Generate Doxygen configuration file if it doesn't exist - if [ ! -f Doxyfile ]; then - doxygen -g Doxyfile - fi - # Update Doxygen configuration - sed -i 's|^INPUT *=.*|INPUT = src|' Doxyfile - sed -i 's|^RECURSIVE *= NO|RECURSIVE = YES|' Doxyfile - sed -i 's|^GENERATE_XML *= NO|GENERATE_XML = YES|' Doxyfile - sed -i 's|^XML_OUTPUT *= xml|XML_OUTPUT = doxygen_xml|' Doxyfile - sed -i 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = doxygen_output|' Doxyfile - sed -i 's|^PROJECT_NAME *=.*|PROJECT_NAME = "stochtree"|' Doxyfile - sed -i 's|^GENERATE_HTML *= YES|GENERATE_HTML = NO|' Doxyfile - # Run Doxygen - doxygen Doxyfile - - - name: Generate Single Markdown File with moxygen - run: | - cd stochtree-repo - mkdir -p ../docs/c-documentation-markdown - moxygen doxygen_output/doxygen_xml -o ../docs/c-documentation-markdown/combined.md - - - name: Split Combined Markdown into Multiple Files - run: | - cd stochtree-repo - # Create splitMarkdown.js - cat > splitMarkdown.js << 'END_SCRIPT' - const fs = require('fs'); - const path = require('path'); - - const inputFile = '../docs/c-documentation-markdown/combined.md'; - const outputDir = '../docs/c-documentation-markdown'; - - if (!fs.existsSync(inputFile)) { - console.error(`Input file ${inputFile} does not exist.`); - process.exit(1); - } - - const data = fs.readFileSync(inputFile, 'utf8'); - - // Split the file on level 1 headers (e.g., "# ClassName") - const sections = data.split(/^# /gm).filter(section => section.trim() !== ''); - - sections.forEach(section => { - // Get the title of the section - const lines = section.split('\n'); - const title = lines[0].trim(); - const content = lines.slice(1).join('\n'); - - // Sanitize the title to create a filename - const filename = title.replace(/[<>:"\/\\|?*]/g, '').replace(/\s+/g, '_') + '.md'; - const filepath = path.join(outputDir, filename); - - // Write the section to a file with front matter - const frontMatter = `---\n` + - `title: ${title}\n` + - `---\n\n`; - fs.writeFileSync(filepath, frontMatter + `# ${title}\n${content}`, 'utf8'); - }); - END_SCRIPT - # Run the script - node splitMarkdown.js - # Remove the combined markdown file - rm ../docs/c-documentation-markdown/combined.md - - - name: Commit and Push Documentation Changes - id: commit_and_push - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - if [ -n "$(git status --porcelain)" ]; then - git checkout -b $BRANCH_NAME - git add docs/c-documentation-markdown - git commit -m "Updated C++ documentation" - git push origin $BRANCH_NAME - echo "changes=true" >> $GITHUB_OUTPUT - else - echo "No changes to commit." - echo "changes=false" >> $GITHUB_OUTPUT - fi - - - name: Merge and Clean Up Branch - if: steps.commit_and_push.outputs.changes == 'true' - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - git fetch origin main - git checkout main - git merge --no-ff $BRANCH_NAME -m "Merge updated C++ documentation" - git push origin main - git branch -D $BRANCH_NAME - git push origin --delete $BRANCH_NAME diff --git a/.github/workflows/generate-python-docs.yml b/.github/workflows/generate-python-docs.yml deleted file mode 100644 index 1fba943fe..000000000 --- a/.github/workflows/generate-python-docs.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: Generate Python Documentation - -on: - pull_request: - branches: [main] - release: - types: [published] - workflow_dispatch: - schedule: - - cron: '0 0 * * *' # Run daily at midnight UTC - # - cron: '*/10 * * * *' # Run every 10 minutes - -jobs: - build_python_docs: - name: Build Python Documentation - runs-on: ubuntu-latest - - permissions: - contents: write - pull-requests: write - - env: - BRANCH_NAME: docs-temp-${{ github.run_id }} - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - - steps: - - name: Checkout Documentation Repo - uses: actions/checkout@v4 - - - name: Checkout Stochtree Repository - uses: actions/checkout@v4 - with: - repository: 'StochasticTree/stochtree' - path: 'stochtree-repo' - submodules: 'recursive' - - - name: Setup Python 3.10 - uses: actions/setup-python@v5 - with: - python-version: '3.10' - cache: 'pip' - - - name: Install Python Package with Relevant Dependencies - working-directory: stochtree-repo - run: | - pip install --upgrade pip - pip install -r python_docs/requirements.txt - pip install sphinx-markdown-builder - pip install . - - # - name: Build Python HTML Documentation - # working-directory: stochtree-repo - # run: | - # sphinx-build -M html python_docs/source/ python_docs/_build/ - - - name: Build Python Markdown Documentation - working-directory: stochtree-repo - run: | - sphinx-build -b markdown python_docs/source/ python_docs/_build/markdown/ - - - name: Copy Python Documentation to Docs Directory - run: | - # mkdir -p docs/python-documentation-html - # rm -rf docs/python-documentation-html/* - # cp -r stochtree-repo/python_docs/_build/html/* docs/python-documentation-html/ - mkdir -p docs/python-documentation-markdown - rm -rf docs/python-documentation-markdown/* - cp -r stochtree-repo/python_docs/_build/markdown/* docs/python-documentation-markdown/ - - - name: Commit and Push Python Documentation Changes - id: commit_and_push - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - if [ -n "$(git status --porcelain)" ]; then - git checkout -b $BRANCH_NAME - # git add docs/python-documentation-html docs/python-documentation-markdown - git add docs/python-documentation-markdown - git commit -m "Updated Python documentation" - git push origin $BRANCH_NAME - echo "changes=true" >> $GITHUB_OUTPUT - else - echo "No changes to commit." - echo "changes=false" >> $GITHUB_OUTPUT - fi - - - name: Merge and Clean Up Branch - if: steps.commit_and_push.outputs.changes == 'true' - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - git fetch origin main - git checkout main - git merge --no-ff $BRANCH_NAME -m "Merge updated Python documentation" - git push origin main - git branch -D $BRANCH_NAME - git push origin --delete $BRANCH_NAME diff --git a/.github/workflows/generate-r-docs.yml b/.github/workflows/generate-r-docs.yml deleted file mode 100644 index 158e0e644..000000000 --- a/.github/workflows/generate-r-docs.yml +++ /dev/null @@ -1,133 +0,0 @@ -name: Generate R Documentation - -on: - pull_request: - branches: [main] - release: - types: [published] - workflow_dispatch: - schedule: - - cron: '0 0 * * *' # Run daily at midnight UTC - -jobs: - build_r_docs: - name: Build R Documentation - runs-on: ubuntu-latest - - permissions: - contents: write - pull-requests: write - - env: - BRANCH_NAME: docs-temp-${{ github.run_id }} - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - - steps: - - name: Checkout Documentation Repo - uses: actions/checkout@v4 - - - name: Checkout Stochtree Repository - uses: actions/checkout@v4 - with: - repository: 'StochasticTree/stochtree' - path: 'stochtree-repo' - submodules: 'recursive' - - - name: List Contents of stochtree-repo - run: | - ls -R stochtree-repo - - - name: Setup R - uses: r-lib/actions/setup-r@v2 - with: - use-public-rspm: true - - - name: Install R Dependencies - working-directory: stochtree-repo - run: | - Rscript -e 'install.packages(c("remotes", "devtools", "roxygen2", "ggplot2", "latex2exp", "decor", "Rd2md"))' - - - name: Build R Documentation - working-directory: stochtree-repo - run: | - Rscript -e ' - devtools::document() - devtools::install(dependencies = TRUE) - library(Rd2md) - rd_files <- list.files("man", pattern = "\\.Rd$", full.names = TRUE) - output_dir <- "../docs/r-documentation-markdown" - dir.create(output_dir, showWarnings = FALSE, recursive = TRUE) - - fence_code_blocks <- function(content) { - in_code_block <- FALSE - fenced_content <- sapply(content, function(line) { - if (grepl("^ ", line)) { # Indented code block - if (!in_code_block) { - in_code_block <<- TRUE - return(paste0("```r\n", sub("^ ", "", line))) - } else { - return(sub("^ ", "", line)) - } - } else { - if (in_code_block) { - in_code_block <<- FALSE - return(paste0("```\n", line)) - } else { - return(line) - } - } - }) - # Close any unclosed code blocks - if (in_code_block) { - fenced_content <- c(fenced_content, "```") - } - return(fenced_content) - } - - for (rd_file in rd_files) { - md_file <- file.path(output_dir, paste0(tools::file_path_sans_ext(basename(rd_file)), ".md")) - Rd2markdown(rd_file, out = md_file) - # Read the generated Markdown file - md_content <- readLines(md_file) - # Escape problematic characters - md_content <- gsub("([{}<>])", "\\\\\\1", md_content) - # Fence code blocks - md_content <- fence_code_blocks(md_content) - # Add front matter - title <- tools::file_path_sans_ext(basename(md_file)) - frontmatter <- c("---", paste0("title: ", title), "---", "") - md_content <- c(frontmatter, md_content) - # Write back the modified content - writeLines(md_content, md_file) - } - ' - env: - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - - - name: Commit and Push R Documentation Changes - id: commit_and_push - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - if [ -n "$(git status --porcelain)" ]; then - git checkout -b $BRANCH_NAME - git add docs/r-documentation-markdown - git commit -m "Updated R documentation" - git push origin $BRANCH_NAME - echo "changes=true" >> $GITHUB_OUTPUT - else - echo "No changes to commit." - echo "changes=false" >> $GITHUB_OUTPUT - fi - - - name: Merge and Clean Up Branch - if: steps.commit_and_push.outputs.changes == 'true' - run: | - git config user.name "${{ github.actor }}" - git config user.email "${{ github.actor }}@users.noreply.github.com" - git fetch origin main - git checkout main - git merge --no-ff $BRANCH_NAME -m "Merge updated R documentation" - git push origin main - git branch -D $BRANCH_NAME - git push origin --delete $BRANCH_NAME diff --git a/.gitignore b/.gitignore index 37611e541..490cd5ece 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Editor / IDE settings +*.vscode + # Dependencies /node_modules @@ -27,6 +30,7 @@ yarn-error.log* /sphinx_docs/_build/ /sphinx_docs/doxygen_output/ /sphinx_docs/source/_static/ +/site/ # Virtual environments /python_venv diff --git a/README.md b/README.md index ce0857704..f082ac410 100644 --- a/README.md +++ b/README.md @@ -21,37 +21,31 @@ git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree_repo #### Setting up build dependencies -The docs are largely built using [`Sphinx`](https://www.sphinx-doc.org/en/master/) and [`pkgdown`](https://pkgdown.r-lib.org), +The docs are largely built using [`mkdocs`](https://www.mkdocs.org), [`pkgdown`](https://pkgdown.r-lib.org) and [`doxygen`](https://www.doxygen.nl/index.html), with everything tied together using the ["Material for MkDocs"](https://squidfunk.github.io/mkdocs-material/) theme. -##### Sphinx +##### stochtree -To use Sphinx, you need to install a working verion of python, probably the simplest of which is the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite. +Some of the docs and vignettes require having the current version of `stochtree` installed. +We first create a virtual environment and install this library. ```{bash} python -m venv venv source venv/bin/activate +cd stochtree_repo pip install --upgrade pip -pip install -r requirements.txt +pip install numpy scipy pytest pandas scikit-learn pybind11 +pip install . +cd .. ``` ##### mkdocs-material -Install the `mkdocs-material` package in the same virtual environment +Install the `mkdocs-material` and `mkdocstrings-python` packages in the same virtual environment ```{bash} pip install mkdocs-material -``` - -##### stochtree - -Some of the vignettes also require having the current version of `stochtree` installed. -We install this into the same virtual environment as `sphinx` and `mkdocs-material`. - -```{bash} -cd stochtree_repo -pip install . -cd .. +pip install mkdocstrings-python ``` ##### pkgdown @@ -78,23 +72,37 @@ cd .. Then run the `pkgdown` build workflow to put the R docs in the correct folder ```{bash} -mkdir -p sphinx_docs/source/_static/R_docs -Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../sphinx_docs/source/_static/R_docs", install = TRUE)' +mkdir -p docs/R_docs +Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' ``` -### Building the sphinx doc sites for the Python and C++ APIs +### Building the doxygen site for the C++ API + +First, ensure that you have [doxygen](https://www.doxygen.nl/index.html) installed. +On MacOS, this can be [done via homebrew](https://formulae.brew.sh/formula/doxygen) (i.e. `brew install doxygen`). -Build the sphinx documentation for the C++ API +Then, modify the `Doxyfile` to build the C++ documentation as desired and build the doxygen site ```{bash} -source venv/bin/activate -sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = sphinx_docs/doxygen_output|' stochtree_repo/cpp_docs/Doxyfile -mkdir -p sphinx_docs/doxygen_output/ -doxygen stochtree_repo/cpp_docs/Doxyfile -sphinx-build -M html sphinx_docs/source/ sphinx_docs/_build/ -source deactivate +sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile +mkdir -p docs/cpp_docs/ +cd stochtree_repo +doxygen cpp_docs/Doxyfile +cd .. ``` ### Building the overall website +To build and preview the site locally, run +```{bash} +mkdocs serve +``` + +To build the files underlying the static site, run + +```{bash} +mkdocs build +``` diff --git a/dev/build.sh b/dev/build.sh index 2b11080ca..eed6dabc3 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -1,53 +1,44 @@ #!/bin/bash -sed -i '' 's|^INPUT *=.*|INPUT = stochtree-repo/include/stochtree|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^RECURSIVE *= NO|RECURSIVE = YES|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_XML *= NO|GENERATE_XML = YES|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^XML_OUTPUT *= xml|XML_OUTPUT = doxygen_xml|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = doxygen_output|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^PROJECT_NAME *=.*|PROJECT_NAME = "stochtree"|' stochtree-repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_HTML *= YES|GENERATE_HTML = NO|' stochtree-repo/cpp_docs/Doxyfile -doxygen stochtree-repo/cpp_docs/Doxyfile -mkdir -p docs/c-documentation-markdown -moxygen doxygen_output/doxygen_xml -o docs/c-documentation-markdown/combined.md - -cat > splitMarkdown.js << 'END_SCRIPT' -const fs = require('fs'); -const path = require('path'); - -const inputFile = 'docs/c-documentation-markdown/combined.md'; -const outputDir = 'docs/c-documentation-markdown'; - -if (!fs.existsSync(inputFile)) { -console.error(`Input file ${inputFile} does not exist.`); -process.exit(1); -} - -const data = fs.readFileSync(inputFile, 'utf8'); - -// Split the file on level 1 headers (e.g., "# ClassName") -const sections = data.split(/^# /gm).filter(section => section.trim() !== ''); - -sections.forEach(section => { -// Get the title of the section -const lines = section.split('\n'); -const title = lines[0].trim(); -const content = lines.slice(1).join('\n'); - -// Sanitize the title to create a filename -const filename = title.replace(/[<>:"\/\\|?*]/g, '').replace(/\s+/g, '_') + '.md'; -const filepath = path.join(outputDir, filename); - -// Write the section to a file with front matter -const frontMatter = `---\n` + - `title: ${title}\n` + - `---\n\n`; -fs.writeFileSync(filepath, frontMatter + `# ${title}\n${content}`, 'utf8'); -}); -END_SCRIPT - -node splitMarkdown.js - -rm docs/c-documentation-markdown/combined.md - -yarn build +# Clone stochtree repo +git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree_repo +cd stochtree_repo +git checkout documentation-overhaul +cd .. + +# Setup python virtual environment and the stochtree python package +python -m venv venv +source venv/bin/activate +cd stochtree_repo +pip install --upgrade pip +pip install numpy scipy pytest pandas scikit-learn pybind11 +pip install . +cd .. + +# Install python dependencies for the doc site +pip install mkdocs-material +pip install mkdocstrings-python + +# Build the C++ doxygen output +sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile +sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile +mkdir -p docs/cpp_docs/ +cd stochtree_repo +doxygen cpp_docs/Doxyfile +cd .. + +# Install R package dependencies +Rscript -e 'install.packages(c("remotes", "devtools", "roxygen2", "ggplot2", "latex2exp", "decor", "pkgdown", "cpp11", "BH", "doParallel", "foreach", "knitr", "Matrix", "MASS", "mvtnorm", "rmarkdown", "testthat", "tgp"), repos="https://cloud.r-project.org/")' + +# Build the R package doc site +cd stochtree_repo +Rscript cran-bootstrap.R +cp _pkgdown.yml stochtree_cran/_pkgdown.yml +cp R_README.md stochtree_cran/README.md +cd .. +mkdir -p docs/R_docs +Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' + +# Build the doc site +mkdocs build diff --git a/dev/cleanup.sh b/dev/cleanup.sh new file mode 100644 index 000000000..9b812bdf8 --- /dev/null +++ b/dev/cleanup.sh @@ -0,0 +1,11 @@ +# Remove output from the R pkgdown build +rm -rf docs/R_docs/* + +# Remove output from the (C++) doxygen build +rm -rf docs/cpp_docs/doxygen/* + +# Remove the stochtree_repo subfolder +rm -rf stochtree_repo + +# Remove venv +rm -rf venv diff --git a/docs/R_docs/.nojekyll b/docs/R_docs/.nojekyll new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/R_docs/.nojekyll @@ -0,0 +1 @@ + diff --git a/docs/cpp_docs/index.md b/docs/cpp_docs/index.md new file mode 100644 index 000000000..7656a7ebd --- /dev/null +++ b/docs/cpp_docs/index.md @@ -0,0 +1,5 @@ +# StochTree C++ API + +This page documents the data structures and interfaces that constitute the ``stochtree`` C++ core. + +It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in ``stochtree``. diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 000000000..4674df83a --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,167 @@ +# Getting Started + +`stochtree` is composed of a C++ "core" and R / Python interfaces to that core. +Details on installation and use are available below: + +* [Python](#python-package) +* [R](#r-package) +* [C++ core](#c-core) + +# Python Package + +The python package is not yet on PyPI but can be installed from source using pip's [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). +To proceed, you will need a working version of [git](https://git-scm.com) and python 3.8 or greater (available from several sources, one of the most +straightforward being the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite). + +## Quick start + +Without worrying about virtual environments (detailed further below), `stochtree` can be installed from the command line + +``` +pip install numpy scipy pytest pandas scikit-learn pybind11 +pip install git+https://github.com/StochasticTree/stochtree.git +``` + +## Virtual environment installation + +Often, users prefer to manage different projects (with different package / python version requirements) in virtual environments. + +### Conda + +Conda provides a straightforward experience in managing python dependencies, avoiding version conflicts / ABI issues / etc. + +To build stochtree using a `conda` based workflow, first create and activate a conda environment with the requisite dependencies + +```{bash} +conda create -n stochtree-dev -c conda-forge python=3.10 numpy scipy pytest pandas pybind11 scikit-learn matplotlib seaborn +conda activate stochtree-dev +``` + +Then install the package from github via pip + +```{bash} +pip install git+https://github.com/StochasticTree/stochtree.git +``` + +(*Note*: if you'd also like to run `stochtree`'s notebook examples, you will also need jupyterlab, seaborn, and matplotlib) + +```{bash} +conda install matplotlib seaborn +pip install jupyterlab +``` + +With these dependencies installed, you can [clone the repo](###cloning-the-repository) and run the `demo/` examples. + +### Venv + +You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments +(i.e. `cd /path/to/envs`) and create and activate a virtual environment: + +```{bash} +python -m venv venv +source venv/bin/activate +``` + +Install all of the package (and demo notebook) dependencies + +```{bash} +pip install numpy scipy pytest pandas scikit-learn pybind11 +``` + +Then install stochtree via + +```{bash} +pip install git+https://github.com/StochasticTree/stochtree.git +``` + +As above, if you'd like to run the notebook examples in the `demo/` subfolder, you will also need jupyterlab, seaborn, and matplotlib and you will have to [clone the repo](###cloning-the-repository) + +```{bash} +pip install matplotlib seaborn jupyterlab +``` + +# R Package + +The package can be installed in R via + +``` +remotes::install_github("StochasticTree/stochtree", ref="r-dev") +``` + +# C++ Core + +While the C++ core links to both R and Python for a performant, high-level interface, +the C++ code can be compiled and unit-tested and compiled into a standalone +[debug program](https://github.com/StochasticTree/stochtree/tree/main/debug). + +## Compilation + +### Cloning the Repository + +To clone the repository, you must have git installed, which you can do following [these instructions](https://learn.microsoft.com/en-us/devops/develop/git/install-and-set-up-git). + +Once git is available at the command line, navigate to the folder that will store this project (in bash / zsh, this is done by running `cd` followed by the path to the directory). +Then, clone the `stochtree` repo as a subfolder by running +```{bash} +git clone --recursive https://github.com/StochasticTree/stochtree.git +``` + +*NOTE*: this project incorporates several dependencies as [git submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules), +which is why the `--recursive` flag is necessary (some systems may perform a recursive clone without this flag, but +`--recursive` ensures this behavior on all platforms). If you have already cloned the repo without the `--recursive` flag, +you can retrieve the submodules recursively by running `git submodule update --init --recursive` in the main repo directory. + + +### CMake Build + +The C++ project can be built independently from the R / Python packages using `cmake`. +See [here](https://cmake.org/install/) for details on installing cmake (alternatively, +on MacOS, `cmake` can be installed using [homebrew](https://formulae.brew.sh/formula/cmake)). +Once `cmake` is installed, you can build the CLI by navigating to the main +project directory at your command line (i.e. `cd /path/to/stochtree`) and +running the following code + +```{bash} +rm -rf build +mkdir build +cmake -S . -B build +cmake --build build +``` + +The CMake build has two primary targets, which are detailed below + +#### Debug Program + +`debug/api_debug.cpp` defines a standalone target that can be straightforwardly run with a debugger (i.e. `lldb`, `gdb`) +while making non-trivial changes to the C++ code. +This debugging program is compiled as part of the CMake build if the `BUILD_DEBUG_TARGETS` option in `CMakeLists.txt` is set to `ON`. + +Once the program has been built, it can be run from the command line via `./build/debugstochtree` or attached to a debugger +via `lldb ./build/debugstochtree` (clang) or `gdb ./build/debugstochtree` (gcc). + +#### Unit Tests + +We test `stochtree` using the [GoogleTest](https://google.github.io/googletest/) framework. +Unit tests are compiled into a single target as part of the CMake build if the `BUILD_TEST` option is set to `ON` +and the test suite can be run after compilation via `./build/teststochtree` + +## Xcode + +While using `gdb` or `lldb` on `debugstochtree` at the command line is very helpful, users may prefer debugging in a full-fledged IDE like xcode. This project's C++ core can be converted to an xcode project from `CMakeLists.txt`, but first you must turn off sanitizers (xcode seems to have its own way of setting this at build time for different configurations, and having injected +`-fsanitize=address` statically into compiler arguments will cause xcode errors). To do this, modify the `USE_SANITIZER` line in `CMakeLists.txt`: + +``` +option(USE_SANITIZER "Use santizer flags" OFF) +``` + +To generate an XCode project based on the build targets and specifications defined in a `CMakeLists.txt`, navigate to the main project folder (i.e. `cd /path/to/project`) and run the following commands: + +```{bash} +rm -rf xcode/ +mkdir xcode +cd xcode +cmake -G Xcode .. -DCMAKE_C_COMPILER=cc -DCMAKE_CXX_COMPILER=c++ -DUSE_SANITIZER=OFF -DUSE_DEBUG=OFF +cd .. +``` + +Now, if you navigate to the xcode subfolder (in Finder), you should be able to click on a `.xcodeproj` file and the project will open in XCode. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..55a3da1f3 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,3 @@ +# StochTree + +`stochtree` (stochastic tree) is software for building stochastic tree ensembles (i.e. BART, XBART) for supervised learning and causal inference. diff --git a/docs/python_docs/bart.md b/docs/python_docs/bart.md new file mode 100644 index 000000000..1d9a835e5 --- /dev/null +++ b/docs/python_docs/bart.md @@ -0,0 +1,6 @@ +# BART + +::: stochtree.bart.BARTModel + options: + show_source: false + members_order: source diff --git a/docs/python_docs/index.md b/docs/python_docs/index.md new file mode 100644 index 000000000..d464b87f9 --- /dev/null +++ b/docs/python_docs/index.md @@ -0,0 +1,6 @@ +# StochTree Python Library + +The stochtree python library provides two essential components: + +1. High-level functionality for sampling, predicting, and serializing BART and BCF models +2. Lower-level definition and control of a stochastic tree sampler diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 000000000..5c9581f66 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,60 @@ +site_name: StochTree +site_url: "https://StochasticTree.github.io/documentation/" +site_description: "Stochastic tree ensembles (i.e. BART, XBART) for supervised learning and causal inference" +repo_url: "https://github.com/StochasticTree/stochtree" +repo_name: "StochasticTree/stochtree" +theme: + name: material + features: + - navigation.indexes + - navigation.sections + - navigation.tabs + - navigation.tabs.sticky + - navigation.footer + palette: + - media: "(prefers-color-scheme)" + toggle: + icon: material/link + name: Switch to light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: blue grey + accent: blue grey + toggle: + icon: material/toggle-switch + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: black + accent: indigo + toggle: + icon: material/toggle-switch-off + name: Switch to system preference +nav: + - Home: index.md + - 'Getting Started': getting-started.md + - 'R Package': 'R_docs/index.html' + - 'Python Package': + - python_docs/index.md + - 'BART': python_docs/bart.md + - 'C++ Core API and Architecture': + - cpp_docs/index.md + - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/StochasticTree/stochtree + name: stochtree on Github + generator: false +copyright: Copyright © 2023 - 2024 Drew Herren, Carlos Carvalho, Richard Hahn, Jared Murray +plugins: + - offline + - mkdocstrings: + handlers: + python: + options: + docstring_style: numpy + show_signature: true + line_length: 60 + heading_level: 2 + show_root_heading: true \ No newline at end of file From 01576959691a468ba18a93990a80b32d7715147b Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 22:11:36 -0600 Subject: [PATCH 10/55] WIP github action to create the static site with mkdocs --- .github/workflows/docs.yml | 100 +++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..fc62752cc --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,100 @@ +on: + workflow_dispatch: + +name: docs + +jobs: + docs: + runs-on: ubuntu-latest + # Only restrict concurrency for non-PR jobs + concurrency: + group: docs-${{ github.event_name != 'pull_request' || github.run_id }} + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - name: Checkout documentation repo + uses: actions/checkout@v4 + + - name: Checkout stochtree repo + uses: actions/checkout@v4 + with: + repository: 'StochasticTree/stochtree' + path: 'stochtree_repo' + submodules: 'recursive' + + - name: Install doxygen and graphviz + run: | + sudo apt-get install doxygen graphviz -y + + - name: Build the C++ doxygen output + run: | + sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile + sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile + sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile + mkdir -p docs/cpp_docs/ + cd stochtree_repo + doxygen cpp_docs/Doxyfile + cd .. + + - name: Setup Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + cache: "pip" + + - name: Install stochtree python package + run: | + pip install --upgrade pip + pip install numpy scipy pytest pandas scikit-learn pybind11 + cd stochtree_repo + pip install . + cd .. + + - name: Install python dependencies for the doc site + run: | + pip install mkdocs-material + pip install mkdocstrings-python + + - name: Setup pandoc + uses: r-lib/actions/setup-pandoc@v2 + + - name: Setup R + uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - name: Install R dependencies + uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::latex2exp, any::ggplot2, any::decor, any::pkgdown + needs: website + + - name: Build R doc site + run: | + cd stochtree_repo + Rscript cran-bootstrap.R + cp _pkgdown.yml stochtree_cran/_pkgdown.yml + cp R_README.md stochtree_cran/README.md + cd .. + mkdir -p docs/R_docs + Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' + + - name: Clean up the temporary stochtree_cran directory created + run: | + cd stochtree_repo + Rscript cran-cleanup.R + cd .. + + - name: Build the overall doc site + run: | + mkdocs build + + - name: Deploy to GitHub pages 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4.5.0 + with: + clean: false + branch: gh-pages + folder: site \ No newline at end of file From 812331532fdd370f221be60733213126bac274d1 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 22:28:53 -0600 Subject: [PATCH 11/55] Update mkdocs.yml --- mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 5c9581f66..edab75107 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: StochTree -site_url: "https://StochasticTree.github.io/documentation/" +site_url: "https://andrewherren.github.io/stochtree-documentation/" site_description: "Stochastic tree ensembles (i.e. BART, XBART) for supervised learning and causal inference" repo_url: "https://github.com/StochasticTree/stochtree" repo_name: "StochasticTree/stochtree" @@ -57,4 +57,4 @@ plugins: show_signature: true line_length: 60 heading_level: 2 - show_root_heading: true \ No newline at end of file + show_root_heading: true From 5f43f18b2562b1bf0c975e70e87c60cd302a4a0b Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 22:34:01 -0600 Subject: [PATCH 12/55] Continuing merge with main -- removing excess files --- blog/2019-05-28-first-blog-post.md | 12 -- blog/2019-05-29-long-blog-post.md | 44 ------- blog/2021-08-01-mdx-blog-post.mdx | 24 ---- .../docusaurus-plushie-banner.jpeg | Bin 96122 -> 0 bytes blog/2021-08-26-welcome/index.md | 29 ----- blog/authors.yml | 23 ---- blog/tags.yml | 19 --- .../class_`ForestCpp`.md | 121 ------------------ requirements.txt | 39 ------ sphinx_docs/Makefile | 20 --- sphinx_docs/make.bat | 35 ----- sphinx_docs/source/conf.py | 40 ------ sphinx_docs/source/dataset.rst | 42 ------ sphinx_docs/source/documentation.rst | 4 - sphinx_docs/source/index.rst | 13 -- 15 files changed, 465 deletions(-) delete mode 100644 blog/2019-05-28-first-blog-post.md delete mode 100644 blog/2019-05-29-long-blog-post.md delete mode 100644 blog/2021-08-01-mdx-blog-post.mdx delete mode 100644 blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg delete mode 100644 blog/2021-08-26-welcome/index.md delete mode 100644 blog/authors.yml delete mode 100644 blog/tags.yml delete mode 100644 docs/c-documentation-markdown/class_`ForestCpp`.md delete mode 100644 requirements.txt delete mode 100644 sphinx_docs/Makefile delete mode 100644 sphinx_docs/make.bat delete mode 100644 sphinx_docs/source/conf.py delete mode 100644 sphinx_docs/source/dataset.rst delete mode 100644 sphinx_docs/source/documentation.rst delete mode 100644 sphinx_docs/source/index.rst diff --git a/blog/2019-05-28-first-blog-post.md b/blog/2019-05-28-first-blog-post.md deleted file mode 100644 index d3032efb3..000000000 --- a/blog/2019-05-28-first-blog-post.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -slug: first-blog-post -title: First Blog Post -authors: [slorber, yangshun] -tags: [hola, docusaurus] ---- - -Lorem ipsum dolor sit amet... - - - -...consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/blog/2019-05-29-long-blog-post.md b/blog/2019-05-29-long-blog-post.md deleted file mode 100644 index eb4435de5..000000000 --- a/blog/2019-05-29-long-blog-post.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -slug: long-blog-post -title: Long Blog Post -authors: yangshun -tags: [hello, docusaurus] ---- - -This is the summary of a very long blog post, - -Use a `` comment to limit blog post size in the list view. - - - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet diff --git a/blog/2021-08-01-mdx-blog-post.mdx b/blog/2021-08-01-mdx-blog-post.mdx deleted file mode 100644 index 0c4b4a48b..000000000 --- a/blog/2021-08-01-mdx-blog-post.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -slug: mdx-blog-post -title: MDX Blog Post -authors: [slorber] -tags: [docusaurus] ---- - -Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/). - -:::tip - -Use the power of React to create interactive blog posts. - -::: - -{/* truncate */} - -For example, use JSX to create an interactive button: - -```js - -``` - - diff --git a/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg b/blog/2021-08-26-welcome/docusaurus-plushie-banner.jpeg deleted file mode 100644 index 11bda0928456b12f8e53d0ba5709212a4058d449..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96122 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 diff --git a/blog/2021-08-26-welcome/index.md b/blog/2021-08-26-welcome/index.md deleted file mode 100644 index 349ea075f..000000000 --- a/blog/2021-08-26-welcome/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -slug: welcome -title: Welcome -authors: [slorber, yangshun] -tags: [facebook, hello, docusaurus] ---- - -[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog). - -Here are a few tips you might find useful. - - - -Simply add Markdown files (or folders) to the `blog` directory. - -Regular blog authors can be added to `authors.yml`. - -The blog post date can be extracted from filenames, such as: - -- `2019-05-30-welcome.md` -- `2019-05-30-welcome/index.md` - -A blog post folder can be convenient to co-locate blog post images: - -![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg) - -The blog supports tags as well! - -**And if you don't want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config. diff --git a/blog/authors.yml b/blog/authors.yml deleted file mode 100644 index 8bfa5c7c4..000000000 --- a/blog/authors.yml +++ /dev/null @@ -1,23 +0,0 @@ -yangshun: - name: Yangshun Tay - title: Front End Engineer @ Facebook - url: https://github.com/yangshun - image_url: https://github.com/yangshun.png - page: true - socials: - x: yangshunz - github: yangshun - -slorber: - name: Sébastien Lorber - title: Docusaurus maintainer - url: https://sebastienlorber.com - image_url: https://github.com/slorber.png - page: - # customize the url of the author page at /blog/authors/ - permalink: '/all-sebastien-lorber-articles' - socials: - x: sebastienlorber - linkedin: sebastienlorber - github: slorber - newsletter: https://thisweekinreact.com diff --git a/blog/tags.yml b/blog/tags.yml deleted file mode 100644 index bfaa778fb..000000000 --- a/blog/tags.yml +++ /dev/null @@ -1,19 +0,0 @@ -facebook: - label: Facebook - permalink: /facebook - description: Facebook tag description - -hello: - label: Hello - permalink: /hello - description: Hello tag description - -docusaurus: - label: Docusaurus - permalink: /docusaurus - description: Docusaurus tag description - -hola: - label: Hola - permalink: /hola - description: Hola tag description diff --git a/docs/c-documentation-markdown/class_`ForestCpp`.md b/docs/c-documentation-markdown/class_`ForestCpp`.md deleted file mode 100644 index 4cd894451..000000000 --- a/docs/c-documentation-markdown/class_`ForestCpp`.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: class `ForestCpp` ---- - -# class `ForestCpp` - -## Summary - - Members | Descriptions ---------------------------------|--------------------------------------------- -`public inline `[`ForestCpp`](#classForestCpp_1af28839809ecff0fc02da197c06b78806)`(int num_trees,int output_dimension,bool is_leaf_constant,bool is_exponentiated)` | -`public inline `[`~ForestCpp`](#classForestCpp_1ad6c22bca0b09b9f93706cafaad1d2aa6)`()` | -`public inline int `[`OutputDimension`](#classForestCpp_1a818926ffc1a6f034038d3777069c83c5)`()` | -`public inline int `[`NumLeavesForest`](#classForestCpp_1a3b0a9646c5513f0006e2314e9ff3cf19)`()` | -`public inline double `[`SumLeafSquared`](#classForestCpp_1a593c60de74d0bc5ef2665e942eed2c23)`(int forest_num)` | -`public inline void `[`ResetRoot`](#classForestCpp_1a0db280769720c942d0a0add330184a6d)`()` | -`public inline void `[`Reset`](#classForestCpp_1ac631efc7efb9c17d9c2824ad15524b1c)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_container,int forest_num)` | -`public inline py::array_t< double > `[`Predict`](#classForestCpp_1a567ae932ede69f095f3a3b7e5dba07da)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | -`public inline py::array_t< double > `[`PredictRaw`](#classForestCpp_1a05f41f957d5e6ae01585cecaf98000ff)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` | -`public inline void `[`SetRootValue`](#classForestCpp_1a84f063c78a37a0ef8cd0273f1c3d231a)`(double leaf_value)` | -`public inline void `[`SetRootVector`](#classForestCpp_1abc913598e992bedb29e077d445599f32)`(py::array_t< double > & leaf_vector,int leaf_size)` | -`public void `[`AdjustResidual`](#classForestCpp_1a7746d912c13481a5c99092b3fa0bc71b)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestSamplerCpp`](#classForestSamplerCpp)` & sampler,bool requires_basis,bool add)` | -`public inline StochTree::TreeEnsemble * `[`GetEnsemble`](#classForestCpp_1a539edf719d09c2d93dfb51bcd20362da)`()` | -`public inline void `[`AddNumericSplitValue`](#classForestCpp_1a54b2db5a367fcc3c6130779de0f08b53)`(int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` | -`public inline void `[`AddNumericSplitVector`](#classForestCpp_1ae1531429d5bdf13d85752e407924d24a)`(int tree_num,int leaf_num,int feature_num,double split_threshold,py::array_t< double > left_leaf_vector,py::array_t< double > right_leaf_vector)` | -`public inline py::array_t< int > `[`GetTreeLeaves`](#classForestCpp_1a099c652dafa37d340d8233f067d3e785)`(int tree_num)` | -`public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestCpp_1a8aa79e4e316dcbd72951c1935a868915)`(int tree_num,int num_features)` | -`public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestCpp_1aefd727a404691be4b08c4146ac25d470)`(int num_features)` | -`public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestCpp_1ad46e573d9f6c52bf5730e7c3ad51d90e)`(int num_features)` | -`public inline bool `[`IsLeafNode`](#classForestCpp_1a1a6f14e5b414a4f2a7f080566ed58271)`(int tree_id,int node_id)` | -`public inline bool `[`IsNumericSplitNode`](#classForestCpp_1a762f394b82a34274c2a88e9f581e228e)`(int tree_id,int node_id)` | -`public inline bool `[`IsCategoricalSplitNode`](#classForestCpp_1a4faac08e1de68d8675079d8652aeda78)`(int tree_id,int node_id)` | -`public inline int `[`ParentNode`](#classForestCpp_1a68a1ed61a92d6b6909c5feaf38e378d9)`(int tree_id,int node_id)` | -`public inline int `[`LeftChildNode`](#classForestCpp_1a2f03fd7713b18337a98e8ec7e9f1f1c0)`(int tree_id,int node_id)` | -`public inline int `[`RightChildNode`](#classForestCpp_1ad402941b119ef6bddb59d143b75f0bdf)`(int tree_id,int node_id)` | -`public inline int `[`SplitIndex`](#classForestCpp_1aa0994a8cf2cafce22b13f20784b3803c)`(int tree_id,int node_id)` | -`public inline int `[`NodeDepth`](#classForestCpp_1ac5cd5b5b47962d4eac21ed8180633be5)`(int tree_id,int node_id)` | -`public inline double `[`SplitThreshold`](#classForestCpp_1a2a2c4beba400f9a96119d72e3d9d026a)`(int tree_id,int node_id)` | -`public inline py::array_t< int > `[`SplitCategories`](#classForestCpp_1aeaaedd20855c448263f44c5b675f5d43)`(int tree_id,int node_id)` | -`public inline py::array_t< double > `[`NodeLeafValues`](#classForestCpp_1abe284956a2cef3027e1d3c59f3b910e2)`(int tree_id,int node_id)` | -`public inline int `[`NumNodes`](#classForestCpp_1a96a5b0a2f4e4eaba91b5ff4429ee38ac)`(int tree_id)` | -`public inline int `[`NumLeaves`](#classForestCpp_1a9b0394c86703a88f565170c1c91e3bbd)`(int tree_id)` | -`public inline int `[`NumLeafParents`](#classForestCpp_1a5508ff762921aefda57ba8ca454d435b)`(int tree_id)` | -`public inline int `[`NumSplitNodes`](#classForestCpp_1a0ac612e1f3e5a9404a5e3ef03e3b384f)`(int tree_id)` | -`public inline py::array_t< int > `[`Nodes`](#classForestCpp_1a581abc2f59f8f15960dff0a91c0f9afc)`(int tree_id)` | -`public inline py::array_t< int > `[`Leaves`](#classForestCpp_1a1e10325a54931699b33df779a24d1c87)`(int tree_id)` | - -## Members - -#### `public inline `[`ForestCpp`](#classForestCpp_1af28839809ecff0fc02da197c06b78806)`(int num_trees,int output_dimension,bool is_leaf_constant,bool is_exponentiated)` - -#### `public inline `[`~ForestCpp`](#classForestCpp_1ad6c22bca0b09b9f93706cafaad1d2aa6)`()` - -#### `public inline int `[`OutputDimension`](#classForestCpp_1a818926ffc1a6f034038d3777069c83c5)`()` - -#### `public inline int `[`NumLeavesForest`](#classForestCpp_1a3b0a9646c5513f0006e2314e9ff3cf19)`()` - -#### `public inline double `[`SumLeafSquared`](#classForestCpp_1a593c60de74d0bc5ef2665e942eed2c23)`(int forest_num)` - -#### `public inline void `[`ResetRoot`](#classForestCpp_1a0db280769720c942d0a0add330184a6d)`()` - -#### `public inline void `[`Reset`](#classForestCpp_1ac631efc7efb9c17d9c2824ad15524b1c)`(`[`ForestContainerCpp`](#classForestContainerCpp)` & forest_container,int forest_num)` - -#### `public inline py::array_t< double > `[`Predict`](#classForestCpp_1a567ae932ede69f095f3a3b7e5dba07da)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` - -#### `public inline py::array_t< double > `[`PredictRaw`](#classForestCpp_1a05f41f957d5e6ae01585cecaf98000ff)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset)` - -#### `public inline void `[`SetRootValue`](#classForestCpp_1a84f063c78a37a0ef8cd0273f1c3d231a)`(double leaf_value)` - -#### `public inline void `[`SetRootVector`](#classForestCpp_1abc913598e992bedb29e077d445599f32)`(py::array_t< double > & leaf_vector,int leaf_size)` - -#### `public void `[`AdjustResidual`](#classForestCpp_1a7746d912c13481a5c99092b3fa0bc71b)`(`[`ForestDatasetCpp`](#classForestDatasetCpp)` & dataset,`[`ResidualCpp`](#classResidualCpp)` & residual,`[`ForestSamplerCpp`](#classForestSamplerCpp)` & sampler,bool requires_basis,bool add)` - -#### `public inline StochTree::TreeEnsemble * `[`GetEnsemble`](#classForestCpp_1a539edf719d09c2d93dfb51bcd20362da)`()` - -#### `public inline void `[`AddNumericSplitValue`](#classForestCpp_1a54b2db5a367fcc3c6130779de0f08b53)`(int tree_num,int leaf_num,int feature_num,double split_threshold,double left_leaf_value,double right_leaf_value)` - -#### `public inline void `[`AddNumericSplitVector`](#classForestCpp_1ae1531429d5bdf13d85752e407924d24a)`(int tree_num,int leaf_num,int feature_num,double split_threshold,py::array_t< double > left_leaf_vector,py::array_t< double > right_leaf_vector)` - -#### `public inline py::array_t< int > `[`GetTreeLeaves`](#classForestCpp_1a099c652dafa37d340d8233f067d3e785)`(int tree_num)` - -#### `public inline py::array_t< int > `[`GetTreeSplitCounts`](#classForestCpp_1a8aa79e4e316dcbd72951c1935a868915)`(int tree_num,int num_features)` - -#### `public inline py::array_t< int > `[`GetOverallSplitCounts`](#classForestCpp_1aefd727a404691be4b08c4146ac25d470)`(int num_features)` - -#### `public inline py::array_t< int > `[`GetGranularSplitCounts`](#classForestCpp_1ad46e573d9f6c52bf5730e7c3ad51d90e)`(int num_features)` - -#### `public inline bool `[`IsLeafNode`](#classForestCpp_1a1a6f14e5b414a4f2a7f080566ed58271)`(int tree_id,int node_id)` - -#### `public inline bool `[`IsNumericSplitNode`](#classForestCpp_1a762f394b82a34274c2a88e9f581e228e)`(int tree_id,int node_id)` - -#### `public inline bool `[`IsCategoricalSplitNode`](#classForestCpp_1a4faac08e1de68d8675079d8652aeda78)`(int tree_id,int node_id)` - -#### `public inline int `[`ParentNode`](#classForestCpp_1a68a1ed61a92d6b6909c5feaf38e378d9)`(int tree_id,int node_id)` - -#### `public inline int `[`LeftChildNode`](#classForestCpp_1a2f03fd7713b18337a98e8ec7e9f1f1c0)`(int tree_id,int node_id)` - -#### `public inline int `[`RightChildNode`](#classForestCpp_1ad402941b119ef6bddb59d143b75f0bdf)`(int tree_id,int node_id)` - -#### `public inline int `[`SplitIndex`](#classForestCpp_1aa0994a8cf2cafce22b13f20784b3803c)`(int tree_id,int node_id)` - -#### `public inline int `[`NodeDepth`](#classForestCpp_1ac5cd5b5b47962d4eac21ed8180633be5)`(int tree_id,int node_id)` - -#### `public inline double `[`SplitThreshold`](#classForestCpp_1a2a2c4beba400f9a96119d72e3d9d026a)`(int tree_id,int node_id)` - -#### `public inline py::array_t< int > `[`SplitCategories`](#classForestCpp_1aeaaedd20855c448263f44c5b675f5d43)`(int tree_id,int node_id)` - -#### `public inline py::array_t< double > `[`NodeLeafValues`](#classForestCpp_1abe284956a2cef3027e1d3c59f3b910e2)`(int tree_id,int node_id)` - -#### `public inline int `[`NumNodes`](#classForestCpp_1a96a5b0a2f4e4eaba91b5ff4429ee38ac)`(int tree_id)` - -#### `public inline int `[`NumLeaves`](#classForestCpp_1a9b0394c86703a88f565170c1c91e3bbd)`(int tree_id)` - -#### `public inline int `[`NumLeafParents`](#classForestCpp_1a5508ff762921aefda57ba8ca454d435b)`(int tree_id)` - -#### `public inline int `[`NumSplitNodes`](#classForestCpp_1a0ac612e1f3e5a9404a5e3ef03e3b384f)`(int tree_id)` - -#### `public inline py::array_t< int > `[`Nodes`](#classForestCpp_1a581abc2f59f8f15960dff0a91c0f9afc)`(int tree_id)` - -#### `public inline py::array_t< int > `[`Leaves`](#classForestCpp_1a1e10325a54931699b33df779a24d1c87)`(int tree_id)` - diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 44bfd94d7..000000000 --- a/requirements.txt +++ /dev/null @@ -1,39 +0,0 @@ -alabaster==0.7.13 -Babel==2.15.0 -beautifulsoup4==4.12.3 -breathe==4.35.0 -certifi==2024.2.2 -charset-normalizer==3.3.2 -docutils==0.20.1 -furo==2024.5.6 -idna==3.7 -imagesize==1.4.1 -importlib_metadata==7.1.0 -Jinja2==3.1.4 -joblib==1.4.2 -MarkupSafe==2.1.5 -numpy==1.24.4 -packaging==24.0 -pandas==2.0.3 -pybind11==2.12.0 -Pygments==2.18.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -requests==2.32.2 -scikit-learn==1.3.2 -scipy==1.10.1 -six==1.16.0 -snowballstemmer==2.2.0 -soupsieve==2.5 -Sphinx==7.1.2 -sphinx-basic-ng==1.0.0b2 -sphinxcontrib-applehelp==1.0.4 -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==2.0.1 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-serializinghtml==1.1.5 -threadpoolctl==3.5.0 -tzdata==2024.1 -urllib3==2.2.1 -zipp==3.18.2 diff --git a/sphinx_docs/Makefile b/sphinx_docs/Makefile deleted file mode 100644 index d0c3cbf10..000000000 --- a/sphinx_docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/sphinx_docs/make.bat b/sphinx_docs/make.bat deleted file mode 100644 index dc1312ab0..000000000 --- a/sphinx_docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=source -set BUILDDIR=build - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.https://www.sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "" goto help - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/sphinx_docs/source/conf.py b/sphinx_docs/source/conf.py deleted file mode 100644 index 6e4b7b223..000000000 --- a/sphinx_docs/source/conf.py +++ /dev/null @@ -1,40 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# import os -# import sys -# sys.path.insert(0, os.path.abspath('../..')) -from pathlib import Path -DOC_REPO_PATH = Path(__file__).absolute().parent.parent - -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information - -project = 'stochtree' -copyright = '2024, Drew Herren' -author = 'Drew Herren' -release = '0.0.1' - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.autosummary', - 'breathe' -] - -templates_path = ['_templates'] -exclude_patterns = [] - -# Breathe Configuration -breathe_projects = {"StochTree": str(DOC_REPO_PATH / "doxygen_output" / "xml")} -breathe_default_project = "StochTree" - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -html_theme = 'furo' -html_static_path = ['_static'] diff --git a/sphinx_docs/source/dataset.rst b/sphinx_docs/source/dataset.rst deleted file mode 100644 index 30179954e..000000000 --- a/sphinx_docs/source/dataset.rst +++ /dev/null @@ -1,42 +0,0 @@ -Dataset API -=========== - -Forest Dataset --------------- - -The ``ForestDataset`` class is a wrapper around data needed to sample one or more tree ensembles. -Its core elements are - -* **Covariates**: Features / variables used to partition the forests. Stored internally as a (column-major) ``Eigen::MatrixXd``. -* **Basis**: *[Optional]* basis vector used to define a "leaf regression" --- a partitioned linear model where covariates define the partitions and basis defines the regression variables. - Also stored internally as a (column-major) ``Eigen::MatrixXd``. -* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. - Stored internally as an ``Eigen::VectorXd``. - -.. doxygenclass:: StochTree::ForestDataset - :project: StochTree - :members: - -Random Effects Dataset ----------------------- - -The ``RandomEffectsDataset`` class is a wrapper around data needed to sample one or more tree ensembles. -Its core elements are - -* **Basis**: Vector of variables that have group-specific random coefficients. In the simplest additive group random effects model, this is a constant intercept of all ones. - Stored internally as a (column-major) ``Eigen::MatrixXd``. -* **Group Indices**: Integer-valued indices of group membership. In a model with three groups, these indices would typically be 0, 1, and 2 (remapped from perhaps more descriptive labels in R or Python). - Stored internally as an ``std::vector`` of integers. -* **Sample Weights**: *[Optional]* case weights for every observation in a training dataset. These may be heteroskedastic variance parameters or simply survey / case weights. - Stored internally as an ``Eigen::VectorXd``. - -.. doxygenclass:: StochTree::RandomEffectsDataset - :project: StochTree - :members: - -Other Classes and Types ------------------------ - -.. doxygenenum:: StochTree::FeatureType - :project: StochTree - \ No newline at end of file diff --git a/sphinx_docs/source/documentation.rst b/sphinx_docs/source/documentation.rst deleted file mode 100644 index 5c810e0b8..000000000 --- a/sphinx_docs/source/documentation.rst +++ /dev/null @@ -1,4 +0,0 @@ -Documentation -============= - -The R package documentation is `here <_static/R_docs/index.html>`_. \ No newline at end of file diff --git a/sphinx_docs/source/index.rst b/sphinx_docs/source/index.rst deleted file mode 100644 index 045b00448..000000000 --- a/sphinx_docs/source/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -StochTree API and Implementations -================================= - -This page documents the data structures and interfaces that constitute the ``stochtree`` C++ core. -It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in ``stochtree``. - -.. toctree:: - :maxdepth: 1 - :caption: Contents: - - C++ Dataset API - Documentation - R Package From b17f0d5621b9d8fbd93bdc0be89d35862c3e466c Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 22:37:18 -0600 Subject: [PATCH 13/55] Updated GHA doc workflow --- .github/workflows/docs.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index fc62752cc..9fd92e49d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -30,9 +30,9 @@ jobs: - name: Build the C++ doxygen output run: | - sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile - sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile - sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile + sed -i 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile + sed -i 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile + sed -i 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile mkdir -p docs/cpp_docs/ cd stochtree_repo doxygen cpp_docs/Doxyfile From 23363546a5da9c8ef7ef337122be7c488dfa5cc0 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 22:42:22 -0600 Subject: [PATCH 14/55] Updated R GHA workflow --- .github/workflows/docs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 9fd92e49d..55d996968 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -70,6 +70,7 @@ jobs: with: extra-packages: any::latex2exp, any::ggplot2, any::decor, any::pkgdown needs: website + working_directory: 'stochtree_repo' - name: Build R doc site run: | From 7e7a654ac0a41ed8f8e83f4ff6d469da924572e7 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 22:52:37 -0600 Subject: [PATCH 15/55] Updating R GHA workflow --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 55d996968..a296eaed1 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -68,9 +68,9 @@ jobs: - name: Install R dependencies uses: r-lib/actions/setup-r-dependencies@v2 with: + working_directory: 'stochtree_repo' extra-packages: any::latex2exp, any::ggplot2, any::decor, any::pkgdown needs: website - working_directory: 'stochtree_repo' - name: Build R doc site run: | From 0970c98fb442ca2f8de6ae6404454ac6d97428fb Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 13 Dec 2024 22:56:03 -0600 Subject: [PATCH 16/55] Fixed R GHA typo --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a296eaed1..392d8fe89 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -68,7 +68,7 @@ jobs: - name: Install R dependencies uses: r-lib/actions/setup-r-dependencies@v2 with: - working_directory: 'stochtree_repo' + working-directory: 'stochtree_repo' extra-packages: any::latex2exp, any::ggplot2, any::decor, any::pkgdown needs: website From 9111471ccc04b6c8db9ec362aaec5589b0e2c5c0 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Sat, 14 Dec 2024 01:32:49 -0600 Subject: [PATCH 17/55] Updated documentation to include BCF --- .gitignore | 5 ++--- docs/getting-started.md | 31 +++++++++++++++---------------- docs/python_docs/bcf.md | 6 ++++++ mkdocs.yml | 23 +++++++++++++++++++++-- 4 files changed, 44 insertions(+), 21 deletions(-) create mode 100644 docs/python_docs/bcf.md diff --git a/.gitignore b/.gitignore index 490cd5ece..df4cc6890 100644 --- a/.gitignore +++ b/.gitignore @@ -27,10 +27,9 @@ yarn-error.log* /stochtree_repo/cpp_docs # Output builds -/sphinx_docs/_build/ -/sphinx_docs/doxygen_output/ -/sphinx_docs/source/_static/ /site/ +/docs/cpp_docs/doxygen/ +/docs/R_docs/* # Virtual environments /python_venv diff --git a/docs/getting-started.md b/docs/getting-started.md index 4674df83a..38612219d 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -7,13 +7,13 @@ Details on installation and use are available below: * [R](#r-package) * [C++ core](#c-core) -# Python Package +## Python Package The python package is not yet on PyPI but can be installed from source using pip's [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). To proceed, you will need a working version of [git](https://git-scm.com) and python 3.8 or greater (available from several sources, one of the most straightforward being the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite). -## Quick start +### Quick start Without worrying about virtual environments (detailed further below), `stochtree` can be installed from the command line @@ -22,11 +22,11 @@ pip install numpy scipy pytest pandas scikit-learn pybind11 pip install git+https://github.com/StochasticTree/stochtree.git ``` -## Virtual environment installation +### Virtual environment installation Often, users prefer to manage different projects (with different package / python version requirements) in virtual environments. -### Conda +#### Conda Conda provides a straightforward experience in managing python dependencies, avoiding version conflicts / ABI issues / etc. @@ -50,9 +50,9 @@ conda install matplotlib seaborn pip install jupyterlab ``` -With these dependencies installed, you can [clone the repo](###cloning-the-repository) and run the `demo/` examples. +With these dependencies installed, you can [clone the repo](#cloning-the-repository) and run the `demo/` examples. -### Venv +#### Venv You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments (i.e. `cd /path/to/envs`) and create and activate a virtual environment: @@ -74,13 +74,13 @@ Then install stochtree via pip install git+https://github.com/StochasticTree/stochtree.git ``` -As above, if you'd like to run the notebook examples in the `demo/` subfolder, you will also need jupyterlab, seaborn, and matplotlib and you will have to [clone the repo](###cloning-the-repository) +As above, if you'd like to run the notebook examples in the `demo/` subfolder, you will also need jupyterlab, seaborn, and matplotlib and you will have to [clone the repo](#cloning-the-repository) ```{bash} pip install matplotlib seaborn jupyterlab ``` -# R Package +## R Package The package can be installed in R via @@ -88,15 +88,15 @@ The package can be installed in R via remotes::install_github("StochasticTree/stochtree", ref="r-dev") ``` -# C++ Core +## C++ Core While the C++ core links to both R and Python for a performant, high-level interface, the C++ code can be compiled and unit-tested and compiled into a standalone [debug program](https://github.com/StochasticTree/stochtree/tree/main/debug). -## Compilation +### Compilation -### Cloning the Repository +#### Cloning the Repository To clone the repository, you must have git installed, which you can do following [these instructions](https://learn.microsoft.com/en-us/devops/develop/git/install-and-set-up-git). @@ -111,8 +111,7 @@ which is why the `--recursive` flag is necessary (some systems may perform a rec `--recursive` ensures this behavior on all platforms). If you have already cloned the repo without the `--recursive` flag, you can retrieve the submodules recursively by running `git submodule update --init --recursive` in the main repo directory. - -### CMake Build +#### CMake Build The C++ project can be built independently from the R / Python packages using `cmake`. See [here](https://cmake.org/install/) for details on installing cmake (alternatively, @@ -130,7 +129,7 @@ cmake --build build The CMake build has two primary targets, which are detailed below -#### Debug Program +##### Debug Program `debug/api_debug.cpp` defines a standalone target that can be straightforwardly run with a debugger (i.e. `lldb`, `gdb`) while making non-trivial changes to the C++ code. @@ -139,13 +138,13 @@ This debugging program is compiled as part of the CMake build if the `BUILD_DEBU Once the program has been built, it can be run from the command line via `./build/debugstochtree` or attached to a debugger via `lldb ./build/debugstochtree` (clang) or `gdb ./build/debugstochtree` (gcc). -#### Unit Tests +##### Unit Tests We test `stochtree` using the [GoogleTest](https://google.github.io/googletest/) framework. Unit tests are compiled into a single target as part of the CMake build if the `BUILD_TEST` option is set to `ON` and the test suite can be run after compilation via `./build/teststochtree` -## Xcode +### Xcode While using `gdb` or `lldb` on `debugstochtree` at the command line is very helpful, users may prefer debugging in a full-fledged IDE like xcode. This project's C++ core can be converted to an xcode project from `CMakeLists.txt`, but first you must turn off sanitizers (xcode seems to have its own way of setting this at build time for different configurations, and having injected `-fsanitize=address` statically into compiler arguments will cause xcode errors). To do this, modify the `USE_SANITIZER` line in `CMakeLists.txt`: diff --git a/docs/python_docs/bcf.md b/docs/python_docs/bcf.md new file mode 100644 index 000000000..a5e1b305b --- /dev/null +++ b/docs/python_docs/bcf.md @@ -0,0 +1,6 @@ +# BCF + +::: stochtree.bcf.BCFModel + options: + show_source: false + members_order: source diff --git a/mkdocs.yml b/mkdocs.yml index edab75107..c10665678 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -6,11 +6,15 @@ repo_name: "StochasticTree/stochtree" theme: name: material features: - - navigation.indexes + - navigation.expand + - navigation.indexes + - navigation.footer + - navigation.path - navigation.sections - navigation.tabs - navigation.tabs.sticky - - navigation.footer + - toc.follow + - toc.integrate palette: - media: "(prefers-color-scheme)" toggle: @@ -33,10 +37,12 @@ theme: nav: - Home: index.md - 'Getting Started': getting-started.md + - 'Demo': demo.md - 'R Package': 'R_docs/index.html' - 'Python Package': - python_docs/index.md - 'BART': python_docs/bart.md + - 'BCF': python_docs/bcf.md - 'C++ Core API and Architecture': - cpp_docs/index.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' @@ -47,6 +53,19 @@ extra: name: stochtree on Github generator: false copyright: Copyright © 2023 - 2024 Drew Herren, Carlos Carvalho, Richard Hahn, Jared Murray +markdown_extensions: + - toc: + permalink: "#" + toc_depth: 3 + baselevel: 1 + - pymdownx.tabbed: + alternate_style: true + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.snippets plugins: - offline - mkdocstrings: From 0e8296171968b20cd9cc9df512d5767ea9a00386 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Sat, 14 Dec 2024 02:00:38 -0600 Subject: [PATCH 18/55] Updated structure of python docs --- docs/python_docs/{ => api}/bart.md | 0 docs/python_docs/{ => api}/bcf.md | 0 docs/python_docs/api/index.md | 3 +++ docs/python_docs/demo/index.md | 3 +++ mkdocs.yml | 9 ++++++--- 5 files changed, 12 insertions(+), 3 deletions(-) rename docs/python_docs/{ => api}/bart.md (100%) rename docs/python_docs/{ => api}/bcf.md (100%) create mode 100644 docs/python_docs/api/index.md create mode 100644 docs/python_docs/demo/index.md diff --git a/docs/python_docs/bart.md b/docs/python_docs/api/bart.md similarity index 100% rename from docs/python_docs/bart.md rename to docs/python_docs/api/bart.md diff --git a/docs/python_docs/bcf.md b/docs/python_docs/api/bcf.md similarity index 100% rename from docs/python_docs/bcf.md rename to docs/python_docs/api/bcf.md diff --git a/docs/python_docs/api/index.md b/docs/python_docs/api/index.md new file mode 100644 index 000000000..acfb624db --- /dev/null +++ b/docs/python_docs/api/index.md @@ -0,0 +1,3 @@ +# StochTree Python API Reference + +Overview of the `stochtree` python library's key classes and functions diff --git a/docs/python_docs/demo/index.md b/docs/python_docs/demo/index.md new file mode 100644 index 000000000..e2abd0381 --- /dev/null +++ b/docs/python_docs/demo/index.md @@ -0,0 +1,3 @@ +# StochTree Python API Demo + +Overview of the `stochtree` python library's functionality diff --git a/mkdocs.yml b/mkdocs.yml index c10665678..77dde3b05 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -37,12 +37,15 @@ theme: nav: - Home: index.md - 'Getting Started': getting-started.md - - 'Demo': demo.md - 'R Package': 'R_docs/index.html' - 'Python Package': - python_docs/index.md - - 'BART': python_docs/bart.md - - 'BCF': python_docs/bcf.md + - 'API': + - python_docs/api/index.md + - 'BART': python_docs/api/bart.md + - 'BCF': python_docs/api/bcf.md + - 'Demo': + - python_docs/demo/index.md - 'C++ Core API and Architecture': - cpp_docs/index.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' From cf4ed7c7b71c1fd6f4b8200e1c3d1979888afc8e Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Sat, 14 Dec 2024 02:26:03 -0600 Subject: [PATCH 19/55] Update docs and build workflow --- .github/workflows/docs.yml | 8 +++++++- README.md | 9 ++++++++- dev/build.sh | 5 +++++ dev/cleanup.sh | 3 +++ mkdocs.yml | 5 +++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 392d8fe89..6f4550015 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -47,7 +47,7 @@ jobs: - name: Install stochtree python package run: | pip install --upgrade pip - pip install numpy scipy pytest pandas scikit-learn pybind11 + pip install numpy scipy pytest pandas scikit-learn pybind11 matplotlib seaborn cd stochtree_repo pip install . cd .. @@ -56,6 +56,7 @@ jobs: run: | pip install mkdocs-material pip install mkdocstrings-python + pip install mkdocs-jupyter - name: Setup pandoc uses: r-lib/actions/setup-pandoc@v2 @@ -87,6 +88,11 @@ jobs: cd stochtree_repo Rscript cran-cleanup.R cd .. + + - name: Copy Jupyter notebook demos over to docs directory + run: | + cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb + cp stochtree_repo/demo/notebooks/causal_inference.ipynb docs/python_docs/demo/causal_inference.ipynb - name: Build the overall doc site run: | diff --git a/README.md b/README.md index f082ac410..0b2e876a3 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ python -m venv venv source venv/bin/activate cd stochtree_repo pip install --upgrade pip -pip install numpy scipy pytest pandas scikit-learn pybind11 +pip install numpy scipy pytest pandas scikit-learn pybind11 matplotlib seaborn pip install . cd .. ``` @@ -46,6 +46,7 @@ Install the `mkdocs-material` and `mkdocstrings-python` packages in the same vir ```{bash} pip install mkdocs-material pip install mkdocstrings-python +pip install mkdocs-jupyter ``` ##### pkgdown @@ -93,6 +94,12 @@ doxygen cpp_docs/Doxyfile cd .. ``` +### Copying Jupyter notebook demos to the docs directory + +```{bash} +cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb +``` + ### Building the overall website To build and preview the site locally, run diff --git a/dev/build.sh b/dev/build.sh index eed6dabc3..c4dbc9891 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -18,6 +18,7 @@ cd .. # Install python dependencies for the doc site pip install mkdocs-material pip install mkdocstrings-python +pip install mkdocs-jupyter # Build the C++ doxygen output sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile @@ -40,5 +41,9 @@ cd .. mkdir -p docs/R_docs Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' +# Copy Jupyter notebook demos over to docs directory +cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb +cp stochtree_repo/demo/notebooks/causal_inference.ipynb docs/python_docs/demo/causal_inference.ipynb + # Build the doc site mkdocs build diff --git a/dev/cleanup.sh b/dev/cleanup.sh index 9b812bdf8..3e81e080d 100644 --- a/dev/cleanup.sh +++ b/dev/cleanup.sh @@ -9,3 +9,6 @@ rm -rf stochtree_repo # Remove venv rm -rf venv + +# Remove jupyter notebooks from the docs/ directory +rm -f docs/python_docs/demo/*.ipynb diff --git a/mkdocs.yml b/mkdocs.yml index 77dde3b05..1ca61cb04 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -46,6 +46,8 @@ nav: - 'BCF': python_docs/api/bcf.md - 'Demo': - python_docs/demo/index.md + - 'BART': python_docs/demo/supervised_learning.ipynb + - 'BCF': python_docs/demo/causal_inference.ipynb - 'C++ Core API and Architecture': - cpp_docs/index.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' @@ -80,3 +82,6 @@ plugins: line_length: 60 heading_level: 2 show_root_heading: true + - mkdocs-jupyter: + execute: true + include_source: True From a7cfa97a144cac00c3f9da0b832afcd1c5b36a12 Mon Sep 17 00:00:00 2001 From: silicontwin Date: Sun, 15 Dec 2024 01:29:12 +0000 Subject: [PATCH 20/55] Updated Python documentation --- docs/python-documentation-markdown/api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/python-documentation-markdown/api.md b/docs/python-documentation-markdown/api.md index 84929e375..b761a9adf 100644 --- a/docs/python-documentation-markdown/api.md +++ b/docs/python-documentation-markdown/api.md @@ -15,7 +15,7 @@ Return predictions from every forest sampled (either / both of mean and variance covariates : Test set covariates. -basis_train +basis : Optional test set basis vector, must be provided if the model was trained with a leaf regression basis. ### Returns From 0b8deb5f39919767b7a2987fbb8d4a0aabcde201 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Sun, 15 Dec 2024 08:05:48 -0600 Subject: [PATCH 21/55] Updated doc build workflow (nightly, release, and PR) --- .github/workflows/docs.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6f4550015..17b9d8d9d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -1,5 +1,11 @@ on: + pull_request: + branches: [main] + release: + types: [published] workflow_dispatch: + schedule: + - cron: '0 0 * * *' # Run daily at midnight UTC name: docs From 179582161c5749e09e4b0a34e07da1ccdf6fac64 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 17 Dec 2024 12:15:27 -0500 Subject: [PATCH 22/55] Doc site update (temporarily using a stochtree branch) --- .github/workflows/docs.yml | 1 + README.md | 1 + docs/cpp_docs/tracking.md | 28 ++++++++++++++++++++++++++++ docs/cpp_docs/tree.md | 9 +++++++++ docs/getting-started.md | 4 ---- docs/javascripts/mathjax.js | 19 +++++++++++++++++++ mkdocs.yml | 9 ++++++++- 7 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 docs/cpp_docs/tracking.md create mode 100644 docs/cpp_docs/tree.md create mode 100644 docs/javascripts/mathjax.js diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 17b9d8d9d..95f19097e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,6 +29,7 @@ jobs: repository: 'StochasticTree/stochtree' path: 'stochtree_repo' submodules: 'recursive' + ref: 'documentation-updates' - name: Install doxygen and graphviz run: | diff --git a/README.md b/README.md index 0b2e876a3..c6a0bb131 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,7 @@ cd .. ```{bash} cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb +cp stochtree_repo/demo/notebooks/causal_inference.ipynb docs/python_docs/demo/causal_inference.ipynb ``` ### Building the overall website diff --git a/docs/cpp_docs/tracking.md b/docs/cpp_docs/tracking.md new file mode 100644 index 000000000..ff54dd62d --- /dev/null +++ b/docs/cpp_docs/tracking.md @@ -0,0 +1,28 @@ +# Forest Sampling Tracker API + +A truly minimalist tree ensemble library only needs + +* A representation of a decision tree +* A container for grouping / storing ensembles of trees +* In-memory access to / representation of training data +* Routines / functions to construct the trees + +Most algorithms for optimizing or sampling tree ensembles frequently perform the following operations + +* Determine which leaf a training observation falls into for a decision tree (to compute its prediction and update the residual / outcome) +* Evaluate potential split candidates for a leaf of a decision + +With only the "minimalist" tools above, these two tasks proceed largely as follows + +* For every observation in the dataset, traverse the tree (runtime depends on the tree topology but in a fully balanced tree with $k$ leaf nodes, this has time complexity $O(N \log (k))$). +* For a given node, determine which observations in the training set fall into this node. This requires $O(N)$ boolean operations. + +These operations both perform unnecessary computation which can be avoided with some additional real-time tracking. Essentially, we want + +1. A mapping from dataset row index to leaf node id for every tree in an ensemble (so that we can skip the tree traversal during prediction) +2. A mapping from leaf node id to dataset row indices every tree in an ensemble (so that we can skip the full pass through the training data at split evaluation) + +## Forest Tracker + +The `ForestTracker` class is a wrapper around several implementations of the mappings discussed above. + diff --git a/docs/cpp_docs/tree.md b/docs/cpp_docs/tree.md new file mode 100644 index 000000000..116c6422a --- /dev/null +++ b/docs/cpp_docs/tree.md @@ -0,0 +1,9 @@ +# Decision Tree API + +## Tree + +The fundamental building block of the C++ tree interface is the `Tree` class. + +## Tree Split + +Numeric and categorical splits are represented by a `TreeSplit` class. diff --git a/docs/getting-started.md b/docs/getting-started.md index 38612219d..7a06d5cf3 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -3,10 +3,6 @@ `stochtree` is composed of a C++ "core" and R / Python interfaces to that core. Details on installation and use are available below: -* [Python](#python-package) -* [R](#r-package) -* [C++ core](#c-core) - ## Python Package The python package is not yet on PyPI but can be installed from source using pip's [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). diff --git a/docs/javascripts/mathjax.js b/docs/javascripts/mathjax.js new file mode 100644 index 000000000..3d0d92528 --- /dev/null +++ b/docs/javascripts/mathjax.js @@ -0,0 +1,19 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } + }; + + document$.subscribe(() => { + MathJax.startup.output.clearCache() + MathJax.typesetClear() + MathJax.texReset() + MathJax.typesetPromise() + }) \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 1ca61cb04..a09fc583a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -50,6 +50,8 @@ nav: - 'BCF': python_docs/demo/causal_inference.ipynb - 'C++ Core API and Architecture': - cpp_docs/index.md + - 'Tree Data Structure': cpp_docs/tree.md + - 'Tracking Data Structure': cpp_docs/tracking.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' extra: social: @@ -71,6 +73,8 @@ markdown_extensions: pygments_lang_class: true - pymdownx.inlinehilite - pymdownx.snippets + - pymdownx.arithmatex: + generic: true plugins: - offline - mkdocstrings: @@ -84,4 +88,7 @@ plugins: show_root_heading: true - mkdocs-jupyter: execute: true - include_source: True + include_source: True +extra_javascript: + - javascripts/mathjax.js + - https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js From b0a59f8f43aa4a84f19d551c69e3e8a58f6830c5 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 17 Dec 2024 14:38:18 -0500 Subject: [PATCH 23/55] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..4183525fe --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +stochtree.ai \ No newline at end of file From 9170214b2586370132760799c4264bff6c7ec30f Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 17 Dec 2024 14:49:50 -0500 Subject: [PATCH 24/55] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 4183525fe..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -stochtree.ai \ No newline at end of file From 22eae433cc79fe7096f32a1c721056a0240e6839 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 19 Dec 2024 00:05:34 -0500 Subject: [PATCH 25/55] Update site URL and add search capability --- mkdocs.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index a09fc583a..f86a1791d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: StochTree -site_url: "https://andrewherren.github.io/stochtree-documentation/" +site_url: "stochtree.ai" site_description: "Stochastic tree ensembles (i.e. BART, XBART) for supervised learning and causal inference" repo_url: "https://github.com/StochasticTree/stochtree" repo_name: "StochasticTree/stochtree" @@ -13,6 +13,9 @@ theme: - navigation.sections - navigation.tabs - navigation.tabs.sticky + - search.suggest + - search.highlight + - search.share - toc.follow - toc.integrate palette: @@ -77,6 +80,7 @@ markdown_extensions: generic: true plugins: - offline + - search - mkdocstrings: handlers: python: From 7d647fb6a9c8e66bad5f0a49f78485879d70310f Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 19 Dec 2024 00:32:01 -0500 Subject: [PATCH 26/55] Updated site URL --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index f86a1791d..6073984a7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: StochTree -site_url: "stochtree.ai" +site_url: "https://stochtree.ai/" site_description: "Stochastic tree ensembles (i.e. BART, XBART) for supervised learning and causal inference" repo_url: "https://github.com/StochasticTree/stochtree" repo_name: "StochasticTree/stochtree" From 4106657d5bc17e42d294aabd5a1c616421e66a97 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 31 Dec 2024 13:16:33 -0500 Subject: [PATCH 27/55] Updated docs and temporarily pinned mistune dependencies due to unresolved typo reconciliation in latest release --- .github/workflows/docs.yml | 13 +++++-------- README.md | 21 ++++++++------------- dev/cleanup.sh | 6 ------ docs/python_docs/api/index.md | 13 ++++++++++++- docs/python_docs/api/low-level/dataset.md | 14 ++++++++++++++ docs/python_docs/api/low-level/forest.md | 11 +++++++++++ docs/python_docs/api/low-level/index.md | 11 +++++++++++ docs/python_docs/api/low-level/sampler.md | 16 ++++++++++++++++ docs/python_docs/api/low-level/utilities.md | 16 ++++++++++++++++ mkdocs.yml | 8 ++++++++ requirements.txt | 12 ++++++++++++ 11 files changed, 113 insertions(+), 28 deletions(-) create mode 100644 docs/python_docs/api/low-level/dataset.md create mode 100644 docs/python_docs/api/low-level/forest.md create mode 100644 docs/python_docs/api/low-level/index.md create mode 100644 docs/python_docs/api/low-level/sampler.md create mode 100644 docs/python_docs/api/low-level/utilities.md create mode 100644 requirements.txt diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 95f19097e..fb08c5312 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -51,20 +51,17 @@ jobs: python-version: "3.10" cache: "pip" - - name: Install stochtree python package + - name: Install python dependencies for the doc site and stochtree python package run: | pip install --upgrade pip - pip install numpy scipy pytest pandas scikit-learn pybind11 matplotlib seaborn + pip install -r requirements.txt + + - name: Install stochtree python package + run: | cd stochtree_repo pip install . cd .. - - name: Install python dependencies for the doc site - run: | - pip install mkdocs-material - pip install mkdocstrings-python - pip install mkdocs-jupyter - - name: Setup pandoc uses: r-lib/actions/setup-pandoc@v2 diff --git a/README.md b/README.md index c6a0bb131..c4e5af647 100644 --- a/README.md +++ b/README.md @@ -24,29 +24,23 @@ git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree_repo The docs are largely built using [`mkdocs`](https://www.mkdocs.org), [`pkgdown`](https://pkgdown.r-lib.org) and [`doxygen`](https://www.doxygen.nl/index.html), with everything tied together using the ["Material for MkDocs"](https://squidfunk.github.io/mkdocs-material/) theme. -##### stochtree - -Some of the docs and vignettes require having the current version of `stochtree` installed. -We first create a virtual environment and install this library. +We first create a virtual environment and install the dependencies for `stochtree` as well as the doc site (several python packages: `mkdocs-material`, `mkdocstrings-python`, and `mkdocs-jupyter`). ```{bash} python -m venv venv source venv/bin/activate -cd stochtree_repo pip install --upgrade pip -pip install numpy scipy pytest pandas scikit-learn pybind11 matplotlib seaborn -pip install . -cd .. +pip install -r requirements.txt ``` -##### mkdocs-material +##### stochtree -Install the `mkdocs-material` and `mkdocstrings-python` packages in the same virtual environment +Now, we build the `stochtree` python library locally in the virtual environment activated above ```{bash} -pip install mkdocs-material -pip install mkdocstrings-python -pip install mkdocs-jupyter +cd stochtree_repo +pip install . +cd .. ``` ##### pkgdown @@ -75,6 +69,7 @@ Then run the `pkgdown` build workflow to put the R docs in the correct folder ```{bash} mkdir -p docs/R_docs Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' +rm -rf stochtree_repo/stochtree_cran ``` ### Building the doxygen site for the C++ API diff --git a/dev/cleanup.sh b/dev/cleanup.sh index 3e81e080d..d8825ab71 100644 --- a/dev/cleanup.sh +++ b/dev/cleanup.sh @@ -1,9 +1,3 @@ -# Remove output from the R pkgdown build -rm -rf docs/R_docs/* - -# Remove output from the (C++) doxygen build -rm -rf docs/cpp_docs/doxygen/* - # Remove the stochtree_repo subfolder rm -rf stochtree_repo diff --git a/docs/python_docs/api/index.md b/docs/python_docs/api/index.md index acfb624db..40f21626c 100644 --- a/docs/python_docs/api/index.md +++ b/docs/python_docs/api/index.md @@ -1,3 +1,14 @@ # StochTree Python API Reference -Overview of the `stochtree` python library's key classes and functions +Overview of the `stochtree` python library's key classes and functions. + +The `stochtree` interface is divided into two "levels": + +1. "High level": end-to-end implementations of stochastic tree ensembles for supervised learning (BART / XBART) and causal inference (BCF / XBCF). Both interfaces are designed to mirror the [scikit-learn estimator style](https://scikit-learn.org/dev/developers/develop.html), with the `.fit()` method replaced by a `.sample()` method. + 1. The BART (supervised learning) interface is documented [here](bart.md). + 2. The BCF (causal inference) interface is documented [here](bcf.md). +2. "Low level": we provide access to most of the C++ sampling objects and functionality via Python, which allow for custom sampling algorithms and integration of other model terms. This interface is documented [here](low-level/index.md) and consists broadly of the following components: + 1. [Data API](low-level/dataset.md): loading and storing in-memory data needed to train `stochtree` models. + 2. [Forest API](low-level/forest.md): creating, storing, and modifying ensembles of decision trees that underlie all `stochtree` models. + 3. [Sampler API](low-level/sampler.md): sampling from stochastic tree ensemble models as well as several supported parametric models. + 4. [Utilities API](low-level/utilities.md): seeding a C++ random number generator, preprocessing data, and serializing models to JSON (files or in-memory strings). diff --git a/docs/python_docs/api/low-level/dataset.md b/docs/python_docs/api/low-level/dataset.md new file mode 100644 index 000000000..b1c9e1e68 --- /dev/null +++ b/docs/python_docs/api/low-level/dataset.md @@ -0,0 +1,14 @@ +# Data API + +::: stochtree.data.Dataset + options: + show_source: false + members_order: source + merge_init_into_class: true + +::: stochtree.data.Residual + options: + show_source: false + members_order: source + merge_init_into_class: true + diff --git a/docs/python_docs/api/low-level/forest.md b/docs/python_docs/api/low-level/forest.md new file mode 100644 index 000000000..fc73e102e --- /dev/null +++ b/docs/python_docs/api/low-level/forest.md @@ -0,0 +1,11 @@ +# Forest API + +::: stochtree.forest.Forest + options: + show_source: false + members_order: source + +::: stochtree.forest.ForestContainer + options: + show_source: false + members_order: source diff --git a/docs/python_docs/api/low-level/index.md b/docs/python_docs/api/low-level/index.md new file mode 100644 index 000000000..56d05ee44 --- /dev/null +++ b/docs/python_docs/api/low-level/index.md @@ -0,0 +1,11 @@ +# Low-Level API + +In addition to high-level samplers for [BART](../bart.md) and [BCF](../bcf.md), +the `stochtree` Python library provides direct access to many of the computational structures that +underlie stochastic tree algorithms: tree ensembles, sampling algorithms, and "tracking" data structures +that enable the algorithms to work effectively. This interface consists of: + +1. [Data API](dataset.md): loading and storing in-memory data needed to train `stochtree` models. +2. [Forest API](forest.md): creating, storing, and modifying ensembles of decision trees that underlie all `stochtree` models. +3. [Sampler API](sampler.md): sampling from stochastic tree ensemble models as well as several supported parametric models. +4. [Utilities API](utilities.md): seeding a C++ random number generator, preprocessing data, and serializing models to JSON (files or in-memory strings). diff --git a/docs/python_docs/api/low-level/sampler.md b/docs/python_docs/api/low-level/sampler.md new file mode 100644 index 000000000..797bdb899 --- /dev/null +++ b/docs/python_docs/api/low-level/sampler.md @@ -0,0 +1,16 @@ +# Sampler API + +::: stochtree.sampler.ForestSampler + options: + show_source: false + members_order: source + +::: stochtree.sampler.GlobalVarianceModel + options: + show_source: false + members_order: source + +::: stochtree.sampler.LeafVarianceModel + options: + show_source: false + members_order: source diff --git a/docs/python_docs/api/low-level/utilities.md b/docs/python_docs/api/low-level/utilities.md new file mode 100644 index 000000000..7d9568ee6 --- /dev/null +++ b/docs/python_docs/api/low-level/utilities.md @@ -0,0 +1,16 @@ +# Utilies API + +::: stochtree.sampler.RNG + options: + show_source: false + members_order: source + +::: stochtree.preprocessing.CovariateTransformer + options: + show_source: false + members_order: source + +::: stochtree.serialization.JSONSerializer + options: + show_source: false + members_order: source diff --git a/mkdocs.yml b/mkdocs.yml index 6073984a7..fa06236fe 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -47,6 +47,12 @@ nav: - python_docs/api/index.md - 'BART': python_docs/api/bart.md - 'BCF': python_docs/api/bcf.md + - 'Low level interface': + - python_docs/api/low-level/index.md + - 'Data API': python_docs/api/low-level/dataset.md + - 'Forest API': python_docs/api/low-level/forest.md + - 'Sampler API': python_docs/api/low-level/sampler.md + - 'Utilies API': python_docs/api/low-level/utilities.md - 'Demo': - python_docs/demo/index.md - 'BART': python_docs/demo/supervised_learning.ipynb @@ -90,6 +96,8 @@ plugins: line_length: 60 heading_level: 2 show_root_heading: true + docstring_options: + ignore_init_summary: true - mkdocs-jupyter: execute: true include_source: True diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..d70ff0a07 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,12 @@ +numpy +scipy +pytest +pandas +scikit-learn +pybind11 +matplotlib +seaborn +mkdocs-material +mkdocstrings-python +mistune==3.0.2 # Temporary mistune pin to address https://github.com/lepture/mistune/issues/403 +mkdocs-jupyter From d8b48ec3b22ede39d16d507833d913f38b0a1378 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 31 Dec 2024 14:58:21 -0500 Subject: [PATCH 28/55] Updated C++ and R documentation --- .github/workflows/docs.yml | 4 ++-- .gitignore | 2 +- README.md | 4 ++-- docs/R_docs/index.md | 12 ++++++++++++ docs/cpp_docs/index.md | 8 ++++++-- mkdocs.yml | 4 +++- 6 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 docs/R_docs/index.md diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index fb08c5312..90de71d9d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -84,8 +84,8 @@ jobs: cp _pkgdown.yml stochtree_cran/_pkgdown.yml cp R_README.md stochtree_cran/README.md cd .. - mkdir -p docs/R_docs - Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' + mkdir -p docs/R_docs/pkgdown + Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs/pkgdown", install = TRUE)' - name: Clean up the temporary stochtree_cran directory created run: | diff --git a/.gitignore b/.gitignore index df4cc6890..09ad0a4e5 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,7 @@ yarn-error.log* # Output builds /site/ /docs/cpp_docs/doxygen/ -/docs/R_docs/* +/docs/R_docs/pkgdown/* # Virtual environments /python_venv diff --git a/README.md b/README.md index c4e5af647..eea9fcb61 100644 --- a/README.md +++ b/README.md @@ -67,8 +67,8 @@ cd .. Then run the `pkgdown` build workflow to put the R docs in the correct folder ```{bash} -mkdir -p docs/R_docs -Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' +mkdir -p docs/R_docs/pkgdown +Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs/pkgdown", install = TRUE)' rm -rf stochtree_repo/stochtree_cran ``` diff --git a/docs/R_docs/index.md b/docs/R_docs/index.md new file mode 100644 index 000000000..298645515 --- /dev/null +++ b/docs/R_docs/index.md @@ -0,0 +1,12 @@ +# StochTree R API Reference + +Overview of the `stochtree` R library's key classes and functions, built as a [self-contained doc site](pkgdown/reference/index.html) using the [pkgdown](https://pkgdown.r-lib.org) format. The `stochtree` interface is divided into two "levels": + +1. "High level": end-to-end implementations of stochastic tree ensembles for supervised learning (BART / XBART) and causal inference (BCF / XBCF). + 1. The BART (supervised learning) interface is documented [here](pkgdown/reference/index.html#supervised-learning). + 2. The BCF (causal inference) interface is documented [here](pkgdown/reference/index.html#causal-inference). +2. "Low level": we provide access to most of the C++ sampling objects and functionality via R, which allow for custom sampling algorithms and integration of other model terms. This interface consists broadly of the following components: + 1. [Data API](pkgdown/reference/index.html#data): loading and storing in-memory data needed to train `stochtree` models. + 2. [Forest API](pkgdown/reference/index.html#forest): creating, storing, modifying, and sampling ensembles of decision trees that underlie all `stochtree` models. + 3. [Serialization API](pkgdown/reference/index.html#serialization): serializing models to JSON (files or in-memory strings). + 4. [Random Effects API](pkgdown/reference/index.html#random-effects): sampling from additive random effects models. diff --git a/docs/cpp_docs/index.md b/docs/cpp_docs/index.md index 7656a7ebd..4dcf64279 100644 --- a/docs/cpp_docs/index.md +++ b/docs/cpp_docs/index.md @@ -1,5 +1,9 @@ # StochTree C++ API -This page documents the data structures and interfaces that constitute the ``stochtree`` C++ core. +This page documents the data structures and interfaces that constitute the `stochtree` C++ core. +It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in `stochtree`. This resource is split into: -It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in ``stochtree``. +1. Technical documentation of the design / computational aspects of the C++ core + 1. [Tree API](tree.md): decision tree class which underpins the ensembles that `stochtree` samples + 2. [Tracker API](tracking.md): temporary data structures that synchronize a training dataset and the current state of a decision tree ensemble for faster sampling +2. [Doxygen site](doxygen/index.html) with auto-generated documentation of C++ classes and functions diff --git a/mkdocs.yml b/mkdocs.yml index fa06236fe..df520a063 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -40,7 +40,9 @@ theme: nav: - Home: index.md - 'Getting Started': getting-started.md - - 'R Package': 'R_docs/index.html' + - 'R Package': + - 'Overview': R_docs/index.md + - 'Pkgdown Site': 'R_docs/pkgdown/index.html' - 'Python Package': - python_docs/index.md - 'API': From 4cc94900a89bda6f92f0744fc79ff007b958989a Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 31 Dec 2024 18:41:19 -0500 Subject: [PATCH 29/55] Fixed R link --- docs/R_docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/R_docs/index.md b/docs/R_docs/index.md index 298645515..bcdafe04e 100644 --- a/docs/R_docs/index.md +++ b/docs/R_docs/index.md @@ -1,6 +1,6 @@ # StochTree R API Reference -Overview of the `stochtree` R library's key classes and functions, built as a [self-contained doc site](pkgdown/reference/index.html) using the [pkgdown](https://pkgdown.r-lib.org) format. The `stochtree` interface is divided into two "levels": +Overview of the `stochtree` R library's key classes and functions, built as a [self-contained doc site](pkgdown/index.html) using the [pkgdown](https://pkgdown.r-lib.org) format. The `stochtree` interface is divided into two "levels": 1. "High level": end-to-end implementations of stochastic tree ensembles for supervised learning (BART / XBART) and causal inference (BCF / XBCF). 1. The BART (supervised learning) interface is documented [here](pkgdown/reference/index.html#supervised-learning). From ecaaf8047d9d1a93a6d4634fbff215fc7a9f0068 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 2 Jan 2025 10:56:35 -0500 Subject: [PATCH 30/55] Remove pinned mistune dependency --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d70ff0a07..b83ac5e0e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,5 +8,4 @@ matplotlib seaborn mkdocs-material mkdocstrings-python -mistune==3.0.2 # Temporary mistune pin to address https://github.com/lepture/mistune/issues/403 mkdocs-jupyter From 15f76b7f453ccb1e97be15c1a02bc9ed84bd43ad Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 3 Jan 2025 17:35:38 -0500 Subject: [PATCH 31/55] Updated to reflect Doxyfile move --- .github/workflows/docs.yml | 8 ++++---- README.md | 8 ++++---- dev/build.sh | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 90de71d9d..900be255e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -37,12 +37,12 @@ jobs: - name: Build the C++ doxygen output run: | - sed -i 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile - sed -i 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile - sed -i 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile + sed -i 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/Doxyfile + sed -i 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/Doxyfile + sed -i 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/Doxyfile mkdir -p docs/cpp_docs/ cd stochtree_repo - doxygen cpp_docs/Doxyfile + doxygen Doxyfile cd .. - name: Setup Python 3.10 diff --git a/README.md b/README.md index eea9fcb61..0c7937d1c 100644 --- a/README.md +++ b/README.md @@ -80,12 +80,12 @@ On MacOS, this can be [done via homebrew](https://formulae.brew.sh/formula/doxyg Then, modify the `Doxyfile` to build the C++ documentation as desired and build the doxygen site ```{bash} -sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile +sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/Doxyfile +sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/Doxyfile +sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/Doxyfile mkdir -p docs/cpp_docs/ cd stochtree_repo -doxygen cpp_docs/Doxyfile +doxygen Doxyfile cd .. ``` diff --git a/dev/build.sh b/dev/build.sh index c4dbc9891..a9f25007a 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -21,12 +21,12 @@ pip install mkdocstrings-python pip install mkdocs-jupyter # Build the C++ doxygen output -sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/cpp_docs/Doxyfile -sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/cpp_docs/Doxyfile +sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/Doxyfile +sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/Doxyfile +sed -i '' 's|^GENERATE_HTML *=.*|GENERATE_HTML = YES|' stochtree_repo/Doxyfile mkdir -p docs/cpp_docs/ cd stochtree_repo -doxygen cpp_docs/Doxyfile +doxygen Doxyfile cd .. # Install R package dependencies From 32955cc424d286f305f764af801362a2fb7a858b Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 14 Jan 2025 14:16:09 -0600 Subject: [PATCH 32/55] Adding WIP dev section of the website --- docs/development/index.md | 5 +++++ docs/development/roadmap.md | 3 +++ mkdocs.yml | 5 ++++- 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 docs/development/index.md create mode 100644 docs/development/roadmap.md diff --git a/docs/development/index.md b/docs/development/index.md new file mode 100644 index 000000000..4243219c8 --- /dev/null +++ b/docs/development/index.md @@ -0,0 +1,5 @@ +# Development + +`stochtree` is in active development. Here, we detail some aspects of the development process + +* [Roadmap](roadmap.md): timelines for new feature development and releases diff --git a/docs/development/roadmap.md b/docs/development/roadmap.md new file mode 100644 index 000000000..9f5638dd1 --- /dev/null +++ b/docs/development/roadmap.md @@ -0,0 +1,3 @@ +# Roadmap + +The stochtree development roadmap is a work-in-progress, please check back soon for more detail. diff --git a/mkdocs.yml b/mkdocs.yml index df520a063..a191cafe6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -64,13 +64,16 @@ nav: - 'Tree Data Structure': cpp_docs/tree.md - 'Tracking Data Structure': cpp_docs/tracking.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' + - 'Development': + - 'Overview': development/index.md + - 'Roadmap': development/roadmap.md extra: social: - icon: fontawesome/brands/github link: https://github.com/StochasticTree/stochtree name: stochtree on Github generator: false -copyright: Copyright © 2023 - 2024 Drew Herren, Carlos Carvalho, Richard Hahn, Jared Murray +copyright: Copyright © 2023 - 2025 Drew Herren, Carlos Carvalho, Richard Hahn, Jared Murray markdown_extensions: - toc: permalink: "#" From c58b59e09ade901f51ec5323f31d6de3d15815d8 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 15 Jan 2025 01:52:01 -0600 Subject: [PATCH 33/55] Update how the cran-bootstrap script is called --- .github/workflows/docs.yml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 900be255e..b4af60e32 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -80,7 +80,7 @@ jobs: - name: Build R doc site run: | cd stochtree_repo - Rscript cran-bootstrap.R + Rscript cran-bootstrap.R 1 cp _pkgdown.yml stochtree_cran/_pkgdown.yml cp R_README.md stochtree_cran/README.md cd .. diff --git a/README.md b/README.md index 0c7937d1c..d3301dfcd 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ To build the R docs, first run a script that lays out the package as needed ```{bash} cd stochtree_repo -Rscript cran-bootstrap.R +Rscript cran-bootstrap.R 1 cp _pkgdown.yml stochtree_cran/_pkgdown.yml cp R_README.md stochtree_cran/README.md cd .. From 860413159fc1ffd18932f5361fdd8217328834ab Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 15 Jan 2025 23:47:53 -0600 Subject: [PATCH 34/55] Checkout main stochtree branch --- .github/workflows/docs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index b4af60e32..5e48ba5d0 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,7 +29,6 @@ jobs: repository: 'StochasticTree/stochtree' path: 'stochtree_repo' submodules: 'recursive' - ref: 'documentation-updates' - name: Install doxygen and graphviz run: | From 1bd3aa068b578ea348b4ce138a8f44e278761327 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 23 Jan 2025 02:48:55 -0600 Subject: [PATCH 35/55] Fixed class name change --- docs/python_docs/api/low-level/utilities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/python_docs/api/low-level/utilities.md b/docs/python_docs/api/low-level/utilities.md index 7d9568ee6..580b8001c 100644 --- a/docs/python_docs/api/low-level/utilities.md +++ b/docs/python_docs/api/low-level/utilities.md @@ -5,7 +5,7 @@ show_source: false members_order: source -::: stochtree.preprocessing.CovariateTransformer +::: stochtree.preprocessing.CovariatePreprocessor options: show_source: false members_order: source From 2dec883056aa6e7b7b1796f232bf1786fdb3407e Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 29 Jan 2025 23:16:41 -0600 Subject: [PATCH 36/55] Updated R GHA workflow --- .github/workflows/docs.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 5e48ba5d0..ede49f61a 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -79,9 +79,7 @@ jobs: - name: Build R doc site run: | cd stochtree_repo - Rscript cran-bootstrap.R 1 - cp _pkgdown.yml stochtree_cran/_pkgdown.yml - cp R_README.md stochtree_cran/README.md + Rscript cran-bootstrap.R 1 1 cd .. mkdir -p docs/R_docs/pkgdown Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs/pkgdown", install = TRUE)' From 608b922fb3a1de6c36d330c93a0758d18f383789 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 5 Feb 2025 16:17:19 -0600 Subject: [PATCH 37/55] Updated doc site GHA --- .github/workflows/docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ede49f61a..ecec3ff7a 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -79,7 +79,7 @@ jobs: - name: Build R doc site run: | cd stochtree_repo - Rscript cran-bootstrap.R 1 1 + Rscript cran-bootstrap.R 1 1 1 cd .. mkdir -p docs/R_docs/pkgdown Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs/pkgdown", install = TRUE)' From ea6a7acc9de7fc4ac152bda8fc0834f471783f9f Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Tue, 11 Feb 2025 02:43:11 -0600 Subject: [PATCH 38/55] Updated documentation for release 0.1.1 --- README.md | 4 +- dev/build.sh | 25 +++----- docs/about.md | 103 +++++++++++++++++++++++++++++++ docs/cpp_docs/index.md | 5 +- docs/cpp_docs/tracking.md | 7 +-- docs/cpp_docs/tree.md | 9 --- docs/development/contributing.md | 5 ++ docs/development/index.md | 1 + docs/getting-started.md | 28 +++++---- docs/index.md | 18 +++++- mkdocs.yml | 10 ++- 11 files changed, 164 insertions(+), 51 deletions(-) create mode 100644 docs/about.md delete mode 100644 docs/cpp_docs/tree.md create mode 100644 docs/development/contributing.md diff --git a/README.md b/README.md index d3301dfcd..a880817ac 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,7 @@ To build the R docs, first run a script that lays out the package as needed ```{bash} cd stochtree_repo -Rscript cran-bootstrap.R 1 -cp _pkgdown.yml stochtree_cran/_pkgdown.yml -cp R_README.md stochtree_cran/README.md +Rscript cran-bootstrap.R 1 1 1 cd .. ``` diff --git a/dev/build.sh b/dev/build.sh index a9f25007a..87a77f44c 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -2,24 +2,18 @@ # Clone stochtree repo git clone --recursive git@github.com:StochasticTree/stochtree.git stochtree_repo -cd stochtree_repo -git checkout documentation-overhaul -cd .. -# Setup python virtual environment and the stochtree python package +# Set up python virtual environment and dependencies python -m venv venv source venv/bin/activate -cd stochtree_repo pip install --upgrade pip -pip install numpy scipy pytest pandas scikit-learn pybind11 +pip install -r requirements.txt + +# Install python package +cd stochtree_repo pip install . cd .. -# Install python dependencies for the doc site -pip install mkdocs-material -pip install mkdocstrings-python -pip install mkdocs-jupyter - # Build the C++ doxygen output sed -i '' 's|^OUTPUT_DIRECTORY *=.*|OUTPUT_DIRECTORY = ../docs/cpp_docs/|' stochtree_repo/Doxyfile sed -i '' 's|^GENERATE_XML *=.*|GENERATE_XML = NO|' stochtree_repo/Doxyfile @@ -34,12 +28,11 @@ Rscript -e 'install.packages(c("remotes", "devtools", "roxygen2", "ggplot2", "la # Build the R package doc site cd stochtree_repo -Rscript cran-bootstrap.R -cp _pkgdown.yml stochtree_cran/_pkgdown.yml -cp R_README.md stochtree_cran/README.md +Rscript cran-bootstrap.R 1 1 1 cd .. -mkdir -p docs/R_docs -Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs", install = TRUE)' +mkdir -p docs/R_docs/pkgdown +Rscript -e 'pkgdown::build_site_github_pages("stochtree_repo/stochtree_cran", dest_dir = "../../docs/R_docs/pkgdown", install = TRUE)' +rm -rf stochtree_repo/stochtree_cran # Copy Jupyter notebook demos over to docs directory cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb diff --git a/docs/about.md b/docs/about.md new file mode 100644 index 000000000..6672deb7a --- /dev/null +++ b/docs/about.md @@ -0,0 +1,103 @@ +# Overview of Stochastic Tree Models + +Stochastic tree models are a powerful addition to your modeling toolkit. +As with many machine learning methods, understanding these models in depth is an involved task. + +There are many excellent published papers on stochastic tree models +(to name a few, the [original BART paper](https://projecteuclid.org/journals/annals-of-applied-statistics/volume-4/issue-1/BART-Bayesian-additive-regression-trees/10.1214/09-AOAS285.full), +[the XBART paper](https://www.tandfonline.com/doi/full/10.1080/01621459.2021.1942012), +and [the BCF paper](https://projecteuclid.org/journals/bayesian-analysis/volume-15/issue-3/Bayesian-Regression-Tree-Models-for-Causal-Inference--Regularization-Confounding/10.1214/19-BA1195.full)). +Here, we aim to build up an abbreviated intuition for these models from their conceptually-simple building blocks. + +## Notation + +We're going to introduce some notation to make these concepts precise. +In a traditional supervised learning setting, we hope to predict some **outcome** from **features** in a training dataset. +We'll call the outcome $y$ and the features $X$. +Our goal is to come up with a function $f$ that predicts the outcome $y$ as well as possible from $X$ alone. + +## Decision Trees + +[Decision tree learning](https://en.wikipedia.org/wiki/Decision_tree_learning) is a simple machine learning method that +constructs a function $f$ from a series of conditional statements. Consider the tree below. + +```mermaid +stateDiagram-v2 + state split_one <> + state split_two <> + split_one --> split_two: if x1 <= 1 + split_one --> c : if x1 > 1 + split_two --> a: if x2 <= -2 + split_two --> b : if x2 > -2 +``` + +We evaluate two conditional statments (`X[,1] > 1` and `X[,2] > -2`), arranged in a tree-like sequence of branches, +which determine whether the model predicts `a`, `b`, or `c`. We could similarly express this tree in math notation as + +\begin{equation*} +f(X_i) = \begin{cases} +a & ; \;\;\; X_{i,1} \leq 1, \;\; X_{i,2} \leq -2\\ +b & ; \;\;\; X_{i,1} \leq 1, \;\; X_{i,2} > -2\\ +c & ; \;\;\; X_{i,1} > 1 +\end{cases} +\end{equation*} + +We won't belabor the discussion of trees as there are many good textbooks and online articles on the topic, +but we'll close by noting that training decision trees introduces a delicate balance between +[overfitting and underfitting](https://en.wikipedia.org/wiki/Overfitting). +Simple trees like the one above do not capture much complexity in a dataset and may potentially be underfit +while deep, complex trees are vulnerable to overfitting and tend to have high variance. + +## Boosted Decision Tree Ensembles + +One way to address the overfitting-underfitting tradeoff of decision trees is to build an "ensemble" of decision +trees, so that the function $f$ is defined by a sum of $k$ individual decision trees $g_i$ + +\begin{equation*} +f(X_i) = g_1(X_i) + \dots + g_k(X_i) +\end{equation*} + +There are several ways to train an ensemble of decision trees (sometimes called "forests"), the most popular of which are [random forests](https://en.wikipedia.org/wiki/Random_forest) and +[gradient boosting](https://en.wikipedia.org/wiki/Gradient_boosting). Their main difference is that random forests train +all $m$ trees independently of one another, while boosting trains tree sequentially, so that tree $j$ depends on the result of training trees 1 through $j-1$. +Libraries like [xgboost](https://xgboost.readthedocs.io/en/stable/) and [LightGBM](https://lightgbm.readthedocs.io/en/latest/) are popular examples of boosted tree ensembles. + +Tree ensembles often [outperform neural networks and other machine learning methods on tabular datasets](https://arxiv.org/abs/2207.08815), +but classic tree ensemble methods return a single estimated function $f$, without expressing uncertainty around its estimates. + +## Stochastic Tree Ensembles + +[Stochastic](https://en.wikipedia.org/wiki/Stochastic) tree ensembles differ from their classical counterparts in their use of randomness in learning a function. +Rather than returning a single "best" tree ensemble, stochastic tree ensembles return a range of tree ensembles that fit the data well. +Mechanically, it's useful to think of "sampling" -- rather than "fitting" -- a stochastic tree ensemble model. + +Why is this useful? Suppose we've sampled $m$ forests. For each observation $i$, we obtain $m$ predictions: $[f_1(X_i), \dots, f_m(X_i)]$. +From this "dataset" of predictions, we can compute summary statistics, where a mean or median would give something akin to the predictions of an xgboost or lightgbm model, +and the $\alpha$ and $1-\alpha$ quantiles give a [credible interval](https://en.wikipedia.org/wiki/Credible_interval). + +Rather than explain each of the models that `stochtree` supports in depth here, we provide a high-level overview, with pointers to the relevant literature. + +### Supervised Learning + +The [`bart`](R_docs/pkgdown/reference/bart.html) R function and the [`BARTModel`](python_docs/api/bart.md) python class are the primary interface for supervised +prediction tasks in `stochtree`. The primary references for these models are +[BART (Chipman, George, McCulloch 2010)](https://projecteuclid.org/journals/annals-of-applied-statistics/volume-4/issue-1/BART-Bayesian-additive-regression-trees/10.1214/09-AOAS285.full) and +[XBART (He and Hahn 2021)](https://www.tandfonline.com/doi/full/10.1080/01621459.2021.1942012). + +In addition to the standard BART / XBART models, in which each tree's leaves return a constant prediction, `stochtree` also supports +arbitrary leaf regression on a user-provided basis (i.e. an expanded version of [Chipman et al 2002](https://link.springer.com/article/10.1023/A:1013916107446) and [Gramacy and Lee 2012](https://www.tandfonline.com/doi/abs/10.1198/016214508000000689)). + +### Causal Inference + +The [`bcf`](R_docs/pkgdown/reference/bcf.html) R function and the [`BCFModel`](python_docs/api/bcf.md) python class are the primary interface for causal effect +estimation in `stochtree`. The primary references for these models are +[BCF (Hahn, Murray, Carvalho 2021)](https://projecteuclid.org/journals/bayesian-analysis/volume-15/issue-3/Bayesian-Regression-Tree-Models-for-Causal-Inference--Regularization-Confounding/10.1214/19-BA1195.full) and +[XBCF (Krantsevich, He, Hahn 2022)](https://arxiv.org/abs/2209.06998). + +### Additional Modeling Features + +Both the BART and BCF interfaces in `stochtree` support the following extensions: + +* Accelerated / "warm-start" sampling of forests (i.e. [He and Hahn 2021](https://www.tandfonline.com/doi/full/10.1080/01621459.2021.1942012)) +* Forest-based heteroskedasticity (i.e. [Murray 2021](https://www.tandfonline.com/doi/abs/10.1080/01621459.2020.1813587)) +* Additive random effects (i.e. [Gelman et al 2008](https://www.tandfonline.com/doi/abs/10.1198/106186008X287337)) diff --git a/docs/cpp_docs/index.md b/docs/cpp_docs/index.md index 4dcf64279..46794927e 100644 --- a/docs/cpp_docs/index.md +++ b/docs/cpp_docs/index.md @@ -3,7 +3,6 @@ This page documents the data structures and interfaces that constitute the `stochtree` C++ core. It may be useful to researchers building novel tree algorithms or users seeking a deeper understanding of the algorithms implemented in `stochtree`. This resource is split into: -1. Technical documentation of the design / computational aspects of the C++ core - 1. [Tree API](tree.md): decision tree class which underpins the ensembles that `stochtree` samples - 2. [Tracker API](tracking.md): temporary data structures that synchronize a training dataset and the current state of a decision tree ensemble for faster sampling +1. Technical documentation of the design / computational aspects of the C++ core (in progress!) + 1. [Tracker API](tracking.md): temporary data structures that synchronize a training dataset and the current state of a decision tree ensemble for faster sampling 2. [Doxygen site](doxygen/index.html) with auto-generated documentation of C++ classes and functions diff --git a/docs/cpp_docs/tracking.md b/docs/cpp_docs/tracking.md index ff54dd62d..8d0611abf 100644 --- a/docs/cpp_docs/tracking.md +++ b/docs/cpp_docs/tracking.md @@ -1,4 +1,4 @@ -# Forest Sampling Tracker API +# Forest Sampling Tracker A truly minimalist tree ensemble library only needs @@ -21,8 +21,3 @@ These operations both perform unnecessary computation which can be avoided with 1. A mapping from dataset row index to leaf node id for every tree in an ensemble (so that we can skip the tree traversal during prediction) 2. A mapping from leaf node id to dataset row indices every tree in an ensemble (so that we can skip the full pass through the training data at split evaluation) - -## Forest Tracker - -The `ForestTracker` class is a wrapper around several implementations of the mappings discussed above. - diff --git a/docs/cpp_docs/tree.md b/docs/cpp_docs/tree.md deleted file mode 100644 index 116c6422a..000000000 --- a/docs/cpp_docs/tree.md +++ /dev/null @@ -1,9 +0,0 @@ -# Decision Tree API - -## Tree - -The fundamental building block of the C++ tree interface is the `Tree` class. - -## Tree Split - -Numeric and categorical splits are represented by a `TreeSplit` class. diff --git a/docs/development/contributing.md b/docs/development/contributing.md new file mode 100644 index 000000000..dff02d051 --- /dev/null +++ b/docs/development/contributing.md @@ -0,0 +1,5 @@ +# Contributing + +`stochtree` is hosted on [Github](https://github.com/StochasticTree/stochtree/). +Any feedback, requests, or bug reports can be submitted as [issues](https://github.com/StochasticTree/stochtree/issues). +Moreover, if you have ideas for how to improve stochtree, we welcome [pull requests](https://github.com/StochasticTree/stochtree/pulls) :) diff --git a/docs/development/index.md b/docs/development/index.md index 4243219c8..617379d84 100644 --- a/docs/development/index.md +++ b/docs/development/index.md @@ -2,4 +2,5 @@ `stochtree` is in active development. Here, we detail some aspects of the development process +* [Contributing](contributing.md): how to get involved with stochtree, by contributing code, documentation, or helpful feedback * [Roadmap](roadmap.md): timelines for new feature development and releases diff --git a/docs/getting-started.md b/docs/getting-started.md index 7a06d5cf3..679a65fc7 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,7 +1,21 @@ # Getting Started `stochtree` is composed of a C++ "core" and R / Python interfaces to that core. -Details on installation and use are available below: +Below, we detail how to install the R / Python packages, or work directly with the C++ codebase. + +## R Package + +The R package can be installed from CRAN via + +``` +install.packages("stochtree") +``` + +The development version of `stochtree` can be installed from Github via + +``` +remotes::install_github("StochasticTree/stochtree", ref="r-dev") +``` ## Python Package @@ -39,7 +53,7 @@ Then install the package from github via pip pip install git+https://github.com/StochasticTree/stochtree.git ``` -(*Note*: if you'd also like to run `stochtree`'s notebook examples, you will also need jupyterlab, seaborn, and matplotlib) +(*Note*: if you'd like to run `stochtree`'s notebook examples, you will also need `jupyterlab`, `seaborn`, and `matplotlib`) ```{bash} conda install matplotlib seaborn @@ -70,20 +84,12 @@ Then install stochtree via pip install git+https://github.com/StochasticTree/stochtree.git ``` -As above, if you'd like to run the notebook examples in the `demo/` subfolder, you will also need jupyterlab, seaborn, and matplotlib and you will have to [clone the repo](#cloning-the-repository) +As above, if you'd like to run the notebook examples in the `demo/` subfolder, you will also need `jupyterlab`, `seaborn`, and `matplotlib` and you will have to [clone the repo](#cloning-the-repository) ```{bash} pip install matplotlib seaborn jupyterlab ``` -## R Package - -The package can be installed in R via - -``` -remotes::install_github("StochasticTree/stochtree", ref="r-dev") -``` - ## C++ Core While the C++ core links to both R and Python for a performant, high-level interface, diff --git a/docs/index.md b/docs/index.md index 55a3da1f3..c4c360038 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,3 +1,19 @@ # StochTree -`stochtree` (stochastic tree) is software for building stochastic tree ensembles (i.e. BART, XBART) for supervised learning and causal inference. +`stochtree` (short for "stochastic tree") is a software suite for flexible decision tree modeling. +It has two primary interfaces: + +1. "High-level": robust implementations of many popular stochastic tree algorithms (BART, XBART, BCF, XBCF), with support for serialization and parallelism. +2. "Low-level": access to the "inner loop" of a stochastic forest sampler, allowing custom tree algorithm development in <50 lines of code. + +The "core" of the software is written in C++, but it provides R and Python APIs. +The R package is [available on CRAN](https://cran.r-project.org/web/packages/stochtree/index.html) and the python package will soon be on PyPI. + +## Table of Contents + +* [Getting Started](getting-started.md): Details on how to install and use `stochtree` +* [About](about.md): Overview of the models supported by stochtree and pointers to further reading +* [R Package](R_docs/index.md): Complete documentation of the R package +* [Python Package](python_docs/index.md): Complete documentation of the python package +* [C++ Core API and Architecture](cpp_docs/index.md): Overview and documentation of the C++ codebase that supports stochtree +* [Development](development/index.md): Roadmap and how to contribute diff --git a/mkdocs.yml b/mkdocs.yml index a191cafe6..dff193b79 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -40,6 +40,7 @@ theme: nav: - Home: index.md - 'Getting Started': getting-started.md + - 'About StochTree': about.md - 'R Package': - 'Overview': R_docs/index.md - 'Pkgdown Site': 'R_docs/pkgdown/index.html' @@ -61,11 +62,11 @@ nav: - 'BCF': python_docs/demo/causal_inference.ipynb - 'C++ Core API and Architecture': - cpp_docs/index.md - - 'Tree Data Structure': cpp_docs/tree.md - - 'Tracking Data Structure': cpp_docs/tracking.md + - 'Tracking Data Structures': cpp_docs/tracking.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' - 'Development': - 'Overview': development/index.md + - 'Contributing': development/contributing.md - 'Roadmap': development/roadmap.md extra: social: @@ -89,6 +90,11 @@ markdown_extensions: - pymdownx.snippets - pymdownx.arithmatex: generic: true + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format plugins: - offline - search From 43698fd45606004cb433d59b4ebefa546abf9923 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 12 Feb 2025 02:37:38 -0600 Subject: [PATCH 39/55] Updated docs dev section --- docs/development/contributing.md | 221 ++++++++++++++++++++++++++++++- docs/development/roadmap.md | 22 ++- docs/index.md | 14 +- mkdocs.yml | 15 ++- 4 files changed, 258 insertions(+), 14 deletions(-) diff --git a/docs/development/contributing.md b/docs/development/contributing.md index dff02d051..ca822d011 100644 --- a/docs/development/contributing.md +++ b/docs/development/contributing.md @@ -2,4 +2,223 @@ `stochtree` is hosted on [Github](https://github.com/StochasticTree/stochtree/). Any feedback, requests, or bug reports can be submitted as [issues](https://github.com/StochasticTree/stochtree/issues). -Moreover, if you have ideas for how to improve stochtree, we welcome [pull requests](https://github.com/StochasticTree/stochtree/pulls) :) +Moreover, if you have ideas for how to improve stochtree, we welcome [pull requests](https://github.com/StochasticTree/stochtree/pulls). + +## Building StochTree + +Any local stochtree development will require cloning the repository from Github. +If you don't have git installed, you can do so following [these instructions](https://learn.microsoft.com/en-us/devops/develop/git/install-and-set-up-git). + +Once git is available at the command line, navigate to the folder that will store this project (in bash / zsh, this is done by running `cd` followed by the path to the directory). +Then, clone the `stochtree` repo as a subfolder by running +```{bash} +git clone --recursive https://github.com/StochasticTree/stochtree.git +``` + +*NOTE*: this project incorporates several C++ dependencies as [git submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules), +which is why the `--recursive` flag is necessary. If you have already cloned the repo without the `--recursive` flag, +you can retrieve the submodules recursively by running `git submodule update --init --recursive` in the main repo directory. + +### R + +This section will detail how to use RStudio to build and make changes to stochtree. There are other tools that are useful for R +package development (for example, [Positron](https://github.com/posit-dev/positron), [VS Code](https://code.visualstudio.com/docs/languages/r), +and [ESS](https://ess.r-project.org/)), but we will focus on RStudio in this walkthrough. + +Once you've cloned the stochtree repository, follow these steps to build stochtree: + +1. [Create an RStudio project in the stochtree directory](https://support.posit.co/hc/en-us/articles/200526207-Using-RStudio-Projects) +2. [Build the package in RStudio](https://docs.posit.co/ide/user/ide/guide/pkg-devel/writing-packages.html#building-a-package) + +Note that due to the complicated folder structure of the stochtree repo, step 2 might not work out of the box on all platforms. +If stochtree fails to build, you can use the script that is used to create a CRAN-friendly stochtree R package directory, which +creates a `stochtree_cran` subdirectory of the stochtree folder and copies the relevant R package files. +You can run this script by entering `Rscript cran-bootstrap.R 1 1 1` in the terminal in RStudio. Once you have a `stochtree_cran` subfolder, +you can build stochtree using + +```{r} +devtools::install_local("stochtree_cran") +``` + +Since this is a temporary folder, you can clean it up by running `Rscript cran-cleanup.R` in the terminal in RStudio. + +### Python + +Building and making changes to the python library is best done in an isolated virtual environment. There are many different ways of +managing virtual environments in Python, but here we focus on `conda` and `venv`. + +#### Conda + +Conda provides a straightforward experience in managing python dependencies, avoiding version conflicts / ABI issues / etc. + +To build stochtree using a `conda` based workflow, first create and activate a conda environment with the requisite dependencies + +```{bash} +conda create -n stochtree-dev -c conda-forge python=3.10 numpy scipy pytest pandas pybind11 scikit-learn matplotlib seaborn +conda activate stochtree-dev +pip install jupyterlab +``` + +Then install the package by navigating to the stochtree directory and running + +```{bash} +pip install . +``` + +Note that if you are making changes and finding that they aren't reflected after a reinstall of stochtree, you can +clear all of the python package development artifacts with + +```{bash} +rm -rf stochtree.egg-info; rm -rf .pytest_cache; rm -rf build +``` + +#### Venv + +You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments +(i.e. `cd /path/to/envs`) and create and activate a virtual environment: + +```{bash} +python -m venv venv +source venv/bin/activate +``` + +Install all of the package (and demo notebook) dependencies + +```{bash} +pip install numpy scipy pytest pandas scikit-learn pybind11 matplotlib seaborn jupyterlab +``` + +Then install the package by navigating to the stochtree directory and running + +```{bash} +pip install . +``` + +Note that if you are making changes and finding that they aren't reflected after a reinstall of stochtree, you can +clear all of the python package development artifacts with + +```{bash} +rm -rf stochtree.egg-info; rm -rf .pytest_cache; rm -rf build +``` + +### C++ + +#### CMake + +The C++ project can be built independently from the R / Python packages using `cmake`. +See [here](https://cmake.org/install/) for details on installing cmake (alternatively, +on MacOS, `cmake` can be installed using [homebrew](https://formulae.brew.sh/formula/cmake)). +Once `cmake` is installed, you can build the CLI by navigating to the main +project directory at your command line (i.e. `cd /path/to/stochtree`) and +running the following code + +```{bash} +rm -rf build +mkdir build +cmake -S . -B build +cmake --build build +``` + +The CMake build has two primary targets, which are detailed below + +##### Debug Program + +`debug/api_debug.cpp` defines a standalone target that can be straightforwardly run with a debugger (i.e. `lldb`, `gdb`) +while making non-trivial changes to the C++ code. +This debugging program is compiled as part of the CMake build if the `BUILD_DEBUG_TARGETS` option in `CMakeLists.txt` is set to `ON`. + +Once the program has been built, it can be run from the command line via `./build/debugstochtree` or attached to a debugger +via `lldb ./build/debugstochtree` (clang) or `gdb ./build/debugstochtree` (gcc). + +##### Unit Tests + +We test `stochtree` using the [GoogleTest](https://google.github.io/googletest/) framework. +Unit tests are compiled into a single target as part of the CMake build if the `BUILD_TEST` option is set to `ON` +and the test suite can be run after compilation via `./build/teststochtree` + +## Debugging + +Debugging stochtree invariably leads to the "core" C++ codebase, which requires care to debug correctly. +Below we detail how to debug stochtree's C++ core through each of the three interfaces (C++, R and Python). + +### C++ Program + +The `debugstochtree` cmake target exists precisely to quickly debug the C++ core of stochtree. + +First, you must build the program using debug symbols, which you can do by enabling the `USE_DEBUG` optoon +and ensuring that `BUILD_DEBUG_TARGETS` is also switched on, as below + +```{bash} +rm -rf build +mkdir build +cmake -S . -B build -DBUILD_DEBUG_TARGETS=ON -DUSE_DEBUG=ON +cmake --build build +``` + +From here, you can debug at the command line using [lldb](https://lldb.llvm.org/) on MacOS on [gdb](https://sourceware.org/gdb/) on linux by running +either `lldb ./build/debugstochtree` or `gdb ./build/debugstochtree` and using the appropriate lldb / gdb shortcuts to debug your program. + +#### xcode + +While using `gdb` or `lldb` on `debugstochtree` at the command line is very helpful, users may prefer debugging in a full-fledged IDE like xcode (if working in MacOS). +This project's C++ core can be converted to an xcode project from `CMakeLists.txt`, but first you must turn off sanitizers +(xcode seems to have its own way of setting this at build time for different configurations, and having injected +`-fsanitize=address` statically into compiler arguments will cause xcode errors). To do this, modify the `USE_SANITIZER` line in `CMakeLists.txt`: + +``` +option(USE_SANITIZER "Use santizer flags" OFF) +``` + +To generate an XCode project based on the build targets and specifications defined in a `CMakeLists.txt`, navigate to the main project folder (i.e. `cd /path/to/project`) and run the following commands: + +```{bash} +rm -rf xcode/ +mkdir xcode +cd xcode +cmake -G Xcode .. -DCMAKE_C_COMPILER=cc -DCMAKE_CXX_COMPILER=c++ -DUSE_SANITIZER=OFF -DUSE_DEBUG=OFF +cd .. +``` + +Now, if you navigate to the xcode subfolder (in Finder), you should be able to click on a `.xcodeproj` file and the project will open in XCode. + +### R Package + +Debugging stochtree R code requires building the R package with debug symbols. +The simplest way to do this is to open your R installation's `Makevars` file +by running `usethis::edit_r_makevars()` in RStudio which will open `Makevars` +in a code editor. + +If your `Makevars` file already has a line that begins with `CXX17FLAGS = ...`, +look for a `-g -O2` compiler flag and change this to `-g -O0`. If this flag isn't +set in the `CXX17FLAGS = ` line, then simply add `-g -O0` to this line after the ` = `. +If your `Makevars` file already does not have a line that begins with `CXX17FLAGS = ...`, +add `CXX17FLAGS = -g -O0`. + +Now, rebuild the R package as above. Save the R code you'd like to debug to an R script. +Suppose for the sake of illustration that the code you want to debug is saved in +`path/to/debug_script.R`. + +At the command line (either the terminal in RStudio or your local terminal program), +run `R -d lldb` if you are using MacOS (or `R -d gdb` if you are using Linux). + +After running this, interrupt execution with ctrl + C, which brings you to an lldb (or gdb) prompt which should look like below with a blinking cursor after it + +``` +(lldb) +``` + +From there, you can set breakpoints, either to specific lines of specific files like `b src/tree.cpp:2117` or to break whenever there is an error using `breakpoint set -E c++`. +(**Note**: in gdb, the breakpoint and control flow commands are slightly different.) +Now, start the R program by typing + +``` +r +``` + +Once you're there, you can execute a script you've set up to run your code using + +```{r} +source("path/to/debug_script.R") +``` + +And step through the program as you wish using `lldb` / `gdb` diff --git a/docs/development/roadmap.md b/docs/development/roadmap.md index 9f5638dd1..45018694a 100644 --- a/docs/development/roadmap.md +++ b/docs/development/roadmap.md @@ -1,3 +1,21 @@ -# Roadmap +# Development Roadmap -The stochtree development roadmap is a work-in-progress, please check back soon for more detail. +We are working hard to make `stochtree` faster, easier to use, and more flexible! Below is a snapshot of our development roadmap. Our four categories of product enhancement are + +1. **User Interface**: the way that a user can build, store, and use models +2. **Performance**: program runtime and memory usage of various models +3. **Modeling Features**: scope of modeling tools provided +4. **Interoperability**: compatibility with other computing and data libraries + +These development goals are prioritized along three broad timelines + +1. **Now**: development is currently underway or planned for a near-term release +2. **Next**: design / research needed; development hinges on feasibility and time demands +3. **Later**: long-term goal; exploratory + +| Category | Now | Next | Later | +| --- | --- | --- | --- | +| User Interface | Feature parity between R and Python | | | +| Performance | | | Hardware acceleration (Apple Silicon GPU)
Hardware acceleration (NVIDIA GPU)
Out-of-memory sampler | +| Modeling Features | Quantile cutpoint sampling | Monotone BART sampler
Multiclass classification | | +| Interoperability | | Polars (Python) | PyMC (Python)
Stan (R / Python)
Apache Arrow (R / Python) | diff --git a/docs/index.md b/docs/index.md index c4c360038..27a37a5ef 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,10 +1,16 @@ # StochTree -`stochtree` (short for "stochastic tree") is a software suite for flexible decision tree modeling. -It has two primary interfaces: +`stochtree` (short for "stochastic tree") unlocks flexible decision tree modeling in R or Python. +Boosted decision tree models (like [xgboost](https://xgboost.readthedocs.io/en/stable/), +[LightGBM](https://lightgbm.readthedocs.io/en/latest/), or +[scikit-learn's HistGradientBoostingRegressor](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingRegressor.html)) +are great, but often require time-consuming hyperparameter tuning. +`stochtree` can help you avoid this, by running a fast Bayesian analog of gradient boosting (called BART -- Bayesian Additive Regression Trees). + +`stochtree` has two primary interfaces: 1. "High-level": robust implementations of many popular stochastic tree algorithms (BART, XBART, BCF, XBCF), with support for serialization and parallelism. -2. "Low-level": access to the "inner loop" of a stochastic forest sampler, allowing custom tree algorithm development in <50 lines of code. +2. "Low-level": access to the "inner loop" of a forest sampler, allowing custom tree algorithm development in <50 lines of code. The "core" of the software is written in C++, but it provides R and Python APIs. The R package is [available on CRAN](https://cran.r-project.org/web/packages/stochtree/index.html) and the python package will soon be on PyPI. @@ -14,6 +20,6 @@ The R package is [available on CRAN](https://cran.r-project.org/web/packages/sto * [Getting Started](getting-started.md): Details on how to install and use `stochtree` * [About](about.md): Overview of the models supported by stochtree and pointers to further reading * [R Package](R_docs/index.md): Complete documentation of the R package -* [Python Package](python_docs/index.md): Complete documentation of the python package +* [Python Package](python_docs/index.md): Complete documentation of the Python package * [C++ Core API and Architecture](cpp_docs/index.md): Overview and documentation of the C++ codebase that supports stochtree * [Development](development/index.md): Roadmap and how to contribute diff --git a/mkdocs.yml b/mkdocs.yml index dff193b79..77c5b00a6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -42,30 +42,30 @@ nav: - 'Getting Started': getting-started.md - 'About StochTree': about.md - 'R Package': - - 'Overview': R_docs/index.md + - 'R Package': R_docs/index.md - 'Pkgdown Site': 'R_docs/pkgdown/index.html' - 'Python Package': - - python_docs/index.md + - 'Python Package': python_docs/index.md - 'API': - - python_docs/api/index.md + - 'API': python_docs/api/index.md - 'BART': python_docs/api/bart.md - 'BCF': python_docs/api/bcf.md - 'Low level interface': - - python_docs/api/low-level/index.md + - 'Low level interface': python_docs/api/low-level/index.md - 'Data API': python_docs/api/low-level/dataset.md - 'Forest API': python_docs/api/low-level/forest.md - 'Sampler API': python_docs/api/low-level/sampler.md - 'Utilies API': python_docs/api/low-level/utilities.md - 'Demo': - - python_docs/demo/index.md + - 'Demo': python_docs/demo/index.md - 'BART': python_docs/demo/supervised_learning.ipynb - 'BCF': python_docs/demo/causal_inference.ipynb - 'C++ Core API and Architecture': - - cpp_docs/index.md + - 'C++ Core API and Architecture': cpp_docs/index.md - 'Tracking Data Structures': cpp_docs/tracking.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' - 'Development': - - 'Overview': development/index.md + - 'Development': development/index.md - 'Contributing': development/contributing.md - 'Roadmap': development/roadmap.md extra: @@ -76,6 +76,7 @@ extra: generator: false copyright: Copyright © 2023 - 2025 Drew Herren, Carlos Carvalho, Richard Hahn, Jared Murray markdown_extensions: + - tables - toc: permalink: "#" toc_depth: 3 From 10aed00e5fafd86f4461d4ecb7e83c518fca4135 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 12 Feb 2025 19:45:02 -0600 Subject: [PATCH 40/55] Major overhaul of the doc website --- .github/workflows/docs.yml | 4 ++ README.md | 4 ++ dev/build.sh | 4 ++ docs/development/contributing.md | 70 +++++++++++++++++++++++++++----- docs/development/roadmap.md | 8 ++-- docs/python_docs/api/index.md | 2 - docs/python_docs/demo/index.md | 9 +++- docs/python_docs/index.md | 6 +-- mkdocs.yml | 4 ++ 9 files changed, 91 insertions(+), 20 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index ecec3ff7a..04a302c76 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -94,6 +94,10 @@ jobs: run: | cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb cp stochtree_repo/demo/notebooks/causal_inference.ipynb docs/python_docs/demo/causal_inference.ipynb + cp stochtree_repo/demo/notebooks/heteroskedastic_supervised_learning.ipynb docs/python_docs/demo/heteroskedastic_supervised_learning.ipynb + cp stochtree_repo/demo/notebooks/multivariate_treatment_causal_inference.ipynb docs/python_docs/demo/multivariate_treatment_causal_inference.ipynb + cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/serialization.ipynb + cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb - name: Build the overall doc site run: | diff --git a/README.md b/README.md index a880817ac..3fc059eb3 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,10 @@ cd .. ```{bash} cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb cp stochtree_repo/demo/notebooks/causal_inference.ipynb docs/python_docs/demo/causal_inference.ipynb +cp stochtree_repo/demo/notebooks/heteroskedastic_supervised_learning.ipynb docs/python_docs/demo/heteroskedastic_supervised_learning.ipynb +cp stochtree_repo/demo/notebooks/multivariate_treatment_causal_inference.ipynb docs/python_docs/demo/multivariate_treatment_causal_inference.ipynb +cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/serialization.ipynb +cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb ``` ### Building the overall website diff --git a/dev/build.sh b/dev/build.sh index 87a77f44c..c0a69f6c5 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -37,6 +37,10 @@ rm -rf stochtree_repo/stochtree_cran # Copy Jupyter notebook demos over to docs directory cp stochtree_repo/demo/notebooks/supervised_learning.ipynb docs/python_docs/demo/supervised_learning.ipynb cp stochtree_repo/demo/notebooks/causal_inference.ipynb docs/python_docs/demo/causal_inference.ipynb +cp stochtree_repo/demo/notebooks/heteroskedastic_supervised_learning.ipynb docs/python_docs/demo/heteroskedastic_supervised_learning.ipynb +cp stochtree_repo/demo/notebooks/multivariate_treatment_causal_inference.ipynb docs/python_docs/demo/multivariate_treatment_causal_inference.ipynb +cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/serialization.ipynb +cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb # Build the doc site mkdocs build diff --git a/docs/development/contributing.md b/docs/development/contributing.md index ca822d011..3e519bc87 100644 --- a/docs/development/contributing.md +++ b/docs/development/contributing.md @@ -31,10 +31,10 @@ Once you've cloned the stochtree repository, follow these steps to build stochtr 2. [Build the package in RStudio](https://docs.posit.co/ide/user/ide/guide/pkg-devel/writing-packages.html#building-a-package) Note that due to the complicated folder structure of the stochtree repo, step 2 might not work out of the box on all platforms. -If stochtree fails to build, you can use the script that is used to create a CRAN-friendly stochtree R package directory, which -creates a `stochtree_cran` subdirectory of the stochtree folder and copies the relevant R package files. -You can run this script by entering `Rscript cran-bootstrap.R 1 1 1` in the terminal in RStudio. Once you have a `stochtree_cran` subfolder, -you can build stochtree using +If stochtree fails to build, you can use the script that we use to create a CRAN-friendly stochtree R package directory, which +creates a `stochtree_cran` subdirectory of the stochtree folder and copies the relevant R package files into this subfolder. +You can run this script by entering `Rscript cran-bootstrap.R 1 1 1` in the terminal in RStudio. +Once you have a `stochtree_cran` subfolder, you can build stochtree using ```{r} devtools::install_local("stochtree_cran") @@ -66,12 +66,14 @@ pip install . ``` Note that if you are making changes and finding that they aren't reflected after a reinstall of stochtree, you can -clear all of the python package development artifacts with +clear all of the python package build artifacts with ```{bash} rm -rf stochtree.egg-info; rm -rf .pytest_cache; rm -rf build ``` +and then rerun `pip install .` + #### Venv You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments @@ -101,6 +103,8 @@ clear all of the python package development artifacts with rm -rf stochtree.egg-info; rm -rf .pytest_cache; rm -rf build ``` +and then rerun `pip install .` + ### C++ #### CMake @@ -201,24 +205,70 @@ Suppose for the sake of illustration that the code you want to debug is saved in At the command line (either the terminal in RStudio or your local terminal program), run `R -d lldb` if you are using MacOS (or `R -d gdb` if you are using Linux). -After running this, interrupt execution with ctrl + C, which brings you to an lldb (or gdb) prompt which should look like below with a blinking cursor after it +Now, you'll see an lldb prompt which should look like below with a blinking cursor after it ``` (lldb) ``` From there, you can set breakpoints, either to specific lines of specific files like `b src/tree.cpp:2117` or to break whenever there is an error using `breakpoint set -E c++`. -(**Note**: in gdb, the breakpoint and control flow commands are slightly different.) -Now, start the R program by typing +(**Note**: in gdb, the breakpoint and control flow commands are slightly different, see [here](https://www.maths.ed.ac.uk/~swood34/RCdebug/RCdebug.html) for more detail on debugging R through `gdb`.) +Now, you can run R through the debugger by typing ``` r ``` -Once you're there, you can execute a script you've set up to run your code using +This should load an R console, from which you can execute a script you've set up to run your code using ```{r} source("path/to/debug_script.R") ``` -And step through the program as you wish using `lldb` / `gdb` +The code will either stop when it hits your first line-based breakpoint or when it runs into an error if you set the error-based breakpoint. +From there, you can navigate using `lldb` (or `gdb`) commands. + +**Note**: once you've loaded the R console, you can also simply interactively run commands that call stochtree's C++ code (i.e. running the `bart()` or `bcf()` functions). If you're debugging at this level, you probably have a specific problem in mind, and using a repeatable script will be worth your while, but it is not strictly necessary. + +### Python Package + +First, you need to build stochtree's C++ extension with debug symbols. +As always, start by navigating to the stochtree directory (i.e. `cd /path/to/stochtree/`) +and activating your development virtual environment (i.e. `conda activate [env_name]` or `source venv/bin/activate`). + +Since stochtree builds its C++ extension via cmake [following this example](https://github.com/pybind/cmake_example), +you'll need to ensure that the `self.debug` field in the `CMakeBuild` class is set to `True`. +You can do this by setting an environment variable of `DEBUG` equal to 1. +In bash, you can do this with `export DEBUG=1` at the command line. + +Once this is done, build the python library using + +```{bash} +pip install . +``` + +Suppose you'd like to debug stochtree through a script called `/path/to/script.py`. + +First, target a python process with `lldb` (or, alternatively, replace with `gdb` below if you use `gcc` as your compiler) via + +``` +lldb python +``` + +Now, you'll see an lldb (or gdb) prompt which should look like below with a blinking cursor after it + +``` +(lldb) +``` + +From there, you can set breakpoints, either to specific lines of specific files like `b src/tree.cpp:2117` or to break whenever there is an error using `breakpoint set -E c++`. +(If you're using `gdb`, see [here](https://lldb.llvm.org/use/map.html) for a comparison between lldb commands and gdb commands for setting breakpoints and navigating your program.) +Now you can run your python script through the debugger by typing + +``` +r /path/to/script.py +``` + +The program will run until the first breakpoint is hit, and at this point you can navigate using lldb (or gdb) commands. + +**Note**: rather than running a script like `/path/to/script.py` above, you can also simply load the python console by typing `r` at the `(lldb)` terminal and then interactively run commands that call stochtree's C++ code (i.e. sampling `BARTModel` or `BCFModel` objects). If you're debugging at this level, you probably have a specific problem in mind, and using a repeatable script will be worth your while, but it is not strictly necessary. diff --git a/docs/development/roadmap.md b/docs/development/roadmap.md index 45018694a..3ab75e783 100644 --- a/docs/development/roadmap.md +++ b/docs/development/roadmap.md @@ -1,13 +1,13 @@ # Development Roadmap -We are working hard to make `stochtree` faster, easier to use, and more flexible! Below is a snapshot of our development roadmap. Our four categories of product enhancement are +We are working hard to make `stochtree` faster, easier to use, and more flexible! Below is a snapshot of our development roadmap. We categorize new product enhancements into four categories: 1. **User Interface**: the way that a user can build, store, and use models 2. **Performance**: program runtime and memory usage of various models 3. **Modeling Features**: scope of modeling tools provided 4. **Interoperability**: compatibility with other computing and data libraries -These development goals are prioritized along three broad timelines +Our development goals are prioritized along three broad timelines 1. **Now**: development is currently underway or planned for a near-term release 2. **Next**: design / research needed; development hinges on feasibility and time demands @@ -17,5 +17,5 @@ These development goals are prioritized along three broad timelines | --- | --- | --- | --- | | User Interface | Feature parity between R and Python | | | | Performance | | | Hardware acceleration (Apple Silicon GPU)
Hardware acceleration (NVIDIA GPU)
Out-of-memory sampler | -| Modeling Features | Quantile cutpoint sampling | Monotone BART sampler
Multiclass classification | | -| Interoperability | | Polars (Python) | PyMC (Python)
Stan (R / Python)
Apache Arrow (R / Python) | +| Modeling Features | Quantile cutpoint sampling | Monotonicity constraints
Multiclass classification | | +| Interoperability | | | PyMC (Python)
Stan (R / Python)
Apache Arrow (R / Python)
Polars (Python) | diff --git a/docs/python_docs/api/index.md b/docs/python_docs/api/index.md index 40f21626c..a30610682 100644 --- a/docs/python_docs/api/index.md +++ b/docs/python_docs/api/index.md @@ -1,7 +1,5 @@ # StochTree Python API Reference -Overview of the `stochtree` python library's key classes and functions. - The `stochtree` interface is divided into two "levels": 1. "High level": end-to-end implementations of stochastic tree ensembles for supervised learning (BART / XBART) and causal inference (BCF / XBCF). Both interfaces are designed to mirror the [scikit-learn estimator style](https://scikit-learn.org/dev/developers/develop.html), with the `.fit()` method replaced by a `.sample()` method. diff --git a/docs/python_docs/demo/index.md b/docs/python_docs/demo/index.md index e2abd0381..38a0baa43 100644 --- a/docs/python_docs/demo/index.md +++ b/docs/python_docs/demo/index.md @@ -1,3 +1,10 @@ # StochTree Python API Demo -Overview of the `stochtree` python library's functionality +The following demos showcase (some of) the functionality and output of the `stochtree` python package. + +1. [Supervised Learning](supervised_learning.ipynb): using `BARTModel()` for classic supervised learning tasks +2. [Causal Inference](causal_inference.ipynb): using `BCFModel()` for causal effect estimation +3. [Heteroskedastic Supervised Learning](heteroskedastic_supervised_learning.ipynb): using `BARTModel()` for supervised learning tasks with heteroskedasticity (covariate-dependent variance) +4. [Multivariate Treatment Causal Inference](multivariate_treatment_causal_inference.ipynb): using `BCFModel()` for causal effect estimation with a multivariate (continuous) treatment variable +5. [Model Serialization](serialization.ipynb): saving and reloading `stochtree` models via JSON +6. [Internal Tree Inspection](tree_inspection.ipynb): inspecting the trees in a sampled `stochtree` forest diff --git a/docs/python_docs/index.md b/docs/python_docs/index.md index d464b87f9..192baf819 100644 --- a/docs/python_docs/index.md +++ b/docs/python_docs/index.md @@ -1,6 +1,6 @@ # StochTree Python Library -The stochtree python library provides two essential components: +Our documentation of the `stochtree` python library has two components: -1. High-level functionality for sampling, predicting, and serializing BART and BCF models -2. Lower-level definition and control of a stochastic tree sampler +1. [API Documentation](api/index.md): in-depth documentation of the classes and functions and govern the `stochtree` python API +2. [Demos](demo/index.md): notebook-style vignettes that showcase the functionality, output, and use cases of `stochtree` in python diff --git a/mkdocs.yml b/mkdocs.yml index 77c5b00a6..11a653100 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -60,6 +60,10 @@ nav: - 'Demo': python_docs/demo/index.md - 'BART': python_docs/demo/supervised_learning.ipynb - 'BCF': python_docs/demo/causal_inference.ipynb + - 'Heteroskedastic BART': python_docs/demo/heteroskedastic_supervised_learning.ipynb + - 'Multivariate treatment BCF': python_docs/demo/multivariate_treatment_causal_inference.ipynb + - 'Model Serialization': python_docs/demo/serialization.ipynb + - 'Internal Tree Inspection': python_docs/demo/tree_inspection.ipynb - 'C++ Core API and Architecture': - 'C++ Core API and Architecture': cpp_docs/index.md - 'Tracking Data Structures': cpp_docs/tracking.md From 0e43567c362ffeb9f7a4690cd95900493abf88fb Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 12 Feb 2025 20:21:47 -0600 Subject: [PATCH 41/55] Added python vignette to docs --- .github/workflows/docs.yml | 1 + README.md | 1 + dev/build.sh | 1 + docs/python_docs/demo/index.md | 1 + mkdocs.yml | 1 + 5 files changed, 5 insertions(+) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 04a302c76..23c0342c5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -98,6 +98,7 @@ jobs: cp stochtree_repo/demo/notebooks/multivariate_treatment_causal_inference.ipynb docs/python_docs/demo/multivariate_treatment_causal_inference.ipynb cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/serialization.ipynb cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb + cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo/prototype_interface.ipynb - name: Build the overall doc site run: | diff --git a/README.md b/README.md index 3fc059eb3..65f1e0ae5 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ cp stochtree_repo/demo/notebooks/heteroskedastic_supervised_learning.ipynb docs/ cp stochtree_repo/demo/notebooks/multivariate_treatment_causal_inference.ipynb docs/python_docs/demo/multivariate_treatment_causal_inference.ipynb cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/serialization.ipynb cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb +cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo/prototype_interface.ipynb ``` ### Building the overall website diff --git a/dev/build.sh b/dev/build.sh index c0a69f6c5..80ac333e7 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -41,6 +41,7 @@ cp stochtree_repo/demo/notebooks/heteroskedastic_supervised_learning.ipynb docs/ cp stochtree_repo/demo/notebooks/multivariate_treatment_causal_inference.ipynb docs/python_docs/demo/multivariate_treatment_causal_inference.ipynb cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/serialization.ipynb cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb +cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo/prototype_interface.ipynb # Build the doc site mkdocs build diff --git a/docs/python_docs/demo/index.md b/docs/python_docs/demo/index.md index 38a0baa43..f6aff3d25 100644 --- a/docs/python_docs/demo/index.md +++ b/docs/python_docs/demo/index.md @@ -8,3 +8,4 @@ The following demos showcase (some of) the functionality and output of the `stoc 4. [Multivariate Treatment Causal Inference](multivariate_treatment_causal_inference.ipynb): using `BCFModel()` for causal effect estimation with a multivariate (continuous) treatment variable 5. [Model Serialization](serialization.ipynb): saving and reloading `stochtree` models via JSON 6. [Internal Tree Inspection](tree_inspection.ipynb): inspecting the trees in a sampled `stochtree` forest +7. [Low-Level Interface](prototype_interface.ipynb): using the low-level `stochtree` interface to construct a custom sampling loop diff --git a/mkdocs.yml b/mkdocs.yml index 11a653100..525f9288a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -64,6 +64,7 @@ nav: - 'Multivariate treatment BCF': python_docs/demo/multivariate_treatment_causal_inference.ipynb - 'Model Serialization': python_docs/demo/serialization.ipynb - 'Internal Tree Inspection': python_docs/demo/tree_inspection.ipynb + - 'Low-Level Interface': python_docs/demo/prototype_interface.ipynb - 'C++ Core API and Architecture': - 'C++ Core API and Architecture': cpp_docs/index.md - 'Tracking Data Structures': cpp_docs/tracking.md From 28940166ba3abd78ae34e383896df11bddc9fbd4 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 13 Feb 2025 01:53:32 -0600 Subject: [PATCH 42/55] Updated homepage --- docs/index.md | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/docs/index.md b/docs/index.md index 27a37a5ef..363f485db 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,18 @@ # StochTree -`stochtree` (short for "stochastic tree") unlocks flexible decision tree modeling in R or Python. +`stochtree` (short for "stochastic trees") unlocks flexible decision tree modeling in R or Python. + +## Table of Contents + +* [Getting Started](getting-started.md): Details on how to install and use `stochtree` +* [About](about.md): Overview of the models supported by stochtree and pointers to further reading +* [R Package](R_docs/index.md): Complete documentation of the R package +* [Python Package](python_docs/index.md): Complete documentation of the Python package +* [C++ Core API and Architecture](cpp_docs/index.md): Overview and documentation of the C++ codebase that supports stochtree +* [Development](development/index.md): Roadmap and how to contribute + +## What does the software do? + Boosted decision tree models (like [xgboost](https://xgboost.readthedocs.io/en/stable/), [LightGBM](https://lightgbm.readthedocs.io/en/latest/), or [scikit-learn's HistGradientBoostingRegressor](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingRegressor.html)) @@ -15,11 +27,26 @@ are great, but often require time-consuming hyperparameter tuning. The "core" of the software is written in C++, but it provides R and Python APIs. The R package is [available on CRAN](https://cran.r-project.org/web/packages/stochtree/index.html) and the python package will soon be on PyPI. -## Table of Contents +## Why "stochastic" trees? -* [Getting Started](getting-started.md): Details on how to install and use `stochtree` -* [About](about.md): Overview of the models supported by stochtree and pointers to further reading -* [R Package](R_docs/index.md): Complete documentation of the R package -* [Python Package](python_docs/index.md): Complete documentation of the Python package -* [C++ Core API and Architecture](cpp_docs/index.md): Overview and documentation of the C++ codebase that supports stochtree -* [Development](development/index.md): Roadmap and how to contribute +"Stochastic" loosely means the same thing as "random." This naturally raises the question: how is `stochtree` different from a random forest library? +At a superficial level, both are decision tree ensembles that use randomness in training. + +The difference lies in how that "randomness" is deployed. +Random forests take random subsets of a training dataset, and then run a deterministic decision tree fitting algorithm ([recursive partitioning](https://en.wikipedia.org/wiki/Recursive_partitioning)). +Stochastic tree algorithms use randomness to construct decision tree ensembles from a fixed training dataset. + +The original stochastic tree model, [Bayesian Additive Regression Trees (BART)](https://projecteuclid.org/journals/annals-of-applied-statistics/volume-4/issue-1/BART-Bayesian-additive-regression-trees/10.1214/09-AOAS285.full), used [Markov Chain Monte Carlo (MCMC)](https://en.wikipedia.org/wiki/Markov_chain_Monte_Carlo) to sample forests from their posterior distribution. + +So why not call our project `bayesiantree`? + +Some algorithms implemented in `stochtree` are "quasi-Bayesian" in that they are inspired by a Bayesian model, but are sampled with fast algorithms that do not provide a valid Bayesian posterior distribution. + +Moreover, we think of stochastic forests as general-purpose modeling tools. +What makes them useful is that their strong empirical performance -- especially on small or noisy datasets -- not their adherence to any statistical framework. + +So why not just call our project `decisiontree`? + +Put simply, the sampling approach is part of what makes BART and other `stochtree` algorithms work so well -- we know because we have tested out versions that did not do stochastic sampling of the tree fits. + +So we settled on the term "stochastic trees", or "stochtree" for short (pronounced "stoke-tree"). From bfef5b00a0fd48ade8d8d4ecd4221fe8239fcc1f Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 27 Mar 2025 10:39:27 -0500 Subject: [PATCH 43/55] Updated doc site with RDD vignette --- .github/workflows/docs.yml | 9 + .gitignore | 1 + README.md | 11 + dev/build.sh | 8 + dev/cleanup.sh | 5 + docs/index.md | 3 +- docs/vignettes/Python/.gitkeep | 0 docs/vignettes/R/.gitkeep | 0 docs/vignettes/index.md | 11 + mkdocs.yml | 6 + vignettes/Python/RDD_DAG.png | Bin 0 -> 38039 bytes vignettes/Python/rdd.html | 8089 ++++++++++++++++++++++++++++++++ vignettes/Python/rdd.ipynb | 475 ++ vignettes/Python/trees1.png | Bin 0 -> 40369 bytes vignettes/Python/trees2.png | Bin 0 -> 24832 bytes vignettes/Python/trees3.png | Bin 0 -> 25988 bytes vignettes/R/RDD_DAG.png | Bin 0 -> 38039 bytes vignettes/R/rdd.bib | 10 + vignettes/R/rdd.html | 1032 ++++ vignettes/R/rdd_vignette.Rmd | 354 ++ vignettes/R/trees1.png | Bin 0 -> 40369 bytes vignettes/R/trees2.png | Bin 0 -> 24832 bytes vignettes/R/trees3.png | Bin 0 -> 25988 bytes 23 files changed, 10013 insertions(+), 1 deletion(-) create mode 100644 docs/vignettes/Python/.gitkeep create mode 100644 docs/vignettes/R/.gitkeep create mode 100644 docs/vignettes/index.md create mode 100644 vignettes/Python/RDD_DAG.png create mode 100644 vignettes/Python/rdd.html create mode 100644 vignettes/Python/rdd.ipynb create mode 100644 vignettes/Python/trees1.png create mode 100644 vignettes/Python/trees2.png create mode 100644 vignettes/Python/trees3.png create mode 100644 vignettes/R/RDD_DAG.png create mode 100644 vignettes/R/rdd.bib create mode 100644 vignettes/R/rdd.html create mode 100644 vignettes/R/rdd_vignette.Rmd create mode 100644 vignettes/R/trees1.png create mode 100644 vignettes/R/trees2.png create mode 100644 vignettes/R/trees3.png diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 23c0342c5..fff6dc581 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -99,6 +99,15 @@ jobs: cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/serialization.ipynb cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo/prototype_interface.ipynb + + - name: Copy static vignettes over to docs directory + run: | + cp vignettes/Python/rdd.html docs/vignettes/Python/rdd.html + cp vignettes/Python/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png + cp vignettes/Python/trees1.png docs/vignettes/Python/trees1.png + cp vignettes/Python/trees2.png docs/vignettes/Python/trees2.png + cp vignettes/Python/trees3.png docs/vignettes/Python/trees3.png + cp vignettes/R/rdd.html docs/vignettes/R/rdd.html - name: Build the overall doc site run: | diff --git a/.gitignore b/.gitignore index 09ad0a4e5..03c3bc709 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ yarn-error.log* /python_venv /cpp_venv /venv +.Rproj.user diff --git a/README.md b/README.md index 65f1e0ae5..7dfed63f1 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,17 @@ cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tre cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo/prototype_interface.ipynb ``` +### Copy static vignettes over to docs directory + +```{bash} +cp vignettes/Python/rdd.html docs/vignettes/Python/rdd.html +cp vignettes/Python/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png +cp vignettes/Python/trees1.png docs/vignettes/Python/trees1.png +cp vignettes/Python/trees2.png docs/vignettes/Python/trees2.png +cp vignettes/Python/trees3.png docs/vignettes/Python/trees3.png +cp vignettes/R/rdd.html docs/vignettes/R/rdd.html +``` + ### Building the overall website To build and preview the site locally, run diff --git a/dev/build.sh b/dev/build.sh index 80ac333e7..9758b698b 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -43,5 +43,13 @@ cp stochtree_repo/demo/notebooks/serialization.ipynb docs/python_docs/demo/seria cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tree_inspection.ipynb cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo/prototype_interface.ipynb +# Copy static vignettes over to docs directory +cp vignettes/Python/rdd.html docs/vignettes/Python/rdd.html +cp vignettes/Python/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png +cp vignettes/Python/trees1.png docs/vignettes/Python/trees1.png +cp vignettes/Python/trees2.png docs/vignettes/Python/trees2.png +cp vignettes/Python/trees3.png docs/vignettes/Python/trees3.png +cp vignettes/R/rdd.html docs/vignettes/R/rdd.html + # Build the doc site mkdocs build diff --git a/dev/cleanup.sh b/dev/cleanup.sh index d8825ab71..41cc52e2c 100644 --- a/dev/cleanup.sh +++ b/dev/cleanup.sh @@ -6,3 +6,8 @@ rm -rf venv # Remove jupyter notebooks from the docs/ directory rm -f docs/python_docs/demo/*.ipynb + +# Remove Python / R vignettes +rm -f docs/vignettes/Python/*.html +rm -f docs/vignettes/Python/*.png +rm -f docs/vignettes/R/*.html diff --git a/docs/index.md b/docs/index.md index 363f485db..50fb41ecf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,6 +9,7 @@ * [R Package](R_docs/index.md): Complete documentation of the R package * [Python Package](python_docs/index.md): Complete documentation of the Python package * [C++ Core API and Architecture](cpp_docs/index.md): Overview and documentation of the C++ codebase that supports stochtree +* [Advanced Vignettes](vignettes/index.md): In-depth tutorials on new methods implemented using stochtree * [Development](development/index.md): Roadmap and how to contribute ## What does the software do? @@ -43,7 +44,7 @@ So why not call our project `bayesiantree`? Some algorithms implemented in `stochtree` are "quasi-Bayesian" in that they are inspired by a Bayesian model, but are sampled with fast algorithms that do not provide a valid Bayesian posterior distribution. Moreover, we think of stochastic forests as general-purpose modeling tools. -What makes them useful is that their strong empirical performance -- especially on small or noisy datasets -- not their adherence to any statistical framework. +What makes them useful is their strong empirical performance -- especially on small or noisy datasets -- not their adherence to any statistical framework. So why not just call our project `decisiontree`? diff --git a/docs/vignettes/Python/.gitkeep b/docs/vignettes/Python/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docs/vignettes/R/.gitkeep b/docs/vignettes/R/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/docs/vignettes/index.md b/docs/vignettes/index.md new file mode 100644 index 000000000..02f6af8a5 --- /dev/null +++ b/docs/vignettes/index.md @@ -0,0 +1,11 @@ +# Advanced StochTree Vignettes + +While the R and Python package documentation contains ample documentation and examples, +`stochtree`'s origin in the world of academic decision tree research means it is +actively used to develop novel algorithms and applications. +This section includes in-depth tutorials on how to implement new methods using stochtree, +with an R and Python version for each vignette. + +Current advanced vignettes include: + +1. Using `stochtree` for Regression Discontinuity Design ([R](R/rdd.html), [Python](Python/rdd.html)) diff --git a/mkdocs.yml b/mkdocs.yml index 525f9288a..aab731201 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -69,6 +69,12 @@ nav: - 'C++ Core API and Architecture': cpp_docs/index.md - 'Tracking Data Structures': cpp_docs/tracking.md - 'C++ Doxygen Site': 'cpp_docs/doxygen/index.html' + - 'Vignettes': + - 'Vignettes': vignettes/index.md + - 'R': + - 'RDD': 'vignettes/R/rdd.html' + - 'Python': + - 'RDD': 'vignettes/Python/rdd.html' - 'Development': - 'Development': development/index.md - 'Contributing': development/contributing.md diff --git a/vignettes/Python/RDD_DAG.png b/vignettes/Python/RDD_DAG.png new file mode 100644 index 0000000000000000000000000000000000000000..a73abc16ecea1c7b31070fb5f0a5648246a23578 GIT binary patch literal 38039 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 Bg^B + + + + +rdd + + + + + + + + + + + + + + + diff --git a/vignettes/Python/rdd.ipynb b/vignettes/Python/rdd.ipynb new file mode 100644 index 000000000..31cf4f09d --- /dev/null +++ b/vignettes/Python/rdd.ipynb @@ -0,0 +1,475 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regression Discontinuity Design (RDD) with `stochtree`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "We study conditional average treatment effect (CATE) estimation for regression discontinuity designs (RDD), in which treatment assignment is based on whether a particular covariate --- referred to as the running variable --- lies above or below a known value, referred to as the cutoff value. Because treatment is deterministically assigned as a known function of the running variable, RDDs are trivially deconfounded: treatment assignment is independent of the outcome variable, given the running variable (because treatment is conditionally constant). However, estimation of treatment effects in RDDs is more complicated than simply controlling for the running variable, because doing so introduces a complete lack of overlap, which is the other key condition needed to justify regression adjustment for causal inference. Nonetheless, the CATE _at the cutoff_, $X=c$, may still be identified provided the conditional expectation $E[Y \\mid X,W]$ is continuous at that point for _all_ $W=w$. We exploit this assumption with the leaf regression BART model implemented in Stochtree, which allows us to define an explicit prior on the CATE. We now describe the RDD setup and our model in more detail, and provide code to implement our approach.\n", + "\n", + "## Regression Discontinuity Design\n", + "\n", + "We conceptualize the treatment effect estimation problem via a quartet of random variables $(Y, X, Z, U)$. The variable $Y$ is the outcome variable; the variable $X$ is the running variable; the variable $Z$ is the treatment assignment indicator variable; and the variable $U$ represents additional, possibly unobserved, causal factors. What specifically makes this correspond to an RDD is that we stipulate that $Z = I(X > c)$, for cutoff $c$. We assume $c = 0$ without loss of generality. \n", + "\t \n", + "The following figure depicts a causal diagram representing the assumed causal relationships between these variables. Two key features of this diagram are one, that $X$ blocks the impact of $U$ on $Z$: in other words, $X$ satisfies the back-door criterion for learning causal effects of $Z$ on $Y$. And two, $X$ and $U$ are not descendants of $Z$.\n", + "\n", + "![RDD_DAG](RDD_DAG.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using this causal diagram, we may express $Y$ as some function of its graph parents, the random variables $(X,Z,U)$: $$Y = F(X,Z,U).$$ In principle, we may obtain draws of $Y$ by first drawing $(X,Z,U)$ according to their joint distribution and then applying the function $F$. Similarly, we may relate this formulation to the potential outcomes framework straightforwardly:\n", + "\\begin{equation}\n", + "\\begin{split}\n", + "Y^1 &= F(X,1,U),\\\\\n", + "Y^0 &= F(X,0,U).\n", + "\\end{split}\n", + "\\end{equation}\n", + "Here, draws of $(Y^1, Y^0)$ may be obtained (in principle) by drawing $(X,Z,U)$ from their joint distribution and using only the $(X,U)$ elements as arguments in the above two equations, \"discarding\" the drawn value of $Z$. Note that this construction implies the _consistency_ condition: $Y = Y^1 Z + Y^0 ( 1 - Z)$. Likewise, this construction implies the _no interference_ condition because each $Y_i$ is considered to be produced with arguments ($X_i, Z_i, U_i)$ and not those from other units $j$; in particular, in constructing $Y_i$, $F$ does not take $Z_j$ for $j \\neq i$ as an argument." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we define the following conditional expectations\n", + "\\begin{equation}\n", + "\\begin{split}\n", + "\\mu_1(x) &= E[ F(x, 1, U) \\mid X = x] ,\\\\\n", + "\\mu_0(x) &= E[ F(x, 0, U) \\mid X = x],\n", + "\\end{split}\n", + "\\end{equation}\n", + "with which we can define the treatment effect function\n", + "$$\\tau(x) = \\mu_1(x) - \\mu_0(x).$$\n", + "Because $X$ satisfies the back-door criterion, $\\mu_1$ and $\\mu_0$ are estimable from the data, meaning that \n", + "\\begin{equation}\n", + "\\begin{split}\n", + "\\mu_1(x) &= E[ F(x, 1, U) \\mid X = x] = E[Y \\mid X=x, Z=1],\\\\\n", + "\\mu_0(x) &= E[ F(x, 0, U) \\mid X = x] = E[Y \\mid X=x, Z=0],\n", + "\\end{split}\n", + "\\end{equation}\t\n", + "the right-hand-sides of which can be estimated from sample data, which we supposed to be independent and identically distributed realizations of $(Y_i, X_i, Z_i)$ for $i = 1, \\dots, n$. However, because $Z = I(X >0)$ we can in fact only learn $\\mu_1(x)$ for $X > 0$ and $\\mu_0(x)$ for $X < 0$. In potential outcomes terminology, conditioning on $X$ satisfies ignorability,\n", + "$$(Y^1, Y^0) \\perp \\!\\!\\! \\perp Z \\mid X,$$\n", + "but not _strong ignorability_, because overlap is violated. Overlap would require that\n", + "$$0 < P(Z = 1 \\mid X=x) < 1 \\;\\;\\;\\; \\forall x,$$\n", + "which is clearly violated by the RDD assumption that $Z = I(X > 0)$. Consequently, the overall ATE, \n", + "$\\bar{\\tau} = E(\\tau(X)),$ is unidentified, and we must content ourselves with estimating $\\tau(0)$, the conditional average effect at the point $x = 0$, which we estimate as the difference between $\\mu_1(0) - \\mu_0(0)$. This is possible for continuous $X$ so long as one is willing to assume that $\\mu_1(x)$ and $\\mu_0(x)$ are both suitably smooth functions of $x$: any inferred discontinuity at $x = 0$ must therefore be attributable to treatment effect." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Conditional average treatment effects in RDD\n", + "\n", + "We are concerned with learning not only $\\tau(0)$, the \"RDD ATE\" (e.g. the CATE at $x = 0$), but also RDD CATEs, $\\tau(0, \\mathrm{w})$ for some covariate vector $\\mathrm{w}$. Incorporating additional covariates in the above framework turns out to be straightforward, simply by defining $W = \\varphi(U)$ to be an observable function of the (possibly unobservable) causal factors $U$. We may then define our potential outcome means as\n", + "\\begin{equation}\n", + "\\begin{split}\n", + "\\mu_1(x,\\mathrm{w}) &= E[ F(x, 1, U) \\mid X = x, W = \\mathrm{w}] = E[Y \\mid X=x, W=\\mathrm{w}, Z=1],\\\\\n", + "\\mu_0(x,\\mathrm{w}) &= E[ F(x, 0, U) \\mid X = x, W = \\mathrm{w}] = E[Y \\mid X=x, W =\\mathrm{w}, Z=0],\n", + "\\end{split}\n", + "\\end{equation}\n", + "and our treatment effect function as\n", + "\\begin{equation}\n", + "\\tau(x,\\mathrm{w}) = \\mu_1(x,\\mathrm{w}) - \\mu_0(x,\\mathrm{w})\n", + "\\end{equation}\n", + "We consider our data to be independent and identically distributed realizations $(Y_i, X_i, Z_i, W_i)$ for $i = 1, \\dots, n$. Furthermore, we must assume that $\\mu_1(x,\\mathrm{w})$ and $\\mu_0(x,\\mathrm{w})$ are suitably smooth functions of $x$, {\\em for every} $\\mathrm{w}$; in other words, for each value of $\\mathrm{w}$ the usual continuity-based identification assumptions must hold. \n", + "\n", + "With this framework and notation established, CATE estimation in RDDs boils down to estimation of condition expectation functions $E[Y \\mid X=x, W=\\mathrm{w}, Z=z]$, for which we turn to BART models." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The BARDDT Model\n", + "\n", + "We propose a BART model where the trees are allowed to split on $(x,\\mathrm{w})$ but where each leaf node parameter is a vector of regression coefficients tailored to the RDD context (rather than a scalar constant as in default BART). In one sense, such a model can be seen as implying distinct RDD ATE regressions for each subgroup determined by a given tree; however, this intuition is only heuristic, as the entire model is fit jointly as an ensemble of such trees. Instead, we motivate this model as a way to estimate the necessary conditional expectations via a parametrization where the conditional treatment effect function can be explicitly regularized, as follows.\n", + "\n", + "Let $\\psi$ denote the following basis vector:\n", + "\\begin{equation}\n", + "\\psi(x,z) = \\begin{bmatrix}\n", + "1 & z x & (1-z) x & z\n", + "\\end{bmatrix}.\n", + "\\end{equation}\n", + "To generalize the original BART model, we define $g_j(x, \\mathrm{w}, z)$ as a piecewise linear function as follows. Let $b_j(x, \\mathrm{w})$ denote the node in the $j$th tree which contains the point $(x, \\mathrm{w})$; then the prediction function for tree $j$ is defined to be:\n", + "\\begin{equation}\n", + "g_j(x, \\mathrm{w}, z) = \\psi(x, z) \\Gamma_{b_j(x, \\mathrm{w})}\n", + "\\end{equation}\t\n", + "for a leaf-specific regression vector $\\Gamma_{b_j} = (\\eta_{b_j}, \\lambda_{b_j}, \\theta_{b_j}, \\Delta_{b_j})^t$. Therefore, letting $n_{b_j}$ denote the number of data points allocated to node $b$ in the $j$th tree and $\\Psi_{b_j}$ denote the $n_{b_j} \\times 4$ matrix, with rows equal to $\\psi(x,z)$ for all $(x_i,z_i) \\in b_j$, the model for observations assigned to leaf $b_j$, can be expressed in matrix notation as:\n", + "\\begin{equation}\n", + "\\begin{split}\n", + "\\mathbf{Y}_{b_j} \\mid \\Gamma_{b_j}, \\sigma^2 &\\sim \\mathrm{N}(\\Psi_{b_j} \\Gamma_{b_j},\\sigma^2)\\\\\n", + "\\Gamma_{b_j} &\\sim \\mathrm{N} (0, \\Sigma_0),\n", + "\\end{split}\n", + "\\end{equation}\n", + "where we set $\\Sigma_0 = \\frac{0.033}{J} \\mathbf{I}$ as a default (for $x$ vectors standardized to have unit variance in-sample). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This choice of basis entails that the RDD CATE at $\\mathrm{w}$, $\\tau(0, \\mathrm{w})$, is a sum of the $\\Delta_{b_j(0, \\mathrm{w})}$ elements across all trees $j = 1, \\dots, J$:\n", + "\\begin{equation}\n", + "\\begin{split}\n", + "\\tau(0, \\mathrm{w}) &= E[Y^1 \\mid X=0, W = \\mathrm{w}] - E[Y^0 \\mid X = 0, W = \\mathrm{w}]\\\\\n", + "& = E[Y \\mid X=0, W = \\mathrm{w}, Z = 1] - E[Y \\mid X = 0, W = \\mathrm{w}, Z = 0]\\\\\n", + "&= \\sum_{j = 1}^J g_j(0, \\mathrm{w}, 1) - \\sum_{j = 1}^J g_j(0, \\mathrm{w}, 0)\\\\\n", + "&= \\sum_{j = 1}^J \\psi(0, 1) \\Gamma_{b_j(0, \\mathrm{w})} - \\sum_{j = 1}^J \\psi(0, 0) \\Gamma_{b_j(0, \\mathrm{w})} \\\\\n", + "& = \\sum_{j = 1}^J \\Bigl( \\psi(0, 1) - \\psi(0, 0) \\Bigr) \\Gamma_{b_j(0, \\mathrm{w})} \\\\\n", + "& = \\sum_{j = 1}^J \\Bigl( (1,0,0,1) - (1,0,0,0) \\Bigr) \\Gamma_{b_j(0, \\mathrm{w})} \\\\\n", + "&= \\sum_{j=1}^J \\Delta_{b_j(0, \\mathrm{w})}.\n", + "\\end{split}\n", + "\\end{equation}\n", + "As a result, the priors on the $\\Delta$ coefficients directly regularize the treatment effect. We set the tree and error variance priors as in the original BART model. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following figures provide a graphical depiction of how the BARDDT model fits a response surface and thereby estimates CATEs for distinct values of $\\mathrm{w}$. For simplicity only two trees are used in the illustration, while in practice dozens or hundreds of trees may be used (in our simulations and empirical example, we use 150 trees)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "
Two regression trees with splits in x and a single scalar w. Node images depict the g(x,w,z) function (in x) defined by that node's coefficients. The vertical gap between the two line segments in a node that contain x=0 is that node's contribution to the CATE at X = 0. Note that only such nodes contribute for CATE prediction at x=0
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "
The two top figures show the same two regression trees as in the preceding figure, now represented as a partition of the x-w plane. Labels in each partition correspond to the leaf nodes depicted in the previous picture. The bottom figure shows the partition of the x-w plane implied by the sum of the two trees; the red dashed line marks point W=w* and the combination of nodes that include this point
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \"trees3\"/\n", + "
Left: The function fit at W = w* for the two trees shown in the previous two figures, shown superimposed. Right: The aggregated fit achieved by summing the contributes of two regression tree fits shown at left. The magnitude of the discontinuity at x = 0 (located at the dashed gray vertical line) represents the treatment effect at that point. Different values of w will produce distinct fits; for the two trees shown, there can be three distinct fits based on the value of w.
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "source": [ + "An interesting property of BARDDT can be seen in this small illustration --- by letting the regression trees split on the running variable, there is no need to separately define a 'bandwidth' as is used in the polynomial approach to RDD. Instead, the regression trees automatically determine (in the course of posterior sampling) when to 'prune' away regions away from the cutoff value. There are two notable features of this approach. One, different trees in the ensemble are effectively using different local bandwidths and these fits are then blended together. For example, in the bottom panel of the second figure, we obtain one bandwidth for the region $d+i$, and a different one for regions $a+g$ and $d+g$. Two, for cells in the tree partition that do not span the cutoff, the regression within that partition contains no causal contrasts --- all observations either have $Z = 1$ or $Z = 0$. For those cells, the treatment effect coefficient is ill-posed and in those cases the posterior sampling is effectively a draw from the prior; however, such draws correspond to points where the treatment effect is unidentified and none of these draws contribute to the estimation of $\\tau(0, \\mathrm{w})$ --- for example, only nodes $a+g$, $d+g$, and $d+i$ provide any contribution. This implies that draws of $\\Delta$ corresponding to nodes not predicting at $X=0$ will always be draws from the prior, which has some intuitive appeal." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Demo\n", + "\n", + "In this section, we provide code for implementing our model in `stochtree` on a popular RDD dataset.\n", + "First, let us load `stochtree` and all the necessary libraries for our posterior analysis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.tree import DecisionTreeRegressor, plot_tree\n", + "from stochtree import BARTModel" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dataset\n", + "\n", + "The data comes from Lindo et al (2010), who analyze data on college students enrolled in a large Canadian university in order to evaluate the effectiveness of an academic probation policy. Students who present a grade point average (GPA) lower than a certain threshold at the end of each term are placed on academic probation and must improve their GPA in the subsequent term or else face suspension. We are interested in how being put on probation or not, $Z$, affects students' GPA, $Y$, at the end of the current term. The running variable, $X$, is the negative distance between a student's previous-term GPA and the probation threshold, so that students placed on probation ($Z = 1$) have a positive score and the cutoff is 0. Potential moderators, $W$, are:\n", + "\n", + "* gender (`male`), \n", + "* age upon entering university (`age_at_entry`)\n", + "* a dummy for being born in North America (`bpl_north_america`), \n", + "* the number of credits taken in the first year (`totcredits_year1`)\n", + "* an indicator designating each of three campuses (`loc_campus` 1, 2 and 3), and\n", + "* high school GPA as a quantile w.r.t the university's incoming class (`hsgrade_pct`).\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load and organize data\n", + "data = pd.read_csv(\"https://raw.githubusercontent.com/rdpackages-replication/CIT_2024_CUP/refs/heads/main/CIT_2024_CUP_discrete.csv\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y = data.loc[:,\"nextGPA\"].to_numpy()\n", + "x = data.loc[:,\"X\"].to_numpy()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "x = x/np.std(x)\n", + "w = data.iloc[:,3:11]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ordered_cat = pd.api.types.CategoricalDtype(ordered=True)\n", + "unordered_cat = pd.api.types.CategoricalDtype(ordered=False)\n", + "w.loc[:,\"totcredits_year1\"] = w.loc[:,\"totcredits_year1\"].astype(ordered_cat)\n", + "w.loc[:,\"male\"] = w.loc[:,\"male\"].astype(unordered_cat)\n", + "w.loc[:,\"bpl_north_america\"] = w.loc[:,\"bpl_north_america\"].astype(unordered_cat)\n", + "w.loc[:,\"loc_campus1\"] = w.loc[:,\"loc_campus1\"].astype(unordered_cat)\n", + "w.loc[:,\"loc_campus2\"] = w.loc[:,\"loc_campus2\"].astype(unordered_cat)\n", + "w.loc[:,\"loc_campus3\"] = w.loc[:,\"loc_campus3\"].astype(unordered_cat)\n", + "c = 0\n", + "n = data.shape[0]\n", + "z = np.where(x > c, 1.0, 0.0)\n", + "# Window for prediction sample\n", + "h = 0.1\n", + "test = (x > -h) & (x < h)\n", + "ntest = np.sum(np.where(test, 1, 0))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Target estimand\n", + "\n", + "Generically, our estimand is the CATE function at $x = 0$; i.e. $\\tau(0, \\mathrm{w})$. The key practical question is which values of $\\mathrm{w}$ to consider. Some values of $\\mathrm{w}$ will not be well-represented near $x=0$ and so no estimation technique will be able to estimate those points effectively. As such, to focus on feasible points --- which will lead to interesting comparisons between methods --- we recommend restricting the evaluation points to the observed $\\mathrm{w}_i$ such that $|x_i| \\leq \\delta$, for some $\\delta > 0$. In our example, we use $\\delta = 0.1$ for a standardized $x$ variable. Therefore, our estimand of interest is a vector of treatment effects:\n", + "$$\\tau(0, \\mathrm{w}_i) \\;\\;\\; \\forall i \\;\\text{ such that }\\; |x_i| \\leq \\delta$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Implementing BARDDT\n", + "\n", + "In order to implement our model, we write the Psi vector, as defined before: `Psi = np.column_stack([np.ones(n), z * x, (1 - z) * x, z])`. The training matrix for the model is `np.column_stack([x, w])`, which we feed into the `BARTModel` sampler via the `X_train` parameter. The basis vector `Psi` is fed into the function via the `leaf_basis_train` parameter. The parameter list `barddt_mean_params` defines options for the mean forest (a different list can be defined for a variance forest in the case of heteroscedastic BART, which we do not consider here). Importantly, in this list we define parameter `sigma2_leaf_init = np.diag(np.repeat(0.1/150, 4))`, which sets $\\Sigma_0$ as described above. Now, we can fit the model, which is saved in object `barddt_model`.\n", + "\n", + "Once the model is fit, we need 3 elements to obtain the CATE predictions: the basis vectors at the cutoff for $z=1$ and $z=0$, the test matrix $[X \\quad W]$ at the cutoff, and the testing sample. We define the prediction basis vectors $\\psi_1 = [1 \\quad 0 \\quad 0 \\quad 1]$ and $\\psi_0 = [1 \\quad 0 \\quad 0 \\quad 0]$, which correspond to $\\psi$ at $(x=0,z=1)$, and $(x=0,z=0)$, respectively. These vectors are written into Python as `Psi1 = np.column_stack([np.ones(n), np.repeat(c, n), np.zeros(n), np.ones(n)])` and `Psi0 = np.column_stack([np.ones(n), np.zeros(n), np.repeat(c, n), np.zeros(n)])`. Then, we write the test matrix at $(x=0,\\mathrm{w})$ as `xmat_test = np.column_stack([np.zeros(n), w])[test,:]`. Finally, we must define the testing window. As discussed previously, our window is set such that $|x| \\leq 0.1$, which can be set in Python as `test = (x > -h) & (x < h)`.\n", + "\n", + "Once all of these elements are set, we can obtain the outcome predictions at the cutoff by running `barddt_model.predict(xmat_test, Psi1)` (resp. `barddt_model.predict(xmat_test, Psi0)`). Each of these calls returns a list, from which we can extract element `y_hat` to obtain the posterior distribution for the outcome. In the code below, the treated and control outcome predictions are saved in the matrix objects `pred1` and `pred0`, respectively. Now, we can obtain draws from the CATE posterior by simply subtracting these matrices. The function below outlines how to perform each of these steps in Python." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def estimate_barddt(y,x,w,z,test,c,num_gfr=10,num_mcmc=100,seed=None):\n", + " ## Lists of parameters for the Stochtree BART function\n", + " barddt_global_params = {\n", + " \"standardize\": True,\n", + " \"sample_sigma_global\": True,\n", + " \"sigma2_global_init\": 0.1\n", + " }\n", + " if seed is not None:\n", + " barddt_global_params[\"random_seed\"] = seed\n", + " barddt_mean_params = {\n", + " \"num_trees\": 50,\n", + " \"min_samples_leaf\": 20,\n", + " \"alpha\": 0.95,\n", + " \"beta\": 2,\n", + " \"max_depth\": 20,\n", + " \"sample_sigma2_leaf\": False,\n", + " \"sigma2_leaf_init\": np.diag(np.repeat(0.1/150, 4))\n", + " }\n", + " ## Set basis vector for leaf regressions\n", + " n = y.shape[0]\n", + " Psi = np.column_stack([np.ones(n), z * x, (1 - z) * x, z])\n", + " covariates = np.column_stack([x, w])\n", + " ## Model fit\n", + " barddt_model = BARTModel()\n", + " barddt_model.sample(\n", + " X_train=covariates,\n", + " y_train=y,\n", + " leaf_basis_train=Psi,\n", + " num_gfr=num_gfr,\n", + " num_mcmc=num_mcmc,\n", + " general_params=barddt_global_params,\n", + " mean_forest_params=barddt_mean_params\n", + " )\n", + " ## Define basis vectors and test matrix for outcome predictions at X=c\n", + " Psi1 = np.column_stack([np.ones(n), np.repeat(c, n), np.zeros(n), np.ones(n)])\n", + " Psi0 = np.column_stack([np.ones(n), np.zeros(n), np.repeat(c, n), np.zeros(n)])\n", + " Psi1 = Psi1[test,:]\n", + " Psi0 = Psi0[test,:]\n", + " xmat_test = np.column_stack([np.zeros(n), w])[test,:]\n", + " ## Obtain outcome predictions\n", + " pred1 = barddt_model.predict(xmat_test, Psi1)\n", + " pred0 = barddt_model.predict(xmat_test, Psi0)\n", + " ## Obtain CATE posterior\n", + " return pred1 - pred0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we proceed to fit the BARDDT model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "num_chains = 4\n", + "num_gfr = 2\n", + "num_mcmc = 100\n", + "cate_result = np.empty((ntest, num_chains*num_mcmc))\n", + "for i in range(num_chains):\n", + " cate_rdd = estimate_barddt(y,x,w,z,test,c,num_gfr=2,num_mcmc=100,seed=i)\n", + " cate_result[:,(i*num_mcmc):((i+1)*num_mcmc)] = cate_rdd" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now proceed to analyze the CATE posterior. The figure produced below presents a summary of the CATE posterior produced by BARDDT for this application. This picture is produced fitting a regression tree, using $W$ as the predictors, to the individual posterior mean CATEs:\n", + "\\begin{equation}\n", + "\\bar{\\tau}_i = \\frac{1}{M} \\sum_{h = 1}^M \\tau^{(h)}(0, \\mathrm{w}_i),\n", + "\\end{equation}\n", + "where $h$ indexes each of $M$ total posterior samples. As in our simulation studies, we restrict our posterior analysis to use $\\mathrm{w}_i$ values of observations with $|x_i| \\leq \\delta = 0.1$ (after normalizing $X$ to have standard deviation 1 in-sample). For the Lindo et al (2010) data, this means that BARDDT was trained on $n = 40,582$ observations, of which 1,602 satisfy $x_i \\leq 0.1$, which were used to generate the effect moderation tree." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## Fit regression tree\n", + "y_surrogate = np.mean(cate_rdd, axis=1)\n", + "X_surrogate = w.iloc[test,:]\n", + "cate_surrogate = DecisionTreeRegressor(min_impurity_decrease=0.0001)\n", + "cate_surrogate.fit(X=X_surrogate, y=y_surrogate)\n", + "plot_tree(cate_surrogate, impurity=False, filled=True, feature_names=w.columns, proportion=False, label='root', node_ids=True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The resulting effect moderation tree indicates that course load (credits attempted) in the academic term leading to their probation is a strong moderator. Contextually, this result is plausible, both because course load could relate to latent character attributes that influence a student's responsiveness to sanctions and also because it could predict course load in the current term, which would in turn have implications for the GPA (i.e. it is harder to get a high GPA while taking more credit hours). The tree also suggests that effects differ by age and gender of the student. These findings are all prima facie plausible as well.\n", + "\n", + "To gauge how strong these findings are statistically, we can zoom in on isolated subgroups and compare the posteriors of their subgroup average treatment effects. This approach is valid because in fitting the effect moderation tree to the posterior mean CATEs we in no way altered the posterior itself; the effect moderation tree is a posterior summary tool and not any additional inferential approach; the posterior is obtained once and can be explored freely using a variety of techniques without vitiating its statistical validity. Investigating the most extreme differences is a good place to start: consider the two groups of students at opposite ends of the treatment effect range discovered by the effect moderation tree:\t\n", + "\n", + "* **Group A** a male student that attempted more than 4.8 credits in their first year (rightmost leaf node, colored red, comprising 211 individuals)\n", + "* **Group B** a female student of any gender who entered college younger than 19 (leftmost leaf node, colored deep orange, comprising 369 individuals).\n", + "\n", + "Subgroup CATEs are obtained by aggregating CATEs across the observed $\\mathrm{w}_i$ values for individuals in each group; this can be done for individual posterior samples, yielding a posterior distribution over the subgroup CATE:\n", + "\\begin{equation}\n", + "\\bar{\\tau}_A^{(h)} = \\frac{1}{n_A} \\sum_{i : \\mathrm{w}_i} \\tau^{(h)}(0, \\mathrm{w}_i),\n", + "\\end{equation}\n", + "where $h$ indexes a posterior draw and $n_A$ denotes the number of individuals in the group A.\n", + "\n", + "The code below produces a contour plot for a bivariate kernel density estimate of the joint CATE posterior distribution for subgroups A and B. The contour lines are nearly all above the $45^{\\circ}$ line, indicating that the preponderance of posterior probability falls in the region where the treatment effect for Group A is greater than that of Group B, meaning that the difference in the subgroup treatment effects flagged by the effect moderation tree persist even after accounting for estimation uncertainty in the underlying CATE function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "predicted_nodes = cate_surrogate.apply(X=X_surrogate)\n", + "posterior_group_a = np.mean(cate_result[predicted_nodes==2,:],axis=0)\n", + "posterior_group_b = np.mean(cate_result[predicted_nodes==6,:],axis=0)\n", + "posterior_df = pd.DataFrame({'group_a': posterior_group_a, 'group_b': posterior_group_b})\n", + "sns.kdeplot(data=posterior_df, x=\"group_b\", y=\"group_a\")\n", + "plt.axline((0, 0), slope=1, color=\"black\", linestyle=(0, (3, 3)))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As always, CATEs that vary with observable factors do not necessarily represent a _causal_ moderating relationship. Here, if the treatment effect of academic probation is seen to vary with the number of credits, that does not imply that this association is causal: prescribing students to take a certain number of credits will not necessarily lead to a more effective probation policy, it may simply be that the type of student to naturally enroll for fewer credit hours is more likely to be responsive to academic probation. An entirely distinct set of causal assumptions are required to interpret the CATE variations themselves as causal. All the same, uncovering these patterns of treatment effect variability are crucial to suggesting causal mechanism to be investigated in future studies." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# References\n", + "\n", + "Lindo, Jason M., Nicholas J. Sanders, and Philip Oreopoulos. \"Ability, gender, and performance standards: Evidence from academic probation.\" American economic journal: Applied economics 2, no. 2 (2010): 95-117." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.17" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/vignettes/Python/trees1.png b/vignettes/Python/trees1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5bc3acf3e9f2f82ab9fa76cc11949c673195d0 GIT binary patch literal 40369 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 literal 0 HcmV?d00001 diff --git a/vignettes/Python/trees2.png b/vignettes/Python/trees2.png new file mode 100644 index 0000000000000000000000000000000000000000..90b7bd5f12e4333dce7cc12b5e63e638d64a7804 GIT binary patch literal 24832 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 literal 0 HcmV?d00001 diff --git a/vignettes/Python/trees3.png b/vignettes/Python/trees3.png new file mode 100644 index 0000000000000000000000000000000000000000..ededa55f50ec7b977f00a93ae447b6388b585706 GIT binary patch literal 25988 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 Bg^B + + + + + + + + + + + + + + + + +Regression Discontinuity Design (RDD) with stochtree + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+

Introduction

+

We study conditional average treatment effect (CATE) estimation for +regression discontinuity designs (RDD), in which treatment assignment is +based on whether a particular covariate — referred to as the running +variable — lies above or below a known value, referred to as the cutoff +value. Because treatment is deterministically assigned as a known +function of the running variable, RDDs are trivially deconfounded: +treatment assignment is independent of the outcome variable, given the +running variable (because treatment is conditionally constant). However, +estimation of treatment effects in RDDs is more complicated than simply +controlling for the running variable, because doing so introduces a +complete lack of overlap, which is the other key condition needed to +justify regression adjustment for causal inference. Nonetheless, the +CATE at the cutoff, \(X=c\), +may still be identified provided the conditional expectation \(E[Y \mid X,W]\) is continuous at that point +for all \(W=w\). We exploit +this assumption with the leaf regression BART model implemented in +Stochtree, which allows us to define an explicit prior on the CATE. We +now describe the RDD setup and our model in more detail, and provide +code to implement our approach.

+
+
+

Regression Discontinuity Design

+

We conceptualize the treatment effect estimation problem via a +quartet of random variables \((Y, X, Z, +U)\). The variable \(Y\) is the +outcome variable; the variable \(X\) is +the running variable; the variable \(Z\) is the treatment assignment indicator +variable; and the variable \(U\) +represents additional, possibly unobserved, causal factors. What +specifically makes this correspond to an RDD is that we stipulate that +\(Z = I(X > c)\), for cutoff \(c\). We assume \(c = 0\) without loss of generality.

+

The following figure depicts a causal diagram representing the +assumed causal relationships between these variables. Two key features +of this diagram are one, that \(X\) +blocks the impact of \(U\) on \(Z\): in other words, \(X\) satisfies the back-door criterion for +learning causal effects of \(Z\) on +\(Y\). And two, \(X\) and \(U\) are not descendants of \(Z\).

+
+A causal directed acyclic graph representing the general structure of a regression discontinuity design problem +

+A causal directed acyclic graph representing the general structure of a +regression discontinuity design problem +

+
+

Using this causal diagram, we may express \(Y\) as some function of its graph parents, +the random variables \((X,Z,U)\): \[Y = F(X,Z,U).\] In principle, we may +obtain draws of \(Y\) by first drawing +\((X,Z,U)\) according to their joint +distribution and then applying the function \(F\). Similarly, we may relate this +formulation to the potential outcomes framework straightforwardly: \[\begin{equation} +\begin{split} +Y^1 &= F(X,1,U),\\ +Y^0 &= F(X,0,U). +\end{split} +\end{equation}\] Here, draws of \((Y^1, +Y^0)\) may be obtained (in principle) by drawing \((X,Z,U)\) from their joint distribution and +using only the \((X,U)\) elements as +arguments in the above two equations, ``discarding’’ the drawn value of +\(Z\). Note that this construction +implies the consistency condition: \(Y = Y^1 Z + Y^0 ( 1 - Z)\). Likewise, this +construction implies the no interference condition because each +\(Y_i\) is considered to be produced +with arguments (\(X_i, Z_i, U_i)\) and +not those from other units \(j\); in +particular, in constructing \(Y_i\), +\(F\) does not take \(Z_j\) for \(j +\neq i\) as an argument.

+

Next, we define the following conditional expectations \[\begin{equation} +\begin{split} +\mu_1(x) &= E[ F(x, 1, U) \mid X = x] ,\\ +\mu_0(x) &= E[ F(x, 0, U) \mid X = x], +\end{split} +\end{equation}\] with which we can define the treatment effect +function \[\tau(x) = \mu_1(x) - +\mu_0(x).\] Because \(X\) +satisfies the back-door criterion, \(\mu_1\) and \(\mu_0\) are estimable from the data, +meaning that \[\begin{equation} +\begin{split} +\mu_1(x) &= E[ F(x, 1, U) \mid X = x] = E[Y \mid X=x, Z=1],\\ +\mu_0(x) &= E[ F(x, 0, U) \mid X = x] = E[Y \mid X=x, Z=0], +\end{split} +\end{equation}\]
+the right-hand-sides of which can be estimated from sample data, which +we supposed to be independent and identically distributed realizations +of \((Y_i, X_i, Z_i)\) for \(i = 1, \dots, n\). However, because \(Z = I(X >0)\) we can in fact only learn +\(\mu_1(x)\) for \(X > 0\) and \(\mu_0(x)\) for \(X < 0\). In potential outcomes +terminology, conditioning on \(X\) +satisfies ignorability, \[(Y^1, Y^0) \perp +\!\!\! \perp Z \mid X,\] but not strong ignorability, +because overlap is violated. Overlap would require that \[0 < P(Z = 1 \mid X=x) < 1 \;\;\;\; \forall +x,\] which is clearly violated by the RDD assumption that \(Z = I(X > 0)\). Consequently, the +overall ATE, \(\bar{\tau} = +E(\tau(X)),\) is unidentified, and we must content ourselves with +estimating \(\tau(0)\), the conditional +average effect at the point \(x = 0\), +which we estimate as the difference between \(\mu_1(0) - \mu_0(0)\). This is possible for +continuous \(X\) so long as one is +willing to assume that \(\mu_1(x)\) and +\(\mu_0(x)\) are both suitably smooth +functions of \(x\): any inferred +discontinuity at \(x = 0\) must +therefore be attributable to treatment effect.

+
+

Conditional average treatment effects in RDD

+

We are concerned with learning not only \(\tau(0)\), the “RDD ATE” (e.g. the CATE at +\(x = 0\)), but also RDD CATEs, \(\tau(0, \mathrm{w})\) for some covariate +vector \(\mathrm{w}\). Incorporating +additional covariates in the above framework turns out to be +straightforward, simply by defining \(W = +\varphi(U)\) to be an observable function of the (possibly +unobservable) causal factors \(U\). We +may then define our potential outcome means as \[\begin{equation} +\begin{split} +\mu_1(x,\mathrm{w}) &= E[ F(x, 1, U) \mid X = x, W = \mathrm{w}] = +E[Y \mid X=x, W=\mathrm{w}, Z=1],\\ +\mu_0(x,\mathrm{w}) &= E[ F(x, 0, U) \mid X = x, W = \mathrm{w}] = +E[Y \mid X=x, W = \mathrm{w}, Z=0], +\end{split} +\end{equation}\] and our treatment effect function as \[\tau(x,\mathrm{w}) = \mu_1(x,\mathrm{w}) - +\mu_0(x,\mathrm{w}).\] We consider our data to be independent and +identically distributed realizations \((Y_i, +X_i, Z_i, W_i)\) for \(i = 1, \dots, +n\). Furthermore, we must assume that \(\mu_1(x,\mathrm{w})\) and \(\mu_0(x,\mathrm{w})\) are suitably smooth +functions of \(x\), {} \(\mathrm{w}\); in other words, for each +value of \(\mathrm{w}\) the usual +continuity-based identification assumptions must hold.

+

With this framework and notation established, CATE estimation in RDDs +boils down to estimation of condition expectation functions \(E[Y \mid X=x, W=\mathrm{w}, Z=z]\), for +which we turn to BART models.

+
+
+
+

The BARDDT Model

+

We propose a BART model where the trees are allowed to split on \((x,\mathrm{w})\) but where each leaf node +parameter is a vector of regression coefficients tailored to the RDD +context (rather than a scalar constant as in default BART). In one +sense, such a model can be seen as implying distinct RDD ATE regressions +for each subgroup determined by a given tree; however, this intuition is +only heuristic, as the entire model is fit jointly as an ensemble of +such trees. Instead, we motivate this model as a way to estimate the +necessary conditional expectations via a parametrization where the +conditional treatment effect function can be explicitly regularized, as +follows.

+

Let \(\psi\) denote the following +basis vector: \[\begin{equation} +\psi(x,z) = \begin{bmatrix} +1 & z x & (1-z) x & z +\end{bmatrix}. +\end{equation}\] To generalize the original BART model, we define +\(g_j(x, \mathrm{w}, z)\) as a +piecewise linear function as follows. Let \(b_j(x, \mathrm{w})\) denote the node in the +\(j\)th tree which contains the point +\((x, \mathrm{w})\); then the +prediction function for tree \(j\) is +defined to be: \[\begin{equation} +g_j(x, \mathrm{w}, z) = \psi(x, z) \Gamma_{b_j(x, \mathrm{w})} +\end{equation}\]
+for a leaf-specific regression vector \(\Gamma_{b_j} = (\eta_{b_j}, \lambda_{b_j}, +\theta_{b_j}, \Delta_{b_j})^t\). Therefore, letting \(n_{b_j}\) denote the number of data points +allocated to node \(b\) in the \(j\)th tree and \(\Psi_{b_j}\) denote the \(n_{b_j} \times 4\) matrix, with rows equal +to \(\psi(x,z)\) for all \((x_i,z_i) \in b_j\), the model for +observations assigned to leaf \(b_j\), +can be expressed in matrix notation as: \[\begin{equation} +\begin{split} +\mathbf{Y}_{b_j} \mid \Gamma_{b_j}, \sigma^2 &\sim +\mathrm{N}(\Psi_{b_j} \Gamma_{b_j},\sigma^2)\\ +\Gamma_{b_j} &\sim \mathrm{N}(0, \Sigma_0), +\end{split} \label{eq:leaf.regression} +\end{equation}\] where we set \(\Sigma_0 = \frac{0.033}{J} \mbox{I}\) as a +default (for \(x\) vectors standardized +to have unit variance in-sample).

+

This choice of basis entails that the RDD CATE at \(\mathrm{w}\), \(\tau(0, \mathrm{w})\), is a sum of the +\(\Delta_{b_j(0, \mathrm{w})}\) +elements across all trees \(j = 1, \dots, +J\): \[\begin{equation} +\begin{split} +\tau(0, \mathrm{w}) &= E[Y^1 \mid X=0, W = \mathrm{w}] - E[Y^0 \mid +X = 0, W = \mathrm{w}]\\ +& = E[Y \mid X=0, W = \mathrm{w}, Z = 1] - E[Y \mid X = 0, W = +\mathrm{w}, Z = 0]\\ +&= \sum_{j = 1}^J g_j(0, \mathrm{w}, 1) - \sum_{j = 1}^J g_j(0, +\mathrm{w}, 0)\\ +&= \sum_{j = 1}^J \psi(0, 1) \Gamma_{b_j(0, \mathrm{w})} - \sum_{j += 1}^J \psi(0, 0) \Gamma_{b_j(0, \mathrm{w})} \\ +& = \sum_{j = 1}^J \Bigl( \psi(0, 1) - \psi(0, 0) +\Bigr) \Gamma_{b_j(0, \mathrm{w})} \\ +& = \sum_{j = 1}^J \Bigl( (1,0,0,1) - +(1,0,0,0) \Bigr) \Gamma_{b_j(0, \mathrm{w})} \\ +&= \sum_{j=1}^J \Delta_{b_j(0, \mathrm{w})}. +\end{split} +\end{equation}\] As a result, the priors on the \(\Delta\) coefficients directly regularize +the treatment effect. We set the tree and error variance priors as in +the original BART model.

+

The following figures provide a graphical depiction of how the BARDDT +model fits a response surface and thereby estimates CATEs for distinct +values of \(\mathrm{w}\). For +simplicity only two trees are used in the illustration, while in +practice dozens or hundreds of trees may be used (in our simulations and +empirical example, we use 150 trees).

+
+Two regression trees with splits in x and a single scalar w. Node images depict the g(x,w,z) function (in x) defined by that node's coefficients. The vertical gap between the two line segments in a node that contain x=0 is that node's contribution to the CATE at X = 0. Note that only such nodes contribute for CATE prediction at x=0 +

+Two regression trees with splits in x and a single scalar w. Node images +depict the g(x,w,z) function (in x) defined by that node’s coefficients. +The vertical gap between the two line segments in a node that contain +x=0 is that node’s contribution to the CATE at X = 0. Note that only +such nodes contribute for CATE prediction at x=0 +

+
+
+The two top figures show the same two regression trees as in the preceding figure, now represented as a partition of the x-w plane. Labels in each partition correspond to the leaf nodes depicted in the previous picture. The bottom figure shows the partition of the x-w plane implied by the sum of the two trees; the red dashed line marks point W=w* and the combination of nodes that include this point +

+The two top figures show the same two regression trees as in the +preceding figure, now represented as a partition of the x-w plane. +Labels in each partition correspond to the leaf nodes depicted in the +previous picture. The bottom figure shows the partition of the x-w plane +implied by the sum of the two trees; the red dashed line marks point +W=w* and the combination of nodes that include this point +

+
+
+Left: The function fit at W = w* for the two trees shown in the previous two figures, shown superimposed. Right: The aggregated fit achieved by summing the contributes of two regression tree fits shown at left. The magnitude of the discontinuity at x = 0 (located at the dashed gray vertical line) represents the treatment effect at that point. Different values of w will produce distinct fits; for the two trees shown, there can be three distinct fits based on the value of w. +

+Left: The function fit at W = w* for the two trees shown in the previous +two figures, shown superimposed. Right: The aggregated fit achieved by +summing the contributes of two regression tree fits shown at left. The +magnitude of the discontinuity at x = 0 (located at the dashed gray +vertical line) represents the treatment effect at that point. Different +values of w will produce distinct fits; for the two trees shown, there +can be three distinct fits based on the value of w. +

+
+

An interesting property of BARDDT can be seen in this small +illustration — by letting the regression trees split on the running +variable, there is no need to separately define a ‘bandwidth’ as is used +in the polynomial approach to RDD. Instead, the regression trees +automatically determine (in the course of posterior sampling) when to +‘prune’ away regions away from the cutoff value. There are two notable +features of this approach. One, different trees in the ensemble are +effectively using different local bandwidths and these fits are then +blended together. For example, in the bottom panel of the second figure, +we obtain one bandwidth for the region \(d+i\), and a different one for regions +\(a+g\) and \(d+g\). Two, for cells in the tree partition +that do not span the cutoff, the regression within that partition +contains no causal contrasts — all observations either have \(Z = 1\) or \(Z = +0\). For those cells, the treatment effect coefficient is +ill-posed and in those cases the posterior sampling is effectively a +draw from the prior; however, such draws correspond to points where the +treatment effect is unidentified and none of these draws contribute to +the estimation of \(\tau(0, +\mathrm{w})\) — for example, only nodes \(a+g\), \(d+g\), and \(d+i\) provide any contribution. This +implies that draws of \(\Delta\) +corresponding to nodes not predicting at \(X=0\) will always be draws from the prior, +which has some intuitive appeal.

+
+
+

Demo

+

In this section, we provide code for implementing our model in +stochtree on a popular RDD dataset. First, let us load +stochtree and all the necessary libraries for our posterior +analysis.

+
## Load libraries
+library(stochtree)
+library(rpart)
+library(rpart.plot)
+library(xtable)
+library(foreach)
+library(doParallel)
+
## Loading required package: iterators
+
## Loading required package: parallel
+
+

Dataset

+

The data comes from Lindo, Sanders, and +Oreopoulos (2010), who analyze data on college students enrolled +in a large Canadian university in order to evaluate the effectiveness of +an academic probation policy. Students who present a grade point average +(GPA) lower than a certain threshold at the end of each term are placed +on academic probation and must improve their GPA in the subsequent term +or else face suspension. We are interested in how being put on probation +or not, \(Z\), affects students’ GPA, +\(Y\), at the end of the current term. +The running variable, \(X\), is the +negative distance between a student’s previous-term GPA and the +probation threshold, so that students placed on probation (\(Z = 1\)) have a positive score and the +cutoff is 0. Potential moderators, \(W\), are:

+
    +
  • gender (male),
  • +
  • age upon entering university (age_at_entry)
  • +
  • a dummy for being born in North America +(bpl_north_america),
  • +
  • the number of credits taken in the first year +(totcredits_year1)
  • +
  • an indicator designating each of three campuses +(loc_campus 1, 2 and 3), and
  • +
  • high school GPA as a quantile w.r.t the university’s incoming class +(hsgrade_pct).
  • +
+
## Load and organize data
+data <- read.csv("https://raw.githubusercontent.com/rdpackages-replication/CIT_2024_CUP/refs/heads/main/CIT_2024_CUP_discrete.csv")
+y <- data$nextGPA
+x <- data$X
+x <- x/sd(x) ## we always standardize X
+w <- data[,4:11]
+### Must define categorical features as ordered/unordered factors
+w$totcredits_year1 <- factor(w$totcredits_year1,ordered=TRUE)
+w$male <- factor(w$male,ordered=FALSE)
+w$bpl_north_america <- factor(w$bpl_north_america,ordered=FALSE)
+w$loc_campus1 <- factor(w$loc_campus1,ordered=FALSE)
+w$loc_campus2 <- factor(w$loc_campus2,ordered=FALSE)
+w$loc_campus3 <- factor(w$loc_campus3,ordered=FALSE)
+c <- 0
+n <- nrow(data)
+z <- as.numeric(x>c)
+h <- 0.1 ## window for prediction sample
+test <- -h < x & x < h
+ntest <- sum(test)
+
+
+

Target estimand

+

Generically, our estimand is the CATE function at \(x = 0\); i.e. \(\tau(0, \mathrm{w})\). The key practical +question is which values of \(\mathrm{w}\) to consider. Some values of +\(\mathrm{w}\) will not be +well-represented near \(x=0\) and so no +estimation technique will be able to estimate those points effectively. +As such, to focus on feasible points — which will lead to interesting +comparisons between methods — we recommend restricting the evaluation +points to the observed \(\mathrm{w}_i\) +such that \(|x_i| \leq \delta\), for +some \(\delta > 0\). In our example, +we use \(\delta = 0.1\) for a +standardized \(x\) variable. Therefore, +our estimand of interest is a vector of treatment effects: \[\begin{equation} +\tau(0, \mathrm{w}_i) \;\;\; \forall i \;\mbox{ such that }\; |x_i| \leq +\delta. +\end{equation}\]

+
+
+

Implementing BARDDT

+

In order to implement our model, we write the Psi vector, as defined +before: Psi <- cbind(z*x,(1-z)*x, z,rep(1,n)). The +training matrix for the model is as.matrix(cbind(x,w)), +which we feed into the stochtree::bart function via the +X_train parameter. The basis vector Psi is fed +into the function via the leaf_basis_train parameter. The +list object barddt.mean.parmlist defines options for the +mean forest (a different list can be defined for a variance forest in +the case of heteroscedastic BART, which we do not consider here). +Importantly, in this list we define parameter +sigma2_leaf_init = diag(rep(0.1/150,4)), which sets \(\Sigma_0\) as described above. Now, we can +fit the model, which is saved in object barddt.fit.

+

Once the model is fit, we need 3 elements to obtain the CATE +predictions: the basis vectors at the cutoff for \(z=1\) and \(z=0\), the test matrix \([X \quad W]\) at the cutoff, and the +testing sample. We define the prediction basis vectors \(\psi_1 = [1 \quad 0 \quad 0 \quad 1]\) and +\(\psi_0 = [1 \quad 0 \quad 0 \quad +0]\), which correspond to \(\psi\) at \((x=0,z=1)\), and \((x=0,z=0)\), respectively. These vectors +are written into R as +Psi1 <- cbind(rep(1,n), rep(c,n), rep(0,n), rep(1,n)) +and +Psi0 <- cbind(rep(1,n), rep(0,n), rep(c,n), rep(0,n)). +Then, we write the test matrix at \((x=0,\mathrm{w})\) as +xmat_test <- as.matrix(cbind(rep(0,n),w). Finally, we +must define the testing window. As discussed previously, our window is +set such that \(|x| \leq 0.1\), which +can be set in R as +test <- -0.1 < x & x <0.1.

+

Once all of these elements are set, we can obtain the outcome +predictions at the cutoff by running +predict(barddt.fit, xmat_test, Psi1) (resp. +predict(barddt.fit, xmat_test, Psi0)). Each of these calls +returns a list, from which we can extract element y_hat to +obtain the posterior distribution for the outcome. In the code below, +the treated and control outcome predictions are saved in the matrix +objects pred1 and pred0, respectively. Now, we +can obtain draws from the CATE posterior by simply subtracting these +matrices. The function below outlines how to perform each of these steps +in R.

+
fit.barddt <- function(y,x,w,z,test,c)
+{
+  ## Lists of parameters for the Stochtree BART function
+  barddt.global.parmlist <- list(standardize=T,sample_sigma_global=TRUE,sigma2_global_init=0.1)
+  barddt.mean.parmlist <- list(num_trees=50, min_samples_leaf=20, alpha=0.95, beta=2,
+                               max_depth=20, sample_sigma2_leaf=FALSE, sigma2_leaf_init = diag(rep(0.1/150,4)))
+  ## Set basis vector for leaf regressions
+  Psi <- cbind(rep(1,n),z*x,(1-z)*x,z)
+  ## Model fit
+  barddt.fit = stochtree::bart(X_train= as.matrix(cbind(x,w)), y_train=y,
+                               leaf_basis_train = Psi, mean_forest_params=barddt.mean.parmlist,
+                               general_params=barddt.global.parmlist,
+                               num_mcmc=1000,num_gfr=30)
+  ## Define basis vectors and test matrix for outcome predictions at X=c
+  Psi1 <- cbind(rep(1,n), rep(c,n), rep(0,n), rep(1,n))
+  Psi0 <- cbind(rep(1,n), rep(0,n), rep(c,n), rep(0,n))
+  Psi1 <- Psi1[test,]
+  Psi0 <- Psi0[test,]
+  xmat_test <- as.matrix(cbind(rep(0,n),w)[test,])
+  ## Obtain outcome predictions
+  pred1 <- predict(barddt.fit,xmat_test,Psi1)$y_hat
+  pred0 <- predict(barddt.fit,xmat_test,Psi0)$y_hat
+  ## Obtain CATE posterior
+  out <- pred1-pred0
+  return(out)
+}
+

Now, we proceed to fit the BARDDT model. The procedure is exactly the +same as described in the simulation section.

+
## We will sample multiple chains sequentially
+num_chains <- 20
+num_gfr <- 2
+num_burnin <- 0
+num_mcmc <- 500
+bart_models <- list()
+## Define basis functions for training and testing
+B <- cbind(z*x,(1-z)*x, z,rep(1,n))
+B1 <- cbind(rep(c,n), rep(0,n), rep(1,n), rep(1,n))
+B0 <- cbind(rep(0,n), rep(c,n), rep(0,n), rep(1,n))
+B1 <- B1[test,]
+B0 <- B0[test,]
+B_test <- rbind(B1,B0)
+xmat_test <- cbind(x=rep(0,n),w)[test,]
+xmat_test <- rbind(xmat_test,xmat_test)
+### We combine the basis for Z=1 and Z=0 to feed it to the BART call and get the Y(z) predictions instantaneously
+### Then we separate the posterior matrix between each Z and calculate the CATE prediction
+## Sampling trees in parallel
+ncores <- 5
+cl <- makeCluster(ncores)
+registerDoParallel(cl)
+
+start_time <- Sys.time()
+bart_model_outputs <- foreach (i = 1:num_chains) %dopar% {
+  random_seed <- i
+  ## Lists to define BARDDT parameters
+  barddt.global.parmlist <- list(standardize=T,sample_sigma_global=TRUE,sigma2_global_init=0.1)
+  barddt.mean.parmlist <- list(num_trees=50, min_samples_leaf=20, alpha=0.95, beta=2,
+                               max_depth=20, sample_sigma2_leaf=FALSE, sigma2_leaf_init = diag(rep(0.1/50,4)))
+  bart_model <- stochtree::bart(
+    X_train = cbind(x,w), leaf_basis_train = B, y_train = y, 
+    X_test = xmat_test, leaf_basis_test = B_test,
+    num_gfr = num_gfr, num_burnin = num_burnin, num_mcmc = num_mcmc, 
+    general_params = barddt.global.parmlist, mean_forest_params = barddt.mean.parmlist
+  )
+  bart_model <- bart_model$y_hat_test[1:ntest,]-bart_model$y_hat_test[(ntest+1):(2*ntest),]
+}
+stopCluster(cl)
+## Combine CATE predictions
+pred <- do.call("cbind",bart_model_outputs)
+
+end_time <- Sys.time()
+
+print(end_time - start_time)
+
## Time difference of 9.554316 mins
+
## Save the results
+saveRDS(pred, "bart_rdd_posterior.rds")
+

We now proceed to analyze the CATE posterior. The figure produced +below presents a summary of the CATE posterior produced by BARDDT for +this application. This picture is produced fitting a regression tree, +using \(W\) as the predictors, to the +individual posterior mean CATEs: \[\begin{equation} +\bar{\tau}_i = \frac{1}{M} \sum_{h = 1}^M \tau^{(h)}(0, \mathrm{w}_i), +\end{equation}\] where \(h\) +indexes each of \(M\) total posterior +samples. As in our simulation studies, we restrict our posterior +analysis to use \(\mathrm{w}_i\) values +of observations with \(|x_i| \leq \delta = +0.1\) (after normalizing \(X\) +to have standard deviation 1 in-sample). For the Lindo, Sanders, and Oreopoulos (2010) data, this +means that BARDDT was trained on \(n = +40,582\) observations, of which 1,602 satisfy \(x_i \leq 0.1\), which were used to generate +the effect moderation tree.

+
## Fit regression tree
+cate <- rpart(y~.,data.frame(y=rowMeans(pred),w[test,]),control = rpart.control(cp=0.015))
+## Define separate colors for left and rightmost nodes
+plot.cart <- function(rpart.obj)
+{
+  rpart.frame <- rpart.obj$frame
+  left <- which.min(rpart.frame$yval)
+  right <- which.max(rpart.frame$yval)
+  nodes <- rep(NA,nrow(rpart.frame))
+  for (i in 1:length(nodes))
+  {
+    if (rpart.frame$yval[i]==rpart.frame$yval[right]) nodes[i] <- "gold2"
+    else if (rpart.frame$yval[i]==rpart.frame$yval[left]) nodes[i] <- "tomato3"
+    else nodes[i] <- "lightblue3"
+  }
+  return(nodes)
+}
+## Plot regression tree
+rpart.plot(cate,main="",box.col=plot.cart(cate))
+
+Regression tree fit to posterior point estimates of individual treatment effects: top number in each box is the average subgroup treatment effect, lower number shows the percentage of the total sample in that subgroup; the tree flags credits in first year, gender, and age at entry as important moderators. +

+Regression tree fit to posterior point estimates of individual treatment +effects: top number in each box is the average subgroup treatment +effect, lower number shows the percentage of the total sample in that +subgroup; the tree flags credits in first year, gender, and age at entry +as important moderators. +

+
+

The resulting effect moderation tree indicates that course load +(credits attempted) in the academic term leading to their probation is a +strong moderator. Contextually, this result is plausible, both because +course load could relate to latent character attributes that influence a +student’s responsiveness to sanctions and also because it could predict +course load in the current term, which would in turn have implications +for the GPA (i.e. it is harder to get a high GPA while taking more +credit hours). The tree also suggests that effects differ by campus, and +age and gender of the student. These findings are all prima facie +plausible as well.

+

To gauge how strong these findings are statistically, we can zoom in +on isolated subgroups and compare the posteriors of their subgroup +average treatment effects. This approach is valid because in fitting the +effect moderation tree to the posterior mean CATEs we in no way altered +the posterior itself; the effect moderation tree is a posterior summary +tool and not any additional inferential approach; the posterior is +obtained once and can be explored freely using a variety of techniques +without vitiating its statistical validity. Investigating the most +extreme differences is a good place to start: consider the two groups of +students at opposite ends of the treatment effect range discovered by +the effect moderation tree:

+
    +
  • Group A a male student that entered college older +than 19 and attempted more than 4.8 credits in the first year (leftmost +leaf node, colored red, comprising 128 individuals)
  • +
  • Group B a student of any gender who entered college +younger than 19 and attempted between 4.3 and 4.8 credits in the first +year (rightmost leaf node, colored gold, comprising 108 +individuals).
  • +
+

Subgroup CATEs are obtained by aggregating CATEs across the observed +\(\mathrm{w}_i\) values for individuals +in each group; this can be done for individual posterior samples, +yielding a posterior distribution over the subgroup CATE: \[\begin{equation} +\bar{\tau}_A^{(h)} = \frac{1}{n_A} \sum_{i : \mathrm{w}_i} \tau^{(h)}(0, +\mathrm{w}_i), +\end{equation}\] where \(h\) +indexes a posterior draw and \(n_A\) +denotes the number of individuals in the group A.

+

The code below produces a contour plot for a bivariate kernel density +estimate of the joint CATE posterior distribution for subgroups A and B. +The contour lines are nearly all above the \(45^{\circ}\) line, indicating that the +preponderance of posterior probability falls in the region where the +treatment effect for Group B is greater than that of Group A, meaning +that the difference in the subgroup treatment effects flagged by the +effect moderation tree persist even after accounting for estimation +uncertainty in the underlying CATE function.

+
## Define function to produce KD estimates of the joint distribution of two subgroups
+cate.kde <- function(rpart.obj,pred)
+{
+  rpart.frame <- rpart.obj$frame
+  left <- rpart.obj$where==which.min(rpart.frame$yval)
+  right <- rpart.obj$where==which.max(rpart.frame$yval)
+  ## Calculate CATE posterior for groups A and B
+  cate.a <- do.call("cbind",by(pred,left, colMeans))
+  cate.b <- do.call("cbind",by(pred,right, colMeans))
+  cate.a <- cate.a[,2]
+  cate.b <- cate.b[,2]
+  ## Estimate kernel density
+  denshat <- MASS::kde2d(cate.a, cate.b, n=200)
+  return(denshat)
+}
+contour(cate.kde(cate,pred),bty='n',xlab="Group A",ylab="Group B")
+abline(a=0,b=1)
+
+Kernel density estimates for the joint CATE posterior between male students who entered college older than 19 and attempted more than 4.8 credits in the first year (leftmost leaf node, red) and students who entered college younger than 19 and attempted between 4.3 and 4.8 credits in the first year (rightmost leaf node, gold) +

+Kernel density estimates for the joint CATE posterior between male +students who entered college older than 19 and attempted more than 4.8 +credits in the first year (leftmost leaf node, red) and students who +entered college younger than 19 and attempted between 4.3 and 4.8 +credits in the first year (rightmost leaf node, gold) +

+
+

As always, CATEs that vary with observable factors do not necessarily +represent a causal moderating relationship. Here, if the +treatment effect of academic probation is seen to vary with the number +of credits, that does not imply that this association is causal: +prescribing students to take a certain number of credits will not +necessarily lead to a more effective probation policy, it may simply be +that the type of student to naturally enroll for fewer credit hours is +more likely to be responsive to academic probation. An entirely distinct +set of causal assumptions are required to interpret the CATE variations +themselves as causal. All the same, uncovering these patterns of +treatment effect variability are crucial to suggesting causal mechanism +to be investigated in future studies.

+
+
+
+

References

+
+
+Lindo, Jason M, Nicholas J Sanders, and Philip Oreopoulos. 2010. +“Ability, Gender, and Performance Standards: Evidence from +Academic Probation.” American Economic Journal: Applied +Economics 2 (2): 95–117. +
+
+
+ + + + +
+ + + + + + + + + + + + + + + diff --git a/vignettes/R/rdd_vignette.Rmd b/vignettes/R/rdd_vignette.Rmd new file mode 100644 index 000000000..12ae6ca6c --- /dev/null +++ b/vignettes/R/rdd_vignette.Rmd @@ -0,0 +1,354 @@ +--- +title: 'Regression Discontinuity Design (RDD) with stochtree' +author: + - Rafael Alcantara, University of Texas at Austin + - P. Richard Hahn, Arizona State University + - Drew Herren, University of Texas at Austin +date: "`r Sys.Date()`" +output: html_document +bibliography: rdd.bib +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +\usepackage{amsmath,asfonts,amssymb,amsthm} +\newcommand{\ind}{\perp \!\!\! \perp} +\newcommand{\B}{\mathcal{B}} +\newcommand{\res}{\mathbf{r}} +\newcommand{\m}{\mathbf{m}} +\newcommand{\x}{\mathbf{x}} +\newcommand{\C}{\mathbb{C}} +\newcommand{\N}{\mathrm{N}} +\newcommand{\w}{\mathrm{w}} +\newcommand{\iidsim}[0]{\stackrel{\mathrm{iid}}{\sim}} +\newcommand{\V}{ \mathbb{V}} +\newcommand{\f}{\mathrm{f}} +\newcommand{\F}{\mathbf{F}} +\newcommand{\Y}{\mathbf{Y}} + +## Introduction + +We study conditional average treatment effect (CATE) estimation for regression discontinuity designs (RDD), in which treatment assignment is based on whether a particular covariate --- referred to as the running variable --- lies above or below a known value, referred to as the cutoff value. Because treatment is deterministically assigned as a known function of the running variable, RDDs are trivially deconfounded: treatment assignment is independent of the outcome variable, given the running variable (because treatment is conditionally constant). However, estimation of treatment effects in RDDs is more complicated than simply controlling for the running variable, because doing so introduces a complete lack of overlap, which is the other key condition needed to justify regression adjustment for causal inference. Nonetheless, the CATE _at the cutoff_, $X=c$, may still be identified provided the conditional expectation $E[Y \mid X,W]$ is continuous at that point for _all_ $W=w$. We exploit this assumption with the leaf regression BART model implemented in Stochtree, which allows us to define an explicit prior on the CATE. We now describe the RDD setup and our model in more detail, and provide code to implement our approach. + +## Regression Discontinuity Design + +We conceptualize the treatment effect estimation problem via a quartet of random variables $(Y, X, Z, U)$. The variable $Y$ is the outcome variable; the variable $X$ is the running variable; the variable $Z$ is the treatment assignment indicator variable; and the variable $U$ represents additional, possibly unobserved, causal factors. What specifically makes this correspond to an RDD is that we stipulate that $Z = I(X > c)$, for cutoff $c$. We assume $c = 0$ without loss of generality. + +The following figure depicts a causal diagram representing the assumed causal relationships between these variables. Two key features of this diagram are one, that $X$ blocks the impact of $U$ on $Z$: in other words, $X$ satisfies the back-door criterion for learning causal effects of $Z$ on $Y$. And two, $X$ and $U$ are not descendants of $Z$. + +```{r cdag, echo=FALSE, fig.cap="A causal directed acyclic graph representing the general structure of a regression discontinuity design problem", fig.align="center", out.width = '40%'} +knitr::include_graphics("RDD_DAG.png") +``` + +Using this causal diagram, we may express $Y$ as some function of its graph parents, the random variables $(X,Z,U)$: $$Y = F(X,Z,U).$$ In principle, we may obtain draws of $Y$ by first drawing $(X,Z,U)$ according to their joint distribution and then applying the function $F$. Similarly, we may relate this formulation to the potential outcomes framework straightforwardly: +\begin{equation} +\begin{split} +Y^1 &= F(X,1,U),\\ +Y^0 &= F(X,0,U). +\end{split} +\end{equation} +Here, draws of $(Y^1, Y^0)$ may be obtained (in principle) by drawing $(X,Z,U)$ from their joint distribution and using only the $(X,U)$ elements as arguments in the above two equations, "discarding" the drawn value of $Z$. Note that this construction implies the _consistency_ condition: $Y = Y^1 Z + Y^0 ( 1 - Z)$. Likewise, this construction implies the _no interference_ condition because each $Y_i$ is considered to be produced with arguments ($X_i, Z_i, U_i)$ and not those from other units $j$; in particular, in constructing $Y_i$, $F$ does not take $Z_j$ for $j \neq i$ as an argument. + +Next, we define the following conditional expectations +\begin{equation} +\begin{split} +\mu_1(x) &= E[ F(x, 1, U) \mid X = x] ,\\ +\mu_0(x) &= E[ F(x, 0, U) \mid X = x], +\end{split} +\end{equation} +with which we can define the treatment effect function +$$\tau(x) = \mu_1(x) - \mu_0(x).$$ +Because $X$ satisfies the back-door criterion, $\mu_1$ and $\mu_0$ are estimable from the data, meaning that +\begin{equation} +\begin{split} +\mu_1(x) &= E[ F(x, 1, U) \mid X = x] = E[Y \mid X=x, Z=1],\\ +\mu_0(x) &= E[ F(x, 0, U) \mid X = x] = E[Y \mid X=x, Z=0], +\end{split} +\end{equation} +the right-hand-sides of which can be estimated from sample data, which we supposed to be independent and identically distributed realizations of $(Y_i, X_i, Z_i)$ for $i = 1, \dots, n$. However, because $Z = I(X >0)$ we can in fact only learn $\mu_1(x)$ for $X > 0$ and $\mu_0(x)$ for $X < 0$. In potential outcomes terminology, conditioning on $X$ satisfies ignorability, +$$(Y^1, Y^0) \ind Z \mid X,$$ +but not _strong ignorability_, because overlap is violated. Overlap would require that +$$0 < P(Z = 1 \mid X=x) < 1 \;\;\;\; \forall x,$$ +which is clearly violated by the RDD assumption that $Z = I(X > 0)$. Consequently, the overall ATE, +$\bar{\tau} = E(\tau(X)),$ is unidentified, and we must content ourselves with estimating $\tau(0)$, the conditional average effect at the point $x = 0$, which we estimate as the difference between $\mu_1(0) - \mu_0(0)$. This is possible for continuous $X$ so long as one is willing to assume that $\mu_1(x)$ and $\mu_0(x)$ are both suitably smooth functions of $x$: any inferred discontinuity at $x = 0$ must therefore be attributable to treatment effect. + +### Conditional average treatment effects in RDD + +We are concerned with learning not only $\tau(0)$, the "RDD ATE" (e.g. the CATE at $x = 0$), but also RDD CATEs, $\tau(0, \w)$ for some covariate vector $\w$. Incorporating additional covariates in the above framework turns out to be straightforward, simply by defining $W = \varphi(U)$ to be an observable function of the (possibly unobservable) causal factors $U$. We may then define our potential outcome means as +\begin{equation} +\begin{split} +\mu_1(x,\w) &= E[ F(x, 1, U) \mid X = x, W = \w] = E[Y \mid X=x, W=\w, Z=1],\\ +\mu_0(x,\w) &= E[ F(x, 0, U) \mid X = x, W = \w] = E[Y \mid X=x, W = \w, Z=0], +\end{split} +\end{equation} +and our treatment effect function as +$$\tau(x,\w) = \mu_1(x,\w) - \mu_0(x,\w).$$ We consider our data to be independent and identically distributed realizations $(Y_i, X_i, Z_i, W_i)$ for $i = 1, \dots, n$. Furthermore, we must assume that $\mu_1(x,\w)$ and $\mu_0(x,\w)$ are suitably smooth functions of $x$, {\em for every} $\w$; in other words, for each value of $\w$ the usual continuity-based identification assumptions must hold. + +With this framework and notation established, CATE estimation in RDDs boils down to estimation of condition expectation functions $E[Y \mid X=x, W=\w, Z=z]$, for which we turn to BART models. + +## The BARDDT Model + +We propose a BART model where the trees are allowed to split on $(x,\w)$ but where each leaf node parameter is a vector of regression coefficients tailored to the RDD context (rather than a scalar constant as in default BART). In one sense, such a model can be seen as implying distinct RDD ATE regressions for each subgroup determined by a given tree; however, this intuition is only heuristic, as the entire model is fit jointly as an ensemble of such trees. Instead, we motivate this model as a way to estimate the necessary conditional expectations via a parametrization where the conditional treatment effect function can be explicitly regularized, as follows. + +Let $\psi$ denote the following basis vector: +\begin{equation} +\psi(x,z) = \begin{bmatrix} +1 & z x & (1-z) x & z +\end{bmatrix}. +\end{equation} +To generalize the original BART model, we define $g_j(x, \w, z)$ as a piecewise linear function as follows. Let $b_j(x, \w)$ denote the node in the $j$th tree which contains the point $(x, \w)$; then the prediction function for tree $j$ is defined to be: +\begin{equation} +g_j(x, \w, z) = \psi(x, z) \Gamma_{b_j(x, \w)} +\end{equation} +for a leaf-specific regression vector $\Gamma_{b_j} = (\eta_{b_j}, \lambda_{b_j}, \theta_{b_j}, \Delta_{b_j})^t$. Therefore, letting $n_{b_j}$ denote the number of data points allocated to node $b$ in the $j$th tree and $\Psi_{b_j}$ denote the $n_{b_j} \times 4$ matrix, with rows equal to $\psi(x,z)$ for all $(x_i,z_i) \in b_j$, the model for observations assigned to leaf $b_j$, can be expressed in matrix notation as: +\begin{equation} +\begin{split} +\Y_{b_j} \mid \Gamma_{b_j}, \sigma^2 &\sim \N(\Psi_{b_j} \Gamma_{b_j},\sigma^2)\\ +\Gamma_{b_j} &\sim \N (0, \Sigma_0), +\end{split} \label{eq:leaf.regression} +\end{equation} +where we set $\Sigma_0 = \frac{0.033}{J} \mbox{I}$ as a default (for $x$ vectors standardized to have unit variance in-sample). + +This choice of basis entails that the RDD CATE at $\w$, $\tau(0, \w)$, is a sum of the $\Delta_{b_j(0, \w)}$ elements across all trees $j = 1, \dots, J$: +\begin{equation} +\begin{split} +\tau(0, \w) &= E[Y^1 \mid X=0, W = \w] - E[Y^0 \mid X = 0, W = \w]\\ +& = E[Y \mid X=0, W = \w, Z = 1] - E[Y \mid X = 0, W = \w, Z = 0]\\ +&= \sum_{j = 1}^J g_j(0, \w, 1) - \sum_{j = 1}^J g_j(0, \w, 0)\\ +&= \sum_{j = 1}^J \psi(0, 1) \Gamma_{b_j(0, \w)} - \sum_{j = 1}^J \psi(0, 0) \Gamma_{b_j(0, \w)} \\ +& = \sum_{j = 1}^J \Bigl( \psi(0, 1) - \psi(0, 0) \Bigr) \Gamma_{b_j(0, \w)} \\ +& = \sum_{j = 1}^J \Bigl( (1,0,0,1) - (1,0,0,0) \Bigr) \Gamma_{b_j(0, \w)} \\ +&= \sum_{j=1}^J \Delta_{b_j(0, \w)}. +\end{split} +\end{equation} +As a result, the priors on the $\Delta$ coefficients directly regularize the treatment effect. We set the tree and error variance priors as in the original BART model. + +The following figures provide a graphical depiction of how the BARDDT model fits a response surface and thereby estimates CATEs for distinct values of $\w$. For simplicity only two trees are used in the illustration, while in practice dozens or hundreds of trees may be used (in our simulations and empirical example, we use 150 trees). + +```{r trees1, echo=FALSE, fig.cap="Two regression trees with splits in x and a single scalar w. Node images depict the g(x,w,z) function (in x) defined by that node's coefficients. The vertical gap between the two line segments in a node that contain x=0 is that node's contribution to the CATE at X = 0. Note that only such nodes contribute for CATE prediction at x=0", fig.align="center", out.width = '70%'} +knitr::include_graphics("trees1.png") +``` + +```{r trees2, echo=FALSE, fig.cap="The two top figures show the same two regression trees as in the preceding figure, now represented as a partition of the x-w plane. Labels in each partition correspond to the leaf nodes depicted in the previous picture. The bottom figure shows the partition of the x-w plane implied by the sum of the two trees; the red dashed line marks point W=w* and the combination of nodes that include this point", fig.align="center", out.width = '70%'} +knitr::include_graphics("trees2.png") +``` + +```{r trees3, echo=FALSE, fig.cap="Left: The function fit at W = w* for the two trees shown in the previous two figures, shown superimposed. Right: The aggregated fit achieved by summing the contributes of two regression tree fits shown at left. The magnitude of the discontinuity at x = 0 (located at the dashed gray vertical line) represents the treatment effect at that point. Different values of w will produce distinct fits; for the two trees shown, there can be three distinct fits based on the value of w.", fig.align="center", out.width = '70%'} +knitr::include_graphics("trees3.png") +``` + +An interesting property of BARDDT can be seen in this small illustration --- by letting the regression trees split on the running variable, there is no need to separately define a 'bandwidth' as is used in the polynomial approach to RDD. Instead, the regression trees automatically determine (in the course of posterior sampling) when to 'prune' away regions away from the cutoff value. There are two notable features of this approach. One, different trees in the ensemble are effectively using different local bandwidths and these fits are then blended together. For example, in the bottom panel of the second figure, we obtain one bandwidth for the region $d+i$, and a different one for regions $a+g$ and $d+g$. Two, for cells in the tree partition that do not span the cutoff, the regression within that partition contains no causal contrasts --- all observations either have $Z = 1$ or $Z = 0$. For those cells, the treatment effect coefficient is ill-posed and in those cases the posterior sampling is effectively a draw from the prior; however, such draws correspond to points where the treatment effect is unidentified and none of these draws contribute to the estimation of $\tau(0, \w)$ --- for example, only nodes $a+g$, $d+g$, and $d+i$ provide any contribution. This implies that draws of $\Delta$ corresponding to nodes not predicting at $X=0$ will always be draws from the prior, which has some intuitive appeal. + +## Demo + +In this section, we provide code for implementing our model in `stochtree` on a popular RDD dataset. +First, let us load `stochtree` and all the necessary libraries for our posterior analysis. + +```{r} +## Load libraries +library(stochtree) +library(rpart) +library(rpart.plot) +library(xtable) +library(foreach) +library(doParallel) +``` + +### Dataset + +The data comes from @lindo2010ability, who analyze data on college students enrolled in a large Canadian university in order to evaluate the effectiveness of an academic probation policy. Students who present a grade point average (GPA) lower than a certain threshold at the end of each term are placed on academic probation and must improve their GPA in the subsequent term or else face suspension. We are interested in how being put on probation or not, $Z$, affects students' GPA, $Y$, at the end of the current term. The running variable, $X$, is the negative distance between a student's previous-term GPA and the probation threshold, so that students placed on probation ($Z = 1$) have a positive score and the cutoff is 0. Potential moderators, $W$, are: + +* gender (`male`), +* age upon entering university (`age_at_entry`) +* a dummy for being born in North America (`bpl_north_america`), +* the number of credits taken in the first year (`totcredits_year1`) +* an indicator designating each of three campuses (`loc_campus` 1, 2 and 3), and +* high school GPA as a quantile w.r.t the university's incoming class (`hsgrade_pct`). + +```{r} +## Load and organize data +data <- read.csv("https://raw.githubusercontent.com/rdpackages-replication/CIT_2024_CUP/refs/heads/main/CIT_2024_CUP_discrete.csv") +y <- data$nextGPA +x <- data$X +x <- x/sd(x) ## we always standardize X +w <- data[,4:11] +### Must define categorical features as ordered/unordered factors +w$totcredits_year1 <- factor(w$totcredits_year1,ordered=TRUE) +w$male <- factor(w$male,ordered=FALSE) +w$bpl_north_america <- factor(w$bpl_north_america,ordered=FALSE) +w$loc_campus1 <- factor(w$loc_campus1,ordered=FALSE) +w$loc_campus2 <- factor(w$loc_campus2,ordered=FALSE) +w$loc_campus3 <- factor(w$loc_campus3,ordered=FALSE) +c <- 0 +n <- nrow(data) +z <- as.numeric(x>c) +h <- 0.1 ## window for prediction sample +test <- -h < x & x < h +ntest <- sum(test) +``` + +### Target estimand + +Generically, our estimand is the CATE function at $x = 0$; i.e. $\tau(0, \w)$. The key practical question is which values of $\w$ to consider. Some values of $\w$ will not be well-represented near $x=0$ and so no estimation technique will be able to estimate those points effectively. As such, to focus on feasible points --- which will lead to interesting comparisons between methods --- we recommend restricting the evaluation points to the observed $\w_i$ such that $|x_i| \leq \delta$, for some $\delta > 0$. In our example, we use $\delta = 0.1$ for a standardized $x$ variable. Therefore, our estimand of interest is a vector of treatment effects: +\begin{equation} +\tau(0, \w_i) \;\;\; \forall i \;\mbox{ such that }\; |x_i| \leq \delta. +\end{equation} + +### Implementing BARDDT + +In order to implement our model, we write the Psi vector, as defined before: `Psi <- cbind(z*x,(1-z)*x, z,rep(1,n))`. The training matrix for the model is `as.matrix(cbind(x,w))`, which we feed into the `stochtree::bart` function via the `X_train` parameter. The basis vector `Psi` is fed into the function via the `leaf_basis_train` parameter. The list object `barddt.mean.parmlist` defines options for the mean forest (a different list can be defined for a variance forest in the case of heteroscedastic BART, which we do not consider here). Importantly, in this list we define parameter `sigma2_leaf_init = diag(rep(0.1/150,4))`, which sets $\Sigma_0$ as described above. Now, we can fit the model, which is saved in object `barddt.fit`. + +Once the model is fit, we need 3 elements to obtain the CATE predictions: the basis vectors at the cutoff for $z=1$ and $z=0$, the test matrix $[X \quad W]$ at the cutoff, and the testing sample. We define the prediction basis vectors $\psi_1 = [1 \quad 0 \quad 0 \quad 1]$ and $\psi_0 = [1 \quad 0 \quad 0 \quad 0]$, which correspond to $\psi$ at $(x=0,z=1)$, and $(x=0,z=0)$, respectively. These vectors are written into R as `Psi1 <- cbind(rep(1,n), rep(c,n), rep(0,n), rep(1,n))` and `Psi0 <- cbind(rep(1,n), rep(0,n), rep(c,n), rep(0,n))`. Then, we write the test matrix at $(x=0,\w)$ as `xmat_test <- as.matrix(cbind(rep(0,n),w)`. Finally, we must define the testing window. As discussed previously, our window is set such that $|x| \leq 0.1$, which can be set in R as `test <- -0.1 < x & x <0.1`. + +Once all of these elements are set, we can obtain the outcome predictions at the cutoff by running `predict(barddt.fit, xmat_test, Psi1)` (resp. `predict(barddt.fit, xmat_test, Psi0)`). Each of these calls returns a list, from which we can extract element `y_hat` to obtain the posterior distribution for the outcome. In the code below, the treated and control outcome predictions are saved in the matrix objects `pred1` and `pred0`, respectively. Now, we can obtain draws from the CATE posterior by simply subtracting these matrices. The function below outlines how to perform each of these steps in R. + +```{r} +fit.barddt <- function(y,x,w,z,test,c) +{ + ## Lists of parameters for the Stochtree BART function + barddt.global.parmlist <- list(standardize=T,sample_sigma_global=TRUE,sigma2_global_init=0.1) + barddt.mean.parmlist <- list(num_trees=50, min_samples_leaf=20, alpha=0.95, beta=2, + max_depth=20, sample_sigma2_leaf=FALSE, sigma2_leaf_init = diag(rep(0.1/150,4))) + ## Set basis vector for leaf regressions + Psi <- cbind(rep(1,n),z*x,(1-z)*x,z) + ## Model fit + barddt.fit = stochtree::bart(X_train= as.matrix(cbind(x,w)), y_train=y, + leaf_basis_train = Psi, mean_forest_params=barddt.mean.parmlist, + general_params=barddt.global.parmlist, + num_mcmc=1000,num_gfr=30) + ## Define basis vectors and test matrix for outcome predictions at X=c + Psi1 <- cbind(rep(1,n), rep(c,n), rep(0,n), rep(1,n)) + Psi0 <- cbind(rep(1,n), rep(0,n), rep(c,n), rep(0,n)) + Psi1 <- Psi1[test,] + Psi0 <- Psi0[test,] + xmat_test <- as.matrix(cbind(rep(0,n),w)[test,]) + ## Obtain outcome predictions + pred1 <- predict(barddt.fit,xmat_test,Psi1)$y_hat + pred0 <- predict(barddt.fit,xmat_test,Psi0)$y_hat + ## Obtain CATE posterior + out <- pred1-pred0 + return(out) +} +``` + +Now, we proceed to fit the BARDDT model. The procedure is exactly the same as described in the simulation section. + +```{r empiricalPosterior, cache=TRUE,cache.lazy=FALSE} +## We will sample multiple chains sequentially +num_chains <- 20 +num_gfr <- 2 +num_burnin <- 0 +num_mcmc <- 500 +bart_models <- list() +## Define basis functions for training and testing +B <- cbind(z*x,(1-z)*x, z,rep(1,n)) +B1 <- cbind(rep(c,n), rep(0,n), rep(1,n), rep(1,n)) +B0 <- cbind(rep(0,n), rep(c,n), rep(0,n), rep(1,n)) +B1 <- B1[test,] +B0 <- B0[test,] +B_test <- rbind(B1,B0) +xmat_test <- cbind(x=rep(0,n),w)[test,] +xmat_test <- rbind(xmat_test,xmat_test) +### We combine the basis for Z=1 and Z=0 to feed it to the BART call and get the Y(z) predictions instantaneously +### Then we separate the posterior matrix between each Z and calculate the CATE prediction +## Sampling trees in parallel +ncores <- 5 +cl <- makeCluster(ncores) +registerDoParallel(cl) + +start_time <- Sys.time() +bart_model_outputs <- foreach (i = 1:num_chains) %dopar% { + random_seed <- i + ## Lists to define BARDDT parameters + barddt.global.parmlist <- list(standardize=T,sample_sigma_global=TRUE,sigma2_global_init=0.1) + barddt.mean.parmlist <- list(num_trees=50, min_samples_leaf=20, alpha=0.95, beta=2, + max_depth=20, sample_sigma2_leaf=FALSE, sigma2_leaf_init = diag(rep(0.1/50,4))) + bart_model <- stochtree::bart( + X_train = cbind(x,w), leaf_basis_train = B, y_train = y, + X_test = xmat_test, leaf_basis_test = B_test, + num_gfr = num_gfr, num_burnin = num_burnin, num_mcmc = num_mcmc, + general_params = barddt.global.parmlist, mean_forest_params = barddt.mean.parmlist + ) + bart_model <- bart_model$y_hat_test[1:ntest,]-bart_model$y_hat_test[(ntest+1):(2*ntest),] +} +stopCluster(cl) +## Combine CATE predictions +pred <- do.call("cbind",bart_model_outputs) + +end_time <- Sys.time() + +print(end_time - start_time) +## Save the results +saveRDS(pred, "bart_rdd_posterior.rds") +``` + +We now proceed to analyze the CATE posterior. The figure produced below presents a summary of the CATE posterior produced by BARDDT for this application. This picture is produced fitting a regression tree, using $W$ as the predictors, to the individual posterior mean CATEs: +\begin{equation} +\bar{\tau}_i = \frac{1}{M} \sum_{h = 1}^M \tau^{(h)}(0, \w_i), +\end{equation} +where $h$ indexes each of $M$ total posterior samples. As in our simulation studies, we restrict our posterior analysis to use $\w_i$ values of observations with $|x_i| \leq \delta = 0.1$ (after normalizing $X$ to have standard deviation 1 in-sample). For the @lindo2010ability data, this means that BARDDT was trained on $n = 40,582$ observations, of which 1,602 satisfy $x_i \leq 0.1$, which were used to generate the effect moderation tree. + +```{r cart_summary, fig.cap="Regression tree fit to posterior point estimates of individual treatment effects: top number in each box is the average subgroup treatment effect, lower number shows the percentage of the total sample in that subgroup; the tree flags credits in first year, gender, and age at entry as important moderators.", fig.align="center"} +## Fit regression tree +cate <- rpart(y~.,data.frame(y=rowMeans(pred),w[test,]),control = rpart.control(cp=0.015)) +## Define separate colors for left and rightmost nodes +plot.cart <- function(rpart.obj) +{ + rpart.frame <- rpart.obj$frame + left <- which.min(rpart.frame$yval) + right <- which.max(rpart.frame$yval) + nodes <- rep(NA,nrow(rpart.frame)) + for (i in 1:length(nodes)) + { + if (rpart.frame$yval[i]==rpart.frame$yval[right]) nodes[i] <- "gold2" + else if (rpart.frame$yval[i]==rpart.frame$yval[left]) nodes[i] <- "tomato3" + else nodes[i] <- "lightblue3" + } + return(nodes) +} +## Plot regression tree +rpart.plot(cate,main="",box.col=plot.cart(cate)) +``` + +The resulting effect moderation tree indicates that course load (credits attempted) in the academic term leading to their probation is a strong moderator. Contextually, this result is plausible, both because course load could relate to latent character attributes that influence a student's responsiveness to sanctions and also because it could predict course load in the current term, which would in turn have implications for the GPA (i.e. it is harder to get a high GPA while taking more credit hours). The tree also suggests that effects differ by campus, and age and gender of the student. These findings are all prima facie plausible as well. + +To gauge how strong these findings are statistically, we can zoom in on isolated subgroups and compare the posteriors of their subgroup average treatment effects. This approach is valid because in fitting the effect moderation tree to the posterior mean CATEs we in no way altered the posterior itself; the effect moderation tree is a posterior summary tool and not any additional inferential approach; the posterior is obtained once and can be explored freely using a variety of techniques without vitiating its statistical validity. Investigating the most extreme differences is a good place to start: consider the two groups of students at opposite ends of the treatment effect range discovered by the effect moderation tree: + +* **Group A** a male student that entered college older than 19 and attempted more than 4.8 credits in the first year (leftmost leaf node, colored red, comprising 128 individuals) +* **Group B** a student of any gender who entered college younger than 19 and attempted between 4.3 and 4.8 credits in the first year (rightmost leaf node, colored gold, comprising 108 individuals). + +Subgroup CATEs are obtained by aggregating CATEs across the observed $\w_i$ values for individuals in each group; this can be done for individual posterior samples, yielding a posterior distribution over the subgroup CATE: +\begin{equation} +\bar{\tau}_A^{(h)} = \frac{1}{n_A} \sum_{i : \w_i} \tau^{(h)}(0, \w_i), +\end{equation} +where $h$ indexes a posterior draw and $n_A$ denotes the number of individuals in the group A. + +The code below produces a contour plot for a bivariate kernel density estimate of the joint CATE posterior distribution for subgroups A and B. The contour lines are nearly all above the $45^{\circ}$ line, indicating that the preponderance of posterior probability falls in the region where the treatment effect for Group B is greater than that of Group A, meaning that the difference in the subgroup treatment effects flagged by the effect moderation tree persist even after accounting for estimation uncertainty in the underlying CATE function. + +```{r kde, fig.cap="Kernel density estimates for the joint CATE posterior between male students who entered college older than 19 and attempted more than 4.8 credits in the first year (leftmost leaf node, red) and students who entered college younger than 19 and attempted between 4.3 and 4.8 credits in the first year (rightmost leaf node, gold)", fig.align="center"} +## Define function to produce KD estimates of the joint distribution of two subgroups +cate.kde <- function(rpart.obj,pred) +{ + rpart.frame <- rpart.obj$frame + left <- rpart.obj$where==which.min(rpart.frame$yval) + right <- rpart.obj$where==which.max(rpart.frame$yval) + ## Calculate CATE posterior for groups A and B + cate.a <- do.call("cbind",by(pred,left, colMeans)) + cate.b <- do.call("cbind",by(pred,right, colMeans)) + cate.a <- cate.a[,2] + cate.b <- cate.b[,2] + ## Estimate kernel density + denshat <- MASS::kde2d(cate.a, cate.b, n=200) + return(denshat) +} +contour(cate.kde(cate,pred),bty='n',xlab="Group A",ylab="Group B") +abline(a=0,b=1) +``` + +As always, CATEs that vary with observable factors do not necessarily represent a _causal_ moderating relationship. Here, if the treatment effect of academic probation is seen to vary with the number of credits, that does not imply that this association is causal: prescribing students to take a certain number of credits will not necessarily lead to a more effective probation policy, it may simply be that the type of student to naturally enroll for fewer credit hours is more likely to be responsive to academic probation. An entirely distinct set of causal assumptions are required to interpret the CATE variations themselves as causal. All the same, uncovering these patterns of treatment effect variability are crucial to suggesting causal mechanism to be investigated in future studies. + +# References + + diff --git a/vignettes/R/trees1.png b/vignettes/R/trees1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5bc3acf3e9f2f82ab9fa76cc11949c673195d0 GIT binary patch literal 40369 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 literal 0 HcmV?d00001 diff --git a/vignettes/R/trees2.png b/vignettes/R/trees2.png new file mode 100644 index 0000000000000000000000000000000000000000..90b7bd5f12e4333dce7cc12b5e63e638d64a7804 GIT binary patch literal 24832 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 literal 0 HcmV?d00001 diff --git a/vignettes/R/trees3.png b/vignettes/R/trees3.png new file mode 100644 index 0000000000000000000000000000000000000000..ededa55f50ec7b977f00a93ae447b6388b585706 GIT binary patch literal 25988 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 Date: Fri, 4 Apr 2025 12:16:06 -0500 Subject: [PATCH 44/55] Updated C++ getting started --- docs/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 679a65fc7..74d7ff4d5 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -155,7 +155,7 @@ While using `gdb` or `lldb` on `debugstochtree` at the command line is very help option(USE_SANITIZER "Use santizer flags" OFF) ``` -To generate an XCode project based on the build targets and specifications defined in a `CMakeLists.txt`, navigate to the main project folder (i.e. `cd /path/to/project`) and run the following commands: +or via command-line argument to `cmake -G Xcode` as shown below. To generate an XCode project based on the build targets and specifications defined in a `CMakeLists.txt` file (and ensure that debug and santizer flags are switched off), navigate to the main project folder (i.e. `cd /path/to/project`) and run the following commands: ```{bash} rm -rf xcode/ From 6d9e17f2c08487bab1a09989d9a0faa6584d0ac0 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 4 Apr 2025 12:30:22 -0500 Subject: [PATCH 45/55] Update Python installation instructions --- docs/getting-started.md | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index 74d7ff4d5..81198ae1f 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -5,12 +5,16 @@ Below, we detail how to install the R / Python packages, or work directly with t ## R Package +### CRAN + The R package can be installed from CRAN via ``` install.packages("stochtree") ``` +### Development Version (Local Build) + The development version of `stochtree` can be installed from Github via ``` @@ -19,11 +23,21 @@ remotes::install_github("StochasticTree/stochtree", ref="r-dev") ## Python Package -The python package is not yet on PyPI but can be installed from source using pip's [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). +### PyPI + +`stochtree`'s Python package can be installed from PyPI via + +``` +pip install stochtree +``` + +### Development Version (Local Build) + +The development version of `stochtree` can be installed from source using pip's [git interface](https://pip.pypa.io/en/stable/topics/vcs-support/). To proceed, you will need a working version of [git](https://git-scm.com) and python 3.8 or greater (available from several sources, one of the most straightforward being the [anaconda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) suite). -### Quick start +#### Quick start Without worrying about virtual environments (detailed further below), `stochtree` can be installed from the command line @@ -32,11 +46,11 @@ pip install numpy scipy pytest pandas scikit-learn pybind11 pip install git+https://github.com/StochasticTree/stochtree.git ``` -### Virtual environment installation +#### Virtual environment installation Often, users prefer to manage different projects (with different package / python version requirements) in virtual environments. -#### Conda +##### Conda Conda provides a straightforward experience in managing python dependencies, avoiding version conflicts / ABI issues / etc. @@ -62,7 +76,7 @@ pip install jupyterlab With these dependencies installed, you can [clone the repo](#cloning-the-repository) and run the `demo/` examples. -#### Venv +##### Venv You could also use venv for environment management. First, navigate to the folder in which you usually store virtual environments (i.e. `cd /path/to/envs`) and create and activate a virtual environment: From 69f8cc442db28ea50b314814ea727c3cab2ac9b7 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 10 Apr 2025 09:54:08 -0500 Subject: [PATCH 46/55] Updating documentation build process --- .github/workflows/docs.yml | 4 +--- docs/getting-started.md | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index fff6dc581..6b39d65f3 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -57,9 +57,7 @@ jobs: - name: Install stochtree python package run: | - cd stochtree_repo - pip install . - cd .. + pip install stochtree - name: Setup pandoc uses: r-lib/actions/setup-pandoc@v2 diff --git a/docs/getting-started.md b/docs/getting-started.md index 81198ae1f..cf4a6742c 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -57,7 +57,7 @@ Conda provides a straightforward experience in managing python dependencies, avo To build stochtree using a `conda` based workflow, first create and activate a conda environment with the requisite dependencies ```{bash} -conda create -n stochtree-dev -c conda-forge python=3.10 numpy scipy pytest pandas pybind11 scikit-learn matplotlib seaborn +conda create -n stochtree-dev -c conda-forge python=3.10 numpy scipy pytest pandas pybind11 scikit-learn conda activate stochtree-dev ``` From 285d06000e447094c255455a54a1c4723d2f5bae Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 11 Apr 2025 01:12:32 -0500 Subject: [PATCH 47/55] Update roadmap --- docs/development/roadmap.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development/roadmap.md b/docs/development/roadmap.md index 3ab75e783..d06360b42 100644 --- a/docs/development/roadmap.md +++ b/docs/development/roadmap.md @@ -15,7 +15,7 @@ Our development goals are prioritized along three broad timelines | Category | Now | Next | Later | | --- | --- | --- | --- | -| User Interface | Feature parity between R and Python | | | +| User Interface | | | | | Performance | | | Hardware acceleration (Apple Silicon GPU)
Hardware acceleration (NVIDIA GPU)
Out-of-memory sampler | -| Modeling Features | Quantile cutpoint sampling | Monotonicity constraints
Multiclass classification | | +| Modeling Features | Quantile cutpoint sampling
Probit BART and BCF | Monotonicity constraints
Multiclass classification | | | Interoperability | | | PyMC (Python)
Stan (R / Python)
Apache Arrow (R / Python)
Polars (Python) | From 386189145407ec11ea673859cc7d70edb6e6c8ba Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 25 Apr 2025 23:48:56 -0500 Subject: [PATCH 48/55] Moved advanced vignettes to subfolders --- vignettes/Python/{ => RDD}/RDD_DAG.png | Bin vignettes/Python/{ => RDD}/rdd.html | 0 vignettes/Python/{ => RDD}/rdd.ipynb | 0 vignettes/Python/{ => RDD}/trees1.png | Bin vignettes/Python/{ => RDD}/trees2.png | Bin vignettes/Python/{ => RDD}/trees3.png | Bin vignettes/R/{ => RDD}/RDD_DAG.png | Bin vignettes/R/{ => RDD}/rdd.bib | 0 vignettes/R/{ => RDD}/rdd.html | 0 vignettes/R/{ => RDD}/rdd_vignette.Rmd | 0 vignettes/R/{ => RDD}/trees1.png | Bin vignettes/R/{ => RDD}/trees2.png | Bin vignettes/R/{ => RDD}/trees3.png | Bin 13 files changed, 0 insertions(+), 0 deletions(-) rename vignettes/Python/{ => RDD}/RDD_DAG.png (100%) rename vignettes/Python/{ => RDD}/rdd.html (100%) rename vignettes/Python/{ => RDD}/rdd.ipynb (100%) rename vignettes/Python/{ => RDD}/trees1.png (100%) rename vignettes/Python/{ => RDD}/trees2.png (100%) rename vignettes/Python/{ => RDD}/trees3.png (100%) rename vignettes/R/{ => RDD}/RDD_DAG.png (100%) rename vignettes/R/{ => RDD}/rdd.bib (100%) rename vignettes/R/{ => RDD}/rdd.html (100%) rename vignettes/R/{ => RDD}/rdd_vignette.Rmd (100%) rename vignettes/R/{ => RDD}/trees1.png (100%) rename vignettes/R/{ => RDD}/trees2.png (100%) rename vignettes/R/{ => RDD}/trees3.png (100%) diff --git a/vignettes/Python/RDD_DAG.png b/vignettes/Python/RDD/RDD_DAG.png similarity index 100% rename from vignettes/Python/RDD_DAG.png rename to vignettes/Python/RDD/RDD_DAG.png diff --git a/vignettes/Python/rdd.html b/vignettes/Python/RDD/rdd.html similarity index 100% rename from vignettes/Python/rdd.html rename to vignettes/Python/RDD/rdd.html diff --git a/vignettes/Python/rdd.ipynb b/vignettes/Python/RDD/rdd.ipynb similarity index 100% rename from vignettes/Python/rdd.ipynb rename to vignettes/Python/RDD/rdd.ipynb diff --git a/vignettes/Python/trees1.png b/vignettes/Python/RDD/trees1.png similarity index 100% rename from vignettes/Python/trees1.png rename to vignettes/Python/RDD/trees1.png diff --git a/vignettes/Python/trees2.png b/vignettes/Python/RDD/trees2.png similarity index 100% rename from vignettes/Python/trees2.png rename to vignettes/Python/RDD/trees2.png diff --git a/vignettes/Python/trees3.png b/vignettes/Python/RDD/trees3.png similarity index 100% rename from vignettes/Python/trees3.png rename to vignettes/Python/RDD/trees3.png diff --git a/vignettes/R/RDD_DAG.png b/vignettes/R/RDD/RDD_DAG.png similarity index 100% rename from vignettes/R/RDD_DAG.png rename to vignettes/R/RDD/RDD_DAG.png diff --git a/vignettes/R/rdd.bib b/vignettes/R/RDD/rdd.bib similarity index 100% rename from vignettes/R/rdd.bib rename to vignettes/R/RDD/rdd.bib diff --git a/vignettes/R/rdd.html b/vignettes/R/RDD/rdd.html similarity index 100% rename from vignettes/R/rdd.html rename to vignettes/R/RDD/rdd.html diff --git a/vignettes/R/rdd_vignette.Rmd b/vignettes/R/RDD/rdd_vignette.Rmd similarity index 100% rename from vignettes/R/rdd_vignette.Rmd rename to vignettes/R/RDD/rdd_vignette.Rmd diff --git a/vignettes/R/trees1.png b/vignettes/R/RDD/trees1.png similarity index 100% rename from vignettes/R/trees1.png rename to vignettes/R/RDD/trees1.png diff --git a/vignettes/R/trees2.png b/vignettes/R/RDD/trees2.png similarity index 100% rename from vignettes/R/trees2.png rename to vignettes/R/RDD/trees2.png diff --git a/vignettes/R/trees3.png b/vignettes/R/RDD/trees3.png similarity index 100% rename from vignettes/R/trees3.png rename to vignettes/R/RDD/trees3.png From fc9c59c67307a26590811a0dd848db8bb129efd0 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 25 Apr 2025 23:49:05 -0500 Subject: [PATCH 49/55] Update mkdocs.yml --- mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index aab731201..5bbf52e2e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -72,9 +72,9 @@ nav: - 'Vignettes': - 'Vignettes': vignettes/index.md - 'R': - - 'RDD': 'vignettes/R/rdd.html' + - 'RDD': 'vignettes/R/RDD/rdd.html' - 'Python': - - 'RDD': 'vignettes/Python/rdd.html' + - 'RDD': 'vignettes/Python/RDD/rdd.html' - 'Development': - 'Development': development/index.md - 'Contributing': development/contributing.md From 2d6c5b4e24c0509847e59f5cf1e0c6f4b397866c Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Fri, 25 Apr 2025 23:50:05 -0500 Subject: [PATCH 50/55] Added initial IV vignette --- vignettes/Python/IV/IV_CDAG.png | Bin 0 -> 135771 bytes vignettes/Python/IV/iv.ipynb | 1112 +++++++++++++++++++++++++++++++ vignettes/R/IV/IV_CDAG.png | Bin 0 -> 135771 bytes vignettes/R/IV/iv.Rmd | 774 +++++++++++++++++++++ vignettes/R/IV/iv.bib | 68 ++ 5 files changed, 1954 insertions(+) create mode 100644 vignettes/Python/IV/IV_CDAG.png create mode 100644 vignettes/Python/IV/iv.ipynb create mode 100644 vignettes/R/IV/IV_CDAG.png create mode 100644 vignettes/R/IV/iv.Rmd create mode 100644 vignettes/R/IV/iv.bib diff --git a/vignettes/Python/IV/IV_CDAG.png b/vignettes/Python/IV/IV_CDAG.png new file mode 100644 index 0000000000000000000000000000000000000000..7900ff501a89a14d1895ce6bc6a217ea24d6118d GIT binary patch literal 135771 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%0Dndh`wWt$5 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 num_warmstart:\n", + " gfr_flag = False\n", + " \n", + " # Sample forest\n", + " forest_sampler.sample_one_iteration(\n", + " forest_samples, active_forest, forest_dataset, outcome, cpp_rng, \n", + " global_model_config, forest_model_config, keep_forest=True, gfr = gfr_flag\n", + " )\n", + "\n", + " # Get the current means\n", + " eta = np.squeeze(forest_samples.predict_raw_single_forest(forest_dataset, i))\n", + "\n", + " # Sample latent normals, truncated according to the observed outcome y\n", + " mu0 = eta[y == 0]\n", + " mu1 = eta[y == 1]\n", + " u0 = rng.uniform(\n", + " low=0.0,\n", + " high=norm.cdf(0 - mu0),\n", + " size=n-n1,\n", + " )\n", + " u1 = rng.uniform(\n", + " low=norm.cdf(0 - mu1),\n", + " high=1.0,\n", + " size=n1,\n", + " )\n", + " zed[y == 0] = mu0 + norm.ppf(u0)\n", + " zed[y == 1] = mu1 + norm.ppf(u1)\n", + "\n", + " # Update outcome\n", + " new_outcome = np.squeeze(zed) - eta\n", + " outcome.update_data(new_outcome)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fit the monotone probit model(s)\n", + "\n", + "The monotonicty constraint relies on a data augmentation as described in Papakostas et al (2023). The implementation of this sampler is inherently cumbersome, as one of the \"data\" vectors is constructed from some observed data and some latent data and there are two forest objects, one of which applies to all of the observations and one of which applies to only those observations with $Z = 0$. We go into more details about this sampler in a dedicated vignette. Here we include the code, but without producing the equations derived in Papakostas (2023). What is most important is simply that\n", + "\n", + "\\begin{equation}\n", + "\\begin{aligned}\n", + "\\operatorname{Pr}(V=1 \\mid Z=0, X=x)&=\\pi_a(x) = \\Phi_f(x)\\Phi_h(x),\\\\\n", + "\\operatorname{Pr}(V=1 \\mid Z=1, X=x)&=\\pi_a(x)+\\pi_c(x) = \\Phi_f(x),\n", + "\\end{aligned}\n", + "\\end{equation}\n", + "where $\\Phi_{\\mu}(x)$ denotes the normal cumulative distribution function with mean $\\mu(x)$ and variance 1. \n", + "\n", + "We first create a secondary data matrix for the $Z=0$ group only. We also set all of the hyperparameters and initialize the latent variables." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fit the monotone probit model to the treatment such that Pr(V = 1 | Z = 1, X=x) >= Pr(V = 1 | Z = 0,X = x) \n", + "X_h = X[z==0,:]\n", + "n0 = np.sum(z==0)\n", + "n1 = np.sum(z==1)\n", + "\n", + "num_trees_f = 50\n", + "num_trees_h = 20\n", + "feature_types = np.repeat(0, p_X-2).astype(int)\n", + "var_weights = np.repeat(1.0/(p_X - 2.0), p_X - 2)\n", + "cutpoint_grid_size = 100\n", + "global_variance_init = 1.\n", + "tau_init_f = 1/num_trees_f\n", + "tau_init_h = 1/num_trees_h\n", + "leaf_prior_scale_f = np.array([[tau_init_f]])\n", + "leaf_prior_scale_h = np.array([[tau_init_h]])\n", + "leaf_regression = False # fit a constant leaf mean BART model\n", + "\n", + "# Instantiate the C++ dataset objects\n", + "forest_dataset_f = Dataset()\n", + "forest_dataset_f.add_covariates(X)\n", + "forest_dataset_h = Dataset()\n", + "forest_dataset_h.add_covariates(X_h)\n", + "\n", + "# Tell it we're fitting a normal BART model\n", + "outcome_model_type = 0\n", + "\n", + "# Set up model configuration objects\n", + "forest_model_config_f = ForestModelConfig(\n", + " feature_types = feature_types, \n", + " num_trees = num_trees_f, \n", + " num_features = X.shape[1], \n", + " num_observations = n, \n", + " variable_weights = var_weights, \n", + " leaf_dimension = 1, \n", + " alpha = alpha, \n", + " beta = beta, \n", + " min_samples_leaf = min_samples_leaf, \n", + " max_depth = max_depth, \n", + " leaf_model_type = outcome_model_type, \n", + " leaf_model_scale = leaf_prior_scale_f, \n", + " cutpoint_grid_size = cutpoint_grid_size\n", + ")\n", + "forest_model_config_h = ForestModelConfig(\n", + " feature_types = feature_types, \n", + " num_trees = num_trees_h, \n", + " num_features = X_h.shape[1], \n", + " num_observations = n0, \n", + " variable_weights = var_weights, \n", + " leaf_dimension = 1, \n", + " alpha = alpha, \n", + " beta = beta, \n", + " min_samples_leaf = min_samples_leaf, \n", + " max_depth = max_depth, \n", + " leaf_model_type = outcome_model_type, \n", + " leaf_model_scale = leaf_prior_scale_h, \n", + " cutpoint_grid_size = cutpoint_grid_size\n", + ")\n", + "global_model_config = GlobalModelConfig(global_error_variance=global_variance_init)\n", + "\n", + "# Instantiate the sampling data structures\n", + "forest_sampler_f = ForestSampler(\n", + " forest_dataset_f, global_model_config, forest_model_config_f\n", + ")\n", + "forest_sampler_h = ForestSampler(\n", + " forest_dataset_h, global_model_config, forest_model_config_h\n", + ")\n", + "\n", + "# Instantiate containers of forest samples\n", + "forest_samples_f = ForestContainer(num_trees_f, 1, True, False)\n", + "forest_samples_h = ForestContainer(num_trees_h, 1, True, False)\n", + "\n", + "# Instantiate \"active\" forests\n", + "active_forest_f = Forest(num_trees_f, 1, True, False)\n", + "active_forest_h = Forest(num_trees_h, 1, True, False)\n", + "\n", + "# Set algorithm specifications \n", + "# these are set in the earlier script for the outcome model; number of draws needs to be commensurable \n", + "\n", + "# num_warmstart = 40\n", + "# num_mcmc = 5000\n", + "# num_samples = num_warmstart + num_mcmc\n", + "\n", + "# Initialize the Markov chain\n", + "\n", + "# Initialize (R0, R1), the latent binary variables that enforce the monotonicty \n", + "v1 = v[z==1]\n", + "v0 = v[z==0]\n", + "\n", + "R1 = np.empty(n0, dtype=float)\n", + "R0 = np.empty(n0, dtype=float)\n", + "\n", + "R1[v0==1] = 1\n", + "R0[v0==1] = 1\n", + "\n", + "nv0 = np.sum(v0==0)\n", + "R1[v0 == 0] = 0\n", + "R0[v0 == 0] = rng.choice([0,1], size = nv0)\n", + "\n", + "# The first n1 observations of vaug are actually observed\n", + "# The next n0 of them are the latent variable R1\n", + "vaug = np.append(v1, R1)\n", + "\n", + "# Initialize the Albert and Chib latent Gaussian variables\n", + "z_f = (2.0*vaug - 1.0)\n", + "z_h = (2.0*R0 - 1.0)\n", + "z_f = z_f/np.std(z_f)\n", + "z_h = z_h/np.std(z_h)\n", + "\n", + "# Pass these variables to the BART models as outcome variables\n", + "outcome_f = Residual(z_f)\n", + "outcome_h = Residual(z_h)\n", + "\n", + "# Initialize active forests to constant (0) predictions\n", + "forest_init_val_f = np.array([0.0])\n", + "forest_sampler_f.prepare_for_sampler(\n", + " forest_dataset_f,\n", + " outcome_f,\n", + " active_forest_f,\n", + " outcome_model_type,\n", + " forest_init_val_f,\n", + ")\n", + "forest_init_val_h = np.array([0.0])\n", + "forest_sampler_h.prepare_for_sampler(\n", + " forest_dataset_h,\n", + " outcome_h,\n", + " active_forest_h,\n", + " outcome_model_type,\n", + " forest_init_val_h,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we run the main sampling loop, which consists of three key steps: sample the BART forests, given the latent probit utilities, sampling the latent binary outcome pairs (this is the step that is necessary for enforcing monotonicity), given the forest predictions and the latent utilities, and finally sample the latent utilities." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# PART IV: run the Markov chain \n", + "\n", + "# Initialize the Markov chain with num_warmstart grow-from-root iterations\n", + "gfr_flag = True\n", + "for i in range(num_samples):\n", + " # Switch over to random walk Metropolis-Hastings tree updates after num_warmstart\n", + " if i >= num_warmstart:\n", + " gfr_flag = False\n", + " \n", + " # Step 1: Sample the BART forests\n", + "\n", + " # Sample forest for the function f based on (y_f, R1)\n", + " forest_sampler_f.sample_one_iteration(\n", + " forest_samples_f, active_forest_f, forest_dataset_f, outcome_f, cpp_rng, \n", + " global_model_config, forest_model_config_f, keep_forest=True, gfr = gfr_flag\n", + " )\n", + "\n", + " # Sample forest for the function h based on outcome R0\n", + " forest_sampler_h.sample_one_iteration(\n", + " forest_samples_h, active_forest_h, forest_dataset_h, outcome_h, cpp_rng, \n", + " global_model_config, forest_model_config_h, keep_forest=True, gfr = gfr_flag\n", + " )\n", + "\n", + " # Get the current means\n", + " eta_f = np.squeeze(forest_samples_f.predict_raw_single_forest(forest_dataset_f, i))\n", + " eta_h = np.squeeze(forest_samples_h.predict_raw_single_forest(forest_dataset_h, i))\n", + "\n", + " # Step 2: sample the latent binary pair (R0, R1) given eta_h, eta_f, and y_g\n", + "\n", + " # Three cases: (0,0), (0,1), (1,0)\n", + " w1 = (1 - norm.cdf(eta_h[v0==0]))*(1 - norm.cdf(eta_f[n1 + np.where(v0==0)]))\n", + " w2 = (1 - norm.cdf(eta_h[v0==0]))*norm.cdf(eta_f[n1 + np.where(v0==0)])\n", + " w3 = norm.cdf(eta_h[v0==0])*(1 - norm.cdf(eta_f[n1 + np.where(v0==0)]))\n", + "\n", + " s = w1 + w2 + w3\n", + " w1 = w1/s\n", + " w2 = w2/s\n", + " w3 = w3/s\n", + "\n", + " u = rng.uniform(low=0,high=1,size=np.sum(v0==0))\n", + " temp = 1*(np.squeeze(u < w1)) + 2*(np.squeeze((u > w1) & (u < (w1 + w2)))) + 3*(np.squeeze(u > (w1 + w2)))\n", + "\n", + " R1[v0==0] = 1*(temp==2)\n", + " R0[v0==0] = 1*(temp==3)\n", + "\n", + " # Redefine y with the updated R1 component\n", + " vaug = np.append(v1, R1)\n", + "\n", + " # Step 3: sample the latent normals, given (R0, R1) and y_f\n", + "\n", + " # First z0\n", + " mu1 = eta_h[R0==1]\n", + " U1 = rng.uniform(\n", + " low=norm.cdf(0 - mu1), \n", + " high=1,\n", + " size=np.sum(R0).astype(int)\n", + " )\n", + " z_h[R0==1] = mu1 + norm.ppf(U1)\n", + "\n", + " mu0 = eta_h[R0==0]\n", + " U0 = rng.uniform(\n", + " low=0, \n", + " high=norm.cdf(0 - mu0),\n", + " size=(n0 - np.sum(R0)).astype(int)\n", + " )\n", + " z_h[R0==0] = mu0 + norm.ppf(U0)\n", + "\n", + " # Then z1\n", + " mu1 = eta_f[vaug==1]\n", + " U1 = rng.uniform(\n", + " low=norm.cdf(0 - mu1), \n", + " high=1,\n", + " size=np.sum(vaug).astype(int)\n", + " )\n", + " z_f[vaug==1] = mu1 + norm.ppf(U1)\n", + "\n", + " mu0 = eta_f[vaug==0]\n", + " U0 = rng.uniform(\n", + " low=0, \n", + " high=norm.cdf(0 - mu0),\n", + " size=(n - np.sum(vaug)).astype(int)\n", + " )\n", + " z_f[vaug==0] = mu0 + norm.ppf(U0)\n", + "\n", + " # Propagate the updated outcomes through the BART models\n", + " new_outcome_h = np.squeeze(z_h) - eta_h\n", + " outcome_h.update_data(new_outcome_h)\n", + "\n", + " new_outcome_f = np.squeeze(z_f) - eta_f\n", + " outcome_f.update_data(new_outcome_f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Extracting the estimates and plotting the results.\n", + "\n", + "Now for the most interesting part, which is taking the stochtree BART model fits and producing the causal estimates of interest. \n", + "\n", + "First we set up our grid for plotting the functions in $X$. This is possible in this example because the moderator, age, is one dimensional; in may applied problems this will not be the case and visualization will be substantially trickier. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Extract the credible intervals for the conditional treatment effects as a function of x.\n", + "# We use a grid of values for plotting, with grid points that are typically fewer than the number of observations.\n", + "\n", + "ngrid = 200\n", + "xgrid = np.linspace(start=0.1, stop=2.9, num=ngrid)\n", + "X_11 = np.column_stack((xgrid, np.ones(ngrid), np.ones(ngrid)))\n", + "X_00 = np.column_stack((xgrid, np.zeros(ngrid), np.zeros(ngrid)))\n", + "X_01 = np.column_stack((xgrid, np.zeros(ngrid), np.ones(ngrid)))\n", + "X_10 = np.column_stack((xgrid, np.ones(ngrid), np.zeros(ngrid)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we compute the truth function evaluations on this plotting grid, using the functions defined above when we generated our data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Compute the true conditional outcome probabilities for plotting\n", + "pi_strat = pi_s(xgrid, alpha_a, beta_a, alpha_n, beta_n, alpha_c, beta_c)\n", + "w_a = pi_strat[:,0]\n", + "w_n = pi_strat[:,1]\n", + "w_c = pi_strat[:,2]\n", + "\n", + "w = (w_c/(w_a + w_c))\n", + "p11_true = w*gamfun(xgrid,1,1,\"c\") + (1-w)*gamfun(xgrid,1,1,\"a\")\n", + "\n", + "w = (w_c/(w_n + w_c))\n", + "p00_true = w*gamfun(xgrid,0,0,\"c\") + (1-w)*gamfun(xgrid,0,0,\"n\")\n", + "\n", + "# Compute the true ITT_c for plotting and comparison\n", + "itt_c_true = gamfun(xgrid,1,1,\"c\") - gamfun(xgrid,0,0,\"c\")\n", + "\n", + "# Compute the true LATE for plotting and comparison\n", + "LATE_true0 = gamfun(xgrid,1,0,\"c\") - gamfun(xgrid,0,0,\"c\")\n", + "LATE_true1 = gamfun(xgrid,1,1,\"c\") - gamfun(xgrid,0,1,\"c\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we populate the data structures for stochtree to operate on, call the predict functions to extract the predictions, convert them to the probability scale using the built in pnorm function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Datasets for counterfactual predictions\n", + "forest_dataset_grid = Dataset()\n", + "forest_dataset_grid.add_covariates(np.expand_dims(xgrid, 1))\n", + "forest_dataset_11 = Dataset()\n", + "forest_dataset_11.add_covariates(X_11)\n", + "forest_dataset_00 = Dataset()\n", + "forest_dataset_00.add_covariates(X_00)\n", + "forest_dataset_10 = Dataset()\n", + "forest_dataset_10.add_covariates(X_10)\n", + "forest_dataset_01 = Dataset()\n", + "forest_dataset_01.add_covariates(X_01)\n", + "\n", + "# Forest predictions\n", + "preds_00 = forest_samples.predict(forest_dataset_00)\n", + "preds_11 = forest_samples.predict(forest_dataset_11)\n", + "preds_01 = forest_samples.predict(forest_dataset_01)\n", + "preds_10 = forest_samples.predict(forest_dataset_10)\n", + "\n", + "# Probability transformations\n", + "phat_00 = norm.cdf(preds_00)\n", + "phat_11 = norm.cdf(preds_11)\n", + "phat_01 = norm.cdf(preds_01)\n", + "phat_10 = norm.cdf(preds_10)\n", + "\n", + "preds_ac = forest_samples_f.predict(forest_dataset_grid)\n", + "phat_ac = norm.cdf(preds_ac)\n", + "\n", + "preds_adj = forest_samples_h.predict(forest_dataset_grid)\n", + "phat_a = norm.cdf(preds_ac) * norm.cdf(preds_adj)\n", + "phat_c = phat_ac - phat_a\n", + "phat_n = 1 - phat_ac" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we may plot posterior means of various quantities (as a function of $X$) to visualize how well the models are fitting." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, (ax1, ax2) = plt.subplots(1, 2)\n", + "ax1.scatter(p11_true, np.mean(phat_11, axis=1), color=\"black\")\n", + "ax1.axline((0, 0), slope=1, color=\"red\", linestyle=(0, (3, 3)))\n", + "ax2.scatter(p00_true, np.mean(phat_00, axis=1), color=\"black\")\n", + "ax2.axline((0, 0), slope=1, color=\"red\", linestyle=(0, (3, 3)))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex=\"none\", sharey=\"none\")\n", + "ax1.scatter(np.mean(phat_ac, axis=1), w_c + w_a, color=\"black\")\n", + "ax1.axline((0, 0), slope=1, color=\"red\", linestyle=(0, (3, 3)))\n", + "ax1.set_xlim(0.5,1.1)\n", + "ax1.set_ylim(0.5,1.1)\n", + "ax2.scatter(np.mean(phat_a, axis=1), w_a, color=\"black\")\n", + "ax2.axline((0, 0), slope=1, color=\"red\", linestyle=(0, (3, 3)))\n", + "ax2.set_xlim(0.1,0.4)\n", + "ax2.set_ylim(0.1,0.3)\n", + "ax3.scatter(np.mean(phat_c, axis=1), w_c, color=\"black\")\n", + "ax3.axline((0, 0), slope=1, color=\"red\", linestyle=(0, (3, 3)))\n", + "ax3.set_xlim(0.4,0.9)\n", + "ax3.set_ylim(0.4,0.8)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These plots are not as pretty as we might hope, but mostly this is a function of how difficult it is to learn conditional probabilities from binary outcomes. That we capture the trend broadly turns out to be adequate for estimating treatment effects. Fit does improve with simpler DGPs and larger training sets, as can be confirmed by experimentation with this script. \n", + "\n", + "Lastly, we can construct the estimate of the $ITT_c$ and compare it to the true value as well as the $Z=0$ and $Z=1$ complier average treatment effects (also called \"local average treatment effects\" or LATE). The key step in this process is to center our posterior on the identified interval (at each iteration of the sampler) at the value implied by a valid exclusion restriction. For some draws this will not be possible, as that value will be outside the identification region." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate draws from the posterior of the treatment effect\n", + "# centered at the point-identified value under the exclusion restriction\n", + "itt_c = np.empty((ngrid, phat_c.shape[1]))\n", + "late = np.empty((ngrid, phat_c.shape[1]))\n", + "ss = 6\n", + "for j in range(phat_c.shape[1]):\n", + " # Value of gamma11 implied by an exclusion restriction\n", + " gamest11 = ((phat_a[:,j] + phat_c[:,j])/phat_c[:,j])*phat_11[:,j] - phat_10[:,j]*phat_a[:,j]/phat_c[:,j]\n", + "\n", + " # Identified region for gamma11\n", + " lower11 = np.maximum(0., ((phat_a[:,j] + phat_c[:,j])/phat_c[:,j])*phat_11[:,j] - phat_a[:,j]/phat_c[:,j])\n", + " upper11 = np.minimum(1., ((phat_a[:,j] + phat_c[:,j])/phat_c[:,j])*phat_11[:,j])\n", + "\n", + " # Center a beta distribution at gamma11, but restricted to (lower11, upper11)\n", + " # do this by shifting and scaling the mean, drawing from a beta on (0,1), then shifting and scaling to the \n", + " # correct restricted interval\n", + " m11 = (gamest11 - lower11)/(upper11 - lower11)\n", + "\n", + " # Parameters of the beta\n", + " a1 = ss*m11\n", + " b1 = ss*(1-m11)\n", + "\n", + " # When the corresponding mean is out-of-range, sample from a beta with mass piled near the violeted boundary\n", + " a1[m11<0] = 1\n", + " b1[m11<0] = 5\n", + " \n", + " a1[m11>1] = 5\n", + " b1[m11>1] = 1\n", + "\n", + " # Value of gamma00 implied by an exclusion restriction\n", + " gamest00 = ((phat_n[:,j] + phat_c[:,j])/phat_c[:,j])*phat_00[:,j] - phat_01[:,j]*phat_n[:,j]/phat_c[:,j]\n", + "\n", + " # Identified region for gamma00\n", + " lower00 = np.maximum(0., ((phat_n[:,j] + phat_c[:,j])/phat_c[:,j])*phat_00[:,j] - phat_n[:,j]/phat_c[:,j])\n", + " upper00 = np.minimum(1., ((phat_n[:,j] + phat_c[:,j])/phat_c[:,j])*phat_00[:,j])\n", + "\n", + " # Center a beta distribution at gamma00, but restricted to (lower00, upper00)\n", + " # do this by shifting and scaling the mean, drawing from a beta on (0,1), then shifting and scaling to the \n", + " # correct restricted interval\n", + " m00 = (gamest00 - lower00)/(upper00 - lower00)\n", + "\n", + " a0 = ss*m00\n", + " b0 = ss*(1-m00)\n", + " a0[m00<0] = 1\n", + " b0[m00<0] = 5 \n", + " a0[m00>1] = 5\n", + " b0[m00>1] = 1\n", + "\n", + " # ITT and LATE \n", + " itt_c[:,j] = lower11 + (upper11 - lower11)*rng.beta(a=a1,b=b1,size=ngrid) - (lower00 + (upper00 - lower00)*rng.beta(a=a0,b=b0,size=ngrid))\n", + " late[:,j] = gamest11 - gamest00\n", + "\n", + "upperq = np.quantile(itt_c, q=0.975, axis=1)\n", + "lowerq = np.quantile(itt_c, q=0.025, axis=1)\n", + "upperq_er = np.quantile(late, q=0.975, axis=1)\n", + "lowerq_er = np.quantile(late, q=0.025, axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now we can plot all of this, shading posterior quantiles with [pyplot's `fill` function](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.fill.html)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.plot(xgrid, itt_c_true, color = \"black\")\n", + "plt.ylim(-0.75, 0.05)\n", + "plt.fill(np.append(xgrid, xgrid[::-1]), np.append(lowerq, upperq[::-1]), color = (0.5,0.5,0,0.25))\n", + "plt.fill(np.append(xgrid, xgrid[::-1]), np.append(lowerq_er, upperq_er[::-1]), color = (0,0,0.5,0.25))\n", + "\n", + "itt_c_est = np.mean(itt_c, axis=1)\n", + "late_est = np.mean(late, axis=1)\n", + "\n", + "plt.plot(xgrid, late_est, color = \"darkgrey\")\n", + "plt.plot(xgrid, itt_c_est, color = \"gold\")\n", + "plt.plot(xgrid, LATE_true0, color = \"black\", linestyle = (0, (2, 2)))\n", + "plt.plot(xgrid, LATE_true1, color = \"black\", linestyle = (0, (4, 4)))\n", + "plt.plot(xgrid, itt_c_true, color = \"black\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With a valid exclusion restriction the three black curves would all be the same. With no exclusion restriction, as we have here, the direct effect of $Z$ on $Y$ (the vaccine reminder on flu status) makes it so these three treatment effects are different. Specifically, the $ITT_c$ compares getting the vaccine *and* getting the reminder to not getting the vaccine *and* not getting the reminder. When both things have risk reducing impacts, we see a larger risk reduction over all values of $X$. Meanwhile, the two LATE effects compare the isolated impact of the vaccine among people that got the reminder and those that didn't, respectively. Here, not getting the reminder makes the vaccine more effective because the risk reduction is as a fraction of baseline risk, and the reminder reduces baseline risk in our DGP. \n", + "\n", + "We see also that the posterior mean of the $ITT_c$ estimate (gold) is very similar to the posterior mean under the assumption of an exclusion restriction (gray). This is by design...they will only deviate due to Monte Carlo variation or due to the rare situations where the exclusion restriction is incompatible with the identification interval. \n", + "\n", + "By changing the sample size and various aspects of the DGP this script allows us to build some intuituion for how aspects of the DGP affect posterior inferences, particularly how violates of assumptions affect accuracy and posterior uncertainty." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# References\n", + "\n", + "Hahn, P Richard, Jared S Murray, and Ioanna Manolopoulou. 2016. “A Bayesian Partial Identification Approach to Inferring the Prevalence of Accounting Misconduct.” Journal of the American Statistical Association 111 (513): 14–26.\n", + "\n", + "Hirano, Keisuke, Guido W. Imbens, Donald B. Rubin, and Xiao-Hua Zhou. 2000. “Assessing the Effect of an Influenza Vaccine in an Encouragement Design.” Biostatistics 1 (1): 69–88. https://doi.org/10.1093/biostatistics/1.1.69.\n", + "\n", + "McDonald, Clement J, Siu L Hui, and William M Tierney. 1992. “Effects of Computer Reminders for Influenza Vaccination on Morbidity During Influenza Epidemics.” MD Computing: Computers in Medical Practice 9 (5): 304–12.\n", + "\n", + "Richardson, Thomas S., Robin J. Evans, and James M. Robins. 2011. “Transparent Parametrizations of Models for Potential Outcomes.” In Bayesian Statistics 9. Oxford University Press. https://doi.org/10.1093/acprof:oso/9780199694587.003.0019." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/vignettes/R/IV/IV_CDAG.png b/vignettes/R/IV/IV_CDAG.png new file mode 100644 index 0000000000000000000000000000000000000000..7900ff501a89a14d1895ce6bc6a217ea24d6118d GIT binary patch literal 135771 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%0Dndh`wWt$5 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 + .table {width: 25%;} + + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +# Introduction + +Here we consider a causal inference problem with a binary treatment and a binary outcome where there +is unobserved confounding, but an exogenous instrument is available (also binary). This problem will require a number of extensions to the basic BART model, all of which can be implemented straightforwardly as Gibbs samplers using `stochtree`. We'll go through all of the model fitting steps in quite a lot of detail here. + +# Background + +To be concrete, suppose we wish to measure the effect of receiving a flu vaccine on the probability of getting the flu. Individuals who opt to get a flu shot differ in many ways from those that don't, and these lifestyle differences presumably also affect their respective chances of getting the flu. Consequently, comparing the percentage of individuals who get the flu in the vaccinated and unvaccinated groups does not give a clear picture of the vaccine efficacy. + +However, a so-called encouragement design can be implemented, where some individuals are selected at random to be given some extra incentive to get a flu shot (free clinics at the workplace or a personalized reminder, for example). Studying the impact of this randomized encouragement allows us to tease apart the impact of the vaccine from the confounding factors, at least to some extent. This exact problem has been considered several times in the literature, starting with @mcdonald1992effects with follow-on analysis by @hirano2000assessing, @richardson2011transparent, and @imbens2015causal. + +Our analysis here follows the Bayesian nonparametric approach described in the supplement to @hahn2016bayesian. + +## Notation + +Let $V$ denote the treatment variable (as in "vaccine"). Let $Y$ denote the response variable (getting the flu), $Z$ denote the instrument (encouragement or reminder to get a flu shot), and $X$ denote an additional observable covariate (for instance, patient age). + +Further, let $S$ denote the so-called *principal strata*, which is an exhaustive characterization of how individuals' might be affected by the encouragement regarding the flu shot. Some people will get a flu shot no matter what: these are the *always takers* (a). Some people will not get the flu shot no matter what: these are the *never takers* (n). For both always-takers and never-takers, the randomization of the encouragement is irrelevant and our data set contains no always takers who skipped the vaccine and no never takers who got the vaccine and so the treatment effect of the vaccine in these groups is fundamentally non-identifiable. + +By contrast, we also have *compliers* (c): folks who would not have gotten the shot but for the fact that they were encouraged to do so. These are the people about whom our randomized encouragement provides some information, because they are precisely the ones that have been randomized to treatment. + +Lastly, we could have *defiers* (d): contrarians who who were planning on getting the shot, but -- upon being reminded -- decided not to! For our analysis we will do the usual thing of assuming that there are no defiers. And because we are going to simulate our data, we can make sure that this assumption is true. + +## The causal diagram + +The causal diagram for this model can be expressed as follows. Here we are considering one confounder and moderator variable ($X$), which is the patient's age. In our data generating process (which we know because this is a simulation demonstration) higher age will make it more likely that a person is an always taker or complier and less likely that they are a nevertaker, which in turn has an effect on flu risk. We stipulate here that always takers are at lower risk and never takers at higher risk. Simultaneously, age has an increasing and then decreasing direct effect on flu risk; very young and very old are at higher risk, while young and middle age adults are at lower risk. In this DGP the flu efficacy has a multiplicative effect, reducing flu risk as a fixed proportion of baseline risk -- accordingly, the treatment effect (as a difference) is nonlinear in Age (for each principal stratum). + +```{r pressure, echo=FALSE, fig.cap="The causal directed acyclic graph (CDAG) for the instrumental variables flu example.", fig.align="center", out.width = '50%'} +knitr::include_graphics("IV_CDAG.png") +``` + +The biggest question about this graph concerns the dashed red arrow from the putative instrument $Z$ to the outcome (flu). We say "putative" because if that dashed red arrow is there, then technically $Z$ is not a valid instrument. The assumption/assertion that there is no dashed red arrow is called the "exclusion restriction". In this vignette, we will explore what sorts of inferences are possible if we remain agnostic about the presence or absence of that dashed red arrow. + +## Potential outcomes + +There are two relevant potential outcomes in an instrumental variables analysis, corresponding to the causal effect of the instrument on the treatment and the causal effect of the treatment on the outcome. In this example, that is the effect of the reminder/encouragement on vaccine status and the effect of the vaccine itself on the flu. The notation is $V(Z)$ and $Y(V(Z),Z)$ respectively, so that we have six distinct random variables: $V(0)$, $V(1)$, $Y(0,0)$, $Y(1,0)$, $Y(0,1)$ and $Y(1,1)$. The problem -- sometimes called the *fundamental problem of causal inference* -- is that some of these random variables can never be seen simultaneously, they are observationally mutually exclusive. For this reason, it may be helpful to think about causal inference as a missing data problem, as depicted in the following table. + +```{r missing_data, echo=FALSE} +d <- data.frame(i = c(1:4, "$\\vdots$"), z = c(1,0,0,1, "$\\vdots$"),v0=c("?",1,0,"?", "$\\vdots$"),v1=c(1,"?","?",0, "$\\vdots$"), y00 = c("?","?",1,"?", "$\\vdots$"), y10 = c("?",1,"?","?", "$\\vdots$"), y01 = c("?","?","?",0, "$\\vdots$"), y11 = c(0,"?","?","?", "$\\vdots$")) +library(kableExtra) +colnames(d) <- c("$i$","$Z_i$", "$V_i(0)$","$V_i(1)$","$Y_i(0,0)$","$Y_i(1,0)$","$Y_i(0,1)$","$Y_i(1,1)$") +knitr::kable(d, escape = FALSE, align = 'c') %>% kable_styling("striped", position = "center") +``` + +Likewise, with this notation we can formally define the principal strata: + +```{r principle_strata, echo=FALSE} +d <- data.frame(v0=c(0,1,0,1),v1=c(0,1,1,0), S = c("Never Taker (n)", "Always Taker (a)", "Complier (c)", "Defier (d)")) +colnames(d) <- c("$V_i(0)$","$V_i(1)$","$S_i$") +knitr::kable(d, escape = FALSE, align='c') %>% kable_styling("striped", position = "center") +``` + +## Estimands and Identification + +Let $\pi_s(x)$ denote the conditional (on $x$) probability that an individual belongs to principal stratum $s$: +\begin{equation} +\pi_s(x)=\operatorname{Pr}(S=s \mid X=x), +\end{equation} +and let $\gamma_s^{v z}(x)$ denote the potential outcome probability for given values $v$ and $z$: +\begin{equation} +\gamma_s^{v z}(x)=\operatorname{Pr}(Y(v, z)=1 \mid S=s, X=x). +\end{equation} + +Various estimands of interest may be expressed in terms of the functions $\gamma_c^{vz}(x)$. In particular, the complier conditional average treatment effect $$\gamma_c^{1,z}(x) - \gamma_c^{0,z}(x)$$ is the ultimate goal (for either $z=0$ or $z=1$). Under an exclusion restriction, we would have $\gamma_s^{vz}(x) = \gamma_s^{v}(x)$ and the reminder status $z$ itself would not matter. In that case, we can estimate $$\gamma_c^{1,z}(x) - \gamma_c^{0,z}$$ and $$\gamma_c^{1,1}(x) - \gamma_c^{0,0}(x).$$ This latter quantity is called the complier intent-to-treat effect, or $ITT_c$, and it can be partially identify even if the exclusion restriction is violated, as follows. + +The left-hand side of the following system of equations are all estimable quantities that can be learned from observable data, while the right hand side expressions involve the unknown functions of interest, $\gamma_s^{vz}(x)$: + +\begin{equation} +\begin{aligned} +p_{1 \mid 00}(x) = \operatorname{Pr}(Y=1 \mid V=0, Z=0, X=x)=\frac{\pi_c(x)}{\pi_c(x)+\pi_n(x)} \gamma_c^{00}(x)+\frac{\pi_n(x)}{\pi_c(x)+\pi_n(x)} \gamma_n^{00}(x) \\ +p_{1 \mid 11}(x) =\operatorname{Pr}(Y=1 \mid V=1, Z=1, X=x)=\frac{\pi_c(x)}{\pi_c(x)+\pi_a(x)} \gamma_c^{11}(x)+\frac{\pi_a(x)}{\pi_c(x)+\pi_a(x)} \gamma_a^{11}(x) \\ +p_{1 \mid 01}(x) =\operatorname{Pr}(Y=1 \mid V=0, Z=1, X=x)=\frac{\pi_d(x)}{\pi_d(x)+\pi_n(x)} \gamma_d^{01}(x)+\frac{\pi_n(x)}{\pi_d(x)+\pi_n(x)} \gamma_n^{01}(x) \\ +p_{1 \mid 10}(x) =\operatorname{Pr}(Y=1 \mid V=1, Z=0, X=x)=\frac{\pi_d(x)}{\pi_d(x)+\pi_a(x)} \gamma_d^{10}(x)+\frac{\pi_a(x)}{\pi_d(x)+\pi_a(x)} \gamma_a^{10}(x) +\end{aligned} +\end{equation} + +Furthermore, we have +\begin{equation} +\begin{aligned} +\operatorname{Pr}(V=1 \mid Z=0, X=x)&=\pi_a(x)+\pi_d(x)\\ +\operatorname{Pr}(V=1 \mid Z=1, X=x)&=\pi_a(x)+\pi_c(x) +\end{aligned} +\end{equation} + +Under the monotonicy assumption, $\pi_d(x) = 0$ and these expressions simplify somewhat. +\begin{equation} +\begin{aligned} +p_{1 \mid 00}(x)&=\frac{\pi_c(x)}{\pi_c(x)+\pi_n(x)} \gamma_c^{00}(x)+\frac{\pi_n(x)}{\pi_c(x)+\pi_n(x)} \gamma_n^{00}(x) \\ +p_{1 \mid 11}(x)&=\frac{\pi_c(x)}{\pi_c(x)+\pi_a(x)} \gamma_c^{11}(x)+\frac{\pi_a(x)}{\pi_c(x)+\pi_a(x)} \gamma_a^{11}(x) \\ +p_{1 \mid 01}(x)&=\gamma_n^{01}(x) \\ +p_{1 \mid 10}(x)&=\gamma_a^{10}(x) +\end{aligned} +\end{equation} +and +\begin{equation} +\begin{aligned} +\operatorname{Pr}(V=1 \mid Z=0, X=x)&=\pi_a(x)\\ +\operatorname{Pr}(V=1 \mid Z=1, X=x)&=\pi_a(x)+\pi_c(x) +\end{aligned} +\end{equation} + +The exclusion restriction would dictate that $\gamma_s^{01}(x) = \gamma_s^{00}(x)$ and $\gamma_s^{11}(x) = \gamma_s^{10}(x)$ for all $s$. This has two implications. One, $\gamma_n^{01}(x) = \gamma_n^{00}(x)$ and $\gamma_a^{10}(x) = \gamma_a^{11}(x)$,and because the left-hand terms are identified, this permits $\gamma_c^{11}(x)$ and $\gamma_c^{00}(x)$ to be solved for by substitution. Two, with these two quantities solved for, we also have the two other quantities (the different settings of $z$), since $\gamma_c^{11}(x) = \gamma_c^{10}(x)$ and $\gamma_c^{00}(x) = \gamma_c^{01}(x)$. Consequently, both of our estimands from above can be estimated: + +$$\gamma_c^{11}(x) - \gamma_c^{01}(x)$$ +and + +$$\gamma_c^{10}(x) - \gamma_c^{00}(x)$$ +because they are both (supposing the exclusion restriction holds) the same as + +$$\gamma_c^{11}(x) - \gamma_c^{00}(x).$$ +If the exclusion restriction does *not* hold, then the three above treatment effects are all (potentially) distinct and not much can be said about the former two. The latter one, the $ITT_c$, however, can be partially identified, by recognizing that the first two equations (in our four equation system) provide non-trivial bounds based on the fact that while $\gamma_c^{11}(x)$ and $\gamma_c^{00}(x)$ are no longer identified, as probabilities both must lie between 0 and 1. Thus, + +\begin{equation} +\begin{aligned} + \max\left( + 0, \frac{\pi_c(x)+\pi_n(x)}{\pi_c(x)}p_{1\mid 00}(x) - \frac{\pi_n(x)}{\pi_c(x)} + \right) +&\leq\gamma^{00}_c(x)\leq + \min\left( + 1, \frac{\pi_c(x)+\pi_n(x)}{\pi_c(x)}p_{1\mid 00}(x) + \right)\\\\ +% +\max\left( + 0, \frac{\pi_a(x)+\pi_c(x)}{\pi_c(x)}p_{1\mid 11}(x) - \frac{\pi_a(x)}{\pi_c(x)} +\right) +&\leq\gamma^{11}_c(x)\leq +\min\left( + 1, \frac{\pi_a(x)+\pi_c(x)}{\pi_c(x)}p_{1\mid 11}(x) +\right) +\end{aligned} +\end{equation} + +The point of all this is that the data (plus a no-defiers assumption) lets us estimate all the necessary inputs to these upper and lower bounds on $\gamma^{11}_c(x)$ and $\gamma^{00}_c(x)$ which in turn define our estimand. What remains is to estimate those inputs, as functions of $x$, and to do so while enforcing the monotonicty restriction $$\operatorname{Pr}(V=1 \mid Z=0, X=x)=\pi_a(x) \leq +\operatorname{Pr}(V=1 \mid Z=1, X=x)=\pi_a(x)+\pi_c(x).$$ + +We can do all of this with calls to stochtree from R (or Python). But first, let's generate some test data. + +### Simulate the data + +Start with some initial setup / housekeeping + +```{r preliminaries} +library(stochtree) + +# size of the training sample +n <- 20000 + +# To set the seed for reproducibility/illustration purposes, replace "NULL" with a positive integer +random_seed <- NULL +``` + +First, we generate the instrument exogenously + +```{r instrument} +z <- rbinom(n, 1, 0.5) +``` + +Next, we generate the covariate. (For this example, let's think of it as patient age, although we are generating it from a uniform distribution between 0 and 3, so you have to imagine that it has been pre-standardized to this scale. It keeps the DGPs cleaner for illustration purposes.) + +```{r covariate} +p_X <- 1 +X <- matrix(runif(n*p_X, 0, 3), ncol = p_X) +x <- X[,1] # for ease of reference later +``` + +Next, we generate the principal strata $S$ based on the observed value of $X$. We generate it according to a logistic regression with two coefficients per strata, an intercept and a slope. Here, these coefficients are set so that the probability of being a never taker decreases with age. + +```{r principal strata} +alpha_a <- 0 +beta_a <- 1 + +alpha_n <- 1 +beta_n <- -1 + +alpha_c <- 1 +beta_c <- 1 + +# define function (a logistic model) to generate Pr(S = s | X = x) +pi_s <- function(xval){ + + w_a <- exp(alpha_a + beta_a*xval) + w_n <- exp(alpha_n + beta_n*xval) + w_c <- exp(alpha_c + beta_c*xval) + + w <- cbind(w_a, w_n, w_c) + colnames(w) <- c("w_a","w_n","w_c") + w <- w/rowSums(w) + + return(w) + +} +s <- sapply(1:n, function(j) sample(c("a","n","c"), 1, prob = pi_s(X[j,1]))) +``` + +Next, we generate the treatment variable, here denoted $V$ (for "vaccine"), as a *deterministic* function of $S$ and $Z$; this is what gives the principal strata their meaning. + +```{r vaccine} +v <- 1*(s=="a") + 0*(s=="n") + z*(s=="c") + (1-z)*(s == "d") +``` + +Finally, the outcome structural model is specified, based on which the outcome is sampled. By varying this function in particular ways, we can alter the identification conditions. + +```{r ymodel} +gamfun <- function(xval,vval, zval,sval){ + + # if this function depends on zval, then exclusion restriction is violated + # if this function does not depend on sval, then IV analysis wasn't necessary + # if this function does not depend on x, then there are no HTEs + + baseline <- pnorm(2 -1*xval - 2.5*(xval-1.5)^2 - 0.5*zval + 1*(sval=="n") - 1*(sval=="a") ) + prob <- baseline - 0.5*vval*baseline # 0.5*vval*baseline + + return(prob) +} + +# Generate the observed outcome +y <- rbinom(n, 1, gamfun(X[,1],v,z,s)) +``` + +Lastly, we perform some organization for our supervised learning algorithms later on. + +```{r organizedata} +# Concatenate X, v and z for our supervised learning algorithms +Xall <- cbind(X,v,z) + +# update the size of "X" to be the size of Xall +p_X <- p_X + 2 + +# For the monotone probit model it is necessary to sort the observations so that the Z=1 cases are all together +# at the start of the outcome vector. +index <- sort(z,decreasing = TRUE, index.return = TRUE) + +X <- matrix(X[index$ix,],ncol= 1) +Xall <- Xall[index$ix,] +z <- z[index$ix] +v <- v[index$ix] +s <- s[index$ix] +y <- y[index$ix] +x <- x[index$ix] +``` + +Now let's see if we can recover these functions from the observed data. + + +### Fit the outcome model + +We have to fit three models here, the treatment models: $\operatorname{Pr}(V = 1 | Z = 1, X=x)$ and $\operatorname{Pr}(V = 1 | Z = 0,X = x)$, subject to the monotonicity constraint $\operatorname{Pr}(V = 1 | Z = 1, X=x) \geq \operatorname{Pr}(V = 1 | Z = 0,X = x)$, and an outcome model $\operatorname{Pr}(Y = 1 | Z = 1, V = 1, X = x)$. All of this will be done with stochtree. + +The outcome model is fit with a single (S-learner) BART model. This part of the model could be fit as a T-Learner or as a BCF model. Here we us an S-Learner for simplicity. Both models are probit models, and use the well-known @albert1993bayesian data augmentation Gibbs sampler. This section covers the more straightforward outcome model. The next section describes how the monotonicity constraint is handled with a data augmentation Gibbs sampler. + +These models could (and probably should) be wrapped as functions. Here they are implemented as scripts, with the full loops shown. The output -- at the end of the loops -- are stochtree forest objects from which we can extract posterior samples and generate predictions. In particular, the $ITT_c$ will be constructed using posterior counterfactual predictions derived from these forest objects. + +We begin by setting a bunch of hyperparmeters and instantiating the forest objects to be operated upon in the main sampling loop. We also initialize the latent variables. + +```{r outcomefit1} +# Fit the BART model for Pr(Y = 1 | Z = 1, V = 1, X = x) + +# Set number of iterations +num_warmstart <- 10 +num_mcmc <- 1000 +num_samples <- num_warmstart + num_mcmc + +# Set a bunch of hyperparameters. These are ballpark default values. +alpha <- 0.95 +beta <- 2 +min_samples_leaf <- 1 +max_depth <- 20 +num_trees <- 50 +cutpoint_grid_size = 100 +global_variance_init = 1. +tau_init = 0.5 +leaf_prior_scale = matrix(c(tau_init), ncol = 1) +a_leaf <- 2. +b_leaf <- 0.5 +leaf_regression <- F +feature_types <- as.integer(c(rep(0, p_X-2),1,1)) # 0 = numeric +var_weights <- rep(1,p_X)/p_X +outcome_model_type <- 0 + +# C++ dataset +forest_dataset <- createForestDataset(Xall) + +# Random number generator (std::mt19937) +if (is.null(random_seed)) { + rng <- createCppRNG(-1) +} else { + rng <- createCppRNG(random_seed) +} + +# Sampling data structures +forest_model_config <- createForestModelConfig( + feature_types = feature_types, num_trees = num_trees, num_features = p_X, + num_observations = n, variable_weights = var_weights, leaf_dimension = 1, + alpha = alpha, beta = beta, min_samples_leaf = min_samples_leaf, + max_depth = max_depth, leaf_model_type = outcome_model_type, + leaf_model_scale = leaf_prior_scale, cutpoint_grid_size = cutpoint_grid_size +) +global_model_config <- createGlobalModelConfig(global_error_variance = 1) +forest_model <- createForestModel(forest_dataset, forest_model_config, global_model_config) + +# Container of forest samples +forest_samples <- createForestSamples(num_trees, 1, T, F) + +# "Active" forest state +active_forest <- createForest(num_trees, 1, T, F) + +# Initialize the latent outcome zed +n1 <- sum(y) +zed <- 0.25*(2*as.numeric(y) - 1) + +# C++ outcome variable +outcome <- createOutcome(zed) + +# Initialize the active forest and subtract each root tree's predictions from outcome +active_forest$prepare_for_sampler(forest_dataset, outcome, forest_model, outcome_model_type, 0.0) +active_forest$adjust_residual(forest_dataset, outcome, forest_model, FALSE, FALSE) +``` + +Now we enter the main loop, which involves only two steps: sample the forest, given the latent utilies, then sample the latent utilities given the estimated conditional means defined by the forest and its parameters. + +```{r outcomefit2} +# Initialize the Markov chain with num_warmstart grow-from-root iterations +gfr_flag <- T +for (i in 1:num_samples) { + + # The first num_warmstart iterations use the grow-from-root algorithm of He and Hahn + if (i > num_warmstart){ + gfr_flag <- F + } + + # Sample forest + forest_model$sample_one_iteration( + forest_dataset, outcome, forest_samples, active_forest, + rng, forest_model_config, global_model_config, + keep_forest = T, gfr = gfr_flag + ) + + # Get the current means + eta <- forest_samples$predict_raw_single_forest(forest_dataset, i-1) + + # Sample latent normals, truncated according to the observed outcome y + U1 <- runif(n1,pnorm(0,eta[y==1],1),1) + zed[y==1] <- qnorm(U1,eta[y==1],1) + U0 <- runif(n - n1,0, pnorm(0,eta[y==0],1)) + zed[y==0] <- qnorm(U0,eta[y==0],1) + + # Propagate the newly sampled latent outcome to the BART model + outcome$update_data(zed) + forest_model$propagate_residual_update(outcome) +} +``` + +### Fit the monotone probit model(s) + +The monotonicty constraint relies on a data augmentation as described in Papakostas et al (2023). The implementation of this sampler is inherently cumbersome, as one of the "data" vectors is constructed from some observed data and some latent data and there are two forest objects, one of which applies to all of the observations and one of which applies to only those observations with $Z = 0$. We go into more details about this sampler in a dedicated vignette. Here we include the code, but without producing the equations derived in Papakostas (2023). What is most important is simply that + +\begin{equation} +\begin{aligned} +\operatorname{Pr}(V=1 \mid Z=0, X=x)&=\pi_a(x) = \Phi_f(x)\Phi_h(x),\\ +\operatorname{Pr}(V=1 \mid Z=1, X=x)&=\pi_a(x)+\pi_c(x) = \Phi_f(x), +\end{aligned} +\end{equation} +where $\Phi_{\mu}(x)$ denotes the normal cumulative distribution function with mean $\mu(x)$ and variance 1. + +We first create a secondary data matrix for the $Z=0$ group only. We also set all of the hyperparameters and initialize the latent variables. + +```{r treatmentfit1} +# Fit the monotone probit model to the treatment such that Pr(V = 1 | Z = 1, X=x) >= Pr(V = 1 | Z = 0,X = x) + +X_h <- as.matrix(X[z==0,]) +n0 <- sum(z==0) +n1 <- sum(z==1) + +num_trees_f <- 50 +num_trees_h <- 20 +feature_types <- as.integer(rep(0, 1)) # 0 = numeric +var_weights <- rep(1,1) +cutpoint_grid_size = 100 +global_variance_init = 1. +tau_init = 1/num_trees_h +leaf_prior_scale = matrix(c(tau_init), ncol = 1) +nu <- 4 +lambda <- 0.5 +a_leaf <- 2. +b_leaf <- 0.5 +leaf_regression <- F # fit a constant leaf mean BART model + +# Instantiate the C++ dataset objects +forest_dataset_f <- createForestDataset(X) +forest_dataset_h <- createForestDataset(X_h) + +# Tell it we're fitting a normal BART model +outcome_model_type <- 0 + +# Set up model configuration objects +forest_model_config_f <- createForestModelConfig( + feature_types = feature_types, num_trees = num_trees_f, num_features = ncol(X), + num_observations = nrow(X), variable_weights = var_weights, leaf_dimension = 1, + alpha = alpha, beta = beta, min_samples_leaf = min_samples_leaf, + max_depth = max_depth, leaf_model_type = outcome_model_type, + leaf_model_scale = leaf_prior_scale, cutpoint_grid_size = cutpoint_grid_size +) +forest_model_config_h <- createForestModelConfig( + feature_types = feature_types, num_trees = num_trees_h, num_features = ncol(X_h), + num_observations = nrow(X_h), variable_weights = var_weights, leaf_dimension = 1, + alpha = alpha, beta = beta, min_samples_leaf = min_samples_leaf, + max_depth = max_depth, leaf_model_type = outcome_model_type, + leaf_model_scale = leaf_prior_scale, cutpoint_grid_size = cutpoint_grid_size +) +global_model_config <- createGlobalModelConfig(global_error_variance = 1) + +# Instantiate the sampling data structures +forest_model_f <- createForestModel(forest_dataset_f, forest_model_config_f, global_model_config) +forest_model_h <- createForestModel(forest_dataset_h, forest_model_config_h, global_model_config) + +# Instantiate containers of forest samples +forest_samples_f <- createForestSamples(num_trees_f, 1, T) +forest_samples_h <- createForestSamples(num_trees_h, 1, T) + +# Instantiate "active" forests +active_forest_f <- createForest(num_trees_f, 1, T) +active_forest_h <- createForest(num_trees_h, 1, T) + +# Set algorithm specifications +# these are set in the earlier script for the outcome model; number of draws needs to be commensurable + +#num_warmstart <- 10 +#num_mcmc <- 2000 +#num_samples <- num_warmstart + num_mcmc + +# Initialize the Markov chain + +# Initialize (R0, R1), the latent binary variables that enforce the monotonicty + +v1 <- v[z==1] +v0 <- v[z==0] + +R1 = rep(NA,n0) +R0 = rep(NA,n0) + +R1[v0==1] <- 1 +R0[v0==1] <- 1 + +R1[v0 == 0] <- 0 +R0[v0 == 0] <- sample(c(0,1),sum(v0==0),replace=TRUE) + +# The first n1 observations of vaug are actually observed +# The next n0 of them are the latent variable R1 +vaug <- c(v1, R1) + +# Initialize the Albert and Chib latent Gaussian variables +z_f <- (2*as.numeric(vaug) - 1) +z_h <- (2*as.numeric(R0)-1) +z_f <- z_f/sd(z_f) +z_h <- z_h/sd(z_h) + +# Pass these variables to the BART models as outcome variables +outcome_f <- createOutcome(z_f) +outcome_h <- createOutcome(z_h) + +# Initialize active forests to constant (0) predictions +active_forest_f$prepare_for_sampler(forest_dataset_f, outcome_f, forest_model_f, outcome_model_type, 0.0) +active_forest_h$prepare_for_sampler(forest_dataset_h, outcome_h, forest_model_h, outcome_model_type, 0.0) +active_forest_f$adjust_residual(forest_dataset_f, outcome_f, forest_model_f, FALSE, FALSE) +active_forest_h$adjust_residual(forest_dataset_h, outcome_h, forest_model_h, FALSE, FALSE) +``` + +Now we run the main sampling loop, which consists of three key steps: sample the BART forests, given the latent probit utilities, sampling the latent binary outcome pairs (this is the step that is necessary for enforcing monotonicity), given the forest predictions and the latent utilities, and finally sample the latent utilities. + +```{r treatmentfit2} +# PART IV: run the Markov chain + +# Initialize the Markov chain with num_warmstart grow-from-root iterations +gfr_flag <- T +for (i in 1:num_samples) { + + # Switch over to random walk Metropolis-Hastings tree updates after num_warmstart + if (i > num_warmstart) { + gfr_flag <- F + } + + # Step 1: Sample the BART forests + + # Sample forest for the function f based on (y_f, R1) + forest_model_f$sample_one_iteration( + forest_dataset_f, outcome_f, forest_samples_f, active_forest_f, + rng, forest_model_config_f, global_model_config, + keep_forest = T, gfr = gfr_flag + ) + + # Sample forest for the function h based on outcome R0 + forest_model_h$sample_one_iteration( + forest_dataset_h, outcome_h, forest_samples_h, active_forest_h, + rng, forest_model_config_h, global_model_config, + keep_forest = T, gfr = gfr_flag + ) + + # Extract the means for use in sampling the latent variables + eta_f <- forest_samples_f$predict_raw_single_forest(forest_dataset_f, i-1) + eta_h <- forest_samples_h$predict_raw_single_forest(forest_dataset_h, i-1) + + + # Step 2: sample the latent binary pair (R0, R1) given eta_h, eta_f, and y_g + + # Three cases: (0,0), (0,1), (1,0) + w1 <- (1 - pnorm(eta_h[v0==0]))*(1-pnorm(eta_f[n1 + which(v0==0)])) + w2 <- (1 - pnorm(eta_h[v0==0]))*pnorm(eta_f[n1 + which(v0==0)]) + w3 <- pnorm(eta_h[v0==0])*(1 - pnorm(eta_f[n1 + which(v0==0)])) + + s <- w1 + w2 + w3 + w1 <- w1/s + w2 <- w2/s + w3 <- w3/s + + u <- runif(sum(v0==0)) + temp <- 1*(u < w1) + 2*(u > w1 & u < w1 + w2) + 3*(u > w1 + w2) + + R1[v0==0] <- 1*(temp==2) + R0[v0==0] <- 1*(temp==3) + + # Redefine y with the updated R1 component + vaug <- c(v1, R1) + + # Step 3: sample the latent normals, given (R0, R1) and y_f + + # First z0 + U1 <- runif(sum(R0),pnorm(0, eta_h[R0==1],1),1) + z_h[R0==1] <- qnorm(U1, eta_h[R0==1],1) + + U0 <- runif(n0 - sum(R0),0, pnorm(0, eta_h[R0==0],1)) + z_h[R0==0] <- qnorm(U0, eta_h[R0==0],1) + + # Then z1 + U1 <- runif(sum(vaug),pnorm(0, eta_f[vaug==1],1),1) + z_f[vaug==1] <- qnorm(U1, eta_f[vaug==1],1) + + U0 <- runif(n - sum(vaug),0, pnorm(0, eta_f[vaug==0],1)) + z_f[vaug==0] <- qnorm(U0, eta_f[vaug==0],1) + + # Propagate the updated outcomes through the BART models + outcome_h$update_data(z_h) + forest_model_h$propagate_residual_update(outcome_h) + + outcome_f$update_data(z_f) + forest_model_f$propagate_residual_update(outcome_f) + + # No more steps, just repeat a bunch of times +} +``` + +### Extracting the estimates and plotting the results. + +Now for the most interesting part, which is taking the stochtree BART model fits and producing the causal estimates of interest. + +First we set up our grid for plotting the functions in $X$. This is possible in this example because the moderator, age, is one dimensional; in may applied problems this will not be the case and visualization will be substantially trickier. + +```{r plot1} +# Extract the credible intervals for the conditional treatment effects as a function of x. +# We use a grid of values for plotting, with grid points that are typically fewer than the number of observations. + +ngrid <- 200 +xgrid <- seq(0.1,2.5,length.out = ngrid) +X_11 <- cbind(xgrid,rep(1,ngrid),rep(1,ngrid)) + +X_00 <- cbind(xgrid,rep(0,ngrid),rep(0,ngrid)) +X_01 <- cbind(xgrid,rep(0,ngrid),rep(1,ngrid)) +X_10 <- cbind(xgrid,rep(1,ngrid),rep(0,ngrid)) +``` + +Next, we compute the truth function evaluations on this plotting grid, using the functions defined above when we generated our data. + +```{r plot2} +# Compute the true conditional outcome probabilities for plotting +pi_strat <- pi_s(xgrid) +w_a <- pi_strat[,1] +w_n <- pi_strat[,2] +w_c <- pi_strat[,3] + +w <- (w_c/(w_a + w_c)) + +p11_true <- w*gamfun(xgrid,1,1,"c") + (1-w)*gamfun(xgrid,1,1,"a") + +w <- (w_c/(w_n + w_c)) + +p00_true <- w*gamfun(xgrid,0,0,"c") + (1-w)*gamfun(xgrid,0,0,"n") + +# Compute the true ITT_c for plotting and comparison +itt_c_true <- gamfun(xgrid,1,1,"c") - gamfun(xgrid,0,0,"c") + +# Compute the true LATE for plotting and comparison +LATE_true0 <- gamfun(xgrid,1,0,"c") - gamfun(xgrid,0,0,"c") +LATE_true1 <- gamfun(xgrid,1,1,"c") - gamfun(xgrid,0,1,"c") +``` + +Next we populate the data structures for stochtree to operate on, call the predict functions to extract the predictions, convert them to the probability scale using the built in pnorm function. + +```{r plot3} +# Datasets for counterfactual predictions +forest_dataset_grid <- createForestDataset(cbind(xgrid)) +forest_dataset_11 <- createForestDataset(X_11) +forest_dataset_00 <- createForestDataset(X_00) +forest_dataset_10 <- createForestDataset(X_10) +forest_dataset_01 <- createForestDataset(X_01) + +# Forest predictions +preds_00 <- forest_samples$predict(forest_dataset_00) +preds_11 <- forest_samples$predict(forest_dataset_11) +preds_01 <- forest_samples$predict(forest_dataset_01) +preds_10 <- forest_samples$predict(forest_dataset_10) + +# Probability transformations +phat_00 <- pnorm(preds_00) +phat_11 <- pnorm(preds_11) +phat_01 <- pnorm(preds_01) +phat_10 <- pnorm(preds_10) + +# Cleanup +rm(preds_00) +rm(preds_11) +rm(preds_01) +rm(preds_10) + + +preds_ac <- forest_samples_f$predict(forest_dataset_grid) +phat_ac <- pnorm(preds_ac) + +preds_adj <- forest_samples_h$predict(forest_dataset_grid) +phat_a <- pnorm(preds_ac)*pnorm(preds_adj) +rm(preds_adj) +rm(preds_ac) + +phat_c <- phat_ac - phat_a + +phat_n <- 1 - phat_ac +``` + +Now we may plot posterior means of various quantities (as a function of $X$) to visualize how well the models are fitting. + +```{r plot4, fig.align='center'} +# Set up the plotting window +par(mfrow=c(1,2)) + +# Plot the fitted outcome probabilities against the truth +plot(p11_true,rowMeans(phat_11),pch=20,cex=0.5,bty='n') +abline(0,1,col='red') + +plot(p00_true,rowMeans(phat_00),pch=20,cex=0.5,bty='n') +abline(0,1,col='red') + +par(mfrow=c(1,3)) +plot(rowMeans(phat_ac),w_c +w_a,pch=20) +abline(0,1,col='red') + +plot(rowMeans(phat_a),w_a,pch=20) +abline(0,1,col='red') + +plot(rowMeans(phat_c),w_c,pch=20) +abline(0,1,col='red') +``` + +These plots are not as pretty as we might hope, but mostly this is a function of how difficult it is to learn conditional probabilities from binary outcomes. That we capture the trend broadly turns out to be adequate for estimating treatment effects. Fit does improve with simpler DGPs and larger training sets, as can be confirmed by experimentation with this script. + +Lastly, we can construct the estimate of the $ITT_c$ and compare it to the true value as well as the $Z=0$ and $Z=1$ complier average treatment effects (also called "local average treatment effects" or LATE). The key step in this process is to center our posterior on the identified interval (at each iteration of the sampler) at the value implied by a valid exclusion restriction. For some draws this will not be possible, as that value will be outside the identification region. + +```{r plot5, fig.height = 3} +# Generate draws from the posterior of the treatment effect +# centered at the point-identified value under the exclusion restriction +itt_c <- late <- matrix(NA,ngrid, ncol(phat_c)) +ss <- 6 +for (j in 1:ncol(phat_c)){ + + # Value of gamma11 implied by an exclusion restriction + gamest11 <- ((phat_a[,j] + phat_c[,j])/phat_c[,j])*phat_11[,j] - phat_10[,j]*phat_a[,j]/phat_c[,j] + + # Identified region for gamma11 + lower11 <- pmax(rep(0,ngrid), ((phat_a[,j] + phat_c[,j])/phat_c[,j])*phat_11[,j] - phat_a[,j]/phat_c[,j]) + upper11 <- pmin(rep(1,ngrid), ((phat_a[,j] + phat_c[,j])/phat_c[,j])*phat_11[,j]) + + # Center a beta distribution at gamma11, but restricted to (lower11, upper11) + # do this by shifting and scaling the mean, drawing from a beta on (0,1), then shifting and scaling to the + # correct restricted interval + m11 <- (gamest11 - lower11)/(upper11-lower11) + + # Parameters to the beta + a1 <- ss*m11 + b1 <- ss*(1-m11) + + # When the corresponding mean is out-of-range, sample from a beta with mass piled near the violeted boundary + a1[m11<0] <- 1 + b1[m11<0] <- 5 + + a1[m11>1] <- 5 + b1[m11>1] <- 1 + + # Value of gamma00 implied by an exclusion restriction + gamest00 <- ((phat_n[,j] + phat_c[,j])/phat_c[,j])*phat_00[,j] - phat_01[,j]*phat_n[,j]/phat_c[,j] + + # Identified region for gamma00 + lower00 <- pmax(rep(0,ngrid), ((phat_n[,j] + phat_c[,j])/phat_c[,j])*phat_00[,j] - phat_n[,j]/phat_c[,j]) + upper00 <- pmin(rep(1,ngrid), ((phat_n[,j] + phat_c[,j])/phat_c[,j])*phat_00[,j]) + + # Center a beta distribution at gamma00, but restricted to (lower00, upper00) + # do this by shifting and scaling the mean, drawing from a beta on (0,1), then shifting and scaling to the + # correct restricted interval + m00 <- (gamest00 - lower00)/(upper00-lower00) + + a0 <- ss*m00 + b0 <- ss*(1-m00) + + a0[m00<0] <- 1 + b0[m00<0] <- 5 + + a0[m00>1] <- 5 + b0[m00>1] <- 1 + + # ITT and LATE + itt_c[,j] <- lower11 + (upper11 - lower11)*rbeta(ngrid,a1,b1) - (lower00 + (upper00 - lower00)*rbeta(ngrid,a0,b0)) + late[,j] <- gamest11 - gamest00 +} + +upperq <- apply(itt_c,1,quantile,0.975) +lowerq <- apply(itt_c,1,quantile,0.025) +``` + +And now we can plot all of this, using the "polygon" function to shade posterior quantiles. + +```{r plot6, fig.align="center"} +par(mfrow=c(1,1)) +plot(xgrid,itt_c_true,pch=20,cex=0.5,ylim=c(-0.75,0.05),bty='n',type='n',xlab='x',ylab='Treatment effect') + +upperq_er <- apply(late,1,quantile,0.975,na.rm=TRUE) + +lowerq_er <- apply(late,1,quantile,0.025,na.rm=TRUE) + +polygon(c(xgrid,rev(xgrid)),c(lowerq,rev(upperq)),col=rgb(0.5,0.25,0,0.25),pch=20,border=FALSE) +polygon(c(xgrid,rev(xgrid)),c(lowerq_er,rev(upperq_er)),col=rgb(0,0,0.5,0.25),pch=20,border=FALSE) + +itt_c_est <- rowMeans(itt_c) +late_est <- rowMeans(late) +lines(xgrid,late_est,col="slategray",lwd=3) + +lines(xgrid,itt_c_est,col='goldenrod1',lwd=1) + +lines(xgrid,LATE_true0,col="black",lwd=2,lty=3) +lines(xgrid,LATE_true1,col="black",lwd=2,lty=2) + +lines(xgrid,itt_c_true,col="black",lwd=1) +``` + +With a valid exclusion restriction the three black curves would all be the same. With no exclusion restriction, as we have here, the direct effect of $Z$ on $Y$ (the vaccine reminder on flu status) makes it so these three treatment effects are different. Specifically, the $ITT_c$ compares getting the vaccine *and* getting the reminder to not getting the vaccine *and* not getting the reminder. When both things have risk reducing impacts, we see a larger risk reduction over all values of $X$. Meanwhile, the two LATE effects compare the isolated impact of the vaccine among people that got the reminder and those that didn't, respectively. Here, not getting the reminder makes the vaccine more effective because the risk reduction is as a fraction of baseline risk, and the reminder reduces baseline risk in our DGP. + +We see also that the posterior mean of the $ITT_c$ estimate (gold) is very similar to the posterior mean under the assumption of an exclusion restriction (gray). This is by design...they will only deviate due to Monte Carlo variation or due to the rare situations where the exclusion restriction is incompatible with the identification interval. + +By changing the sample size and various aspects of the DGP this script allows us to build some intuituion for how aspects of the DGP affect posterior inferences, particularly how violates of assumptions affect accuracy and posterior uncertainty. + +# References diff --git a/vignettes/R/IV/iv.bib b/vignettes/R/IV/iv.bib new file mode 100644 index 000000000..e3cebcd9c --- /dev/null +++ b/vignettes/R/IV/iv.bib @@ -0,0 +1,68 @@ +@article{mcdonald1992effects, + title={Effects of computer reminders for influenza vaccination on morbidity during influenza epidemics.}, + author={McDonald, Clement J and Hui, Siu L and Tierney, William M}, + journal={MD computing: computers in medical practice}, + volume={9}, + number={5}, + pages={304--312}, + year={1992} +} + +@article{hirano2000assessing, + author = {Hirano, Keisuke and Imbens, Guido W. and Rubin, Donald B. and Zhou, Xiao-Hua}, + title = {Assessing the effect of an influenza vaccine in an + encouragement design }, + journal = {Biostatistics}, + volume = {1}, + number = {1}, + pages = {69-88}, + year = {2000}, + month = {03}, + issn = {1465-4644}, + doi = {10.1093/biostatistics/1.1.69}, + url = {https://doi.org/10.1093/biostatistics/1.1.69}, + eprint = {https://academic.oup.com/biostatistics/article-pdf/1/1/69/17744019/100069.pdf}, +} + +@incollection{richardson2011transparent, + author = {Richardson, Thomas S. and Evans, Robin J. and Robins, James M.}, + isbn = {9780199694587}, + title = {Transparent Parametrizations of Models for Potential Outcomes}, + booktitle = {Bayesian Statistics 9}, + publisher = {Oxford University Press}, + year = {2011}, + month = {10}, + doi = {10.1093/acprof:oso/9780199694587.003.0019}, + url = {https://doi.org/10.1093/acprof:oso/9780199694587.003.0019}, + eprint = {https://academic.oup.com/book/0/chapter/141661815/chapter-ag-pdf/45787772/book\_1879\_section\_141661815.ag.pdf}, +} + +@book{imbens2015causal, + place={Cambridge}, + title={Causal Inference for Statistics, Social, and Biomedical Sciences: An Introduction}, + publisher={Cambridge University Press}, + author={Imbens, Guido W. and Rubin, Donald B.}, + year={2015} +} + +@article{hahn2016bayesian, + title={A Bayesian partial identification approach to inferring the prevalence of accounting misconduct}, + author={Hahn, P Richard and Murray, Jared S and Manolopoulou, Ioanna}, + journal={Journal of the American Statistical Association}, + volume={111}, + number={513}, + pages={14--26}, + year={2016}, + publisher={Taylor \& Francis} +} + +@article{albert1993bayesian, + title={Bayesian analysis of binary and polychotomous response data}, + author={Albert, James H and Chib, Siddhartha}, + journal={Journal of the American statistical Association}, + volume={88}, + number={422}, + pages={669--679}, + year={1993}, + publisher={Taylor \& Francis} +} \ No newline at end of file From ed7f725d548ce0d400d29f8c81fc6cabbd6997dd Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Sat, 26 Apr 2025 01:22:52 -0500 Subject: [PATCH 51/55] Updated IV vignette and added to website structure --- .github/workflows/docs.yml | 15 +- README.md | 15 +- dev/build.sh | 15 +- docs/vignettes/index.md | 1 + mkdocs.yml | 2 + vignettes/Python/IV/iv.html | 8882 ++++++++++++++++++++++++++++++++++ vignettes/Python/IV/iv.ipynb | 42 +- vignettes/R/IV/iv.Rmd | 14 +- vignettes/R/IV/iv.bib | 11 + vignettes/R/IV/iv.html | 1795 +++++++ 10 files changed, 10755 insertions(+), 37 deletions(-) create mode 100644 vignettes/Python/IV/iv.html create mode 100644 vignettes/R/IV/iv.html diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6b39d65f3..6524838ac 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -100,12 +100,15 @@ jobs: - name: Copy static vignettes over to docs directory run: | - cp vignettes/Python/rdd.html docs/vignettes/Python/rdd.html - cp vignettes/Python/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png - cp vignettes/Python/trees1.png docs/vignettes/Python/trees1.png - cp vignettes/Python/trees2.png docs/vignettes/Python/trees2.png - cp vignettes/Python/trees3.png docs/vignettes/Python/trees3.png - cp vignettes/R/rdd.html docs/vignettes/R/rdd.html + cp vignettes/Python/RDD/rdd.html docs/vignettes/Python/rdd.html + cp vignettes/Python/RDD/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png + cp vignettes/Python/RDD/trees1.png docs/vignettes/Python/trees1.png + cp vignettes/Python/RDD/trees2.png docs/vignettes/Python/trees2.png + cp vignettes/Python/RDD/trees3.png docs/vignettes/Python/trees3.png + cp vignettes/R/RDD/rdd.html docs/vignettes/R/rdd.html + cp vignettes/Python/IV/iv.html docs/vignettes/Python/iv.html + cp vignettes/Python/IV/IV_CDAG.png docs/vignettes/Python/IV_CDAG.png + cp vignettes/R/IV/iv.html docs/vignettes/R/IV/iv.html - name: Build the overall doc site run: | diff --git a/README.md b/README.md index 7dfed63f1..8efe6feb1 100644 --- a/README.md +++ b/README.md @@ -102,12 +102,15 @@ cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo ### Copy static vignettes over to docs directory ```{bash} -cp vignettes/Python/rdd.html docs/vignettes/Python/rdd.html -cp vignettes/Python/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png -cp vignettes/Python/trees1.png docs/vignettes/Python/trees1.png -cp vignettes/Python/trees2.png docs/vignettes/Python/trees2.png -cp vignettes/Python/trees3.png docs/vignettes/Python/trees3.png -cp vignettes/R/rdd.html docs/vignettes/R/rdd.html +cp vignettes/Python/RDD/rdd.html docs/vignettes/Python/rdd.html +cp vignettes/Python/RDD/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png +cp vignettes/Python/RDD/trees1.png docs/vignettes/Python/trees1.png +cp vignettes/Python/RDD/trees2.png docs/vignettes/Python/trees2.png +cp vignettes/Python/RDD/trees3.png docs/vignettes/Python/trees3.png +cp vignettes/R/RDD/rdd.html docs/vignettes/R/rdd.html +cp vignettes/Python/IV/iv.html docs/vignettes/Python/iv.html +cp vignettes/Python/IV/IV_CDAG.png docs/vignettes/Python/IV_CDAG.png +cp vignettes/R/IV/iv.html docs/vignettes/R/IV/iv.html ``` ### Building the overall website diff --git a/dev/build.sh b/dev/build.sh index 9758b698b..2a03bf486 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -44,12 +44,15 @@ cp stochtree_repo/demo/notebooks/tree_inspection.ipynb docs/python_docs/demo/tre cp stochtree_repo/demo/notebooks/prototype_interface.ipynb docs/python_docs/demo/prototype_interface.ipynb # Copy static vignettes over to docs directory -cp vignettes/Python/rdd.html docs/vignettes/Python/rdd.html -cp vignettes/Python/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png -cp vignettes/Python/trees1.png docs/vignettes/Python/trees1.png -cp vignettes/Python/trees2.png docs/vignettes/Python/trees2.png -cp vignettes/Python/trees3.png docs/vignettes/Python/trees3.png -cp vignettes/R/rdd.html docs/vignettes/R/rdd.html +cp vignettes/Python/RDD/rdd.html docs/vignettes/Python/rdd.html +cp vignettes/Python/RDD/RDD_DAG.png docs/vignettes/Python/RDD_DAG.png +cp vignettes/Python/RDD/trees1.png docs/vignettes/Python/trees1.png +cp vignettes/Python/RDD/trees2.png docs/vignettes/Python/trees2.png +cp vignettes/Python/RDD/trees3.png docs/vignettes/Python/trees3.png +cp vignettes/R/RDD/rdd.html docs/vignettes/R/rdd.html +cp vignettes/Python/IV/iv.html docs/vignettes/Python/iv.html +cp vignettes/Python/IV/IV_CDAG.png docs/vignettes/Python/IV_CDAG.png +cp vignettes/R/IV/iv.html docs/vignettes/R/IV/iv.html # Build the doc site mkdocs build diff --git a/docs/vignettes/index.md b/docs/vignettes/index.md index 02f6af8a5..cca7a14e5 100644 --- a/docs/vignettes/index.md +++ b/docs/vignettes/index.md @@ -9,3 +9,4 @@ with an R and Python version for each vignette. Current advanced vignettes include: 1. Using `stochtree` for Regression Discontinuity Design ([R](R/rdd.html), [Python](Python/rdd.html)) +2. Using `stochtree` for Instrumental Variables Analysis ([R](R/iv.html), [Python](Python/iv.html)) diff --git a/mkdocs.yml b/mkdocs.yml index 5bbf52e2e..bf6352244 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -72,8 +72,10 @@ nav: - 'Vignettes': - 'Vignettes': vignettes/index.md - 'R': + - 'Instrumental Variables': 'vignettes/R/IV/iv.html' - 'RDD': 'vignettes/R/RDD/rdd.html' - 'Python': + - 'Instrumental Variables': 'vignettes/Python/IV/iv.html' - 'RDD': 'vignettes/Python/RDD/rdd.html' - 'Development': - 'Development': development/index.md diff --git a/vignettes/Python/IV/iv.html b/vignettes/Python/IV/iv.html new file mode 100644 index 000000000..c99a5e793 --- /dev/null +++ b/vignettes/Python/IV/iv.html @@ -0,0 +1,8882 @@ + + + + + +iv + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/vignettes/Python/IV/iv.ipynb b/vignettes/Python/IV/iv.ipynb index 5173d018f..053fcc77d 100644 --- a/vignettes/Python/IV/iv.ipynb +++ b/vignettes/Python/IV/iv.ipynb @@ -4,7 +4,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Instrumental Variables (IV) with `stochtree`" + "# Instrumental Variables (IV) with `stochtree`\n", + "\n", + "### P. Richard Hahn, Arizona State University\n", + "\n", + "### Drew Herren, University of Texas at Austin\n", + "\n", + "### 2025-04-26" ] }, { @@ -74,11 +80,11 @@ "source": [ "## The causal diagram\n", "\n", - "The causal diagram for this model can be expressed as follows. Here we are considering one confounder and moderator variable ($X$), which is the patient's age. In our data generating process (which we know because this is a simulation demonstration) higher age will make it more likely that a person is an always taker or complier and less likely that they are a nevertaker, which in turn has an effect on flu risk. We stipulate here that always takers are at lower risk and never takers at higher risk. Simultaneously, age has an increasing and then decreasing direct effect on flu risk; very young and very old are at higher risk, while young and middle age adults are at lower risk. In this DGP the flu efficacy has a multiplicative effect, reducing flu risk as a fixed proportion of baseline risk -- accordingly, the treatment effect (as a difference) is nonlinear in Age (for each principal stratum).\n", + "The causal diagram for this model can be expressed as follows. Here we are considering one confounder and moderator variable ($X$), which is the patient's age. In our data generating process (which we know because this is a simulation demonstration) higher age will make it more likely that a person is an always taker or complier and less likely that they are a never taker, which in turn has an effect on flu risk. We stipulate here that always takers are at lower risk and never takers at higher risk. Simultaneously, age has an increasing and then decreasing direct effect on flu risk; very young and very old are at higher risk, while young and middle age adults are at lower risk. In this DGP the flu efficacy has a multiplicative effect, reducing flu risk as a fixed proportion of baseline risk -- accordingly, the treatment effect (as a difference) is nonlinear in Age (for each principal stratum).\n", "\n", "![IV_CDAG](IV_CDAG.png)\n", "\n", - "The biggest question about this graph concerns the dashed red arrow from the putative instrument $Z$ to the outcome (flu). I say \"putative\" because if that dashed red arrow is there, then technically $Z$ is not a valid instrument. The assumption/assertion that there is no dashed red arrow is called the \"exclusion restriction\". In this vignette, we will explore what sorts of inferences are possible if we remain agnostic about the presence or absence of that dashed red arrow." + "The biggest question about this graph concerns the dashed red arrow from the putative instrument $Z$ to the outcome (flu). We say \"putative\" because if that dashed red arrow is there, then technically $Z$ is not a valid instrument. The assumption/assertion that there is no dashed red arrow is called the \"exclusion restriction\". In this vignette, we will explore what sorts of inferences are possible if we remain agnostic about the presence or absence of that dashed red arrow." ] }, { @@ -94,6 +100,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "\n", + "\n", "| $i$ | $Z_i$ | $V_i(0)$ | $V_i(1)$ | $Y_i(0,0)$ | $Y_i(1,0)$ | $Y_i(0,1)$ | $Y_i(1,1)$ |\n", "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", "| 1 | 1 | ? | 1 | ? | ? | ? | 0 |\n", @@ -412,7 +424,7 @@ "\n", "These models could (and probably should) be wrapped as functions. Here they are implemented as scripts, with the full loops shown. The output -- at the end of the loops -- are stochtree forest objects from which we can extract posterior samples and generate predictions. In particular, the $ITT_c$ will be constructed using posterior counterfactual predictions derived from these forest objects. \n", "\n", - "We begin by setting a bunch of hyperparmeters and instantiating the forest objects to be operated upon in the main sampling loop. We also initialize the latent variables." + "We begin by setting a bunch of hyperparameters and instantiating the forest objects to be operated upon in the main sampling loop. We also initialize the latent variables." ] }, { @@ -502,7 +514,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now we enter the main loop, which involves only two steps: sample the forest, given the latent utilies, then sample the latent utilities given the estimated conditional means defined by the forest and its parameters. " + "Now we enter the main loop, which involves only two steps: sample the forest, given the latent utilities, then sample the latent utilities given the estimated conditional means defined by the forest and its parameters. " ] }, { @@ -873,7 +885,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Next we populate the data structures for stochtree to operate on, call the predict functions to extract the predictions, convert them to the probability scale using the built in pnorm function." + "Next we populate the data structures for stochtree to operate on, call the predict functions to extract the predictions, convert them to probability scale using the `scipy.stats.norm.cdf` method." ] }, { @@ -995,7 +1007,7 @@ " a1 = ss*m11\n", " b1 = ss*(1-m11)\n", "\n", - " # When the corresponding mean is out-of-range, sample from a beta with mass piled near the violeted boundary\n", + " # When the corresponding mean is out-of-range, sample from a beta with mass piled near the violated boundary\n", " a1[m11<0] = 1\n", " b1[m11<0] = 5\n", " \n", @@ -1069,7 +1081,7 @@ "\n", "We see also that the posterior mean of the $ITT_c$ estimate (gold) is very similar to the posterior mean under the assumption of an exclusion restriction (gray). This is by design...they will only deviate due to Monte Carlo variation or due to the rare situations where the exclusion restriction is incompatible with the identification interval. \n", "\n", - "By changing the sample size and various aspects of the DGP this script allows us to build some intuituion for how aspects of the DGP affect posterior inferences, particularly how violates of assumptions affect accuracy and posterior uncertainty." + "By changing the sample size and various aspects of the DGP this script allows us to build some intuition for how aspects of the DGP affect posterior inferences, particularly how violates of assumptions affect accuracy and posterior uncertainty." ] }, { @@ -1078,13 +1090,19 @@ "source": [ "# References\n", "\n", - "Hahn, P Richard, Jared S Murray, and Ioanna Manolopoulou. 2016. “A Bayesian Partial Identification Approach to Inferring the Prevalence of Accounting Misconduct.” Journal of the American Statistical Association 111 (513): 14–26.\n", + "Albert, James H, and Siddhartha Chib. 1993. “Bayesian Analysis of Binary and Polychotomous Response Data.” *Journal of the American Statistical Association* 88 (422): 669–79.\n", + "\n", + "Hahn, P Richard, Jared S Murray, and Ioanna Manolopoulou. 2016. “A Bayesian Partial Identification Approach to Inferring the Prevalence of Accounting Misconduct.” *Journal of the American Statistical Association* 111 (513): 14–26.\n", + "\n", + "Hirano, Keisuke, Guido W. Imbens, Donald B. Rubin, and Xiao-Hua Zhou. 2000. “Assessing the Effect of an Influenza Vaccine in an Encouragement Design.” *Biostatistics* 1 (1): 69–88. https://doi.org/10.1093/biostatistics/1.1.69.\n", + "\n", + "Imbens, Guido W., and Donald B. Rubin. 2015. *Causal Inference for Statistics, Social, and Biomedical Sciences: An Introduction*. Cambridge University Press.\n", "\n", - "Hirano, Keisuke, Guido W. Imbens, Donald B. Rubin, and Xiao-Hua Zhou. 2000. “Assessing the Effect of an Influenza Vaccine in an Encouragement Design.” Biostatistics 1 (1): 69–88. https://doi.org/10.1093/biostatistics/1.1.69.\n", + "McDonald, Clement J, Siu L Hui, and William M Tierney. 1992. “Effects of Computer Reminders for Influenza Vaccination on Morbidity During Influenza Epidemics.” *MD Computing: Computers in Medical Practice* 9 (5): 304–12.\n", "\n", - "McDonald, Clement J, Siu L Hui, and William M Tierney. 1992. “Effects of Computer Reminders for Influenza Vaccination on Morbidity During Influenza Epidemics.” MD Computing: Computers in Medical Practice 9 (5): 304–12.\n", + "Papakostas, Demetrios, P Richard Hahn, Jared Murray, Frank Zhou, and Joseph Gerakos. 2023. “Do Forecasts of Bankruptcy Cause Bankruptcy? A Machine Learning Sensitivity Analysis.” *The Annals of Applied Statistics* 17 (1): 711–39.\n", "\n", - "Richardson, Thomas S., Robin J. Evans, and James M. Robins. 2011. “Transparent Parametrizations of Models for Potential Outcomes.” In Bayesian Statistics 9. Oxford University Press. https://doi.org/10.1093/acprof:oso/9780199694587.003.0019." + "Richardson, Thomas S., Robin J. Evans, and James M. Robins. 2011. “Transparent Parametrizations of Models for Potential Outcomes.” In *Bayesian Statistics 9*. Oxford University Press. https://doi.org/10.1093/acprof:oso/9780199694587.003.0019." ] } ], diff --git a/vignettes/R/IV/iv.Rmd b/vignettes/R/IV/iv.Rmd index 150b32768..232c6f3d3 100644 --- a/vignettes/R/IV/iv.Rmd +++ b/vignettes/R/IV/iv.Rmd @@ -41,7 +41,7 @@ Lastly, we could have *defiers* (d): contrarians who who were planning on gettin ## The causal diagram -The causal diagram for this model can be expressed as follows. Here we are considering one confounder and moderator variable ($X$), which is the patient's age. In our data generating process (which we know because this is a simulation demonstration) higher age will make it more likely that a person is an always taker or complier and less likely that they are a nevertaker, which in turn has an effect on flu risk. We stipulate here that always takers are at lower risk and never takers at higher risk. Simultaneously, age has an increasing and then decreasing direct effect on flu risk; very young and very old are at higher risk, while young and middle age adults are at lower risk. In this DGP the flu efficacy has a multiplicative effect, reducing flu risk as a fixed proportion of baseline risk -- accordingly, the treatment effect (as a difference) is nonlinear in Age (for each principal stratum). +The causal diagram for this model can be expressed as follows. Here we are considering one confounder and moderator variable ($X$), which is the patient's age. In our data generating process (which we know because this is a simulation demonstration) higher age will make it more likely that a person is an always taker or complier and less likely that they are a never taker, which in turn has an effect on flu risk. We stipulate here that always takers are at lower risk and never takers at higher risk. Simultaneously, age has an increasing and then decreasing direct effect on flu risk; very young and very old are at higher risk, while young and middle age adults are at lower risk. In this DGP the flu efficacy has a multiplicative effect, reducing flu risk as a fixed proportion of baseline risk -- accordingly, the treatment effect (as a difference) is nonlinear in Age (for each principal stratum). ```{r pressure, echo=FALSE, fig.cap="The causal directed acyclic graph (CDAG) for the instrumental variables flu example.", fig.align="center", out.width = '50%'} knitr::include_graphics("IV_CDAG.png") @@ -268,7 +268,7 @@ The outcome model is fit with a single (S-learner) BART model. This part of the These models could (and probably should) be wrapped as functions. Here they are implemented as scripts, with the full loops shown. The output -- at the end of the loops -- are stochtree forest objects from which we can extract posterior samples and generate predictions. In particular, the $ITT_c$ will be constructed using posterior counterfactual predictions derived from these forest objects. -We begin by setting a bunch of hyperparmeters and instantiating the forest objects to be operated upon in the main sampling loop. We also initialize the latent variables. +We begin by setting a bunch of hyperparameters and instantiating the forest objects to be operated upon in the main sampling loop. We also initialize the latent variables. ```{r outcomefit1} # Fit the BART model for Pr(Y = 1 | Z = 1, V = 1, X = x) @@ -334,7 +334,7 @@ active_forest$prepare_for_sampler(forest_dataset, outcome, forest_model, outcome active_forest$adjust_residual(forest_dataset, outcome, forest_model, FALSE, FALSE) ``` -Now we enter the main loop, which involves only two steps: sample the forest, given the latent utilies, then sample the latent utilities given the estimated conditional means defined by the forest and its parameters. +Now we enter the main loop, which involves only two steps: sample the forest, given the latent utilities, then sample the latent utilities given the estimated conditional means defined by the forest and its parameters. ```{r outcomefit2} # Initialize the Markov chain with num_warmstart grow-from-root iterations @@ -370,7 +370,7 @@ for (i in 1:num_samples) { ### Fit the monotone probit model(s) -The monotonicty constraint relies on a data augmentation as described in Papakostas et al (2023). The implementation of this sampler is inherently cumbersome, as one of the "data" vectors is constructed from some observed data and some latent data and there are two forest objects, one of which applies to all of the observations and one of which applies to only those observations with $Z = 0$. We go into more details about this sampler in a dedicated vignette. Here we include the code, but without producing the equations derived in Papakostas (2023). What is most important is simply that +The monotonicty constraint relies on a data augmentation as described in @papakostas2023forecasts. The implementation of this sampler is inherently cumbersome, as one of the "data" vectors is constructed from some observed data and some latent data and there are two forest objects, one of which applies to all of the observations and one of which applies to only those observations with $Z = 0$. We go into more details about this sampler in a dedicated vignette. Here we include the code, but without producing the equations derived in @papakostas2023forecasts. What is most important is simply that \begin{equation} \begin{aligned} @@ -610,7 +610,7 @@ LATE_true0 <- gamfun(xgrid,1,0,"c") - gamfun(xgrid,0,0,"c") LATE_true1 <- gamfun(xgrid,1,1,"c") - gamfun(xgrid,0,1,"c") ``` -Next we populate the data structures for stochtree to operate on, call the predict functions to extract the predictions, convert them to the probability scale using the built in pnorm function. +Next we populate the data structures for stochtree to operate on, call the predict functions to extract the predictions, convert them to probability scale using the built in `pnorm` function. ```{r plot3} # Datasets for counterfactual predictions @@ -703,7 +703,7 @@ for (j in 1:ncol(phat_c)){ a1 <- ss*m11 b1 <- ss*(1-m11) - # When the corresponding mean is out-of-range, sample from a beta with mass piled near the violeted boundary + # When the corresponding mean is out-of-range, sample from a beta with mass piled near the violated boundary a1[m11<0] <- 1 b1[m11<0] <- 5 @@ -769,6 +769,6 @@ With a valid exclusion restriction the three black curves would all be the same. We see also that the posterior mean of the $ITT_c$ estimate (gold) is very similar to the posterior mean under the assumption of an exclusion restriction (gray). This is by design...they will only deviate due to Monte Carlo variation or due to the rare situations where the exclusion restriction is incompatible with the identification interval. -By changing the sample size and various aspects of the DGP this script allows us to build some intuituion for how aspects of the DGP affect posterior inferences, particularly how violates of assumptions affect accuracy and posterior uncertainty. +By changing the sample size and various aspects of the DGP this script allows us to build some intuition for how aspects of the DGP affect posterior inferences, particularly how violates of assumptions affect accuracy and posterior uncertainty. # References diff --git a/vignettes/R/IV/iv.bib b/vignettes/R/IV/iv.bib index e3cebcd9c..b0eba609b 100644 --- a/vignettes/R/IV/iv.bib +++ b/vignettes/R/IV/iv.bib @@ -65,4 +65,15 @@ @article{albert1993bayesian pages={669--679}, year={1993}, publisher={Taylor \& Francis} +} + +@article{papakostas2023forecasts, + title={Do forecasts of bankruptcy cause bankruptcy? A machine learning sensitivity analysis}, + author={Papakostas, Demetrios and Hahn, P Richard and Murray, Jared and Zhou, Frank and Gerakos, Joseph}, + journal={The Annals of Applied Statistics}, + volume={17}, + number={1}, + pages={711--739}, + year={2023}, + publisher={Institute of Mathematical Statistics} } \ No newline at end of file diff --git a/vignettes/R/IV/iv.html b/vignettes/R/IV/iv.html new file mode 100644 index 000000000..98de3c632 --- /dev/null +++ b/vignettes/R/IV/iv.html @@ -0,0 +1,1795 @@ + + + + + + + + + + + + + + + + +Instrumental Variables (IV) with Stochtree + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+

Introduction

+

Here we consider a causal inference problem with a binary treatment +and a binary outcome where there is unobserved confounding, but an +exogenous instrument is available (also binary). This problem will +require a number of extensions to the basic BART model, all of which can +be implemented straightforwardly as Gibbs samplers using +stochtree. We’ll go through all of the model fitting steps +in quite a lot of detail here.

+
+
+

Background

+

To be concrete, suppose we wish to measure the effect of receiving a +flu vaccine on the probability of getting the flu. Individuals who opt +to get a flu shot differ in many ways from those that don’t, and these +lifestyle differences presumably also affect their respective chances of +getting the flu. Consequently, comparing the percentage of individuals +who get the flu in the vaccinated and unvaccinated groups does not give +a clear picture of the vaccine efficacy.

+

However, a so-called encouragement design can be implemented, where +some individuals are selected at random to be given some extra incentive +to get a flu shot (free clinics at the workplace or a personalized +reminder, for example). Studying the impact of this randomized +encouragement allows us to tease apart the impact of the vaccine from +the confounding factors, at least to some extent. This exact problem has +been considered several times in the literature, starting with McDonald, Hui, and Tierney (1992) with follow-on +analysis by Hirano et al. (2000), Richardson, Evans, and Robins (2011), and Imbens and Rubin (2015).

+

Our analysis here follows the Bayesian nonparametric approach +described in the supplement to Hahn, Murray, and +Manolopoulou (2016).

+
+

Notation

+

Let \(V\) denote the treatment +variable (as in “vaccine”). Let \(Y\) +denote the response variable (getting the flu), \(Z\) denote the instrument (encouragement or +reminder to get a flu shot), and \(X\) +denote an additional observable covariate (for instance, patient +age).

+

Further, let \(S\) denote the +so-called principal strata, which is an exhaustive +characterization of how individuals’ might be affected by the +encouragement regarding the flu shot. Some people will get a flu shot no +matter what: these are the always takers (a). Some people will +not get the flu shot no matter what: these are the never takers +(n). For both always-takers and never-takers, the randomization of the +encouragement is irrelevant and our data set contains no always takers +who skipped the vaccine and no never takers who got the vaccine and so +the treatment effect of the vaccine in these groups is fundamentally +non-identifiable.

+

By contrast, we also have compliers (c): folks who would not +have gotten the shot but for the fact that they were encouraged to do +so. These are the people about whom our randomized encouragement +provides some information, because they are precisely the ones that have +been randomized to treatment.

+

Lastly, we could have defiers (d): contrarians who who were +planning on getting the shot, but – upon being reminded – decided not +to! For our analysis we will do the usual thing of assuming that there +are no defiers. And because we are going to simulate our data, we can +make sure that this assumption is true.

+
+
+

The causal diagram

+

The causal diagram for this model can be expressed as follows. Here +we are considering one confounder and moderator variable (\(X\)), which is the patient’s age. In our +data generating process (which we know because this is a simulation +demonstration) higher age will make it more likely that a person is an +always taker or complier and less likely that they are a never taker, +which in turn has an effect on flu risk. We stipulate here that always +takers are at lower risk and never takers at higher risk. +Simultaneously, age has an increasing and then decreasing direct effect +on flu risk; very young and very old are at higher risk, while young and +middle age adults are at lower risk. In this DGP the flu efficacy has a +multiplicative effect, reducing flu risk as a fixed proportion of +baseline risk – accordingly, the treatment effect (as a difference) is +nonlinear in Age (for each principal stratum).

+
+The causal directed acyclic graph (CDAG) for the instrumental variables flu example. +

+The causal directed acyclic graph (CDAG) for the instrumental variables +flu example. +

+
+

The biggest question about this graph concerns the dashed red arrow +from the putative instrument \(Z\) to +the outcome (flu). We say “putative” because if that dashed red arrow is +there, then technically \(Z\) is not a +valid instrument. The assumption/assertion that there is no dashed red +arrow is called the “exclusion restriction”. In this vignette, we will +explore what sorts of inferences are possible if we remain agnostic +about the presence or absence of that dashed red arrow.

+
+
+

Potential outcomes

+

There are two relevant potential outcomes in an instrumental +variables analysis, corresponding to the causal effect of the instrument +on the treatment and the causal effect of the treatment on the outcome. +In this example, that is the effect of the reminder/encouragement on +vaccine status and the effect of the vaccine itself on the flu. The +notation is \(V(Z)\) and \(Y(V(Z),Z)\) respectively, so that we have +six distinct random variables: \(V(0)\), \(V(1)\), \(Y(0,0)\), \(Y(1,0)\), \(Y(0,1)\) and \(Y(1,1)\). The problem – sometimes called +the fundamental problem of causal inference – is that some of +these random variables can never be seen simultaneously, they are +observationally mutually exclusive. For this reason, it may be helpful +to think about causal inference as a missing data problem, as depicted +in the following table.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+\(i\) + +\(Z_i\) + +\(V_i(0)\) + +\(V_i(1)\) + +\(Y_i(0,0)\) + +\(Y_i(1,0)\) + +\(Y_i(0,1)\) + +\(Y_i(1,1)\) +
+1 + +1 + +? + +1 + +? + +? + +? + +0 +
+2 + +0 + +1 + +? + +? + +1 + +? + +? +
+3 + +0 + +0 + +? + +1 + +? + +? + +? +
+4 + +1 + +? + +0 + +? + +? + +0 + +? +
+\(\vdots\) + +\(\vdots\) + +\(\vdots\) + +\(\vdots\) + +\(\vdots\) + +\(\vdots\) + +\(\vdots\) + +\(\vdots\) +
+

Likewise, with this notation we can formally define the principal +strata:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+\(V_i(0)\) + +\(V_i(1)\) + +\(S_i\) +
+0 + +0 + +Never Taker (n) +
+1 + +1 + +Always Taker (a) +
+0 + +1 + +Complier (c) +
+1 + +0 + +Defier (d) +
+
+
+

Estimands and Identification

+

Let \(\pi_s(x)\) denote the +conditional (on \(x\)) probability that +an individual belongs to principal stratum \(s\): \[\begin{equation} +\pi_s(x)=\operatorname{Pr}(S=s \mid X=x), +\end{equation}\] and let \(\gamma_s^{v +z}(x)\) denote the potential outcome probability for given values +\(v\) and \(z\): \[\begin{equation} +\gamma_s^{v z}(x)=\operatorname{Pr}(Y(v, z)=1 \mid S=s, X=x). +\end{equation}\]

+

Various estimands of interest may be expressed in terms of the +functions \(\gamma_c^{vz}(x)\). In +particular, the complier conditional average treatment effect \[\gamma_c^{1,z}(x) - \gamma_c^{0,z}(x)\] is +the ultimate goal (for either \(z=0\) +or \(z=1\)). Under an exclusion +restriction, we would have \(\gamma_s^{vz}(x) += \gamma_s^{v}(x)\) and the reminder status \(z\) itself would not matter. In that case, +we can estimate \[\gamma_c^{1,z}(x) - +\gamma_c^{0,z}\] and \[\gamma_c^{1,1}(x) - \gamma_c^{0,0}(x).\] +This latter quantity is called the complier intent-to-treat effect, or +\(ITT_c\), and it can be partially +identify even if the exclusion restriction is violated, as follows.

+

The left-hand side of the following system of equations are all +estimable quantities that can be learned from observable data, while the +right hand side expressions involve the unknown functions of interest, +\(\gamma_s^{vz}(x)\):

+

\[\begin{equation} +\begin{aligned} +p_{1 \mid 00}(x) = \operatorname{Pr}(Y=1 \mid V=0, Z=0, +X=x)=\frac{\pi_c(x)}{\pi_c(x)+\pi_n(x)} +\gamma_c^{00}(x)+\frac{\pi_n(x)}{\pi_c(x)+\pi_n(x)} \gamma_n^{00}(x) \\ +p_{1 \mid 11}(x) =\operatorname{Pr}(Y=1 \mid V=1, Z=1, +X=x)=\frac{\pi_c(x)}{\pi_c(x)+\pi_a(x)} +\gamma_c^{11}(x)+\frac{\pi_a(x)}{\pi_c(x)+\pi_a(x)} \gamma_a^{11}(x) \\ +p_{1 \mid 01}(x) =\operatorname{Pr}(Y=1 \mid V=0, Z=1, +X=x)=\frac{\pi_d(x)}{\pi_d(x)+\pi_n(x)} +\gamma_d^{01}(x)+\frac{\pi_n(x)}{\pi_d(x)+\pi_n(x)} \gamma_n^{01}(x) \\ +p_{1 \mid 10}(x) =\operatorname{Pr}(Y=1 \mid V=1, Z=0, +X=x)=\frac{\pi_d(x)}{\pi_d(x)+\pi_a(x)} +\gamma_d^{10}(x)+\frac{\pi_a(x)}{\pi_d(x)+\pi_a(x)} \gamma_a^{10}(x) +\end{aligned} +\end{equation}\]

+

Furthermore, we have \[\begin{equation} +\begin{aligned} +\operatorname{Pr}(V=1 \mid Z=0, X=x)&=\pi_a(x)+\pi_d(x)\\ +\operatorname{Pr}(V=1 \mid Z=1, X=x)&=\pi_a(x)+\pi_c(x) +\end{aligned} +\end{equation}\]

+

Under the monotonicy assumption, \(\pi_d(x) += 0\) and these expressions simplify somewhat. \[\begin{equation} +\begin{aligned} +p_{1 \mid 00}(x)&=\frac{\pi_c(x)}{\pi_c(x)+\pi_n(x)} +\gamma_c^{00}(x)+\frac{\pi_n(x)}{\pi_c(x)+\pi_n(x)} \gamma_n^{00}(x) \\ +p_{1 \mid 11}(x)&=\frac{\pi_c(x)}{\pi_c(x)+\pi_a(x)} +\gamma_c^{11}(x)+\frac{\pi_a(x)}{\pi_c(x)+\pi_a(x)} \gamma_a^{11}(x) \\ +p_{1 \mid 01}(x)&=\gamma_n^{01}(x) \\ +p_{1 \mid 10}(x)&=\gamma_a^{10}(x) +\end{aligned} +\end{equation}\] and \[\begin{equation} +\begin{aligned} +\operatorname{Pr}(V=1 \mid Z=0, X=x)&=\pi_a(x)\\ +\operatorname{Pr}(V=1 \mid Z=1, X=x)&=\pi_a(x)+\pi_c(x) +\end{aligned} +\end{equation}\]

+

The exclusion restriction would dictate that \(\gamma_s^{01}(x) = \gamma_s^{00}(x)\) and +\(\gamma_s^{11}(x) = \gamma_s^{10}(x)\) +for all \(s\). This has two +implications. One, \(\gamma_n^{01}(x) = +\gamma_n^{00}(x)\) and \(\gamma_a^{10}(x) = \gamma_a^{11}(x)\),and +because the left-hand terms are identified, this permits \(\gamma_c^{11}(x)\) and \(\gamma_c^{00}(x)\) to be solved for by +substitution. Two, with these two quantities solved for, we also have +the two other quantities (the different settings of \(z\)), since \(\gamma_c^{11}(x) = \gamma_c^{10}(x)\) and +\(\gamma_c^{00}(x) = +\gamma_c^{01}(x)\). Consequently, both of our estimands from +above can be estimated:

+

\[\gamma_c^{11}(x) - +\gamma_c^{01}(x)\] and

+

\[\gamma_c^{10}(x) - +\gamma_c^{00}(x)\] because they are both (supposing the exclusion +restriction holds) the same as

+

\[\gamma_c^{11}(x) - +\gamma_c^{00}(x).\] If the exclusion restriction does +not hold, then the three above treatment effects are all +(potentially) distinct and not much can be said about the former two. +The latter one, the \(ITT_c\), however, +can be partially identified, by recognizing that the first two equations +(in our four equation system) provide non-trivial bounds based on the +fact that while \(\gamma_c^{11}(x)\) +and \(\gamma_c^{00}(x)\) are no longer +identified, as probabilities both must lie between 0 and 1. Thus,

+

\[\begin{equation} +\begin{aligned} + \max\left( + 0, \frac{\pi_c(x)+\pi_n(x)}{\pi_c(x)}p_{1\mid 00}(x) - +\frac{\pi_n(x)}{\pi_c(x)} + \right) +&\leq\gamma^{00}_c(x)\leq + \min\left( + 1, \frac{\pi_c(x)+\pi_n(x)}{\pi_c(x)}p_{1\mid 00}(x) + \right)\\\\ +% +\max\left( + 0, \frac{\pi_a(x)+\pi_c(x)}{\pi_c(x)}p_{1\mid 11}(x) - +\frac{\pi_a(x)}{\pi_c(x)} +\right) +&\leq\gamma^{11}_c(x)\leq +\min\left( + 1, \frac{\pi_a(x)+\pi_c(x)}{\pi_c(x)}p_{1\mid 11}(x) +\right) +\end{aligned} +\end{equation}\]

+

The point of all this is that the data (plus a no-defiers assumption) +lets us estimate all the necessary inputs to these upper and lower +bounds on \(\gamma^{11}_c(x)\) and +\(\gamma^{00}_c(x)\) which in turn +define our estimand. What remains is to estimate those inputs, as +functions of \(x\), and to do so while +enforcing the monotonicty restriction \[\operatorname{Pr}(V=1 \mid Z=0, X=x)=\pi_a(x) +\leq +\operatorname{Pr}(V=1 \mid Z=1, X=x)=\pi_a(x)+\pi_c(x).\]

+

We can do all of this with calls to stochtree from R (or Python). But +first, let’s generate some test data.

+
+

Simulate the data

+

Start with some initial setup / housekeeping

+
library(stochtree)
+
+# size of the training sample
+n <- 20000
+
+# To set the seed for reproducibility/illustration purposes, replace "NULL" with a positive integer
+random_seed <- NULL
+

First, we generate the instrument exogenously

+
z <- rbinom(n, 1, 0.5)
+

Next, we generate the covariate. (For this example, let’s think of it +as patient age, although we are generating it from a uniform +distribution between 0 and 3, so you have to imagine that it has been +pre-standardized to this scale. It keeps the DGPs cleaner for +illustration purposes.)

+
p_X <- 1
+X <- matrix(runif(n*p_X, 0, 3), ncol = p_X)
+x <- X[,1] # for ease of reference later
+

Next, we generate the principal strata \(S\) based on the observed value of \(X\). We generate it according to a logistic +regression with two coefficients per strata, an intercept and a slope. +Here, these coefficients are set so that the probability of being a +never taker decreases with age.

+
alpha_a <- 0
+beta_a <- 1
+
+alpha_n <- 1
+beta_n <- -1
+
+alpha_c <- 1
+beta_c <- 1
+
+# define function (a logistic model) to generate Pr(S = s | X = x)
+pi_s <- function(xval){
+  
+  w_a <- exp(alpha_a + beta_a*xval)
+  w_n <- exp(alpha_n + beta_n*xval)
+  w_c <- exp(alpha_c + beta_c*xval)
+   
+  w <- cbind(w_a, w_n, w_c)
+  colnames(w) <- c("w_a","w_n","w_c")
+  w <- w/rowSums(w)
+  
+  return(w)
+  
+}
+s <- sapply(1:n, function(j) sample(c("a","n","c"), 1, prob = pi_s(X[j,1])))
+

Next, we generate the treatment variable, here denoted \(V\) (for “vaccine”), as a +deterministic function of \(S\) and \(Z\); this is what gives the principal +strata their meaning.

+
v <- 1*(s=="a") + 0*(s=="n") + z*(s=="c") + (1-z)*(s == "d")
+

Finally, the outcome structural model is specified, based on which +the outcome is sampled. By varying this function in particular ways, we +can alter the identification conditions.

+
gamfun <- function(xval,vval, zval,sval){
+  
+  # if this function depends on zval, then exclusion restriction is violated
+  # if this function does not depend on sval, then IV analysis wasn't necessary
+  # if this function does not depend on x, then there are no HTEs
+  
+  baseline <- pnorm(2 -1*xval - 2.5*(xval-1.5)^2 - 0.5*zval + 1*(sval=="n") - 1*(sval=="a") )
+  prob <- baseline - 0.5*vval*baseline # 0.5*vval*baseline
+  
+  return(prob)
+}
+
+# Generate the observed outcome
+y <- rbinom(n, 1, gamfun(X[,1],v,z,s))
+

Lastly, we perform some organization for our supervised learning +algorithms later on.

+
# Concatenate X, v and z for our supervised learning algorithms
+Xall <- cbind(X,v,z)
+
+# update the size of "X" to be the size of Xall
+p_X <- p_X + 2
+
+# For the monotone probit model it is necessary to sort the observations so that the Z=1 cases are all together
+# at the start of the outcome vector.  
+index <- sort(z,decreasing = TRUE, index.return = TRUE)
+
+X <- matrix(X[index$ix,],ncol= 1)
+Xall <- Xall[index$ix,]
+z <- z[index$ix]
+v <- v[index$ix]
+s <- s[index$ix]
+y <- y[index$ix]
+x <- x[index$ix]
+

Now let’s see if we can recover these functions from the observed +data.

+
+
+

Fit the outcome model

+

We have to fit three models here, the treatment models: \(\operatorname{Pr}(V = 1 | Z = 1, X=x)\) and +\(\operatorname{Pr}(V = 1 | Z = 0,X = +x)\), subject to the monotonicity constraint \(\operatorname{Pr}(V = 1 | Z = 1, X=x) \geq +\operatorname{Pr}(V = 1 | Z = 0,X = x)\), and an outcome model +\(\operatorname{Pr}(Y = 1 | Z = 1, V = 1, X = +x)\). All of this will be done with stochtree.

+

The outcome model is fit with a single (S-learner) BART model. This +part of the model could be fit as a T-Learner or as a BCF model. Here we +us an S-Learner for simplicity. Both models are probit models, and use +the well-known Albert and Chib (1993) data +augmentation Gibbs sampler. This section covers the more straightforward +outcome model. The next section describes how the monotonicity +constraint is handled with a data augmentation Gibbs sampler.

+

These models could (and probably should) be wrapped as functions. +Here they are implemented as scripts, with the full loops shown. The +output – at the end of the loops – are stochtree forest objects from +which we can extract posterior samples and generate predictions. In +particular, the \(ITT_c\) will be +constructed using posterior counterfactual predictions derived from +these forest objects.

+

We begin by setting a bunch of hyperparameters and instantiating the +forest objects to be operated upon in the main sampling loop. We also +initialize the latent variables.

+
# Fit the BART model for Pr(Y = 1 | Z = 1, V = 1, X = x)
+
+# Set number of iterations
+num_warmstart <- 10
+num_mcmc <- 1000
+num_samples <- num_warmstart + num_mcmc
+
+# Set a bunch of hyperparameters. These are ballpark default values.
+alpha <- 0.95
+beta <- 2
+min_samples_leaf <- 1
+max_depth <- 20
+num_trees <- 50
+cutpoint_grid_size = 100
+global_variance_init = 1.
+tau_init = 0.5
+leaf_prior_scale = matrix(c(tau_init), ncol = 1)
+a_leaf <- 2.
+b_leaf <- 0.5
+leaf_regression <- F
+feature_types <- as.integer(c(rep(0, p_X-2),1,1)) # 0 = numeric
+var_weights <- rep(1,p_X)/p_X
+outcome_model_type <- 0
+
+# C++ dataset
+forest_dataset <- createForestDataset(Xall)
+
+# Random number generator (std::mt19937)
+if (is.null(random_seed)) {
+    rng <- createCppRNG(-1)
+} else {
+    rng <- createCppRNG(random_seed)
+}
+
+# Sampling data structures
+forest_model_config <- createForestModelConfig(
+  feature_types = feature_types, num_trees = num_trees, num_features = p_X, 
+  num_observations = n, variable_weights = var_weights, leaf_dimension = 1, 
+  alpha = alpha, beta = beta, min_samples_leaf = min_samples_leaf, 
+  max_depth = max_depth, leaf_model_type = outcome_model_type, 
+  leaf_model_scale = leaf_prior_scale, cutpoint_grid_size = cutpoint_grid_size
+)
+global_model_config <- createGlobalModelConfig(global_error_variance = 1)
+forest_model <- createForestModel(forest_dataset, forest_model_config, global_model_config)
+
+# Container of forest samples
+forest_samples <- createForestSamples(num_trees, 1, T, F)
+
+# "Active" forest state
+active_forest <- createForest(num_trees, 1, T, F)
+
+# Initialize the latent outcome zed
+n1 <- sum(y)
+zed <- 0.25*(2*as.numeric(y) - 1)
+
+# C++ outcome variable
+outcome <- createOutcome(zed)
+
+# Initialize the active forest and subtract each root tree's predictions from outcome
+active_forest$prepare_for_sampler(forest_dataset, outcome, forest_model, outcome_model_type, 0.0)
+active_forest$adjust_residual(forest_dataset, outcome, forest_model, FALSE, FALSE)
+

Now we enter the main loop, which involves only two steps: sample the +forest, given the latent utilities, then sample the latent utilities +given the estimated conditional means defined by the forest and its +parameters.

+
# Initialize the Markov chain with num_warmstart grow-from-root iterations
+gfr_flag <- T
+for (i in 1:num_samples) {
+  
+  # The first num_warmstart iterations use the grow-from-root algorithm of He and Hahn
+  if (i > num_warmstart){
+    gfr_flag <- F
+  } 
+  
+  # Sample forest
+  forest_model$sample_one_iteration(
+    forest_dataset, outcome, forest_samples, active_forest, 
+    rng, forest_model_config, global_model_config, 
+    keep_forest = T, gfr = gfr_flag
+  )
+  
+  # Get the current means
+  eta <- forest_samples$predict_raw_single_forest(forest_dataset, i-1)
+  
+  # Sample latent normals, truncated according to the observed outcome y
+  U1 <- runif(n1,pnorm(0,eta[y==1],1),1)
+  zed[y==1] <- qnorm(U1,eta[y==1],1)
+  U0 <- runif(n - n1,0, pnorm(0,eta[y==0],1))
+  zed[y==0] <- qnorm(U0,eta[y==0],1)
+  
+  # Propagate the newly sampled latent outcome to the BART model
+  outcome$update_data(zed)
+  forest_model$propagate_residual_update(outcome)
+}
+
+
+

Fit the monotone probit model(s)

+

The monotonicty constraint relies on a data augmentation as described +in Papakostas et al. (2023). The +implementation of this sampler is inherently cumbersome, as one of the +“data” vectors is constructed from some observed data and some latent +data and there are two forest objects, one of which applies to all of +the observations and one of which applies to only those observations +with \(Z = 0\). We go into more details +about this sampler in a dedicated vignette. Here we include the code, +but without producing the equations derived in Papakostas et al. (2023). What is most important +is simply that

+

\[\begin{equation} +\begin{aligned} +\operatorname{Pr}(V=1 \mid Z=0, X=x)&=\pi_a(x) = +\Phi_f(x)\Phi_h(x),\\ +\operatorname{Pr}(V=1 \mid Z=1, X=x)&=\pi_a(x)+\pi_c(x) = \Phi_f(x), +\end{aligned} +\end{equation}\] where \(\Phi_{\mu}(x)\) denotes the normal +cumulative distribution function with mean \(\mu(x)\) and variance 1.

+

We first create a secondary data matrix for the \(Z=0\) group only. We also set all of the +hyperparameters and initialize the latent variables.

+
# Fit the monotone probit model to the treatment such that Pr(V = 1 | Z = 1, X=x) >= Pr(V = 1 | Z = 0,X = x) 
+
+X_h <- as.matrix(X[z==0,])
+n0 <- sum(z==0)
+n1 <- sum(z==1)
+
+num_trees_f <- 50
+num_trees_h <- 20
+feature_types <- as.integer(rep(0, 1)) # 0 = numeric
+var_weights <- rep(1,1)
+cutpoint_grid_size = 100
+global_variance_init = 1.
+tau_init = 1/num_trees_h
+leaf_prior_scale = matrix(c(tau_init), ncol = 1)
+nu <- 4
+lambda <- 0.5
+a_leaf <- 2.
+b_leaf <- 0.5
+leaf_regression <- F # fit a constant leaf mean BART model
+
+# Instantiate the C++ dataset objects
+forest_dataset_f <- createForestDataset(X)
+forest_dataset_h <- createForestDataset(X_h)
+
+# Tell it we're fitting a normal BART model
+outcome_model_type <- 0
+
+# Set up model configuration objects
+forest_model_config_f <- createForestModelConfig(
+  feature_types = feature_types, num_trees = num_trees_f, num_features = ncol(X), 
+  num_observations = nrow(X), variable_weights = var_weights, leaf_dimension = 1, 
+  alpha = alpha, beta = beta, min_samples_leaf = min_samples_leaf, 
+  max_depth = max_depth, leaf_model_type = outcome_model_type, 
+  leaf_model_scale = leaf_prior_scale, cutpoint_grid_size = cutpoint_grid_size
+)
+forest_model_config_h <- createForestModelConfig(
+  feature_types = feature_types, num_trees = num_trees_h, num_features = ncol(X_h), 
+  num_observations = nrow(X_h), variable_weights = var_weights, leaf_dimension = 1, 
+  alpha = alpha, beta = beta, min_samples_leaf = min_samples_leaf, 
+  max_depth = max_depth, leaf_model_type = outcome_model_type, 
+  leaf_model_scale = leaf_prior_scale, cutpoint_grid_size = cutpoint_grid_size
+)
+global_model_config <- createGlobalModelConfig(global_error_variance = 1)
+
+# Instantiate the sampling data structures
+forest_model_f <- createForestModel(forest_dataset_f, forest_model_config_f, global_model_config)
+forest_model_h <- createForestModel(forest_dataset_h, forest_model_config_h, global_model_config)
+
+# Instantiate containers of forest samples
+forest_samples_f <- createForestSamples(num_trees_f, 1, T)
+forest_samples_h <- createForestSamples(num_trees_h, 1, T)
+
+# Instantiate "active" forests
+active_forest_f <- createForest(num_trees_f, 1, T)
+active_forest_h <- createForest(num_trees_h, 1, T)
+
+# Set algorithm specifications 
+# these are set in the earlier script for the outcome model; number of draws needs to be commensurable 
+
+#num_warmstart <- 10
+#num_mcmc <- 2000
+#num_samples <- num_warmstart + num_mcmc
+
+# Initialize the Markov chain
+
+# Initialize (R0, R1), the latent binary variables that enforce the monotonicty 
+
+v1 <- v[z==1]
+v0 <- v[z==0]
+
+R1 = rep(NA,n0)
+R0 = rep(NA,n0)
+
+R1[v0==1] <- 1
+R0[v0==1] <- 1
+
+R1[v0 == 0] <- 0
+R0[v0 == 0] <- sample(c(0,1),sum(v0==0),replace=TRUE)
+
+# The first n1 observations of vaug are actually observed
+# The next n0 of them are the latent variable R1
+vaug <- c(v1, R1)
+
+# Initialize the Albert and Chib latent Gaussian variables
+z_f <- (2*as.numeric(vaug) - 1)
+z_h <- (2*as.numeric(R0)-1)
+z_f <- z_f/sd(z_f)
+z_h <- z_h/sd(z_h)
+
+# Pass these variables to the BART models as outcome variables
+outcome_f <- createOutcome(z_f)
+outcome_h <- createOutcome(z_h)
+
+# Initialize active forests to constant (0) predictions
+active_forest_f$prepare_for_sampler(forest_dataset_f, outcome_f, forest_model_f, outcome_model_type, 0.0)
+active_forest_h$prepare_for_sampler(forest_dataset_h, outcome_h, forest_model_h, outcome_model_type, 0.0)
+active_forest_f$adjust_residual(forest_dataset_f, outcome_f, forest_model_f, FALSE, FALSE)
+active_forest_h$adjust_residual(forest_dataset_h, outcome_h, forest_model_h, FALSE, FALSE)
+

Now we run the main sampling loop, which consists of three key steps: +sample the BART forests, given the latent probit utilities, sampling the +latent binary outcome pairs (this is the step that is necessary for +enforcing monotonicity), given the forest predictions and the latent +utilities, and finally sample the latent utilities.

+
# PART IV: run the Markov chain 
+
+# Initialize the Markov chain with num_warmstart grow-from-root iterations
+gfr_flag <- T
+for (i in 1:num_samples) {
+  
+  # Switch over to random walk Metropolis-Hastings tree updates after num_warmstart
+  if (i > num_warmstart) {
+    gfr_flag <- F
+  }
+  
+  # Step 1: Sample the BART forests
+  
+  # Sample forest for the function f based on (y_f, R1)
+  forest_model_f$sample_one_iteration(
+    forest_dataset_f, outcome_f, forest_samples_f, active_forest_f, 
+    rng, forest_model_config_f, global_model_config, 
+    keep_forest = T, gfr = gfr_flag
+  )
+  
+  # Sample forest for the function h based on outcome R0
+  forest_model_h$sample_one_iteration(
+    forest_dataset_h, outcome_h, forest_samples_h, active_forest_h,
+    rng, forest_model_config_h, global_model_config, 
+    keep_forest = T, gfr = gfr_flag
+  )
+  
+  # Extract the means for use in sampling the latent variables
+  eta_f <- forest_samples_f$predict_raw_single_forest(forest_dataset_f, i-1)
+  eta_h <- forest_samples_h$predict_raw_single_forest(forest_dataset_h, i-1)
+  
+  
+  # Step 2: sample the latent binary pair (R0, R1) given eta_h, eta_f, and y_g
+  
+  # Three cases: (0,0), (0,1), (1,0)
+  w1 <- (1 - pnorm(eta_h[v0==0]))*(1-pnorm(eta_f[n1 + which(v0==0)]))
+  w2 <-   (1 - pnorm(eta_h[v0==0]))*pnorm(eta_f[n1 + which(v0==0)])
+  w3 <- pnorm(eta_h[v0==0])*(1 - pnorm(eta_f[n1 + which(v0==0)]))
+  
+  s <- w1 + w2 + w3
+  w1 <- w1/s
+  w2 <- w2/s
+  w3 <- w3/s
+  
+  u <- runif(sum(v0==0))
+  temp <- 1*(u < w1) + 2*(u > w1 & u < w1 + w2) + 3*(u > w1 + w2)
+  
+  R1[v0==0] <- 1*(temp==2)
+  R0[v0==0] <- 1*(temp==3)
+  
+  # Redefine y with the updated R1 component 
+  vaug <- c(v1, R1)
+  
+  # Step 3: sample the latent normals, given (R0, R1) and y_f
+  
+  # First z0
+  U1 <- runif(sum(R0),pnorm(0, eta_h[R0==1],1),1)
+  z_h[R0==1] <- qnorm(U1, eta_h[R0==1],1)
+  
+  U0 <- runif(n0 - sum(R0),0, pnorm(0, eta_h[R0==0],1))
+  z_h[R0==0] <- qnorm(U0, eta_h[R0==0],1)
+  
+  # Then z1
+  U1 <- runif(sum(vaug),pnorm(0, eta_f[vaug==1],1),1)
+  z_f[vaug==1] <- qnorm(U1, eta_f[vaug==1],1)
+  
+  U0 <- runif(n - sum(vaug),0, pnorm(0, eta_f[vaug==0],1))
+  z_f[vaug==0] <- qnorm(U0, eta_f[vaug==0],1)
+  
+  # Propagate the updated outcomes through the BART models
+  outcome_h$update_data(z_h)
+  forest_model_h$propagate_residual_update(outcome_h)
+  
+  outcome_f$update_data(z_f)
+  forest_model_f$propagate_residual_update(outcome_f)
+  
+  # No more steps, just repeat a bunch of times
+}
+
+
+

Extracting the estimates and plotting the results.

+

Now for the most interesting part, which is taking the stochtree BART +model fits and producing the causal estimates of interest.

+

First we set up our grid for plotting the functions in \(X\). This is possible in this example +because the moderator, age, is one dimensional; in may applied problems +this will not be the case and visualization will be substantially +trickier.

+
# Extract the credible intervals for the conditional treatment effects as a function of x.
+# We use a grid of values for plotting, with grid points that are typically fewer than the number of observations.
+
+ngrid <- 200
+xgrid <- seq(0.1,2.5,length.out = ngrid)
+X_11 <- cbind(xgrid,rep(1,ngrid),rep(1,ngrid))
+
+X_00 <- cbind(xgrid,rep(0,ngrid),rep(0,ngrid))
+X_01 <- cbind(xgrid,rep(0,ngrid),rep(1,ngrid))
+X_10 <- cbind(xgrid,rep(1,ngrid),rep(0,ngrid))
+

Next, we compute the truth function evaluations on this plotting +grid, using the functions defined above when we generated our data.

+
# Compute the true conditional outcome probabilities for plotting
+pi_strat <- pi_s(xgrid)
+w_a <- pi_strat[,1]
+w_n <- pi_strat[,2]
+w_c <- pi_strat[,3]
+
+w <- (w_c/(w_a + w_c))
+
+p11_true <- w*gamfun(xgrid,1,1,"c") + (1-w)*gamfun(xgrid,1,1,"a")
+
+w <- (w_c/(w_n + w_c))
+
+p00_true <- w*gamfun(xgrid,0,0,"c") + (1-w)*gamfun(xgrid,0,0,"n")
+
+# Compute the true ITT_c for plotting and comparison
+itt_c_true <- gamfun(xgrid,1,1,"c") - gamfun(xgrid,0,0,"c")
+
+# Compute the true LATE for plotting and comparison
+LATE_true0 <- gamfun(xgrid,1,0,"c") - gamfun(xgrid,0,0,"c")
+LATE_true1 <- gamfun(xgrid,1,1,"c") - gamfun(xgrid,0,1,"c")
+

Next we populate the data structures for stochtree to operate on, +call the predict functions to extract the predictions, convert them to +probability scale using the built in pnorm function.

+
# Datasets for counterfactual predictions
+forest_dataset_grid <- createForestDataset(cbind(xgrid))
+forest_dataset_11 <- createForestDataset(X_11)
+forest_dataset_00 <- createForestDataset(X_00)
+forest_dataset_10 <- createForestDataset(X_10)
+forest_dataset_01 <- createForestDataset(X_01)
+
+# Forest predictions
+preds_00 <- forest_samples$predict(forest_dataset_00)
+preds_11 <- forest_samples$predict(forest_dataset_11)
+preds_01 <- forest_samples$predict(forest_dataset_01)
+preds_10 <- forest_samples$predict(forest_dataset_10)
+
+# Probability transformations
+phat_00 <- pnorm(preds_00)
+phat_11 <- pnorm(preds_11)
+phat_01 <- pnorm(preds_01)
+phat_10 <- pnorm(preds_10)
+
+# Cleanup
+rm(preds_00)
+rm(preds_11)
+rm(preds_01)
+rm(preds_10)
+
+
+preds_ac <- forest_samples_f$predict(forest_dataset_grid)
+phat_ac <- pnorm(preds_ac)
+
+preds_adj <- forest_samples_h$predict(forest_dataset_grid)
+phat_a <- pnorm(preds_ac)*pnorm(preds_adj)
+rm(preds_adj)
+rm(preds_ac)
+
+phat_c <- phat_ac - phat_a
+
+phat_n <- 1 - phat_ac
+

Now we may plot posterior means of various quantities (as a function +of \(X\)) to visualize how well the +models are fitting.

+
# Set up the plotting window
+par(mfrow=c(1,2))
+
+# Plot the fitted outcome probabilities against the truth
+plot(p11_true,rowMeans(phat_11),pch=20,cex=0.5,bty='n')
+abline(0,1,col='red')
+
+plot(p00_true,rowMeans(phat_00),pch=20,cex=0.5,bty='n')
+abline(0,1,col='red')
+

+
par(mfrow=c(1,3))
+plot(rowMeans(phat_ac),w_c +w_a,pch=20)
+abline(0,1,col='red')
+
+plot(rowMeans(phat_a),w_a,pch=20)
+abline(0,1,col='red')
+
+plot(rowMeans(phat_c),w_c,pch=20)
+abline(0,1,col='red')
+

+

These plots are not as pretty as we might hope, but mostly this is a +function of how difficult it is to learn conditional probabilities from +binary outcomes. That we capture the trend broadly turns out to be +adequate for estimating treatment effects. Fit does improve with simpler +DGPs and larger training sets, as can be confirmed by experimentation +with this script.

+

Lastly, we can construct the estimate of the \(ITT_c\) and compare it to the true value as +well as the \(Z=0\) and \(Z=1\) complier average treatment effects +(also called “local average treatment effects” or LATE). The key step in +this process is to center our posterior on the identified interval (at +each iteration of the sampler) at the value implied by a valid exclusion +restriction. For some draws this will not be possible, as that value +will be outside the identification region.

+
# Generate draws from the posterior of the treatment effect
+# centered at the point-identified value under the exclusion restriction
+itt_c <- late <- matrix(NA,ngrid, ncol(phat_c))
+ss <- 6
+for (j in 1:ncol(phat_c)){
+  
+  # Value of gamma11 implied by an exclusion restriction
+  gamest11 <- ((phat_a[,j] + phat_c[,j])/phat_c[,j])*phat_11[,j] - phat_10[,j]*phat_a[,j]/phat_c[,j]
+  
+  # Identified region for gamma11
+  lower11 <- pmax(rep(0,ngrid), ((phat_a[,j] + phat_c[,j])/phat_c[,j])*phat_11[,j] - phat_a[,j]/phat_c[,j])
+  upper11 <- pmin(rep(1,ngrid), ((phat_a[,j] + phat_c[,j])/phat_c[,j])*phat_11[,j])
+  
+  # Center a beta distribution at gamma11, but restricted to (lower11, upper11)
+  # do this by shifting and scaling the mean, drawing from a beta on (0,1), then shifting and scaling to the 
+  # correct restricted interval
+  m11 <- (gamest11 - lower11)/(upper11-lower11)
+
+  # Parameters to the beta
+  a1 <- ss*m11
+  b1 <- ss*(1-m11)
+  
+  # When the corresponding mean is out-of-range, sample from a beta with mass piled near the violated boundary
+  a1[m11<0] <- 1
+  b1[m11<0] <- 5
+  
+  a1[m11>1] <- 5
+  b1[m11>1] <- 1
+  
+  # Value of gamma00 implied by an exclusion restriction
+  gamest00 <- ((phat_n[,j] + phat_c[,j])/phat_c[,j])*phat_00[,j] - phat_01[,j]*phat_n[,j]/phat_c[,j]
+  
+  # Identified region for gamma00
+  lower00 <- pmax(rep(0,ngrid), ((phat_n[,j] + phat_c[,j])/phat_c[,j])*phat_00[,j] - phat_n[,j]/phat_c[,j])
+  upper00 <- pmin(rep(1,ngrid), ((phat_n[,j] + phat_c[,j])/phat_c[,j])*phat_00[,j])
+  
+  # Center a beta distribution at gamma00, but restricted to (lower00, upper00)
+  # do this by shifting and scaling the mean, drawing from a beta on (0,1), then shifting and scaling to the 
+  # correct restricted interval
+  m00 <- (gamest00 - lower00)/(upper00-lower00)
+  
+  a0 <- ss*m00
+  b0 <- ss*(1-m00)
+  
+  a0[m00<0] <- 1
+  b0[m00<0] <- 5
+  
+  a0[m00>1] <- 5
+  b0[m00>1] <- 1
+ 
+  # ITT and LATE    
+  itt_c[,j] <- lower11 + (upper11 - lower11)*rbeta(ngrid,a1,b1) - (lower00 + (upper00 - lower00)*rbeta(ngrid,a0,b0))
+  late[,j] <- gamest11 - gamest00
+}
+
+upperq <- apply(itt_c,1,quantile,0.975)
+lowerq <- apply(itt_c,1,quantile,0.025)
+

And now we can plot all of this, using the “polygon” function to +shade posterior quantiles.

+
par(mfrow=c(1,1))
+plot(xgrid,itt_c_true,pch=20,cex=0.5,ylim=c(-0.75,0.05),bty='n',type='n',xlab='x',ylab='Treatment effect')
+
+upperq_er <- apply(late,1,quantile,0.975,na.rm=TRUE)
+
+lowerq_er <- apply(late,1,quantile,0.025,na.rm=TRUE)
+
+polygon(c(xgrid,rev(xgrid)),c(lowerq,rev(upperq)),col=rgb(0.5,0.25,0,0.25),pch=20,border=FALSE)
+polygon(c(xgrid,rev(xgrid)),c(lowerq_er,rev(upperq_er)),col=rgb(0,0,0.5,0.25),pch=20,border=FALSE)
+
+itt_c_est <- rowMeans(itt_c)
+late_est <- rowMeans(late)
+lines(xgrid,late_est,col="slategray",lwd=3)
+
+lines(xgrid,itt_c_est,col='goldenrod1',lwd=1)
+
+lines(xgrid,LATE_true0,col="black",lwd=2,lty=3)
+lines(xgrid,LATE_true1,col="black",lwd=2,lty=2)
+
+lines(xgrid,itt_c_true,col="black",lwd=1)
+

+

With a valid exclusion restriction the three black curves would all +be the same. With no exclusion restriction, as we have here, the direct +effect of \(Z\) on \(Y\) (the vaccine reminder on flu status) +makes it so these three treatment effects are different. Specifically, +the \(ITT_c\) compares getting the +vaccine and getting the reminder to not getting the vaccine +and not getting the reminder. When both things have risk +reducing impacts, we see a larger risk reduction over all values of +\(X\). Meanwhile, the two LATE effects +compare the isolated impact of the vaccine among people that got the +reminder and those that didn’t, respectively. Here, not getting the +reminder makes the vaccine more effective because the risk reduction is +as a fraction of baseline risk, and the reminder reduces baseline risk +in our DGP.

+

We see also that the posterior mean of the \(ITT_c\) estimate (gold) is very similar to +the posterior mean under the assumption of an exclusion restriction +(gray). This is by design…they will only deviate due to Monte Carlo +variation or due to the rare situations where the exclusion restriction +is incompatible with the identification interval.

+

By changing the sample size and various aspects of the DGP this +script allows us to build some intuition for how aspects of the DGP +affect posterior inferences, particularly how violates of assumptions +affect accuracy and posterior uncertainty.

+
+
+
+
+

References

+
+
+Albert, James H, and Siddhartha Chib. 1993. “Bayesian Analysis of +Binary and Polychotomous Response Data.” Journal of the +American Statistical Association 88 (422): 669–79. +
+
+Hahn, P Richard, Jared S Murray, and Ioanna Manolopoulou. 2016. “A +Bayesian Partial Identification Approach to Inferring the Prevalence of +Accounting Misconduct.” Journal of the American Statistical +Association 111 (513): 14–26. +
+
+Hirano, Keisuke, Guido W. Imbens, Donald B. Rubin, and Xiao-Hua Zhou. +2000. “Assessing the Effect of an Influenza Vaccine in an +Encouragement Design.” Biostatistics 1 (1): 69–88. https://doi.org/10.1093/biostatistics/1.1.69. +
+
+Imbens, Guido W., and Donald B. Rubin. 2015. Causal Inference for +Statistics, Social, and Biomedical Sciences: An Introduction. +Cambridge University Press. +
+
+McDonald, Clement J, Siu L Hui, and William M Tierney. 1992. +“Effects of Computer Reminders for Influenza Vaccination on +Morbidity During Influenza Epidemics.” MD Computing: +Computers in Medical Practice 9 (5): 304–12. +
+
+Papakostas, Demetrios, P Richard Hahn, Jared Murray, Frank Zhou, and +Joseph Gerakos. 2023. “Do Forecasts of Bankruptcy Cause +Bankruptcy? A Machine Learning Sensitivity Analysis.” The +Annals of Applied Statistics 17 (1): 711–39. +
+
+Richardson, Thomas S., Robin J. Evans, and James M. Robins. 2011. +“Transparent Parametrizations of Models for Potential +Outcomes.” In Bayesian Statistics 9. Oxford University +Press. https://doi.org/10.1093/acprof:oso/9780199694587.003.0019. +
+
+
+ + + + +
+ + + + + + + + + + + + + + + From 9ac5255b381124b23663842dab4aa8f99ea19330 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Sat, 26 Apr 2025 15:42:39 -0500 Subject: [PATCH 52/55] Fixed vignette path typo --- .github/workflows/docs.yml | 2 +- README.md | 2 +- dev/build.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 6524838ac..642a31d5b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -108,7 +108,7 @@ jobs: cp vignettes/R/RDD/rdd.html docs/vignettes/R/rdd.html cp vignettes/Python/IV/iv.html docs/vignettes/Python/iv.html cp vignettes/Python/IV/IV_CDAG.png docs/vignettes/Python/IV_CDAG.png - cp vignettes/R/IV/iv.html docs/vignettes/R/IV/iv.html + cp vignettes/R/IV/iv.html docs/vignettes/R/iv.html - name: Build the overall doc site run: | diff --git a/README.md b/README.md index 8efe6feb1..2785046b2 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ cp vignettes/Python/RDD/trees3.png docs/vignettes/Python/trees3.png cp vignettes/R/RDD/rdd.html docs/vignettes/R/rdd.html cp vignettes/Python/IV/iv.html docs/vignettes/Python/iv.html cp vignettes/Python/IV/IV_CDAG.png docs/vignettes/Python/IV_CDAG.png -cp vignettes/R/IV/iv.html docs/vignettes/R/IV/iv.html +cp vignettes/R/IV/iv.html docs/vignettes/R/iv.html ``` ### Building the overall website diff --git a/dev/build.sh b/dev/build.sh index 2a03bf486..a57d6178c 100644 --- a/dev/build.sh +++ b/dev/build.sh @@ -52,7 +52,7 @@ cp vignettes/Python/RDD/trees3.png docs/vignettes/Python/trees3.png cp vignettes/R/RDD/rdd.html docs/vignettes/R/rdd.html cp vignettes/Python/IV/iv.html docs/vignettes/Python/iv.html cp vignettes/Python/IV/IV_CDAG.png docs/vignettes/Python/IV_CDAG.png -cp vignettes/R/IV/iv.html docs/vignettes/R/IV/iv.html +cp vignettes/R/IV/iv.html docs/vignettes/R/iv.html # Build the doc site mkdocs build From f137fa796cecbc8cd5a0b6ff1e5d62d4d22407bf Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Mon, 28 Apr 2025 16:38:21 -0500 Subject: [PATCH 53/55] Updated mkdocs config to fix some broken links and math rendering --- mkdocs.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index bf6352244..917a8ba22 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -72,11 +72,11 @@ nav: - 'Vignettes': - 'Vignettes': vignettes/index.md - 'R': - - 'Instrumental Variables': 'vignettes/R/IV/iv.html' - - 'RDD': 'vignettes/R/RDD/rdd.html' + - 'Instrumental Variables': 'vignettes/R/iv.html' + - 'RDD': 'vignettes/R/rdd.html' - 'Python': - - 'Instrumental Variables': 'vignettes/Python/IV/iv.html' - - 'RDD': 'vignettes/Python/RDD/rdd.html' + - 'Instrumental Variables': 'vignettes/Python/iv.html' + - 'RDD': 'vignettes/Python/rdd.html' - 'Development': - 'Development': development/index.md - 'Contributing': development/contributing.md @@ -126,6 +126,8 @@ plugins: - mkdocs-jupyter: execute: true include_source: True + include_requirejs: true + custom_mathjax_url: "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe" extra_javascript: - javascripts/mathjax.js - https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js From 5d459fe5edfbbeb20cbc759aa1e1a48861d4eea9 Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Wed, 25 Jun 2025 14:05:01 -0500 Subject: [PATCH 54/55] Added instructions on adding a new model to stochtree --- docs/development/index.md | 1 + docs/development/new-models.md | 271 +++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 273 insertions(+) create mode 100644 docs/development/new-models.md diff --git a/docs/development/index.md b/docs/development/index.md index 617379d84..6735d58c9 100644 --- a/docs/development/index.md +++ b/docs/development/index.md @@ -3,4 +3,5 @@ `stochtree` is in active development. Here, we detail some aspects of the development process * [Contributing](contributing.md): how to get involved with stochtree, by contributing code, documentation, or helpful feedback +* [Adding New Models](new-models.md): how to add a new outcome model in C++ and make it available through the R and Python frontends * [Roadmap](roadmap.md): timelines for new feature development and releases diff --git a/docs/development/new-models.md b/docs/development/new-models.md new file mode 100644 index 000000000..15cd281d9 --- /dev/null +++ b/docs/development/new-models.md @@ -0,0 +1,271 @@ +# Adding New Models to stochtree + +While the process of working with `stochtree`'s codebase to add +functionality or fix bugs is covered in the [contributing](contributing.md) +page, this page discusses a specific type of contribution in detail: +contributing new models (i.e. likelihoods and leaf parameter priors). + +Our C++ core is designed to support any conditionally-conjugate model, but this flexibility requires some explanation in order to be easily modified. + +## Overview + +The key components of `stochtree`'s models are: + +1. A **SuffStat** class that stores and accumulates sufficient statistics +2. A **LeafModel** class that computes marginal likelihoods / posterior parameters and samples leaf node parameters + +Each model implements a different version of these two classes. For example, the "classic" +BART model with constant Gaussian leaves and a Gaussian likelihood is represented by the +`GaussianConstantSuffStat` and `GaussianConstantLeafModel` classes. + +Each class implements a common API, and we use a [factory pattern](https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)) and the C++17 +[std::variant](https://www.cppreference.com/w/cpp/utility/variant.html) +feature to dispatch the correct model at runtime. +Finally, R and Python wrappers expose this flexibility through the BART / BCF interfaces. + +Adding a new leaf model thus requires implementing new `SuffStat` and `LeafModel` +classes, then updating the factory functions and R / Python logic. + +## SuffStat Class + +As a pattern, sufficient statistic classes end in `*SuffStat` and implement several methods: + +* `IncrementSuffStat`: Increment a model's sufficient statistics by one data observation +* `ResetSuffStat`: Reset a model's sufficient statistics to zero / empty +* `AddSuffStat`: Combine two sufficient statistics, storing their sum in the sufficient statistic object that calls this method (without modifying the supplied `SuffStat` objects) +* `SubtractSuffStat`: Same as above but subtracting the second `SuffStat` argument from the first, rather than adding +* `SampleGreaterThan`: Checks whether the current sample size of a `SuffStat` object is greater than some threshold +* `SampleGreaterThanEqual`: Checks whether the current sample size of a `SuffStat` object is greater than or equal to some threshold +* `SampleSize`: Returns the current sample size of a `SuffStat` object + +For the sake of illustration, imagine we are adding a model called `OurNewModel`. The new sufficient statistic class should look something like: + +```cpp +class OurNewModelSuffStat { + public: + data_size_t n; + // Custom sufficient statistics for `OurNewModel` + double stat1; + double stat2; + + OurNewModelSuffStat() { + n = 0; + stat1 = 0.0; + stat2 = 0.0; + } + + void IncrementSuffStat(ForestDataset& dataset, Eigen::VectorXd& outcome, + ForestTracker& tracker, data_size_t row_idx, int tree_idx) { + n += 1; + stat1 += /* accumulate from outcome, dataset, or tracker as needed */; + stat2 += /* accumulate from outcome, dataset, or tracker as needed */; + } + + void ResetSuffStat() { + n = 0; + stat1 = 0.0; + stat2 = 0.0; + } + + void AddSuffStat(OurNewModelSuffStat& lhs, OurNewModelSuffStat& rhs) { + n = lhs.n + rhs.n; + stat1 = lhs.stat1 + rhs.stat1; + stat2 = lhs.stat2 + rhs.stat2; + } + + void SubtractSuffStat(OurNewModelSuffStat& lhs, OurNewModelSuffStat& rhs) { + n = lhs.n - rhs.n; + stat1 = lhs.stat1 - rhs.stat1; + stat2 = lhs.stat2 - rhs.stat2; + } + + bool SampleGreaterThan(data_size_t threshold) { return n > threshold; } + bool SampleGreaterThanEqual(data_size_t threshold) { return n >= threshold; } + data_size_t SampleSize() { return n; } +}; +``` + +## LeafModel Class + +Leaf model classes end in `*LeafModel` and implement several methods: + +* `SplitLogMarginalLikelihood`: the log marginal likelihood of a potential split, as a function of the sufficient statistics for the newly proposed left and right node (i.e. ignoring data points unaffected by a split) +* `NoSplitLogMarginalLikelihood`: the log marginal likelihood of a node without splitting, as a function of the sufficient statistics for that node +* `SampleLeafParameters`: Sample the leaf node parameters for every leaf in a provided tree, according to this model's conditionally conjugate leaf node posterior +* `RequiresBasis`: Whether or not a model requires regressing on "basis functions" in the leaves + +As above, imagine that we are implementing a new model called `OurNewModel`. The new leaf model class should look something like: + +```cpp +class OurNewModelLeafModel { + public: + OurNewModelLeafModel(/* model parameters */) { + // Set model parameters + } + + double SplitLogMarginalLikelihood(OurNewModelSuffStat& left_stat, + OurNewModelSuffStat& right_stat, + double global_variance) { + double left_log_ml = /* calculate left node log ML */; + double right_log_ml = /* calculate right node log ML */; + return left_log_ml + right_log_ml; + } + + double NoSplitLogMarginalLikelihood(OurNewModelSuffStat& suff_stat, + double global_variance) { + double log_ml = /* calculate node log ML */; + return log_ml; + } + + void SampleLeafParameters(ForestDataset& dataset, ForestTracker& tracker, + ColumnVector& residual, Tree* tree, int tree_num, + double global_variance, std::mt19937& gen) { + // Sample parameters for every leaf in a tree, update `tree` directly + } + + inline bool RequiresBasis() { return /* true/false based on your model */; } + + // Helper methods below for `SampleLeafParameters`, which depend on the + // nature of the leaf model (i.e. location-scale, shape-scale, etc...) + + double PosteriorParameterMean(OurNewModelSuffStat& suff_stat, + double global_variance) { + return /* calculate posterior mean */; + } + + double PosteriorParameterVariance(OurNewModelSuffStat& suff_stat, + double global_variance) { + return /* calculate posterior variance */; + } + + private: + // Leaf model parameters + double param1_; + double param2_; +}; +``` + +## Factory Functions + +Updating the factory pattern to be able to dispatch `OurNewModel` has several steps. + +First, we add our model to the `ModelType` enum in `include/stochtree/leaf_model.h`: + +```cpp +enum ModelType { + kConstantLeafGaussian, + kUnivariateRegressionLeafGaussian, + kMultivariateRegressionLeafGaussian, + kLogLinearVariance, + kOurNewModel // New model +}; +``` + +Next, we add the `OurNewModelSuffStat` and `OurNewModelLeafModel` classes to the `std::variant` unions in `include/stochtree/leaf_model.h`: + +```cpp +using SuffStatVariant = std::variant; // New model + +using LeafModelVariant = std::variant; // New model +``` + +Finally, we update the factory functions to dispatch the correct class from the union based on the `ModelType` integer code + +```cpp +static inline SuffStatVariant suffStatFactory(ModelType model_type, int basis_dim = 0) { + if (model_type == kConstantLeafGaussian) { + return createSuffStat(); + } else if (model_type == kUnivariateRegressionLeafGaussian) { + return createSuffStat(); + } else if (model_type == kMultivariateRegressionLeafGaussian) { + return createSuffStat(basis_dim); + } else if (model_type == kLogLinearVariance) { + return createSuffStat(); + } else if (model_type == kOurNewModel) { // New model + return createSuffStat(); + } else { + Log::Fatal("Incompatible model type provided to suff stat factory"); + } +} + +static inline LeafModelVariant leafModelFactory(ModelType model_type, double tau, + Eigen::MatrixXd& Sigma0, double a, double b) { + if (model_type == kConstantLeafGaussian) { + return createLeafModel(tau); + } else if (model_type == kUnivariateRegressionLeafGaussian) { + return createLeafModel(tau); + } else if (model_type == kMultivariateRegressionLeafGaussian) { + return createLeafModel(Sigma0); + } else if (model_type == kLogLinearVariance) { + return createLeafModel(a, b); + } else if (model_type == kOurNewModel) { // New model + return createLeafModel(/* initializer values */); + } else { + Log::Fatal("Incompatible model type provided to leaf model factory"); + } +} +``` + +## R Wrapper + +To reflect this change through to the R interface, we first add the new model to the logic in the `sample_gfr_one_iteration_cpp` +and `sample_mcmc_one_iteration_cpp` functions in the `src/sampler.cpp` file + +```cpp +// Convert leaf model type to enum +StochTree::ModelType model_type; +if (leaf_model_int == 0) model_type = StochTree::ModelType::kConstantLeafGaussian; +else if (leaf_model_int == 1) model_type = StochTree::ModelType::kUnivariateRegressionLeafGaussian; +else if (leaf_model_int == 2) model_type = StochTree::ModelType::kMultivariateRegressionLeafGaussian; +else if (leaf_model_int == 3) model_type = StochTree::ModelType::kLogLinearVariance; +else if (leaf_model_int == 4) model_type = StochTree::ModelType::kOurNewModel; // New model +else StochTree::Log::Fatal("Invalid model type"); +``` + +Then we add the integer code for `OurNewModel` to the `leaf_model_type` field signature in `R/config.R` + +```r +#' @field leaf_model_type Integer specifying the leaf model type (0 = constant leaf, 1 = univariate leaf regression, 2 = multivariate leaf regression, 4 = your new model) +leaf_model_type = NULL, +``` + +## Python Wrapper + +Python's C++ wrapper code contains similar logic to that of the `src/sampler.cpp` file in the R interface. +Add the new model to the `SampleOneIteration` method of the `ForestSamplerCpp` class in the `src/py_stochtree.cpp` file. + +```cpp +// Convert leaf model type to enum +StochTree::ModelType model_type; +if (leaf_model_int == 0) model_type = StochTree::ModelType::kConstantLeafGaussian; +else if (leaf_model_int == 1) model_type = StochTree::ModelType::kUnivariateRegressionLeafGaussian; +else if (leaf_model_int == 2) model_type = StochTree::ModelType::kMultivariateRegressionLeafGaussian; +else if (leaf_model_int == 3) model_type = StochTree::ModelType::kLogLinearVariance; +else if (leaf_model_int == 4) model_type = StochTree::ModelType::kOurNewModel; // New model +else StochTree::Log::Fatal("Invalid model type"); +``` + +And then add the integer code for your new model to the `leaf_model_type` documentation in `stochtree/config.py` + +## Additional Considerations + +Some of the `SuffStat` and `LeafModel` classes currently supported by stochtree require extra initialization parameters. +We support this via [variadic templates](https://en.cppreference.com/w/cpp/language/parameter_pack.html) in C++ + +```cpp +template +static inline void GFRSampleOneIter(TreeEnsemble& active_forest, ForestTracker& tracker, ForestContainer& forests, LeafModel& leaf_model, ForestDataset& dataset, + ColumnVector& residual, TreePrior& tree_prior, std::mt19937& gen, std::vector& variable_weights, + std::vector& sweep_update_indices, double global_variance, std::vector& feature_types, int cutpoint_grid_size, + bool keep_forest, bool pre_initialized, bool backfitting, int num_features_subsample, LeafSuffStatConstructorArgs&... leaf_suff_stat_args) +``` + +If your new classes take any initialization arguments, these are provided in the factory functions, so you might also need to edit the signature of the factory functions. diff --git a/mkdocs.yml b/mkdocs.yml index 917a8ba22..5f27832bc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -80,6 +80,7 @@ nav: - 'Development': - 'Development': development/index.md - 'Contributing': development/contributing.md + - 'Adding New Models': development/new-models.md - 'Roadmap': development/roadmap.md extra: social: From 189eff707056895c5c2d642edb61aac3091c40cd Mon Sep 17 00:00:00 2001 From: Drew Herren Date: Thu, 26 Jun 2025 11:08:48 -0500 Subject: [PATCH 55/55] Fix typo in tree overview --- docs/about.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/about.md b/docs/about.md index 6672deb7a..8ad67a513 100644 --- a/docs/about.md +++ b/docs/about.md @@ -59,7 +59,7 @@ f(X_i) = g_1(X_i) + \dots + g_k(X_i) There are several ways to train an ensemble of decision trees (sometimes called "forests"), the most popular of which are [random forests](https://en.wikipedia.org/wiki/Random_forest) and [gradient boosting](https://en.wikipedia.org/wiki/Gradient_boosting). Their main difference is that random forests train -all $m$ trees independently of one another, while boosting trains tree sequentially, so that tree $j$ depends on the result of training trees 1 through $j-1$. +all $m$ trees independently of one another, while boosting trains trees sequentially, so that tree $j$ depends on the result of training trees 1 through $j-1$. Libraries like [xgboost](https://xgboost.readthedocs.io/en/stable/) and [LightGBM](https://lightgbm.readthedocs.io/en/latest/) are popular examples of boosted tree ensembles. Tree ensembles often [outperform neural networks and other machine learning methods on tabular datasets](https://arxiv.org/abs/2207.08815),
+ + + + + + + + + + + + + + + + + + + + + +