diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..500c673 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,22 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es2021": true + }, + "extends": [ + "airbnb-base", + "prettier" + ], + "parserOptions": { + "ecmaVersion": 12 + }, + "rules": { + "prettier/prettier": ["error",{ + "endOfLine":"auto" + }] + }, + "plugins": [ + "prettier" + ] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/builder.js b/builder.js index 5aead99..111c026 100644 --- a/builder.js +++ b/builder.js @@ -1,82 +1,101 @@ -const utils = require('utils'); -module.exports = { - run(creep) { - if (creep.working_target_id) { - let working_target_id = creep.working_target_id; - let working_target = Game.getObjectById(working_target_id); - if(!working_target){ - // creep.working_target_id=undefined//目标已经完成,转为空闲状态 - // _.each(Memery.WorkingTarget[creep.name].working_creep_names,creep_name=>Game.creeps[creep_name].working_target_id=undefined) - // delete Memery.WorkingTarget[creep.name] - return - } - if (working_target.structureType == STRUCTURE_CONTROLLER) { - creep.say('ug') - upgradeController_job(creep) - return - } - creep.say('bd') - build_construction(creep) - }else{ - creep.say('SB') - } - } -} - +/* eslint-disable no-console */ +/* eslint-disable func-names */ +/* eslint-disable no-undef */ +/* eslint-disable camelcase */ +const utils = require("./utils"); function upgradeController_job(creep) { - let working_target_id = creep.working_target_id; - let working_target = Game.getObjectById(working_target_id); - if (utils.distance(creep.pos, working_target.pos) > 1.5) { - creep.moveTo(working_target); - } else { - let all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES) - let nearest_dropped_enengy = _.filter(all_dropped_resource, function (energy) { - return energy.resourceType == RESOURCE_ENERGY & utils.distance(energy.pos, creep.pos) < 1.5 - }) - if (nearest_dropped_enengy.length > 0) { - let Re_code_pickup = creep.pickup(nearest_dropped_enengy[0]); - if (OK == Re_code_pickup || ERR_FULL == Re_code_pickup) { - //TODO:需要适应不同的建筑 - let Re_code = creep.upgradeController(working_target) - if (OK == Re_code) { - - } else if (Re_code != ERR_NOT_ENOUGH_RESOURCES && Re_code != ERR_NOT_IN_RANGE) { - console.log(`${creep.name} failed to upgrade room controller:err ${Re_code}`) - } - } else { - console.log(`${creep.name} failed to pickup: err ${Re_code_pickup}`) - } + const { working_target_id } = creep; + const working_target = Game.getObjectById(working_target_id); + if (utils.distance(creep.pos, working_target.pos) > 1.5) { + creep.moveTo(working_target); + } else { + const all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES); + const nearest_dropped_enengy = _.filter(all_dropped_resource, function ( + energy + ) { + return ( + energy.resourceType === RESOURCE_ENERGY && + utils.distance(energy.pos, creep.pos) < 1.5 + ); + }); + if (nearest_dropped_enengy.length > 0) { + const Re_code_pickup = creep.pickup(nearest_dropped_enengy[0]); + if (OK === Re_code_pickup || ERR_FULL === Re_code_pickup) { + // TODO:需要适应不同的建筑 + const Re_code = creep.upgradeController(working_target); + // eslint-disable-next-line no-empty + if (OK === Re_code) { + } else if ( + Re_code !== ERR_NOT_ENOUGH_RESOURCES && + Re_code !== ERR_NOT_IN_RANGE + ) { + console.log( + `${creep.name} failed to upgrade room controller:err ${Re_code}` + ); } - + } else { + console.log(`${creep.name} failed to pickup: err ${Re_code_pickup}`); + } } + } } - function build_construction(creep) { - let working_target_id = creep.working_target_id; - let working_target = Game.getObjectById(working_target_id); - if (utils.distance(creep.pos, working_target.pos) > 1.5) { - creep.moveTo(working_target); - } else { - let all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES) - let nearest_dropped_enengy = _.filter(all_dropped_resource, function (energy) { - return energy.resourceType == RESOURCE_ENERGY & utils.distance(energy.pos, creep.pos) < 1.5 - }) - if (nearest_dropped_enengy.length > 0) { - let Re_code_pickup = creep.pickup(nearest_dropped_enengy[0]); - if (OK == Re_code_pickup || ERR_FULL == Re_code_pickup) { - //TODO:需要适应不同的建筑 - let Re_code = creep.build(working_target) - if (OK == Re_code) { - - } else if (Re_code != ERR_NOT_ENOUGH_RESOURCES && Re_code != ERR_NOT_IN_RANGE) { - console.log(`${creep.name} failed to build:err ${Re_code}`) - } - } else { - console.log(`${creep.name} failed to pickup: err ${Re_code_pickup}`) - } + const { working_target_id } = creep; + const working_target = Game.getObjectById(working_target_id); + if (utils.distance(creep.pos, working_target.pos) > 1.5) { + creep.moveTo(working_target); + } else { + const all_dropped_resource = creep.room.find(FIND_DROPPED_RESOURCES); + const nearest_dropped_enengy = _.filter(all_dropped_resource, function ( + energy + ) { + return ( + energy.resourceType === RESOURCE_ENERGY && + utils.distance(energy.pos, creep.pos) < 1.5 + ); + }); + if (nearest_dropped_enengy.length > 0) { + const Re_code_pickup = creep.pickup(nearest_dropped_enengy[0]); + if (OK === Re_code_pickup || ERR_FULL === Re_code_pickup) { + // TODO:需要适应不同的建筑 + const Re_code = creep.build(working_target); + // eslint-disable-next-line no-empty + if (OK === Re_code) { + } else if ( + Re_code !== ERR_NOT_ENOUGH_RESOURCES && + Re_code !== ERR_NOT_IN_RANGE + ) { + console.log(`${creep.name} failed to build:err ${Re_code}`); } - + } else { + console.log(`${creep.name} failed to pickup: err ${Re_code_pickup}`); + } } -} \ No newline at end of file + } +} + +module.exports = { + run(creep) { + if (creep.working_target_id) { + const { working_target_id } = creep; + const working_target = Game.getObjectById(working_target_id); + if (!working_target) { + // creep.working_target_id=undefined//目标已经完成,转为空闲状态 + // _.each(Memery.WorkingTarget[creep.name].working_creep_names,creep_name=>Game.creeps[creep_name].working_target_id=undefined) + // delete Memery.WorkingTarget[creep.name] + return; + } + if (working_target.structureType === STRUCTURE_CONTROLLER) { + creep.say("ug"); + upgradeController_job(creep); + return; + } + creep.say("bd"); + build_construction(creep); + } else { + creep.say("SB"); + } + }, +}; diff --git a/controller_contributer.js b/controller_contributer.js index cb94420..ba7219c 100644 --- a/controller_contributer.js +++ b/controller_contributer.js @@ -1,9 +1,13 @@ +/* eslint-disable no-undef */ module.exports = { - run(creep) { - if (Game.spawns.Spawn1.store.getFreeCapacity(RESOURCE_ENERGY) == 0) { - if (creep.transfer(Game.spawns.Spawn1.room.controller, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { - creep.moveTo(Game.spawns.Spawn1.room.controller.pos); - } - } + run(creep) { + if (Game.spawns.Spawn1.store.getFreeCapacity(RESOURCE_ENERGY) === 0) { + if ( + creep.transfer(Game.spawns.Spawn1.room.controller, RESOURCE_ENERGY) === + ERR_NOT_IN_RANGE + ) { + creep.moveTo(Game.spawns.Spawn1.room.controller.pos); + } } -} \ No newline at end of file + }, +}; diff --git a/harvester.js b/harvester.js index 9434262..d52b08d 100644 --- a/harvester.js +++ b/harvester.js @@ -1,62 +1,67 @@ -const path = require('path') -module.exports = { - run(creep) { - let status = change_status() - switch (status) { - case 'harvester': - creep.say('hv') - harvester_job(creep) - break - case 'picker': - creep.say('pc') - picker_job(creep) - break - } - } -} - +/* eslint-disable no-undef */ +/* eslint-disable camelcase */ +const path = require("path"); function harvester_job(creep) { - if (creep.carry.energy < creep.carryCapacity) { - let working_target_id = creep.working_target_id; - let working_target = Game.getObjectById(working_target_id); - if (creep.harvest(working_target) == ERR_NOT_IN_RANGE) { - creep.moveTo(working_target); - path.visualPath(creep.pos, working_target.pos); - } - } else { - if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { - creep.moveTo(Game.spawns['Spawn1']); - path.visualPath(creep.pos, Game.spawns['Spawn1'].pos); - } + if (creep.carry.energy < creep.carryCapacity) { + const { working_target_id } = creep; + const working_target = Game.getObjectById(working_target_id); + if (creep.harvest(working_target) === ERR_NOT_IN_RANGE) { + creep.moveTo(working_target); + path.visualPath(creep.pos, working_target.pos); } + } else if ( + creep.transfer(Game.spawns.Spawn1, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE + ) { + creep.moveTo(Game.spawns.Spawn1); + path.visualPath(creep.pos, Game.spawns.Spawn1.pos); + } } function picker_job(creep) { - if (Game.spawns['Spawn1'].store.getFreeCapacity(RESOURCE_ENERGY) == 0) { - creep.say('SB') - return - } - let working_target_id = creep.working_target_id; - if (!working_target_id) { - creep.say('SB') - } - let working_target = Game.getObjectById(working_target_id); - let Re_code = creep.harvest(working_target); - if (Re_code == ERR_NOT_IN_RANGE) { - creep.moveTo(working_target); - } else { - if (OK == Re_code) { - creep.harvest(working_target); - creep.drop(RESOURCE_ENERGY); - } - } + if (Game.spawns.Spawn1.store.getFreeCapacity(RESOURCE_ENERGY) === 0) { + creep.say("SB"); + return; + } + const { working_target_id } = creep; + if (!working_target_id) { + creep.say("SB"); + } + const working_target = Game.getObjectById(working_target_id); + const Re_code = creep.harvest(working_target); + if (Re_code === ERR_NOT_IN_RANGE) { + creep.moveTo(working_target); + } else if (OK === Re_code) { + creep.harvest(working_target); + creep.drop(RESOURCE_ENERGY); + } } function change_status() { - if (_(Game.creeps).filter({ memory: { role: 'transfer' } }).size() > 0) { - return 'picker' - } else { - return 'harvester' + if ( + _(Game.creeps) + .filter({ memory: { role: "transfer" } }) + .size() > 0 + ) { + return "picker"; + } + return "harvester"; +} + +module.exports = { + run(creep) { + const status = change_status(); + switch (status) { + case "harvester": + creep.say("hv"); + harvester_job(creep); + break; + case "picker": + creep.say("pc"); + picker_job(creep); + break; + default: + break; } -} \ No newline at end of file + }, +}; diff --git a/init.js b/init.js index 0acb3b8..be12a19 100644 --- a/init.js +++ b/init.js @@ -1,16 +1,14 @@ - - +/* eslint-disable no-undef */ module.exports = { - init() { - if (!Memory.Task) { - Memory.Task = {} - }; - Memory.Task.HighPorioty = []; - Memory.Task.LowPorioty = []; - //WorkingTarget是被跟踪物,可以是一个structure、energy、constructionSite,也可以是一个creep - if (!Memory.WorkingTarget) { - Memory.WorkingTarget = {} - }; + init() { + if (!Memory.Task) { + Memory.Task = {}; } -} - + Memory.Task.HighPorioty = []; + Memory.Task.LowPorioty = []; + // WorkingTarget是被跟踪物,可以是一个structure、energy、constructionSite,也可以是一个creep + if (!Memory.WorkingTarget) { + Memory.WorkingTarget = {}; + } + }, +}; diff --git a/main.js b/main.js index 5069071..ede8834 100644 --- a/main.js +++ b/main.js @@ -1,298 +1,402 @@ -const init = require('init') -const util = require('utils'); -const mount = require('mount') -module.exports.loop = function () { - extra() - init.init(); - mount.mount() - cleanCreeps() - cleanInvalidMemoryCreep() - cleanTargetMemory() - assign_harvester_to_enery_source(); - assign_transfer_to_harvester() - assign_builder_to_controller(); - assign_transfer_to_builder(); - let construction_site_array = Game.spawns['Spawn1'].room.find(FIND_MY_CONSTRUCTION_SITES) - _.each(construction_site_array, function (found_construction_site) { - let constuction_key = `CONSTRUCTION_${found_construction_site.id}` - if (Memory.WorkingTarget[constuction_key] && Memory.WorkingTarget[constuction_key].working_creep_names.length == 0) { - assign_builder_to_construction(found_construction_site.id) - } - - }) - let isSpawning = false - let energy_source_number = _.filter(Game.spawns['Spawn1'].room.find(FIND_SOURCES_ACTIVE)).length; - let harvester_number = _(Game.creeps).filter({ memory: { role: 'harvester' } }).size(); - if (!Game.spawns['Spawn1'].spawning) { - if (harvester_number < energy_source_number) { - isSpawning = true - createHarvestCreep(); - } - if (_(Game.creeps).filter({ memory: { role: 'transfer' } }).size() < energy_source_number && !isSpawning) { - isSpawning = true - createTransferCreep(); - } - let builder_number = _.filter(Game.creeps, { memory: { role: 'builder' } }).length - //创造一个builder升级room controller - if (Game.spawns['Spawn1'].room.controller && builder_number < (1 + construction_site_array.length) && !isSpawning) { - isSpawning = true - createBuilderCreep(); - } - //判断是否需要再增加1个transfer - let transfer_number = _.filter(Game.creeps, { memory: { role: 'transfer' } }).length - if ((builder_number + harvester_number) > transfer_number && !isSpawning) { - isSpawning = true - createTransferCreep(); - } - } - assign_task(); - -} - +/* eslint-disable no-console */ +/* eslint-disable no-undef */ +/* eslint-disable func-names */ +/* eslint-disable camelcase */ +const mount = require("./mount"); +const init = require("./init"); +const util = require("./utils"); function extra() { - // Game.map.visual.circle(Game.getObjectById('5bbcaaeb9099fc012e6326f1').pos) - // console.log(Game.getObjectById('5f953aa1ad1f54190745a9c3').pos) - // Memory.WorkingTarget.CONSTRUCTION_5f952fea10782b5f4ec3690a.working_creep_names=[] + // Game.map.visual.circle(Game.getObjectById('5bbcaaeb9099fc012e6326f1').pos) + // console.log(Game.getObjectById('5f953aa1ad1f54190745a9c3').pos) + // Memory.WorkingTarget.CONSTRUCTION_5f952fea10782b5f4ec3690a.working_creep_names=[] } function cleanCreeps() { - for (let i in Memory.creeps) { - if (!Game.creeps[i]) { - console.log(`${i} is invalid, removed from Memory.creeps`) - delete Memory.creeps[i]; - } + _.each(Object.keys(Memory.creeps), function (key) { + if (!Game.creeps[key]) { + console.log(`${key} is invalid, removed from Memory.creeps`); + delete Memory.creeps[key]; } + }); } function cleanInvalidMemoryCreep() { - //清理Memory中已经不存在的creep - _.each(Memory.WorkingTarget, function (target) { - _.remove(target.working_creep_names, function (creep_name) { - if (!Game.creeps[creep_name]) { - console.log(`${creep_name} is invalid, removed from working_creep_names`) - return true - } - return false - - }) - }) + // 清理Memory中已经不存在的creep + _.each(Memory.WorkingTarget, function (target) { + _.remove(target.working_creep_names, function (creep_name) { + if (!Game.creeps[creep_name]) { + console.log( + `${creep_name} is invalid, removed from working_creep_names` + ); + return true; + } + return false; + }); + }); } function cleanTargetMemory() { - for (let i of Object.keys(Memory.WorkingTarget)) { - let target = Memory.WorkingTarget[i] - if (!Game.getObjectById(target.id)) { - console.log(`target ${target.id} is invalid, removed from Memory.WorkingTarget.Set their creep to idle`) - _.each(Memory.WorkingTarget[i].working_creep_names, creep_name => creep_name.working_target_id = undefined) - delete Memory.WorkingTarget[i]; - } + _.each(Object.keys(Memory.WorkingTarget), function (target) { + if (!Game.getObjectById(target.id)) { + console.log( + `target ${target.id} is invalid, removed from Memory.WorkingTarget.Set their creep to idle` + ); + _.each(target.working_creep_names, (creep_name) => { + Game.creeps[creep_name].working_target_id = undefined; + }); + delete Memory.WorkingTarget[i]; } + }); } +function assign_creeps(opt) { + const { memory } = opt; + const { creep_name_to_assign_array } = opt; // 需要分配工作的creeps + _.each(creep_name_to_assign_array, function (creep_name) { + // 先计算每一个target目前有多少个creeps了 + const working_creeps_of_target_array = []; // 记录每个target已有的creep数量 + _.each(memory, (m) => + working_creeps_of_target_array.push(m.working_creep_names.length) + ); + const target_to_add_creep = _.filter( + memory, + (m) => + m.working_creep_names.length === _.min(working_creeps_of_target_array) + ); // 选择目前已有creep最少的,对其添加creep + if (target_to_add_creep.length > 0) { + target_to_add_creep[0].working_creep_names.push(creep_name); // target记录自己安排的creep + Game.creeps[creep_name].working_target_id = target_to_add_creep[0].id; // 将target安排给creep + } + }); +} function assign_transfer(target_memory) { - const NO_IDLE_TRANSFER = -1 - const OK_TRANSFER = 0 - if (target_memory.length > 0) { - let idle_transfer = _.filter(Game.creeps, creep => !creep.working_target_id && (creep.memory.role == 'transfer')) - if (idle_transfer.length > 0) {//一次只安排一个creep - let opt = { - memory: target_memory, - creep_name_to_assign_array: [idle_transfer[0].name] - } - assign_creeps(opt) - return OK_TRANSFER - } else { - return NO_IDLE_TRANSFER - - } + const NO_IDLE_TRANSFER = -1; + const OK_TRANSFER = 0; + const MEMORY_EMPTY = -2; + if (target_memory.length > 0) { + const idle_transfer = _.filter( + Game.creeps, + (creep) => !creep.working_target_id && creep.memory.role === "transfer" + ); + if (idle_transfer.length > 0) { + // 一次只安排一个creep + const opt = { + memory: target_memory, + creep_name_to_assign_array: [idle_transfer[0].name], + }; + assign_creeps(opt); + return OK_TRANSFER; } + return NO_IDLE_TRANSFER; + } + return MEMORY_EMPTY; } -//TODO:应该和assign_transfer_to_builder合并 +// TODO:应该和assign_transfer_to_builder合并 function assign_transfer_to_harvester() { - //判断有多少个picker的transfer为0 - let harvester_without_creep = _.filter(Game.creeps, function (creep) { - return !Memory.WorkingTarget[creep.name] && creep.memory.role == 'harvester'//Memory.WorkingTarget中没有这个harvester目标 - }) - _.each(harvester_without_creep, function (harvester_creep) { - Memory.WorkingTarget[harvester_creep.name] = { id: harvester_creep.id, working_creep_names: [], cate: 'harvester' }//在Memory.WorkingTarget加入需要creep的Picker - }) - let harvester_needs_creep_memory = _.filter(Memory.WorkingTarget, memory => memory.working_creep_names.length == 0 && memory.cate == 'harvester')//需要安排creep的harvester - assign_transfer(harvester_needs_creep_memory) + // 判断有多少个picker的transfer为0 + const harvester_without_creep = _.filter(Game.creeps, function (creep) { + return ( + !Memory.WorkingTarget[creep.name] && creep.memory.role === "harvester" + ); // Memory.WorkingTarget中没有这个harvester目标 + }); + _.each(harvester_without_creep, function (harvester_creep) { + Memory.WorkingTarget[harvester_creep.name] = { + id: harvester_creep.id, + working_creep_names: [], + cate: "harvester", + }; // 在Memory.WorkingTarget加入需要creep的Picker + }); + const harvester_needs_creep_memory = _.filter( + Memory.WorkingTarget, + (memory) => + memory.working_creep_names.length === 0 && memory.cate === "harvester" + ); // 需要安排creep的harvester + assign_transfer(harvester_needs_creep_memory); } function assign_task() { - for (const creep_id in Game.creeps) { - let creep = Game.creeps[creep_id]; - creep.action(); - } - -} - - -function assign_transfer_to_builder() { - //判断有多少个builder的transfer为0 - let builder_without_creep = _.filter(Game.creeps, function (creep) { - return !Memory.WorkingTarget[creep.name] && creep.memory.role == 'builder'//Memory.WorkingTarget中没有这个builder目标 - }) - _.each(builder_without_creep, function (builder) { - Memory.WorkingTarget[builder.name] = { id: builder.id, working_creep_names: [], cate: 'builder' }//在Memory.WorkingTarget加入需要creep的builder - }) - let builder_needs_creep_memory = _.filter(Memory.WorkingTarget, memory => memory.working_creep_names.length == 0 && memory.cate == 'builder')//需要安排creep的builder - if (assign_transfer(builder_needs_creep_memory) == -1) { - console.log(`no enough transfer to builder. Try to create a new one autmatically`) - createBuilderCreep() - } -} - -function assign_builder_to_construction(construction_id) { - //检查construction是否已经是target - let constuction_key = `CONSTRUCTION_${construction_id}` - if (!_.find(Memory.WorkingTarget, target => target.id == construction_id)) { - Memory.WorkingTarget[constuction_key] = { id: construction_id, working_creep_names: [], cate: 'constuction_site' } - } - //安排一个builder过去 - let builder = _.filter(Game.creeps, creep => creep.memory.role == 'builder' && !creep.working_target_id) - if (builder.length > 0) { - - let opt = { - memory: _.filter(Memory.WorkingTarget, _memory => _memory.working_creep_names.length == 0 && _memory.cate == 'constuction_site'), - creep_name_to_assgin_array: [builder[0].name] - } - assign_creeps(opt) - } else { - console.log(`no enough builder to constuction_site ${construction_id}. Try to create a new one autmatically`) - createBuilderCreep() - } - // //开始给建造constrction的每个creep安排transfer - // _.each(Memory.WorkingTarget[constuction_key].working_creep_names,function(builder_creep_name){ - // if(!Memory.WorkingTarget[builder_creep_name]){ - // Memory.WorkingTarget[builder_creep_name]={id:Game.creeps[builder_creep_name].id,working_creep_names: [], cate: 'builder'} - // } - // }) -} - - -function assign_creeps(opt) { - let memory = opt.memory - let creep_name_to_assign_array = opt.creep_name_to_assign_array//需要分配工作的creeps - _.each(creep_name_to_assign_array, function (creep_name) { - //先计算每一个target目前有多少个creeps了 - let working_creeps_of_target_array = []//记录每个target已有的creep数量 - _.each(memory, m => working_creeps_of_target_array.push(m.working_creep_names.length)) - let target_to_add_creep = _.filter(memory, m => m.working_creep_names.length == _.min(working_creeps_of_target_array))//选择目前已有creep最少的,对其添加creep - console.log(target_to_add_creep.length) - if (target_to_add_creep.length > 0) { - target_to_add_creep[0].working_creep_names.push(creep_name)//target记录自己安排的creep - Game.creeps[creep_name].working_target_id = target_to_add_creep[0].id//将target安排给creep - } - }) - - -} - -function assign_harvester_to_enery_source() { - let sources = Game.spawns['Spawn1'].room.find(FIND_SOURCES_ACTIVE); - let all_memory = Memory.WorkingTarget - for (let source of sources) { - let id = source.id - if (!_.find(all_memory, f => f['id'] == id)) { - all_memory[`Energy_${id}`] = { 'id': id, 'working_creep_names': [], "cate": 'ENERGY_SOURCE' }; - } - }//向Memory.WorkingTarget里添加所有的Energy Source - //寻找Energy Source的Memory - let energy_memory = _.filter(all_memory, { cate: 'ENERGY_SOURCE' }) - //寻找creep为0的energy source - let energy_source_need_creep_array = _.filter(energy_memory, m => m.working_creep_names.length == 0) - if (energy_source_need_creep_array.length > 0) { - //找到一个空闲的creep - let available_creep_array = _.filter(Game.creeps, creep => !creep.working_target_id && creep.memory.role == 'harvester') - if (available_creep_array.length > 0) {//每次只安排一个 - let opt = { - memory: energy_memory, - creep_name_to_assign_array: [available_creep_array[0].name] - } - assign_creeps(opt) - } - } - - -} - -function assign_builder_to_controller() { - //如果存在正在建造的construction,且没有多余的builder,就暂停upgrade controller - if (Game.spawns['Spawn1'].room.find(FIND_MY_CONSTRUCTION_SITES).length > 0) { - let working_builder = _.filter(Game.creeps, creep => creep.memory.role == 'builder' && !creep.working_target_id) - if (working_builder.length == 0) {//没有可以用的builder了 - let controller_id = Game.spawns['Spawn1'].room.controller.id - let controller_memory = Memory.WorkingTarget[`RoomController_${controller_id}`] - if (controller_memory) { - _.each(controller_memory.working_creep_names, creep_name => Game.creeps[creep_name].working_target_id = 0) - memory.working_creep_names = [] - return - } - } - } - //判断room controller 是否有creep,没有则添加 - if (!_.find(Memory.WorkingTarget, target => target.id == Game.spawns['Spawn1'].room.controller.id)) { - Memory.WorkingTarget[`RoomController_${Game.spawns['Spawn1'].room.controller.id}`] = { id: Game.spawns['Spawn1'].room.controller.id, working_creep_names: [], cate: 'ROOM_CONTROLLER' } - } - let room_controller_mem = _.filter(Memory.WorkingTarget, { cate: 'ROOM_CONTROLLER' }) - //寻找creep为0的room controller - let room_controller_need_creep_array = _.filter(room_controller_mem, m => m.working_creep_names.length == 0 && m.cate == 'ROOM_CONTROLLER') - if (room_controller_need_creep_array.length > 0) { - let builder_creep = _.filter(Game.creeps, creep => !creep.working_target_id && creep.memory.role == 'builder') - if (builder_creep.length > 0) { - let opt = { - memory: room_controller_mem, - creep_name_to_assign_array: [builder_creep[0].name] - } - assign_creeps(opt) - } - } -} - - - - - -function createHarvestCreep() { - //create new creep - let new_creep_name = "AUTO_CREATE_Harvester_" + util.uuid(); - let Re_code; - Re_code = Game.spawns['Spawn1'].createCreep([MOVE, CARRY, WORK], new_creep_name) - if (Re_code == new_creep_name) { - Game.creeps[new_creep_name].memory.role = 'harvester'; - console.log('Create new creep ' + new_creep_name); - } else { - // console.log(`failed to create harvester with code ${Re_code}`); - } -} - -function createTransferCreep() { - //create new creep - let new_creep_name = "AUTO_CREATE_Transfer_" + util.uuid(); - let Re_code; - Re_code = Game.spawns['Spawn1'].createCreep([MOVE, CARRY, CARRY], new_creep_name); - if (new_creep_name == Re_code) { - Game.creeps[new_creep_name].memory.role = 'transfer'; - console.log('Create new creep ' + new_creep_name); - } else { - // console.log(`failed to create transfer with code ${Re_code}`); - } + _.each(Object.keys(Game.creeps), (creep_name) => { + const creep = Game.creeps[creep_name]; + creep.action(); + }); } function createBuilderCreep() { - //create new creep - let new_creep_name = "AUTO_CREATE_Builder_" + util.uuid(); - let Re_code; - Re_code = Game.spawns['Spawn1'].createCreep([MOVE, CARRY, WORK], new_creep_name) - if (Re_code == new_creep_name) { - Game.creeps[new_creep_name].memory.role = 'builder'; - console.log('Create new creep ' + new_creep_name); - } else { - // console.log(`failed to create builder with code ${Re_code}`); - } + // create new creep + const new_creep_name = `AUTO_CREATE_Builder_${util.uuid()}`; + const Re_code = Game.spawns.Spawn1.createCreep( + [MOVE, CARRY, WORK], + new_creep_name + ); + if (Re_code === new_creep_name) { + Game.creeps[new_creep_name].memory.role = "builder"; + console.log(`Create new creep ${new_creep_name}`); + } else { + // console.log(`failed to create builder with code ${Re_code}`); + } } +function assign_transfer_to_builder() { + // 判断有多少个builder的transfer为0 + const builder_without_creep = _.filter(Game.creeps, function (creep) { + return !Memory.WorkingTarget[creep.name] && creep.memory.role === "builder"; // Memory.WorkingTarget中没有这个builder目标 + }); + _.each(builder_without_creep, function (builder) { + Memory.WorkingTarget[builder.name] = { + id: builder.id, + working_creep_names: [], + cate: "builder", + }; // 在Memory.WorkingTarget加入需要creep的builder + }); + const builder_needs_creep_memory = _.filter( + Memory.WorkingTarget, + (memory) => + memory.working_creep_names.length === 0 && memory.cate === "builder" + ); // 需要安排creep的builder + if (assign_transfer(builder_needs_creep_memory) === -1) { + console.log( + `no enough transfer to builder. Try to create a new one autmatically` + ); + createBuilderCreep(); + } +} + +function assign_builder_to_construction(construction_id) { + // 检查construction是否已经是target + const constuction_key = `CONSTRUCTION_${construction_id}`; + if ( + !_.find(Memory.WorkingTarget, (target) => target.id === construction_id) + ) { + Memory.WorkingTarget[constuction_key] = { + id: construction_id, + working_creep_names: [], + cate: "constuction_site", + }; + } + // 安排一个builder过去 + const builder = _.filter( + Game.creeps, + (creep) => creep.memory.role === "builder" && !creep.working_target_id + ); + if (builder.length > 0) { + const opt = { + memory: _.filter( + Memory.WorkingTarget, + (_memory) => + _memory.working_creep_names.length === 0 && + _memory.cate === "constuction_site" + ), + creep_name_to_assgin_array: [builder[0].name], + }; + assign_creeps(opt); + } else { + console.log( + `no enough builder to constuction_site ${construction_id}. Try to create a new one autmatically` + ); + createBuilderCreep(); + } + // //开始给建造constrction的每个creep安排transfer + // _.each(Memory.WorkingTarget[constuction_key].working_creep_names,function(builder_creep_name){ + // if(!Memory.WorkingTarget[builder_creep_name]){ + // Memory.WorkingTarget[builder_creep_name]={id:Game.creeps[builder_creep_name].id,working_creep_names: [], cate: 'builder'} + // } + // }) +} + +function assign_harvester_to_enery_source() { + const sources = Game.spawns.Spawn1.room.find(FIND_SOURCES_ACTIVE); + const all_memory = Memory.WorkingTarget; + _.each(Object.keys(sources), function (source) { + const { id } = source; + const key = `Energy_${id}`; + if (!Memory.WorkingTarget[key]) { + Memory.WorkingTarget[key] = { + id, + working_creep_names: [], + cate: "ENERGY_SOURCE", + }; + } + }); + // 向Memory.WorkingTarget里添加所有的Energy Source + // 寻找Energy Source的Memory + const energy_memory = _.filter(all_memory, { cate: "ENERGY_SOURCE" }); + // 寻找creep为0的energy source + const energy_source_need_creep_array = _.filter( + energy_memory, + (m) => m.working_creep_names.length === 0 + ); + if (energy_source_need_creep_array.length > 0) { + // 找到一个空闲的creep + const available_creep_array = _.filter( + Game.creeps, + (creep) => !creep.working_target_id && creep.memory.role === "harvester" + ); + if (available_creep_array.length > 0) { + // 每次只安排一个 + const opt = { + memory: energy_memory, + creep_name_to_assign_array: [available_creep_array[0].name], + }; + assign_creeps(opt); + } + } +} + +function assign_builder_to_controller() { + // 如果存在正在建造的construction,且没有多余的builder,就暂停upgrade controller + if (Game.spawns.Spawn1.room.find(FIND_MY_CONSTRUCTION_SITES).length > 0) { + const working_builder = _.filter( + Game.creeps, + (creep) => creep.memory.role === "builder" && !creep.working_target_id + ); + if (working_builder.length === 0) { + // 没有可以用的builder了 + const controller_id = Game.spawns.Spawn1.room.controller.id; + const controller_memory = + Memory.WorkingTarget[`RoomController_${controller_id}`]; + if (controller_memory) { + _.each(controller_memory.working_creep_names, (creep_name) => { + Game.creeps[creep_name].working_target_id = 0; + }); + memory.working_creep_names = []; + return; + } + } + } + // 判断room controller 是否有creep,没有则添加 + if ( + !_.find( + Memory.WorkingTarget, + (target) => target.id === Game.spawns.Spawn1.room.controller.id + ) + ) { + Memory.WorkingTarget[ + `RoomController_${Game.spawns.Spawn1.room.controller.id}` + ] = { + id: Game.spawns.Spawn1.room.controller.id, + working_creep_names: [], + cate: "ROOM_CONTROLLER", + }; + } + const room_controller_mem = _.filter(Memory.WorkingTarget, { + cate: "ROOM_CONTROLLER", + }); + // 寻找creep为0的room controller + const room_controller_need_creep_array = _.filter( + room_controller_mem, + (m) => m.working_creep_names.length === 0 && m.cate === "ROOM_CONTROLLER" + ); + if (room_controller_need_creep_array.length > 0) { + const builder_creep = _.filter( + Game.creeps, + (creep) => !creep.working_target_id && creep.memory.role === "builder" + ); + if (builder_creep.length > 0) { + const opt = { + memory: room_controller_mem, + creep_name_to_assign_array: [builder_creep[0].name], + }; + assign_creeps(opt); + } + } +} + +function createHarvestCreep() { + // create new creep + const new_creep_name = `AUTO_CREATE_Harvester_${util.uuid()}`; + const Re_code = Game.spawns.Spawn1.createCreep( + [MOVE, CARRY, WORK], + new_creep_name + ); + if (Re_code === new_creep_name) { + Game.creeps[new_creep_name].memory.role = "harvester"; + console.log(`Create new creep ${new_creep_name}`); + } else { + // console.log(`failed to create harvester with code ${Re_code}`); + } +} + +function createTransferCreep() { + // create new creep + const new_creep_name = `AUTO_CREATE_Transfer_${util.uuid()}`; + const Re_code = Game.spawns.Spawn1.createCreep( + [MOVE, CARRY, CARRY], + new_creep_name + ); + if (new_creep_name === Re_code) { + Game.creeps[new_creep_name].memory.role = "transfer"; + console.log(`Create new creep ${new_creep_name}`); + } else { + // console.log(`failed to create transfer with code ${Re_code}`); + } +} + +module.exports.loop = function _() { + extra(); + init.init(); + mount.mount(); + cleanCreeps(); + cleanInvalidMemoryCreep(); + cleanTargetMemory(); + assign_harvester_to_enery_source(); + assign_transfer_to_harvester(); + assign_builder_to_controller(); + assign_transfer_to_builder(); + const construction_site_array = Game.spawns.Spawn1.room.find( + FIND_MY_CONSTRUCTION_SITES + ); + _.each(construction_site_array, function (found_construction_site) { + const constuction_key = `CONSTRUCTION_${found_construction_site.id}`; + if ( + Memory.WorkingTarget[constuction_key] && + Memory.WorkingTarget[constuction_key].working_creep_names.length === 0 + ) { + assign_builder_to_construction(found_construction_site.id); + } + }); + let isSpawning = false; + const energy_source_number = _.filter( + Game.spawns.Spawn1.room.find(FIND_SOURCES_ACTIVE) + ).length; + const harvester_number = _(Game.creeps) + .filter({ memory: { role: "harvester" } }) + .size(); + if (!Game.spawns.Spawn1.spawning) { + if (harvester_number < energy_source_number) { + isSpawning = true; + createHarvestCreep(); + } + if ( + _(Game.creeps) + .filter({ memory: { role: "transfer" } }) + .size() < energy_source_number && + !isSpawning + ) { + isSpawning = true; + createTransferCreep(); + } + const builder_number = _.filter(Game.creeps, { + memory: { role: "builder" }, + }).length; + // 创造一个builder升级room controller + if ( + Game.spawns.Spawn1.room.controller && + builder_number < 1 + construction_site_array.length && + !isSpawning + ) { + isSpawning = true; + createBuilderCreep(); + } + // 判断是否需要再增加1个transfer + const transfer_number = _.filter(Game.creeps, { + memory: { role: "transfer" }, + }).length; + if (builder_number + harvester_number > transfer_number && !isSpawning) { + isSpawning = true; + createTransferCreep(); + } + } + assign_task(); +}; diff --git a/mount.js b/mount.js index c677f88..d601098 100644 --- a/mount.js +++ b/mount.js @@ -1,42 +1,47 @@ -const harvester = require('harvester'); -const transfer = require('transfer'); -const builder = require('builder'); -module.exports = { - mount() { - Creep.prototype.action = action; - if (!(Creep.prototype.hasOwnProperty('working_target_id'))) { - Object.defineProperty(Creep.prototype, 'working_target_id', { - get: function () { - return this.memory.working_target_id - }, - set: function (id) { - this.memory.working_target_id = id - } - } - ) - } - Game.cwt = function (creep_name) { - Game.creeps[creep_name].working_target_id = undefined - } - Game.pos=function(id){ - console.log(Game.getObjectById(id)) - } - } -} - +/* eslint-disable func-names */ +/* eslint-disable no-console */ +/* eslint-disable camelcase */ +/* eslint-disable no-undef */ +const harvester = require("./harvester"); +const transfer = require("./transfer"); +const builder = require("./builder"); function action() { - let role = this.memory.role; - // this.say(`${role}`); - switch (role) { - case "harvester": - harvester.run(this) - break; - case "transfer": - transfer.run(this) - break; - case "builder": - builder.run(this) - break; + const { role } = this.memory; + // this.say(`${role}`); + switch (role) { + case "harvester": + harvester.run(this); + break; + case "transfer": + transfer.run(this); + break; + case "builder": + builder.run(this); + break; + default: + break; + } +} + +module.exports = { + mount() { + Creep.prototype.action = action; + if (!Creep.prototype.hasOwnProperty("working_target_id")) { + Object.defineProperty(Creep.prototype, "working_target_id", { + get() { + return this.memory.working_target_id; + }, + set(id) { + this.memory.working_target_id = id; + }, + }); } -} \ No newline at end of file + Game.cwt = function (creep_name) { + Game.creeps[creep_name].working_target_id = undefined; + }; + Game.pos = function (id) { + console.log(Game.getObjectById(id)); + }; + }, +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..4b0d27d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1627 @@ +{ + "name": "screeps-script", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.10.4.tgz?cache=0&sync_timestamp=1593521174697&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.10.4.tgz", + "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.10.4.tgz?cache=0&sync_timestamp=1593522843594&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.10.4.tgz", + "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz?cache=0&sync_timestamp=1593522962210&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.10.4.tgz", + "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/@eslint/eslintrc/download/@eslint/eslintrc-0.2.0.tgz?cache=0&sync_timestamp=1602871481205&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40eslint%2Feslintrc%2Fdownload%2F%40eslint%2Feslintrc-0.2.0.tgz", + "integrity": "sha1-vH48QwTUyHIJaMyu55MIfftf5rQ=", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npm.taobao.org/@types/json5/download/@types/json5-0.0.29.tgz?cache=0&sync_timestamp=1596839452392&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson5%2Fdownload%2F%40types%2Fjson5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz", + "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz?cache=0&sync_timestamp=1599499053189&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-jsx%2Fdownload%2Facorn-jsx-5.3.1.tgz", + "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1603561543180&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz", + "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/array-includes/download/array-includes-3.1.1.tgz", + "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz", + "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/array.prototype.flat/download/array.prototype.flat-1.2.3.tgz", + "integrity": "sha1-DegrQmsDGNv9uUAInjiwQ9N/bHs=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz", + "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/astral-regex/download/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898189928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1601839122515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1598611732186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "confusing-browser-globals": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/confusing-browser-globals/download/confusing-browser-globals-1.0.10.tgz?cache=0&sync_timestamp=1603462410268&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconfusing-browser-globals%2Fdownload%2Fconfusing-browser-globals-1.0.10.tgz", + "integrity": "sha1-MNHn89G4grJexJM9HRraw1PSClk=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/contains-path/download/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.2.0.tgz?cache=0&sync_timestamp=1600502871403&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.2.0.tgz", + "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1603212263242&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npm.taobao.org/enquirer/download/enquirer-2.3.6.tgz?cache=0&sync_timestamp=1593693238207&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenquirer%2Fdownload%2Fenquirer-2.3.6.tgz", + "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1587627107924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.12.0", + "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-7.12.0.tgz?cache=0&sync_timestamp=1603499319919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-7.12.0.tgz", + "integrity": "sha1-e2qF+Hqa3COel5u3Ic3lzg3CfaY=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-airbnb-base": { + "version": "14.2.0", + "resolved": "https://registry.npm.taobao.org/eslint-config-airbnb-base/download/eslint-config-airbnb-base-14.2.0.tgz", + "integrity": "sha1-/onCSz+dyACMnA0NiMKPle1l6cQ=", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.9", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2" + } + }, + "eslint-config-prettier": { + "version": "6.14.0", + "resolved": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.14.0.tgz?cache=0&sync_timestamp=1603292487692&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.14.0.tgz", + "integrity": "sha1-OQ54Y6iumZcJgZM4JkdhaShbOic=", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npm.taobao.org/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.4.tgz?cache=0&sync_timestamp=1592327223893&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-import-resolver-node%2Fdownload%2Feslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha1-hf+oGULCUBLYIxCW3fZ5wDBCxxc=", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502871403&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npm.taobao.org/eslint-module-utils/download/eslint-module-utils-2.6.0.tgz", + "integrity": "sha1-V569CU9Wr3eX0ZyYZsnJSGYpv6Y=", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502871403&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-import/download/eslint-plugin-import-2.22.1.tgz?cache=0&sync_timestamp=1601248228092&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-import%2Fdownload%2Feslint-plugin-import-2.22.1.tgz", + "integrity": "sha1-CJbH5qDPRBCaLZe5WQPCu2iddwI=", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1600502871403&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha1-Foq0MVTi6lfbmSos0JfIKBcfdcI=", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1599933589759&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz", + "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz?cache=0&sync_timestamp=1592222134559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-2.1.0.tgz", + "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435347526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-2.0.0.tgz?cache=0&sync_timestamp=1597435347526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-2.0.0.tgz", + "integrity": "sha1-If3I+82ceVzAMh8FY3AglXUVEag=", + "dev": true + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npm.taobao.org/espree/download/espree-7.3.0.tgz", + "integrity": "sha1-3DBDfPZ5R89XYSHr14DxXurHI0g=", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1597435347526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz", + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596641353460&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596641353460&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596641353460&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz", + "integrity": "sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz?cache=0&sync_timestamp=1595428045324&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-levenshtein%2Fdownload%2Ffast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz", + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz?cache=0&sync_timestamp=1597169862146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz", + "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz", + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1603666827709&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588086924019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz", + "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1602801611209&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz", + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz?cache=0&sync_timestamp=1600719446314&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.2.tgz", + "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=", + "dev": true + }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.0.0.tgz?cache=0&sync_timestamp=1603133484044&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.0.0.tgz", + "integrity": "sha1-WFMbcK7R23wOjU6xoKLR3dZL0S0=", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576730971871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555607285&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz", + "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz", + "integrity": "sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.0.tgz?cache=0&sync_timestamp=1590173013124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1599333925809&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.4.1.tgz", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz", + "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1591257007439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.8.0.tgz?cache=0&sync_timestamp=1592545092032&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.8.0.tgz", + "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "dev": true + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.1.tgz?cache=0&sync_timestamp=1599844906321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.1.tgz", + "integrity": "sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/object.entries/download/object.entries-1.1.2.tgz", + "integrity": "sha1-vHPwCstra7FsIDQ0sQ+afnl9Ot0=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz", + "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz", + "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.9.1.tgz", + "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1594559692285&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz?cache=0&sync_timestamp=1597081508945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz?cache=0&sync_timestamp=1598129247474&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz?cache=0&sync_timestamp=1602859008602&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.2.1.tgz", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", + "dev": true + }, + "prettier": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-2.1.2.tgz?cache=0&sync_timestamp=1600215497530&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.1.2.tgz", + "integrity": "sha1-MFBwDa4uTItnxMP2Zs24r0BeHOU=", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-3.1.0.tgz", + "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=", + "dev": true + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.18.1.tgz?cache=0&sync_timestamp=1603313534612&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.18.1.tgz", + "integrity": "sha1-AY/LLFsgfSpkJK7jYcWiZtqPQTA=", + "dev": true, + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581257110269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz?cache=0&sync_timestamp=1586886301819&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.2.tgz", + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.6.tgz", + "integrity": "sha1-yAdXODwoq/cpZ0SZjLwQaui4VM4=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.2.tgz?cache=0&sync_timestamp=1603220012319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.2.tgz", + "integrity": "sha1-bd2ah5a8cUtImjriIkaiCPN7+kY=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.2.tgz?cache=0&sync_timestamp=1603220012476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.2.tgz", + "integrity": "sha1-ItRdqBAVMJzQzdeXh+iRn8XGE+c=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz?cache=0&sync_timestamp=1594567580605&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1598611732186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz?cache=0&sync_timestamp=1599191046284&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftable%2Fdownload%2Ftable-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npm.taobao.org/tsconfig-paths/download/tsconfig-paths-3.9.0.tgz", + "integrity": "sha1-CYVHpsREiAfo/Ljq4IEGTumjyQs=", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/type-check/download/type-check-0.4.0.tgz", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz", + "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.1.tgz", + "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6012cba --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "screeps-script", + "version": "1.0.0", + "description": "", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "eslint": "^7.12.0", + "eslint-config-airbnb-base": "^14.2.0", + "eslint-config-prettier": "^6.14.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-prettier": "^3.1.4", + "prettier": "^2.1.2" + } +} diff --git a/path.js b/path.js index 331d9dc..e587b69 100644 --- a/path.js +++ b/path.js @@ -1,8 +1,3 @@ module.exports = { - visualPath(my_pos, target_pos) { - // visualize the path - // let path = PathFinder.search(my_pos, target_pos).path; - // console.log(path) - // Game.map.visual.poly(path, { stroke: '#ffffff', strokeWidth: 8, opacity: .2, lineStyle: 'dashed' }); - } -} \ No newline at end of file + visualPath(my_pos, target_pos) {}, +}; diff --git a/transfer.js b/transfer.js index 3e54288..962e9ac 100644 --- a/transfer.js +++ b/transfer.js @@ -1,73 +1,83 @@ -const utils = require('utils') -const path = require('path') +/* eslint-disable no-undef */ +/* eslint-disable no-console */ +/* eslint-disable camelcase */ +const utils = require("./utils"); +const path = require("./path"); // const harvester = require("./harvester"); module.exports = { - run(creep) { - creep.say('tf') - let working_target_id = creep.working_target_id - if(!working_target_id){ - creep.say('SB') - return - } - let working_target = Game.getObjectById(working_target_id) - //TODO:处理transfer的对象消失的情况 - if(!working_target){ - // _.each(Memery.WorkingTarget[creep.name].working_creep_names,creep_name=>Game.creeps[creep_name].working_target_id=undefined) - // delete Memery.WorkingTarget[creep.name] - return - } - let working_target_pos = working_target.pos - let my_pos = creep.pos; - if(!working_target.memory){ - console.log(`check ${creep.name}, working target memory ${JSON.stringify(working_target)}`) - return - } - if (working_target.memory.role == 'harvester') { - if (creep.store.energy < creep.store.getCapacity()) { - - if (!working_target) { - // console.log(`${creep.name} working target vanished. Turn to unassigned.`) - return - } - if (utils.distance(working_target_pos, my_pos) > 1.5) {//在附近就是1或者1.414 - creep.moveTo(working_target_pos,{visualizePathStyle: {stroke: '#ffffff'}}); - path.visualPath(creep.pos, working_target_pos); - } else { - //find dropped source - let found = creep.room.lookForAt(LOOK_ENERGY, working_target_pos); - if (found.length > 0) { - creep.pickup(found[0]) - } - - } - - } else { - if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { - creep.moveTo(Game.spawns['Spawn1'],{visualizePathStyle: {stroke: '#ffffff'}}); - path.visualPath(creep.pos, Game.spawns['Spawn1'].pos); - } - } - } - if (working_target.memory.role == 'builder') { - if (creep.store.energy > 0) { - if (utils.distance(working_target_pos, my_pos) > 1.5) {//在附近就是1或者1.414 - creep.moveTo(working_target_pos,{visualizePathStyle: {stroke: '#ffffff'}}); - path.visualPath(creep.pos, working_target_pos); - } else { - creep.drop(RESOURCE_ENERGY) - } - } else { - if (creep.withdraw(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { - creep.moveTo(Game.spawns['Spawn1'],{visualizePathStyle: {stroke: '#ffffff'}}); - path.visualPath(creep.pos, Game.spawns['Spawn1'].pos); - } - } - } - + run(creep) { + creep.say("tf"); + const { working_target_id } = creep; + if (!working_target_id) { + creep.say("SB"); + return; } -} - - - + const working_target = Game.getObjectById(working_target_id); + // TODO:处理transfer的对象消失的情况 + if (!working_target) { + // _.each(Memery.WorkingTarget[creep.name].working_creep_names,creep_name=>Game.creeps[creep_name].working_target_id=undefined) + // delete Memery.WorkingTarget[creep.name] + return; + } + const working_target_pos = working_target.pos; + const my_pos = creep.pos; + if (!working_target.memory) { + console.log( + `check ${creep.name}, working target memory ${JSON.stringify( + working_target + )}` + ); + return; + } + if (working_target.memory.role === "harvester") { + if (creep.store.energy < creep.store.getCapacity()) { + if (!working_target) { + // console.log(`${creep.name} working target vanished. Turn to unassigned.`) + return; + } + if (utils.distance(working_target_pos, my_pos) > 1.5) { + // 在附近就是1或者1.414 + creep.moveTo(working_target_pos, { + visualizePathStyle: { stroke: "#ffffff" }, + }); + path.visualPath(creep.pos, working_target_pos); + } else { + // find dropped source + const found = creep.room.lookForAt(LOOK_ENERGY, working_target_pos); + if (found.length > 0) { + creep.pickup(found[0]); + } + } + } else if ( + creep.transfer(Game.spawns.Spawn1, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE + ) { + creep.moveTo(Game.spawns.Spawn1, { + visualizePathStyle: { stroke: "#ffffff" }, + }); + path.visualPath(creep.pos, Game.spawns.Spawn1.pos); + } + } + if (working_target.memory.role === "builder") { + if (creep.store.energy > 0) { + if (utils.distance(working_target_pos, my_pos) > 1.5) { + // 在附近就是1或者1.414 + creep.moveTo(working_target_pos, { + visualizePathStyle: { stroke: "#ffffff" }, + }); + path.visualPath(creep.pos, working_target_pos); + } else { + creep.drop(RESOURCE_ENERGY); + } + } else if ( + creep.withdraw(Game.spawns.Spawn1, RESOURCE_ENERGY) === ERR_NOT_IN_RANGE + ) { + creep.moveTo(Game.spawns.Spawn1, { + visualizePathStyle: { stroke: "#ffffff" }, + }); + path.visualPath(creep.pos, Game.spawns.Spawn1.pos); + } + } + }, +}; diff --git a/utils.js b/utils.js index a53ac39..9e712c7 100644 --- a/utils.js +++ b/utils.js @@ -1,22 +1,23 @@ module.exports = { - uuid() { - //6位 - let _uuid = ""; - for (let i = 0; i < 6; i++) { - if (Math.random() > 0.5) { - //大于0.5就是数字,小于则是字母 - _uuid = _uuid + (Math.round((Math.random() * 100)) % 10 ); - } else { - _uuid = _uuid + String.fromCharCode(97 + (Math.round(Math.random() * 100)) % 26); - } - } - return _uuid; - }, - distance(pos1,pos2){ - if(pos1.roomName==pos2.roomName){ - return Math.sqrt(Math.pow((pos1.x-pos2.x),2)+Math.pow((pos1.y-pos2.y),2)); - } - return -1;//如果不在一个房间内,就返回负数。 + uuid() { + // 6位 + let uuid = ""; + for (let i = 0; i < 6; i += 1) { + if (Math.random() > 0.5) { + // 大于0.5就是数字,小于则是字母 + uuid += Math.round(Math.random() * 100) % 10; + } else { + uuid += String.fromCharCode( + 97 + (Math.round(Math.random() * 100) % 26) + ); + } } - -} \ No newline at end of file + return uuid; + }, + distance(pos1, pos2) { + if (pos1.roomName === pos2.roomName) { + return Math.sqrt((pos1.x - pos2.x, 2) ** 2); + } + return -1; // 如果不在一个房间内,就返回负数。 + }, +};