mirror of
https://github.com/YuhangQ/InvoDB.git
synced 2025-01-25 22:20:58 +00:00
ee
This commit is contained in:
parent
9798febb85
commit
8109baaac9
30
CMakeLists.txt
Normal file
30
CMakeLists.txt
Normal file
@ -0,0 +1,30 @@
|
||||
include_directories(./src)
|
||||
|
||||
project (invodb)
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
|
||||
|
||||
include_directories(${CMAKE_JS_INC})
|
||||
|
||||
file(GLOB SOURCE_FILES "src/*.h" "src/*.cpp" "src/btree/*.h" "src/collection/*.h" "src/collection/*.cpp" "src/file/*.h" "src/file/*.cpp" "src/test/*.h" "src/utils/*.h")
|
||||
|
||||
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
|
||||
target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB})
|
||||
|
||||
# Include N-API wrappers
|
||||
execute_process(COMMAND node -p "require('node-addon-api').include"
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE NODE_ADDON_API_DIR
|
||||
)
|
||||
string(REPLACE "\n" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR})
|
||||
string(REPLACE "\"" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR})
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${NODE_ADDON_API_DIR})
|
||||
|
||||
# define NPI_VERSION
|
||||
add_definitions(-DNAPI_VERSION=3)
|
||||
|
8
demo/list.txt
Normal file
8
demo/list.txt
Normal file
@ -0,0 +1,8 @@
|
||||
{"id": 1}
|
||||
{"id": 2}
|
||||
{"id": 3}
|
||||
{"id": 4}
|
||||
{"id": 5}
|
||||
{"id": 6}
|
||||
{"id": 7}
|
||||
{"id": 8}
|
24
demo/test.js
24
demo/test.js
@ -1,3 +1,6 @@
|
||||
|
||||
const fs = require('fs')
|
||||
|
||||
const invodb = require('..')
|
||||
|
||||
invodb.database('zzz.invodb')
|
||||
@ -5,18 +8,19 @@ invodb.database('zzz.invodb')
|
||||
let col = invodb.colection('blog')
|
||||
if(!col.exist()) col.create();
|
||||
|
||||
for(let i=0; i<1; i++) {
|
||||
col.insert({ id: "1s", title: "第一篇文章", author: "YuhangQ"})
|
||||
col.insert({ id: "2s", title: "第二篇文章", author: "Ciel"})
|
||||
col.insert({ id: "3s", title: "第三篇文章", author: "YuhangQ"})
|
||||
col.insert({ id: "4s", title: "第四篇文章", author: "By"})
|
||||
for(let json of col.query({})) col.remove(json)
|
||||
|
||||
let list = fs.readFileSync(__dirname + "/list.txt").toString().split("\n")
|
||||
for(let json of list) {
|
||||
col.insert(JSON.parse(json))
|
||||
}
|
||||
|
||||
let result = col.query({id: {}})
|
||||
|
||||
// for(let json of result) {
|
||||
// col.remove(json)
|
||||
// }
|
||||
let result = col.query({
|
||||
id: {
|
||||
$ne: 2
|
||||
}
|
||||
})
|
||||
|
||||
console.log(">>>>>>>>>>>>>>>>>>>>")
|
||||
console.log(result)
|
||||
console.log(result.length)
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "invodb",
|
||||
"version": "1.0.3",
|
||||
"version": "1.0.15",
|
||||
"description": "a nosql json document database",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
@ -19,7 +19,6 @@
|
||||
},
|
||||
"homepage": "https://github.com/YuhangQ/InvoDB#readme",
|
||||
"dependencies": {
|
||||
"node-addon-api": "^4.2.0",
|
||||
"node-gyp": "^8.4.0"
|
||||
"node-addon-api": "^4.2.0"
|
||||
}
|
||||
}
|
||||
|
@ -325,8 +325,8 @@ void BTree<KT, K_SIZE>::split(const KT &key, int address, int parentAdd, int cur
|
||||
|
||||
cur->linkSet[cur->insert(key)] = address;
|
||||
|
||||
auto lLeaf = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::Instance().allocate());
|
||||
auto rLeaf = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::Instance().allocate());
|
||||
auto lLeaf = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::allocate());
|
||||
auto rLeaf = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::allocate());
|
||||
|
||||
int mid = (cur->m / 2);
|
||||
for(int i=0; i<mid; i++) lLeaf->linkSet[lLeaf->insert(cur->keySet[i])] = cur->linkSet[i];
|
||||
@ -351,7 +351,7 @@ void BTree<KT, K_SIZE>::split(const KT &key, int address, int parentAdd, int cur
|
||||
|
||||
|
||||
if(cur->address == root) {
|
||||
// auto newRoot = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::Instance().allocate());
|
||||
// auto newRoot = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::allocate());
|
||||
// newRoot->insert(rLeaf->keySet[0]);
|
||||
// newRoot->linkSet[0] = lLeaf->address;
|
||||
// newRoot->linkSet[1] = rLeaf->address;
|
||||
@ -432,8 +432,8 @@ void BTree<KT, K_SIZE>::insertInternal(const KT &key, int curAdd, int lLeafAdd,
|
||||
return;
|
||||
}
|
||||
|
||||
auto newLChild = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::Instance().allocate());
|
||||
auto newRChild = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::Instance().allocate());
|
||||
auto newLChild = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::allocate());
|
||||
auto newRChild = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::allocate());
|
||||
newLChild->leaf = false;
|
||||
newRChild->leaf = false;
|
||||
newLChild->right = newRChild->address;
|
||||
@ -479,7 +479,7 @@ void BTree<KT, K_SIZE>::insertInternal(const KT &key, int curAdd, int lLeafAdd,
|
||||
|
||||
|
||||
if(cur->address == root) {
|
||||
// auto newRoot = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::Instance().allocate());
|
||||
// auto newRoot = BTreeNode<M_SIZE, KT, K_SIZE>::getNode(PageManager::allocate());
|
||||
// newRoot->insert(cur->keySet[mid]);
|
||||
// newRoot->linkSet[0] = newLChild->address;
|
||||
// newRoot->linkSet[1] = newRChild->address;
|
||||
|
@ -61,7 +61,7 @@ LRUCache<int, std::shared_ptr<BTreeNode<M_SIZE, KT, K_SIZE>>> BTreeNode<M_SIZE,
|
||||
template<int M_SIZE, typename KT, int K_SIZE>
|
||||
BTreeNode<M_SIZE, KT, K_SIZE>::BTreeNode(const int& address): address(address) {
|
||||
clear();
|
||||
StoragePage page = PageManager::Instance().getPage(address);
|
||||
StoragePage page = PageManager::getPage(address);
|
||||
int p = 0;
|
||||
size = page.getIntStartFrom(p); p += 4;
|
||||
parent = page.getIntStartFrom(p); p += 4;
|
||||
@ -119,7 +119,7 @@ std::shared_ptr<BTreeNode<M_SIZE, KT, K_SIZE>> BTreeNode<M_SIZE, KT, K_SIZE>::ge
|
||||
template<int M_SIZE, typename KT, int K_SIZE>
|
||||
BTreeNode<M_SIZE, KT, K_SIZE> *BTreeNode<M_SIZE, KT, K_SIZE>::release(const int &index) {
|
||||
//cache.remove(index);
|
||||
PageManager::Instance().release(index);
|
||||
PageManager::release(index);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ Collection& Collection::createCollection(const std::string &name) {
|
||||
if(map.count(name) != 0) {
|
||||
return *map[name];
|
||||
}
|
||||
colList.insert(name, PageManager::Instance().allocate());
|
||||
colList.insert(name, PageManager::allocate());
|
||||
Collection *col = new Collection(name, colList.find(name));
|
||||
map.insert(make_pair(name, col));
|
||||
return *col;
|
||||
@ -42,7 +42,7 @@ Collection::Collection(const std::string &name, const int &firstPage) {
|
||||
Logger::info<std::string, std::string>("load Collection: ", name);
|
||||
index = new BTree<std::string, 128>(firstPage);
|
||||
if(!index->exists("__INVO_ID__")) {
|
||||
index->insert("__INVO_ID__", PageManager::Instance().allocate());
|
||||
index->insert("__INVO_ID__", PageManager::allocate());
|
||||
}
|
||||
uuid = new BTree<std::string, 32>(index->find("__INVO_ID__"));
|
||||
}
|
||||
@ -56,10 +56,10 @@ void Collection::insert(nlohmann::json &json) {
|
||||
}
|
||||
|
||||
std::string id = json["__INVO_ID__"].get<std::string>();
|
||||
int add = PageManager::Instance().saveJSONToFile(json);
|
||||
int add = PageManager::saveJSONToFile(json);
|
||||
uuid->insert(id, add);
|
||||
|
||||
//Logger::info<std::string, std::string>("INSERT ", json.dump());
|
||||
Logger::info<std::string, std::string>("INSERT ", json.dump());
|
||||
|
||||
// add index
|
||||
indexJSON("", json, add);
|
||||
@ -75,11 +75,11 @@ void Collection::remove(const nlohmann::json &json) {
|
||||
int address = uuid->find(id);
|
||||
uuid->remove(id);
|
||||
|
||||
nlohmann::json jsonInDisk = PageManager::Instance().readJSONFromFile(address);
|
||||
nlohmann::json jsonInDisk = PageManager::readJSONFromFile(address);
|
||||
|
||||
clearIndex("", json, address);
|
||||
|
||||
PageManager::Instance().release(address);
|
||||
PageManager::release(address);
|
||||
}
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ void Collection::test() {
|
||||
List<int, 4> list(qq->find(q));
|
||||
//list.print();
|
||||
for(auto& add : list.all()) {
|
||||
std::cout << ">> " << PageManager::Instance().readJSONFromFile(add).dump() << std::endl;
|
||||
std::cout << ">> " << PageManager::readJSONFromFile(add).dump() << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,6 +35,8 @@ private:
|
||||
void insertIndex(const std::string indexName, const std::string indexValue, const int& address);
|
||||
void insertIndex(const std::string indexName, double indexValue, const int& address);
|
||||
void insertIndex(const std::string indexName, bool indexValue, const int& address);
|
||||
void insertNullIndex(const std::string indexName, const int& address);
|
||||
void removeNullIndex(const std::string indexName, const int& address);
|
||||
void clearIndex(const std::string prefix, const nlohmann::json &json, const int& address);
|
||||
void removeIndex(const std::string indexName, const std::string indexValue, const int& address);
|
||||
void removeIndex(const std::string indexName, double indexValue, const int& address);
|
||||
@ -48,7 +50,8 @@ private:
|
||||
std::set<nlohmann::json> queryString(const std::string &prefix, const std::string &minValue, const std::string &maxValue, const int &mod = 0);
|
||||
std::set<nlohmann::json> queryNumber(const std::string &prefix, const double &minValue, const double &maxValue, const int &mod = 0);
|
||||
std::set<nlohmann::json> queryBool(const std::string &prefix, const bool &value);
|
||||
std::set<nlohmann::json> queryRange(const std::string &prefix, const nlohmann::json &json);
|
||||
std::set<nlohmann::json> queryNull(const std::string &prefix);
|
||||
std::set<nlohmann::json> queryRange(const std::string &prefix, nlohmann::json json);
|
||||
std::set<nlohmann::json> queryAllByField(const std::string &fieldName);
|
||||
|
||||
static std::map<std::string, Collection*> map;
|
||||
|
@ -14,6 +14,7 @@ void Collection::indexJSON(const std::string prefix, const nlohmann::json &json,
|
||||
if(value.is_boolean()) insertIndex(prefix + key, value.get<bool>(), address);
|
||||
if(value.is_number()) insertIndex(prefix + key, value.get<double>(), address);
|
||||
if(value.is_string()) insertIndex(prefix + key, value.get<std::string>(), address);
|
||||
if(value.is_null()) insertNullIndex(prefix + key, address);
|
||||
if(value.is_object()) indexJSON(prefix + key + ".", value.get<nlohmann::json>(),address);
|
||||
if(value.is_array()) {
|
||||
for(auto& element : value.get<nlohmann::json>()) {
|
||||
@ -33,13 +34,13 @@ void Collection::insertIndex(const std::string indexName, const std::string inde
|
||||
//printf("INDEX TO %s: %s = \"%s\" add:(%d)\n", treeName.c_str(), indexName.c_str(), indexValue.c_str(), address);
|
||||
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::Instance().allocate());
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
|
||||
BTree<std::string, 64> indexTree(index->find(treeName));
|
||||
|
||||
if(!indexTree.exists(indexValue)) {
|
||||
indexTree.insert(indexValue, PageManager::Instance().allocate());
|
||||
indexTree.insert(indexValue, PageManager::allocate());
|
||||
}
|
||||
|
||||
List<int, 4> list(indexTree.find(indexValue));
|
||||
@ -53,13 +54,13 @@ void Collection::insertIndex(const std::string indexName, double indexValue, con
|
||||
|
||||
std::string treeName = indexName + "$number";
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::Instance().allocate());
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
|
||||
BTree<double, 8> indexTree(index->find(treeName));
|
||||
|
||||
if(!indexTree.exists(indexValue)) {
|
||||
indexTree.insert(indexValue, PageManager::Instance().allocate());
|
||||
indexTree.insert(indexValue, PageManager::allocate());
|
||||
}
|
||||
|
||||
List<int, 4> list(indexTree.find(indexValue));
|
||||
@ -71,13 +72,13 @@ void Collection::insertIndex(const std::string indexName, bool indexValue, const
|
||||
|
||||
std::string treeName = indexName + "$boolean";
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::Instance().allocate());
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
|
||||
BTree<bool, 1> indexTree(index->find(treeName));
|
||||
|
||||
if(!indexTree.exists(indexValue)) {
|
||||
indexTree.insert(indexValue, PageManager::Instance().allocate());
|
||||
indexTree.insert(indexValue, PageManager::allocate());
|
||||
}
|
||||
|
||||
List<int, 4> list(indexTree.find(indexValue));
|
||||
@ -91,6 +92,7 @@ void Collection::clearIndex(const std::string prefix, const nlohmann::json &json
|
||||
if(value.is_number()) removeIndex(prefix + key, value.get<double>(), address);
|
||||
if(value.is_boolean()) removeIndex(prefix + key, value.get<bool>(), address);
|
||||
if(value.is_object()) clearIndex(prefix + key + ".", value.get<nlohmann::json>(),address);
|
||||
if(value.is_null()) removeNullIndex(prefix + key, address);
|
||||
if(value.is_array()) {
|
||||
for(auto& element : value.get<nlohmann::json>()) {
|
||||
if(element.is_string()) removeIndex(prefix + key, element.get<std::string>(), address);
|
||||
@ -106,13 +108,13 @@ void Collection::removeIndex(const std::string indexName, const std::string inde
|
||||
|
||||
std::string treeName = indexName + "$string";
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::Instance().allocate());
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
|
||||
BTree<std::string, 128> indexTree(index->find(treeName));
|
||||
|
||||
if(!indexTree.exists(indexValue)) {
|
||||
indexTree.insert(indexValue, PageManager::Instance().allocate());
|
||||
indexTree.insert(indexValue, PageManager::allocate());
|
||||
}
|
||||
|
||||
List<int, 4> list(indexTree.find(indexValue));
|
||||
@ -124,13 +126,13 @@ void Collection::removeIndex(const std::string indexName, double indexValue, con
|
||||
|
||||
std::string treeName = indexName + "$number";
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::Instance().allocate());
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
|
||||
BTree<double, 8> indexTree(index->find(treeName));
|
||||
|
||||
if(!indexTree.exists(indexValue)) {
|
||||
indexTree.insert(indexValue, PageManager::Instance().allocate());
|
||||
indexTree.insert(indexValue, PageManager::allocate());
|
||||
}
|
||||
|
||||
List<int, 4> list(indexTree.find(indexValue));
|
||||
@ -142,15 +144,33 @@ void Collection::removeIndex(const std::string indexName, bool indexValue, const
|
||||
|
||||
std::string treeName = indexName + "$boolean";
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::Instance().allocate());
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
|
||||
BTree<bool, 1> indexTree(index->find(treeName));
|
||||
|
||||
if(!indexTree.exists(indexValue)) {
|
||||
indexTree.insert(indexValue, PageManager::Instance().allocate());
|
||||
indexTree.insert(indexValue, PageManager::allocate());
|
||||
}
|
||||
|
||||
List<int, 4> list(indexTree.find(indexValue));
|
||||
list.remove(address);
|
||||
}
|
||||
|
||||
void Collection::insertNullIndex(const std::string indexName, const int& address) {
|
||||
std::string treeName = indexName + "$null";
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
List<int, 4> list(index->find(treeName));
|
||||
list.insert(address);
|
||||
}
|
||||
|
||||
void Collection::removeNullIndex(const std::string indexName, const int& address) {
|
||||
std::string treeName = indexName + "$null";
|
||||
if(!index->exists(treeName)) {
|
||||
index->insert(treeName, PageManager::allocate());
|
||||
}
|
||||
List<int, 4> list(index->find(treeName));
|
||||
list.remove(address);
|
||||
}
|
@ -24,92 +24,188 @@ std::vector<nlohmann::json> Collection::query(const nlohmann::json &json) {
|
||||
* mod = 7: value >= minValue
|
||||
*/
|
||||
|
||||
std::set<nlohmann::json> Collection::queryRange(const std::string &prefix, const nlohmann::json &json) {
|
||||
std::set<nlohmann::json> Collection::queryRange(const std::string &prefix, nlohmann::json json) {
|
||||
|
||||
std::set<nlohmann::json> set;
|
||||
bool init = false;
|
||||
|
||||
// grammer check
|
||||
bool isNumber;
|
||||
bool nInit = false;
|
||||
for(auto& [key, value] : json.items()) {
|
||||
if(key == "$or") {
|
||||
auto arr = value.get<nlohmann::json>();
|
||||
std::set<nlohmann::json> tmp;
|
||||
for(auto& q : arr) {
|
||||
tmp = setUnion(tmp, queryRange(prefix, q.get<nlohmann::json>()));
|
||||
}
|
||||
if(init) set = setIntersection(set, tmp);
|
||||
else set = tmp, init = true;
|
||||
} else if(key == "$ne") {
|
||||
// do nothing
|
||||
} else if(!nInit) {
|
||||
if(value.is_string()) {
|
||||
isNumber = false;
|
||||
} else if(value.is_number()) {
|
||||
isNumber = true;
|
||||
} else {
|
||||
throw "unvalid query json.";
|
||||
}
|
||||
nInit = true;
|
||||
} else {
|
||||
//printf("hello: %s %d %d\n", key.c_str(),isNumber && !value.is_number(), !isNumber && !value.is_string());
|
||||
if((isNumber && !value.is_number()) || (!isNumber && !value.is_string())) {
|
||||
throw "unvalid query json.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(isNumber) {
|
||||
if(json.contains("$gt") && json.contains("$gte")) {
|
||||
auto gt = json["$gt"].get<double>();
|
||||
auto gte = json["$gte"].get<double>();
|
||||
if(gte > gt) {
|
||||
json.erase("$gt");
|
||||
} else {
|
||||
json.erase("$gte");
|
||||
}
|
||||
}
|
||||
|
||||
if(json.contains("$lt") && json.contains("$lte")) {
|
||||
auto lt = json["$lt"].get<double>();
|
||||
auto lte = json["$lte"].get<double>();
|
||||
if(lt <= lte) {
|
||||
json.erase("$lte");
|
||||
} else {
|
||||
json.erase("$lt");
|
||||
}
|
||||
}
|
||||
|
||||
std::set<nlohmann::json> tmp;
|
||||
|
||||
if(json.contains("$gt")) {
|
||||
if(json.contains("$lt")) {
|
||||
tmp = queryNumber(prefix, json["$gt"].get<double>(), json["$lt"].get<double>(), 3);
|
||||
} else if(json.contains("$lte")) {
|
||||
tmp = queryNumber(prefix, json["$gt"].get<double>(), json["$lte"].get<double>(), 1);
|
||||
} else {
|
||||
|
||||
tmp = queryNumber(prefix, json["$gt"].get<double>(), 0, 6);
|
||||
|
||||
}
|
||||
} else if(json.contains("$gte")) {
|
||||
if(json.contains("$lt")) {
|
||||
tmp = queryNumber(prefix, json["$gte"].get<double>(), json["$lt"].get<double>(), 2);
|
||||
} else if(json.contains("$lte")) {
|
||||
tmp = queryNumber(prefix, json["$gte"].get<double>(), json["$lte"].get<double>(), 0);
|
||||
} else {
|
||||
tmp = queryNumber(prefix, json["$gte"].get<double>(), 0, 7);
|
||||
}
|
||||
} else if(json.contains("$lt")) {
|
||||
tmp = queryNumber(prefix, 0, json["$lt"].get<double>(), 4);
|
||||
} else if(json.contains("$lte")) {
|
||||
tmp = queryNumber(prefix, 0, json["$lte"].get<double>(), 5);
|
||||
}
|
||||
|
||||
if(init) set = setIntersection(set, tmp);
|
||||
else set = tmp, init = true;
|
||||
|
||||
} else {
|
||||
if(json.contains("$gt") && json.contains("$gte")) {
|
||||
auto gt = json["$gt"].get<std::string>();
|
||||
auto gte = json["$gte"].get<std::string>();
|
||||
if(gte > gt) {
|
||||
json.erase("$gt");
|
||||
} else {
|
||||
json.erase("$gte");
|
||||
}
|
||||
}
|
||||
|
||||
if(json.contains("$lt") && json.contains("$lte")) {
|
||||
auto lt = json["$lt"].get<std::string>();
|
||||
auto lte = json["$lte"].get<std::string>();
|
||||
if(lt <= lte) {
|
||||
json.erase("$lte");
|
||||
} else {
|
||||
json.erase("$lt");
|
||||
}
|
||||
}
|
||||
|
||||
std::set<nlohmann::json> tmp;
|
||||
|
||||
if(json.contains("$gt")) {
|
||||
if(json.contains("$lt")) {
|
||||
tmp = queryString(prefix, json["$gt"].get<std::string>(), json["$lt"].get<std::string>(), 3);
|
||||
} else if(json.contains("$lte")) {
|
||||
tmp = queryString(prefix, json["$gt"].get<std::string>(), json["$lte"].get<std::string>(), 1);
|
||||
} else {
|
||||
tmp = queryString(prefix, json["$gt"].get<std::string>(), "", 6);
|
||||
}
|
||||
} else if(json.contains("$gte")) {
|
||||
if(json.contains("$lt")) {
|
||||
tmp = queryString(prefix, json["$gte"].get<std::string>(), json["$lt"].get<std::string>(), 2);
|
||||
} else if(json.contains("$lte")) {
|
||||
tmp = queryString(prefix, json["$gte"].get<std::string>(), json["$lte"].get<std::string>(), 0);
|
||||
} else {
|
||||
tmp = queryString(prefix, json["$gte"].get<std::string>(), "", 7);
|
||||
}
|
||||
} else if(json.contains("$lt")) {
|
||||
tmp = queryString(prefix, "", json["$lt"].get<std::string>(), 4);
|
||||
} else if(json.contains("$lte")) {
|
||||
tmp = queryString(prefix, "", json["$lte"].get<std::string>(), 5);
|
||||
}
|
||||
|
||||
if(init) set = setIntersection(set, tmp);
|
||||
else set = tmp, init = true;
|
||||
}
|
||||
|
||||
if(!init) set = queryAllByField(prefix);
|
||||
|
||||
printf(">> queryRange prefix: %s query: %s\n", prefix.c_str(), json.dump().c_str());
|
||||
|
||||
std::set<nlohmann::json> set;
|
||||
printf("result: \n");
|
||||
for(auto it=set.begin(); it!=set.end(); it++) {
|
||||
printf(" - %s\n", it->dump().c_str());
|
||||
}
|
||||
|
||||
for(auto& [key, value] : json.items()) {
|
||||
if(value.is_number()) {
|
||||
if(json.contains("$ne")) {
|
||||
if(!index->exists(prefix+"$number")) {
|
||||
return set;
|
||||
}
|
||||
BTree<double, 8> tree(index->find(prefix+"$number"));
|
||||
for(auto& key: tree.keySet()) {
|
||||
if(key != json["$ne"].get<double>()) continue;
|
||||
List<int, 4> list(tree.find(key));
|
||||
for(auto& add : list.all()) {
|
||||
set.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
}
|
||||
if(json.contains("$ne")) {
|
||||
if(json["$ne"].is_null()) {
|
||||
// do nothing
|
||||
} else if(json["$ne"].is_string()) {
|
||||
List<int, 4> tree(index->find(prefix + "$null"));
|
||||
for(auto& add : tree.all()) {
|
||||
set.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
auto value = json["$ne"].get<std::string>();
|
||||
BTree<std::string, 64> indexTree(index->find(prefix + "$string"));
|
||||
if(indexTree.find(value) != -1) {
|
||||
List<int, 4> indexList(indexTree.find(value));
|
||||
for(auto& add : indexList.all()) {
|
||||
set.erase(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
else if(json.contains("$gt")) {
|
||||
if(json.contains("$lt")) {
|
||||
set = queryNumber(prefix, json["$gt"].get<double>(), json["$lt"].get<double>(), 3);
|
||||
} else if(json.contains("$lte")) {
|
||||
set = queryNumber(prefix, json["$gt"].get<double>(), json["$lte"].get<double>(), 1);
|
||||
} else {
|
||||
|
||||
set = queryNumber(prefix, json["$gt"].get<double>(), 0, 6);
|
||||
|
||||
}
|
||||
} else if(json.contains("$gte")) {
|
||||
if(json.contains("$lt")) {
|
||||
set = queryNumber(prefix, json["$gte"].get<double>(), json["$lt"].get<double>(), 2);
|
||||
} else if(json.contains("$lte")) {
|
||||
set = queryNumber(prefix, json["$gte"].get<double>(), json["$lte"].get<double>(), 0);
|
||||
} else {
|
||||
set = queryNumber(prefix, json["$gte"].get<double>(), 0, 7);
|
||||
}
|
||||
} else if(json.contains("$lt")) {
|
||||
set = queryNumber(prefix, 0, json["$lt"].get<double>(), 4);
|
||||
} else if(json.contains("$lte")) {
|
||||
set = queryNumber(prefix, 0, json["$lte"].get<double>(), 5);
|
||||
|
||||
} else if(json["$ne"].is_number()) {
|
||||
List<int, 4> tree(index->find(prefix + "$null"));
|
||||
for(auto& add : tree.all()) {
|
||||
set.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
return set;
|
||||
}
|
||||
else if(value.is_string()) {
|
||||
|
||||
if(json.contains("$ne")) {
|
||||
if(!index->exists(prefix+"$string")) {
|
||||
return set;
|
||||
}
|
||||
BTree<std::string, 64> tree(index->find(prefix+"$string"));
|
||||
for(auto& key: tree.keySet()) {
|
||||
if(key != json["$ne"].get<std::string>()) continue;
|
||||
List<int, 4> list(tree.find(key));
|
||||
for(auto& add : list.all()) {
|
||||
set.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
}
|
||||
auto value = json["$ne"].get<double>();
|
||||
BTree<double, 8> indexTree(index->find(prefix + "$number"));
|
||||
if(indexTree.find(value) != -1) {
|
||||
List<int, 4> indexList(indexTree.find(value));
|
||||
for(auto& add : indexList.all()) {
|
||||
set.erase(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
else if(json.contains("$gt")) {
|
||||
if(json.contains("$lt")) {
|
||||
set = queryString(prefix, json["$gt"].get<std::string>(), json["$lt"].get<std::string>(), 3);
|
||||
} else if(json.contains("$lte")) {
|
||||
set = queryString(prefix, json["$gt"].get<std::string>(), json["$lte"].get<std::string>(), 1);
|
||||
} else {
|
||||
set = queryString(prefix, json["$gt"].get<std::string>(), "", 6);
|
||||
}
|
||||
} else if(json.contains("$gte")) {
|
||||
if(json.contains("$lt")) {
|
||||
set = queryString(prefix, json["$gte"].get<std::string>(), json["$lt"].get<std::string>(), 2);
|
||||
} else if(json.contains("$lte")) {
|
||||
set = queryString(prefix, json["$gte"].get<std::string>(), json["$lte"].get<std::string>(), 0);
|
||||
} else {
|
||||
set = queryString(prefix, json["$gte"].get<std::string>(), "", 7);
|
||||
}
|
||||
} else if(json.contains("$lt")) {
|
||||
set = queryString(prefix, "", json["$lt"].get<std::string>(), 4);
|
||||
} else if(json.contains("$lte")) {
|
||||
set = queryString(prefix, "", json["$lte"].get<std::string>(), 5);
|
||||
}
|
||||
return set;
|
||||
} else {
|
||||
throw "unvalid query json.";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return set;
|
||||
}
|
||||
std::set<nlohmann::json> Collection::innerQuery(const std::string &prefix, const nlohmann::json &json) {
|
||||
@ -162,6 +258,14 @@ std::set<nlohmann::json> Collection::innerQuery(const std::string &prefix, const
|
||||
}
|
||||
else
|
||||
tmp = setIntersection(queryNumber(tPrefix, element.get<double>(), element.get<double>()), tmp);
|
||||
} else if(element.is_null()) {
|
||||
if (flag)
|
||||
{
|
||||
tmp = queryNull(tPrefix);
|
||||
flag = false;
|
||||
}
|
||||
else
|
||||
tmp = queryNull(tPrefix);
|
||||
}
|
||||
}
|
||||
} else if(json[key].is_boolean()) {
|
||||
@ -170,6 +274,8 @@ std::set<nlohmann::json> Collection::innerQuery(const std::string &prefix, const
|
||||
tmp = queryString(tPrefix, json[key].get<std::string>(), json[key].get<std::string>());
|
||||
} else if(json[key].is_number()) {
|
||||
tmp = queryNumber(tPrefix, json[key].get<double>(), json[key].get<double>());
|
||||
} else if(json[key].is_null()) {
|
||||
tmp = queryNull(tPrefix);
|
||||
}
|
||||
if (flag) continue;
|
||||
if(init) res = tmp, init = false;
|
||||
@ -184,9 +290,6 @@ std::set<nlohmann::json> Collection::innerQuery(const std::string &prefix, const
|
||||
}
|
||||
|
||||
if (init) return queryAllByField(prefix);
|
||||
|
||||
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
@ -199,7 +302,7 @@ std::set<nlohmann::json> Collection::queryAllByField(const std::string &fieldNa
|
||||
// return all
|
||||
if(fieldName == "") {
|
||||
for(auto& [key, value] : uuid->all()) {
|
||||
res.insert(PageManager::Instance().readJSONFromFile(value));
|
||||
res.insert(PageManager::readJSONFromFile(value));
|
||||
}
|
||||
} else {
|
||||
auto tfieldName = fieldName.substr(0, fieldName.size()-1);
|
||||
@ -211,7 +314,7 @@ std::set<nlohmann::json> Collection::queryAllByField(const std::string &fieldNa
|
||||
for(auto &[key, value] : tree.all()) {
|
||||
List<int, 4> list(value);
|
||||
for(auto& add : list.all()) {
|
||||
res.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -221,7 +324,7 @@ std::set<nlohmann::json> Collection::queryAllByField(const std::string &fieldNa
|
||||
for(auto &[key, value] : tree.all()) {
|
||||
List<int, 4> list(value);
|
||||
for(auto& add : list.all()) {
|
||||
res.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -231,10 +334,18 @@ std::set<nlohmann::json> Collection::queryAllByField(const std::string &fieldNa
|
||||
for(auto &[key, value] : tree.all()) {
|
||||
List<int, 4> list(value);
|
||||
for(auto& add : list.all()) {
|
||||
res.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if((treeID = index->find(tfieldName + "$null")) != -1) {
|
||||
List<int, 4> list(treeID);
|
||||
for(auto& add : list.all()) {
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return res;
|
||||
}
|
||||
@ -323,7 +434,7 @@ Collection::queryString(const std::string &prefix, const std::string &minValue,
|
||||
}
|
||||
List<int, 4> list(node->linkSet[i]);
|
||||
for(auto& add : list.all()) {
|
||||
res.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
if(!flag) break;
|
||||
@ -408,7 +519,7 @@ Collection::queryNumber(const std::string &prefix, const double &minValue, const
|
||||
|
||||
List<int, 4> list(node->linkSet[i]);
|
||||
for(auto& add : list.all()) {
|
||||
res.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
if(!flag) break;
|
||||
@ -438,7 +549,7 @@ Collection::queryBool(const std::string &prefix, const bool &value) {
|
||||
}
|
||||
List<int, 4> list(node->linkSet[i]);
|
||||
for(auto& add : list.all()) {
|
||||
res.insert(PageManager::Instance().readJSONFromFile(add));
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
}
|
||||
if(!flag) break;
|
||||
@ -447,3 +558,17 @@ Collection::queryBool(const std::string &prefix, const bool &value) {
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
std::set<nlohmann::json> Collection::queryNull(const std::string &prefix) {
|
||||
std::set<nlohmann::json> res;
|
||||
auto treeName = prefix + "$null";
|
||||
if(!index->exists(treeName)) {
|
||||
return res;
|
||||
}
|
||||
List<int, 4> tree(index->find(treeName));
|
||||
for(auto& add : tree.all()) {
|
||||
res.insert(PageManager::readJSONFromFile(add));
|
||||
}
|
||||
return res;
|
||||
}
|
@ -4,6 +4,9 @@
|
||||
|
||||
#include "page_manager.h"
|
||||
|
||||
std::map<int, StoragePage> PageManager::map;
|
||||
std::fstream PageManager::stream;
|
||||
|
||||
int PageManager::loadDatabase(const char *filename) {
|
||||
Instance().stream.open(filename);
|
||||
Instance().stream.seekp(0, std::ios::end);
|
||||
|
@ -16,21 +16,22 @@
|
||||
class PageManager {
|
||||
public:
|
||||
static PageManager& Instance() {
|
||||
static PageManager instance;
|
||||
return instance;
|
||||
static PageManager* instance;
|
||||
if(instance == nullptr) instance = new PageManager();
|
||||
return *instance;
|
||||
}
|
||||
static int loadDatabase(const char *filename);
|
||||
|
||||
StoragePage getPage(const int &index);
|
||||
void setPage(const int &index, const StoragePage &page);
|
||||
static StoragePage getPage(const int &index);
|
||||
static void setPage(const int &index, const StoragePage &page);
|
||||
template<typename T>
|
||||
static std::shared_ptr<T> getNode(const int &index);
|
||||
int allocate();
|
||||
void release(const int &index, const bool &next = true);
|
||||
int saveJSONToFile(const nlohmann::json& json);
|
||||
nlohmann::json readJSONFromFile(const int &index);
|
||||
std::map<int, StoragePage> map;
|
||||
std::fstream stream;
|
||||
static int allocate();
|
||||
static void release(const int &index, const bool &next = true);
|
||||
static int saveJSONToFile(const nlohmann::json& json);
|
||||
static nlohmann::json readJSONFromFile(const int &index);
|
||||
static std::map<int, StoragePage> map;
|
||||
static std::fstream stream;
|
||||
// 私有化实现单例
|
||||
PageManager() {}
|
||||
~PageManager() {}
|
||||
|
@ -54,7 +54,7 @@ void StoragePage::setStringStartFrom(const int &index, const std::string &str) {
|
||||
}
|
||||
|
||||
void StoragePage::save() {
|
||||
PageManager::Instance().setPage(address, *this);
|
||||
PageManager::setPage(address, *this);
|
||||
}
|
||||
|
||||
int StoragePage::getAddress() {
|
||||
|
@ -54,7 +54,7 @@ void terminal() {
|
||||
|
||||
void testAndBenchmark(int n) {
|
||||
|
||||
auto btree = new BTree<std::string, 128>(PageManager::Instance().allocate());
|
||||
auto btree = new BTree<std::string, 128>(PageManager::allocate());
|
||||
|
||||
printf("nodeSize: %d\n", btree->getNodeSize());
|
||||
|
||||
|
693
yarn.lock
693
yarn.lock
@ -2,700 +2,7 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@gar/promisify@^1.0.1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210"
|
||||
integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==
|
||||
|
||||
"@npmcli/fs@^1.0.0":
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.0.0.tgz#589612cfad3a6ea0feafcb901d29c63fd52db09f"
|
||||
integrity sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==
|
||||
dependencies:
|
||||
"@gar/promisify" "^1.0.1"
|
||||
semver "^7.3.5"
|
||||
|
||||
"@npmcli/move-file@^1.0.1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674"
|
||||
integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
|
||||
dependencies:
|
||||
mkdirp "^1.0.4"
|
||||
rimraf "^3.0.2"
|
||||
|
||||
"@tootallnate/once@1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
|
||||
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
|
||||
|
||||
abbrev@1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
|
||||
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
|
||||
|
||||
agent-base@6, agent-base@^6.0.2:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||
integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
|
||||
dependencies:
|
||||
debug "4"
|
||||
|
||||
agentkeepalive@^4.1.3:
|
||||
version "4.1.4"
|
||||
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b"
|
||||
integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==
|
||||
dependencies:
|
||||
debug "^4.1.0"
|
||||
depd "^1.1.2"
|
||||
humanize-ms "^1.2.1"
|
||||
|
||||
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"
|
||||
|
||||
ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
|
||||
|
||||
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==
|
||||
|
||||
aproba@^1.0.3:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||
|
||||
are-we-there-yet@~1.1.2:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146"
|
||||
integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==
|
||||
dependencies:
|
||||
delegates "^1.0.0"
|
||||
readable-stream "^2.0.6"
|
||||
|
||||
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==
|
||||
|
||||
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"
|
||||
|
||||
cacache@^15.2.0:
|
||||
version "15.3.0"
|
||||
resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb"
|
||||
integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
|
||||
dependencies:
|
||||
"@npmcli/fs" "^1.0.0"
|
||||
"@npmcli/move-file" "^1.0.1"
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.0.0"
|
||||
glob "^7.1.4"
|
||||
infer-owner "^1.0.4"
|
||||
lru-cache "^6.0.0"
|
||||
minipass "^3.1.1"
|
||||
minipass-collect "^1.0.2"
|
||||
minipass-flush "^1.0.5"
|
||||
minipass-pipeline "^1.2.2"
|
||||
mkdirp "^1.0.3"
|
||||
p-map "^4.0.0"
|
||||
promise-inflight "^1.0.1"
|
||||
rimraf "^3.0.2"
|
||||
ssri "^8.0.1"
|
||||
tar "^6.0.2"
|
||||
unique-filename "^1.1.1"
|
||||
|
||||
chownr@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
|
||||
|
||||
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==
|
||||
|
||||
code-point-at@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
|
||||
|
||||
concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
|
||||
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
|
||||
|
||||
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==
|
||||
|
||||
debug@4, debug@^4.1.0, debug@^4.3.1:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
|
||||
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
delegates@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
|
||||
|
||||
depd@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
|
||||
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
|
||||
|
||||
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==
|
||||
|
||||
encoding@^0.1.12:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
|
||||
integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
|
||||
dependencies:
|
||||
iconv-lite "^0.6.2"
|
||||
|
||||
env-paths@^2.2.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
|
||||
integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
|
||||
|
||||
err-code@^2.0.2:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
|
||||
integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
|
||||
|
||||
fs-minipass@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
|
||||
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
fs.realpath@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||
|
||||
gauge@~2.7.3:
|
||||
version "2.7.4"
|
||||
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
|
||||
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
|
||||
dependencies:
|
||||
aproba "^1.0.3"
|
||||
console-control-strings "^1.0.0"
|
||||
has-unicode "^2.0.0"
|
||||
object-assign "^4.1.0"
|
||||
signal-exit "^3.0.0"
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
glob@^7.1.3, glob@^7.1.4:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
|
||||
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
graceful-fs@^4.2.6:
|
||||
version "4.2.8"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
|
||||
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
|
||||
|
||||
has-unicode@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
|
||||
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
|
||||
|
||||
http-cache-semantics@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
||||
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
|
||||
|
||||
http-proxy-agent@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
|
||||
integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
|
||||
dependencies:
|
||||
"@tootallnate/once" "1"
|
||||
agent-base "6"
|
||||
debug "4"
|
||||
|
||||
https-proxy-agent@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
|
||||
integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==
|
||||
dependencies:
|
||||
agent-base "6"
|
||||
debug "4"
|
||||
|
||||
humanize-ms@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
|
||||
integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=
|
||||
dependencies:
|
||||
ms "^2.0.0"
|
||||
|
||||
iconv-lite@^0.6.2:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
||||
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
||||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3.0.0"
|
||||
|
||||
imurmurhash@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
|
||||
|
||||
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==
|
||||
|
||||
infer-owner@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
|
||||
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
|
||||
|
||||
inflight@^1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
|
||||
dependencies:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, 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==
|
||||
|
||||
ip@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
|
||||
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
|
||||
|
||||
is-fullwidth-code-point@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
|
||||
integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
|
||||
dependencies:
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
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-lambda@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
|
||||
integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=
|
||||
|
||||
isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
lru-cache@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
make-fetch-happen@^9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968"
|
||||
integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
|
||||
dependencies:
|
||||
agentkeepalive "^4.1.3"
|
||||
cacache "^15.2.0"
|
||||
http-cache-semantics "^4.1.0"
|
||||
http-proxy-agent "^4.0.1"
|
||||
https-proxy-agent "^5.0.0"
|
||||
is-lambda "^1.0.1"
|
||||
lru-cache "^6.0.0"
|
||||
minipass "^3.1.3"
|
||||
minipass-collect "^1.0.2"
|
||||
minipass-fetch "^1.3.2"
|
||||
minipass-flush "^1.0.5"
|
||||
minipass-pipeline "^1.2.4"
|
||||
negotiator "^0.6.2"
|
||||
promise-retry "^2.0.1"
|
||||
socks-proxy-agent "^6.0.0"
|
||||
ssri "^8.0.0"
|
||||
|
||||
minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minipass-collect@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
|
||||
integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
minipass-fetch@^1.3.2:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6"
|
||||
integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==
|
||||
dependencies:
|
||||
minipass "^3.1.0"
|
||||
minipass-sized "^1.0.3"
|
||||
minizlib "^2.0.0"
|
||||
optionalDependencies:
|
||||
encoding "^0.1.12"
|
||||
|
||||
minipass-flush@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
|
||||
integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
|
||||
integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
minipass-sized@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
|
||||
integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
|
||||
minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732"
|
||||
integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
minizlib@^2.0.0, minizlib@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
|
||||
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
|
||||
dependencies:
|
||||
minipass "^3.0.0"
|
||||
yallist "^4.0.0"
|
||||
|
||||
mkdirp@^1.0.3, mkdirp@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
|
||||
ms@2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
|
||||
ms@^2.0.0:
|
||||
version "2.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||
|
||||
negotiator@^0.6.2:
|
||||
version "0.6.2"
|
||||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
|
||||
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
|
||||
|
||||
node-addon-api@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87"
|
||||
integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==
|
||||
|
||||
node-gyp@^8.4.0:
|
||||
version "8.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.0.tgz#6e1112b10617f0f8559c64b3f737e8109e5a8338"
|
||||
integrity sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q==
|
||||
dependencies:
|
||||
env-paths "^2.2.0"
|
||||
glob "^7.1.4"
|
||||
graceful-fs "^4.2.6"
|
||||
make-fetch-happen "^9.1.0"
|
||||
nopt "^5.0.0"
|
||||
npmlog "^4.1.2"
|
||||
rimraf "^3.0.2"
|
||||
semver "^7.3.5"
|
||||
tar "^6.1.2"
|
||||
which "^2.0.2"
|
||||
|
||||
nopt@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88"
|
||||
integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
|
||||
dependencies:
|
||||
abbrev "1"
|
||||
|
||||
npmlog@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
|
||||
dependencies:
|
||||
are-we-there-yet "~1.1.2"
|
||||
console-control-strings "~1.1.0"
|
||||
gauge "~2.7.3"
|
||||
set-blocking "~2.0.0"
|
||||
|
||||
number-is-nan@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
|
||||
|
||||
object-assign@^4.1.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||
|
||||
once@^1.3.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
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"
|
||||
|
||||
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 sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
||||
|
||||
promise-inflight@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
|
||||
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
|
||||
|
||||
promise-retry@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
|
||||
integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
|
||||
dependencies:
|
||||
err-code "^2.0.2"
|
||||
retry "^0.12.0"
|
||||
|
||||
readable-stream@^2.0.6:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.3"
|
||||
isarray "~1.0.0"
|
||||
process-nextick-args "~2.0.0"
|
||||
safe-buffer "~5.1.1"
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
retry@^0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
|
||||
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
|
||||
|
||||
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"
|
||||
|
||||
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.0.0":
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
semver@^7.3.5:
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
|
||||
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
set-blocking@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
||||
|
||||
signal-exit@^3.0.0:
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f"
|
||||
integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==
|
||||
|
||||
smart-buffer@^4.1.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
|
||||
integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
|
||||
|
||||
socks-proxy-agent@^6.0.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3"
|
||||
integrity sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==
|
||||
dependencies:
|
||||
agent-base "^6.0.2"
|
||||
debug "^4.3.1"
|
||||
socks "^2.6.1"
|
||||
|
||||
socks@^2.6.1:
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e"
|
||||
integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==
|
||||
dependencies:
|
||||
ip "^1.1.5"
|
||||
smart-buffer "^4.1.0"
|
||||
|
||||
ssri@^8.0.0, ssri@^8.0.1:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
|
||||
integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==
|
||||
dependencies:
|
||||
minipass "^3.1.1"
|
||||
|
||||
string-width@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
|
||||
dependencies:
|
||||
code-point-at "^1.0.0"
|
||||
is-fullwidth-code-point "^1.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
|
||||
"string-width@^1.0.2 || 2 || 3 || 4":
|
||||
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_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"
|
||||
|
||||
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
|
||||
dependencies:
|
||||
ansi-regex "^2.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"
|
||||
|
||||
tar@^6.0.2, tar@^6.1.2:
|
||||
version "6.1.11"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
|
||||
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
|
||||
dependencies:
|
||||
chownr "^2.0.0"
|
||||
fs-minipass "^2.0.0"
|
||||
minipass "^3.0.0"
|
||||
minizlib "^2.1.1"
|
||||
mkdirp "^1.0.3"
|
||||
yallist "^4.0.0"
|
||||
|
||||
unique-filename@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
|
||||
integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
|
||||
dependencies:
|
||||
unique-slug "^2.0.0"
|
||||
|
||||
unique-slug@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
|
||||
integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
|
||||
dependencies:
|
||||
imurmurhash "^0.1.4"
|
||||
|
||||
util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
which@^2.0.2:
|
||||
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"
|
||||
|
||||
wide-align@^1.1.0:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
|
||||
integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
|
||||
dependencies:
|
||||
string-width "^1.0.2 || 2 || 3 || 4"
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
yallist@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
|
Loading…
x
Reference in New Issue
Block a user