diff --git a/.gitignore b/.gitignore index 16fd742..3e69eba 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ docs/build *.blend2 *.old node_modules +*.log +logs diff --git a/.luacheckrc b/.luacheckrc index 2c824ad..227756b 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -2,6 +2,19 @@ unused_args = false allow_defined_top = true max_line_length = false +exclude_files = { + './scripts', + './bin', + './logs', + './node_modules', + './sounds', + './textures', + './models', + './docs', + './locale', + './types', +} + globals = { 'XBows', 'XBowsQuiver', diff --git a/.luarc.json b/.luarc.json new file mode 100644 index 0000000..04a89d7 --- /dev/null +++ b/.luarc.json @@ -0,0 +1,100 @@ +{ + "$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json", + "runtime": { + "version": "Lua 5.1", + "path": [ + "?.lua", + "?/init.lua" + ], + "pathStrict": true + }, + "workspace": { + "maxPreload": 1600, + "preloadFileSize": 1000, + "ignoreDir": [ + "/locale/", + "/libs/", + "/3rd", + "/.vscode", + "/meta", + "/.git", + "/docs", + "/bin" + ], + "checkThirdParty": false + }, + "typeFormat": { + "config": { + "format_line": "false" + } + }, + "type": { + "castNumberToInteger": true + }, + "doc": { + "privateName": [ + "_*" + ] + }, + "diagnostics": { + "disable": [ + "close-non-object" + ], + "groupFileStatus": { + "ambiguity": "Any", + "await": "Any", + "duplicate": "Any", + "global": "Any", + "luadoc": "Any", + "redefined": "Any", + "strict": "Any", + "type-check": "Any", + "unbalanced": "Any", + "unused": "Any" + }, + "ignoredFiles": "Disable", + "libraryFiles": "Disable", + "neededFileStatus": { + "codestyle-check": "Any" + }, + "disableScheme": [ + "git", + "type" + ], + "globals": [ + "DIR_DELIM", + "INIT", + "minetest", + "core", + "dump", + "dump2", + "Raycast", + "Settings", + "PseudoRandom", + "PerlinNoise", + "VoxelManip", + "SecureRandom", + "VoxelArea", + "PerlinNoiseMap", + "PcgRandom", + "ItemStack", + "AreaStore", + "unpack", + "vector", + "player_monoids", + "playerphysics", + "hb", + "mesecon", + "armor", + "default", + "i3", + "unified_inventory", + "player_api", + "u_skins", + "wardrobe", + "3d_armor", + "skinsdb", + "skins" + ] + } +} diff --git a/api.lua b/api.lua index 24242aa..1838cf5 100644 --- a/api.lua +++ b/api.lua @@ -1,6 +1,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) -sfinv = sfinv--[[@as Sfinv]] +sfinv = sfinv --[[@as Sfinv]] ---Check if table contains value ---@param table table @@ -21,7 +21,7 @@ end ---@param t2 table ---@return table local function mergeTables(t1, t2) - for k,v in pairs(t2) do t1[k] = v end + for k, v in pairs(t2) do t1[k] = v end return t1 end @@ -51,7 +51,9 @@ XBows = { x_bows_show_3d_quiver = minetest.settings:get_bool('x_bows_show_3d_quiver', true) }, charge_sound_after_job = {}, - fallback_quiver = not minetest.global_exists('sfinv') and not minetest.global_exists('unified_inventory') and not minetest.global_exists('i3') + fallback_quiver = not minetest.global_exists('sfinv') + and not minetest.global_exists('unified_inventory') + and not minetest.global_exists('i3') } XBows.__index = XBows @@ -74,10 +76,10 @@ setmetatable(XBowsEntityDef, XBows) ---create UUID ---@return string function XBows.uuid() - local template ='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' + local template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' ---@diagnostic disable-next-line: redundant-return-value - return string.gsub(template, '[xy]', function (c) + return string.gsub(template, '[xy]', function(c) local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb) return string.format('%x', v) end) @@ -88,7 +90,7 @@ end ---@param name string ---@return boolean function XBows.is_creative(self, name) - return self.creative or minetest.check_player_privs(name, {creative = true}) + return self.creative or minetest.check_player_privs(name, { creative = true }) end ---Updates `allowed_ammunition` definition on already registered item, so MODs can add new ammunitions to this list. @@ -97,7 +99,7 @@ end ---@param allowed_ammunition string[] ---@return nil function XBows.update_bow_allowed_ammunition(self, name, allowed_ammunition) - local _name = 'x_bows:'..name + local _name = 'x_bows:' .. name local def = self.registered_bows[_name] if not def then @@ -135,16 +137,24 @@ function XBows.reset_charged_bow(self, player, includeWielded) local x_bows_registered_bow_def = self.registered_bows[st_name] local reset = _includeWielded or player:get_wield_index() ~= i - if not st:is_empty() and x_bows_registered_bow_def and reset and minetest.get_item_group(st_name, 'bow_charged') ~= 0 then + if not st:is_empty() + and x_bows_registered_bow_def + and reset + and minetest.get_item_group(st_name, 'bow_charged') ~= 0 + then local item_meta = st:get_meta() local arrow_itemstack = ItemStack(minetest.deserialize(item_meta:get_string('arrow_itemstack_string'))) --return arrow if arrow_itemstack and not self:is_creative(player:get_player_name()) then - if inv:room_for_item('main', {name=arrow_itemstack:get_name()}) then + if inv:room_for_item('main', { name = arrow_itemstack:get_name() }) then inv:add_item('main', arrow_itemstack:get_name()) else - minetest.item_drop(ItemStack({name=arrow_itemstack:get_name(), count=1}), player, player:get_pos()) + minetest.item_drop( + ItemStack({ name = arrow_itemstack:get_name(), count = 1 }), + player, + player:get_pos() + ) end end @@ -175,8 +185,11 @@ function XBows.register_bow(self, name, def, override) def.short_description = def.short_description def.description = override and def.short_description or (def.description or name) def.custom.uses = def.custom.uses or 150 - def.groups = mergeTables({bow = 1, flammable = 1}, def.groups or {}) - def.custom.groups_charged = mergeTables({bow_charged = 1, flammable = 1, not_in_creative_inventory = 1}, def.groups or {}) + def.groups = mergeTables({ bow = 1, flammable = 1 }, def.groups or {}) + def.custom.groups_charged = mergeTables( + { bow_charged = 1, flammable = 1, not_in_creative_inventory = 1 }, + def.groups or {} + ) def.custom.strength = def.custom.strength or 30 def.custom.allowed_ammunition = def.custom.allowed_ammunition or nil def.custom.sound_load = def.custom.sound_load or 'x_bows_bow_load' @@ -186,7 +199,7 @@ function XBows.register_bow(self, name, def, override) def.custom.gravity = def.custom.gravity or -10 if def.custom.crit_chance then - def.description = def.description .. '\n' .. minetest.colorize('#00FF00', S('Critical Arrow Chance') ..': ' + def.description = def.description .. '\n' .. minetest.colorize('#00FF00', S('Critical Arrow Chance') .. ': ' .. (1 / def.custom.crit_chance) * 100 .. '%') end @@ -212,7 +225,7 @@ function XBows.register_bow(self, name, def, override) inventory_image = def.inventory_image or 'x_bows_bow_wood.png', wield_image = def.wield_image or def.inventory_image, groups = def.groups, - wield_scale = {x = 2, y = 2, z = 1.5}, + wield_scale = { x = 2, y = 2, z = 1.5 }, ---@param itemstack ItemStack ---@param placer ObjectRef|nil ---@param pointed_thing PointedThingDef @@ -239,7 +252,7 @@ function XBows.register_bow(self, name, def, override) inventory_image = def.custom.inventory_image_charged or 'x_bows_bow_wood_charged.png', wield_image = def.custom.wield_image_charged or def.custom.inventory_image_charged, groups = def.custom.groups_charged, - wield_scale = {x = 2, y = 2, z = 1.5}, + wield_scale = { x = 2, y = 2, z = 1.5 }, range = 0, ---@param itemstack ItemStack ---@param user ObjectRef|nil @@ -261,7 +274,11 @@ function XBows.register_bow(self, name, def, override) ---return arrow if arrow_itemstack and not self:is_creative(dropper:get_player_name()) then - minetest.item_drop(ItemStack({name=arrow_itemstack:get_name(), count=1}), dropper, {x=pos.x + 0.5, y=pos.y + 0.5, z=pos.z + 0.5}) + minetest.item_drop( + ItemStack({ name = arrow_itemstack:get_name(), count = 1 }), + dropper, + { x = pos.x + 0.5, y = pos.y + 0.5, z = pos.z + 0.5 } + ) end itemstack:set_name(def.custom.name) @@ -306,12 +323,12 @@ function XBows.register_arrow(self, name, def) def.custom.tool_capabilities = def.custom.tool_capabilities or { full_punch_interval = 1, max_drop_level = 0, - damage_groups = {fleshy=2} + damage_groups = { fleshy = 2 } } def.custom.description_abilities = minetest.colorize('#00FF00', S('Damage') .. ': ' .. def.custom.tool_capabilities.damage_groups.fleshy) .. '\n' .. minetest.colorize('#00BFFF', S('Charge Time') .. ': ' .. def.custom.tool_capabilities.full_punch_interval .. 's') - def.groups = mergeTables({arrow = 1, flammable = 1}, def.groups or {}) + def.groups = mergeTables({ arrow = 1, flammable = 1 }, def.groups or {}) def.custom.particle_effect = def.custom.particle_effect or 'arrow' def.custom.particle_effect_crit = def.custom.particle_effect_crit or 'arrow_crit' def.custom.particle_effect_fast = def.custom.particle_effect_fast or 'arrow_fast' @@ -333,7 +350,7 @@ function XBows.register_arrow(self, name, def) ---recipes if def.custom.recipe then minetest.register_craft({ - output = def.custom.name ..' ' .. (def.custom.craft_count or 4), + output = def.custom.name .. ' ' .. (def.custom.craft_count or 4), recipe = def.custom.recipe }) end @@ -362,17 +379,25 @@ function XBows.register_quiver(self, name, def) def.custom.name_open = 'x_bows:' .. name .. '_open' def.description = def.description or name def.short_description = def.short_description or name - def.groups = mergeTables({quiver = 1, flammable = 1}, def.groups or {}) - def.custom.groups_charged = mergeTables({quiver = 1, quiver_open = 1, flammable = 1, not_in_creative_inventory = 1}, def.groups or {}) + def.groups = mergeTables({ quiver = 1, flammable = 1 }, def.groups or {}) + def.custom.groups_charged = mergeTables({ + quiver = 1, quiver_open = 1, flammable = 1, not_in_creative_inventory = 1 + }, + def.groups or {} + ) if def.custom.faster_arrows then - def.description = def.description .. '\n' .. minetest.colorize('#00FF00', S('Faster Arrows') .. ': ' .. (1 / def.custom.faster_arrows) * 100 .. '%') - def.short_description = def.short_description .. '\n' .. minetest.colorize('#00FF00', S('Faster Arrows') .. ': ' .. (1 / def.custom.faster_arrows) * 100 .. '%') + def.description = def.description .. '\n' .. minetest.colorize('#00FF00', S('Faster Arrows') .. + ': ' .. (1 / def.custom.faster_arrows) * 100 .. '%') + def.short_description = def.short_description .. '\n' .. minetest.colorize('#00FF00', S('Faster Arrows') .. + ': ' .. (1 / def.custom.faster_arrows) * 100 .. '%') end if def.custom.add_damage then - def.description = def.description .. '\n' .. minetest.colorize('#FF8080', S('Arrow Damage') .. ': +' .. def.custom.add_damage) - def.short_description = def.short_description .. '\n' .. minetest.colorize('#FF8080', S('Arrow Damage') .. ': +' .. def.custom.add_damage) + def.description = def.description .. '\n' .. minetest.colorize('#FF8080', S('Arrow Damage') .. + ': +' .. def.custom.add_damage) + def.short_description = def.short_description .. '\n' .. minetest.colorize('#FF8080', S('Arrow Damage') .. + ': +' .. def.custom.add_damage) end self.registered_quivers[def.custom.name] = def @@ -423,7 +448,11 @@ function XBows.register_quiver(self, name, def) ---@param dropper ObjectRef|nil ---@param pos Vector ---@return ItemStack - on_drop = function (itemstack, dropper, pos) + on_drop = function(itemstack, dropper, pos) + if not dropper then + return itemstack + end + local replace_item = XBowsQuiver:get_replacement_item(itemstack, 'x_bows:quiver') return minetest.item_drop(replace_item, dropper, pos) end @@ -455,7 +484,7 @@ end ---@return ItemStack function XBows.load(self, itemstack, user, pointed_thing) local player_name = user:get_player_name() - local inv = user:get_inventory()--[[@as InvRef]] + local inv = user:get_inventory() --[[@as InvRef]] local bow_name = itemstack:get_name() local bow_def = self.registered_bows[bow_name] ---@alias ItemStackArrows {["stack"]: ItemStack, ["idx"]: number|integer}[] @@ -489,9 +518,9 @@ function XBows.load(self, itemstack, user, pointed_thing) XBowsQuiver:udate_or_create_hud(user, inv:get_list('x_bows:arrow_inv')) else ---no ammo (fake stack) - XBowsQuiver:udate_or_create_hud(user, {ItemStack({ - name = 'x_bows:no_ammo' - })}) + XBowsQuiver:udate_or_create_hud(user, { + ItemStack({ name = 'x_bows:no_ammo' }) + }) end ---find itemstack arrow in players inventory @@ -499,7 +528,7 @@ function XBows.load(self, itemstack, user, pointed_thing) local is_allowed_ammunition = self:is_allowed_ammunition(bow_name, arrow_stack:get_name()) if self.registered_arrows[arrow_stack:get_name()] and is_allowed_ammunition then - table.insert(itemstack_arrows, {stack = arrow_stack, idx = 1}) + table.insert(itemstack_arrows, { stack = arrow_stack, idx = 1 }) end ---if everything else fails @@ -513,7 +542,7 @@ function XBows.load(self, itemstack, user, pointed_thing) local _is_allowed_ammunition = self:is_allowed_ammunition(bow_name, st_name) if self.registered_arrows[st_name] and _is_allowed_ammunition then - table.insert(itemstack_arrows, {stack = st, idx = i}) + table.insert(itemstack_arrows, { stack = st, idx = i }) end end end @@ -544,7 +573,9 @@ function XBows.load(self, itemstack, user, pointed_thing) wielded_item:set_name(v_bow_name .. '_charged') v_user:set_wielded_item(wielded_item) - if not self:is_creative(v_user:get_player_name()) and v_itemstack_arrow_meta:get_int('is_arrow_from_quiver') ~= 1 then + if not self:is_creative(v_user:get_player_name()) + and v_itemstack_arrow_meta:get_int('is_arrow_from_quiver') ~= 1 + then v_itemstack_arrow:take_item() v_inv:set_stack('x_bows:arrow_inv', v_itemstack_arrows[1].idx, v_itemstack_arrow) end @@ -563,17 +594,18 @@ function XBows.load(self, itemstack, user, pointed_thing) end ---sound plays when charge time reaches full punch interval time - table.insert(self.charge_sound_after_job[player_name], minetest.after(_tool_capabilities.full_punch_interval, function(v_user, v_bow_name) - local wielded_item = v_user:get_wielded_item() - local wielded_item_name = wielded_item:get_name() + table.insert(self.charge_sound_after_job[player_name], minetest.after(_tool_capabilities.full_punch_interval, + function(v_user, v_bow_name) + local wielded_item = v_user:get_wielded_item() + local wielded_item_name = wielded_item:get_name() - if wielded_item_name == v_bow_name .. '_charged' then - minetest.sound_play('x_bows_bow_loaded', { - to_player = v_user:get_player_name(), - gain = 0.6 - }) - end - end, user, bow_name)) + if wielded_item_name == v_bow_name .. '_charged' then + minetest.sound_play('x_bows_bow_loaded', { + to_player = v_user:get_player_name(), + gain = 0.6 + }) + end + end, user, bow_name)) minetest.sound_play(bow_def.custom.sound_load, { to_player = player_name, @@ -615,19 +647,19 @@ function XBows.shoot(self, itemstack, user, pointed_thing) XBowsQuiver:udate_or_create_hud(user, detached_inv:get_list('main'), found_arrow_stack_idx) if detached_inv:is_empty('main') then - XBowsQuiver:show_3d_quiver(user, {is_empty = true}) + XBowsQuiver:show_3d_quiver(user, { is_empty = true }) else XBowsQuiver:show_3d_quiver(user) end else - local inv = user:get_inventory()--[[@as InvRef]] + local inv = user:get_inventory() --[[@as InvRef]] if not inv:is_empty('x_bows:arrow_inv') then XBowsQuiver:udate_or_create_hud(user, inv:get_list('x_bows:arrow_inv')) else ---no ammo (fake stack just for the HUD) - XBowsQuiver:udate_or_create_hud(user, {ItemStack({ - name = 'x_bows:no_ammo' - })}) + XBowsQuiver:udate_or_create_hud(user, { + ItemStack({ name = 'x_bows:no_ammo' }) + }) end end @@ -690,7 +722,7 @@ function XBows.shoot(self, itemstack, user, pointed_thing) local wield_item = user:get_wielded_item() if wield_item:get_count() > 0 and wield_item:get_name() == itemstack:get_name() then - user:set_wielded_item(ItemStack({name = bow_name, wear = itemstack:get_wear()})) + user:set_wielded_item(ItemStack({ name = bow_name, wear = itemstack:get_wear() })) end end) @@ -761,7 +793,7 @@ function XBows.get_particle_effect_for_arrow(self, name, pos) def.minpos = def.custom.minpos and vector.add(pos, def.custom.minpos) or pos def.maxpos = def.custom.maxpos and vector.add(pos, def.custom.maxpos) or pos - return minetest.add_particlespawner(def--[[@as ParticlespawnerDef]]) + return minetest.add_particlespawner(def--[[@as ParticlespawnerDef]] ) end ---Check if ammunition is allowed to charge this weapon @@ -827,10 +859,10 @@ function XBowsEntityDef.on_activate(self, selfObj, staticdata, dtime_s) return end - local _staticdata = minetest.deserialize(staticdata)--[[@as EnityStaticDataAttrDef]] + local _staticdata = minetest.deserialize(staticdata) --[[@as EnityStaticDataAttrDef]] -- set/reset - do not inherit from previous entity table - selfObj._velocity = {x = 0, y = 0, z = 0} + selfObj._velocity = { x = 0, y = 0, z = 0 } selfObj._old_pos = nil selfObj._attached = false selfObj._attached_to = { @@ -954,7 +986,8 @@ function XBowsEntityDef.on_death(self, selfObj, killer) minetest.item_drop(ItemStack(selfObj._arrow_name), nil, vector.round(selfObj._old_pos)) end ---- Function receive a "luaentity" table as `self`. Called on every server tick, after movement and collision processing. `dtime`: elapsed time since last call. `moveresult`: table with collision info (only available if physical=true). +--- Function receive a "luaentity" table as `self`. Called on every server tick, after movement and collision processing. +---`dtime`: elapsed time since last call. `moveresult`: table with collision info (only available if physical=true). ---@param self XBows ---@param selfObj EnityCustomAttrDef ---@param dtime number @@ -966,7 +999,7 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) ---initialize ---this has to be done here for raycast to kick-in asap selfObj.object:set_velocity(vector.multiply(selfObj._player_look_dir, selfObj._strength)) - selfObj.object:set_acceleration({x = selfObj._acc_x, y = selfObj._acc_y, z = selfObj._acc_z}) + selfObj.object:set_acceleration({ x = selfObj._acc_x, y = selfObj._acc_y, z = selfObj._acc_z }) selfObj.object:set_yaw(minetest.dir_to_yaw(selfObj._player_look_dir)) end @@ -982,7 +1015,7 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) if not selfObj._attached then local velocity = selfObj.object:get_velocity() local v_rotation = selfObj.object:get_rotation() - local pitch = math.atan2(velocity.y, math.sqrt(velocity.x^2 + velocity.z^2)) + local pitch = math.atan2(velocity.y, math.sqrt(velocity.x ^ 2 + velocity.z ^ 2)) selfObj.object:set_rotation({ x = pitch, @@ -1028,13 +1061,13 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) end if node.name == 'air' then - selfObj.object:set_velocity({x = 0, y = -3, z = 0}) - selfObj.object:set_acceleration({x = 0, y = -3, z = 0}) + selfObj.object:set_velocity({ x = 0, y = -3, z = 0 }) + selfObj.object:set_acceleration({ x = 0, y = -3, z = 0 }) -- reset values selfObj._attached = false selfObj._attached_to.type = '' selfObj._attached_to.pos = nil - selfObj.object:set_properties({collisionbox = {0, 0, 0, 0, 0, 0}}) + selfObj.object:set_properties({ collisionbox = { 0, 0, 0, 0, 0, 0 } }) return end @@ -1049,7 +1082,10 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) and pointed_thing.ref ~= selfObj.object and pointed_thing.ref:get_hp() > 0 and ( - (pointed_thing.ref:is_player() and pointed_thing.ref:get_player_name() ~= selfObj._user:get_player_name()) + ( + pointed_thing.ref:is_player() + and pointed_thing.ref:get_player_name() ~= selfObj._user:get_player_name() + ) or ( pointed_thing.ref:get_luaentity() and pointed_thing.ref:get_luaentity().physical @@ -1071,8 +1107,8 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) }) end - selfObj.object:set_velocity({x = 0, y = 0, z = 0}) - selfObj.object:set_acceleration({x = 0, y = 0, z = 0}) + selfObj.object:set_velocity({ x = 0, y = 0, z = 0 }) + selfObj.object:set_acceleration({ x = 0, y = 0, z = 0 }) -- calculate damage local target_armor_groups = pointed_thing.ref:get_armor_groups() @@ -1103,7 +1139,7 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) selfObj._tflp, { full_punch_interval = selfObj._tool_capabilities.full_punch_interval, - damage_groups = {fleshy = _damage}, + damage_groups = { fleshy = _damage }, }, dir, distance, @@ -1121,7 +1157,7 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) selfObj._tflp, { full_punch_interval = selfObj._tool_capabilities.full_punch_interval, - damage_groups = {fleshy = _damage, knockback = knockback} + damage_groups = { fleshy = _damage, knockback = knockback } }, { x = dir.x * -1, @@ -1148,7 +1184,7 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) end -- attach arrow prepare - local rotation = {x = 0, y = 0, z = 0} + local rotation = { x = 0, y = 0, z = 0 } if in_pos.x == 1 then -- x = 0 @@ -1199,12 +1235,13 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) return end - ---normalize arrow scale when attached to scaled entity (prevents huge arrows when attached to scaled up entity models) + ---normalize arrow scale when attached to scaled entity + ---(prevents huge arrows when attached to scaled up entity models) local obj_props = selfObj.object:get_properties() local obj_to_props = pointed_thing.ref:get_properties() local vs = vector.divide(obj_props.visual_size, obj_to_props.visual_size) - selfObj.object:set_properties({visual_size = vs}) + selfObj.object:set_properties({ visual_size = vs }) -- attach arrow local position = vector.subtract( @@ -1277,7 +1314,7 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) selfObj._in_liquid = true local drag = 1 / (node_def.liquid_viscosity * 6) selfObj.object:set_velocity(vector.multiply(selfObj._velocity, drag)) - selfObj.object:set_acceleration({x = 0, y = -1.0, z = 0}) + selfObj.object:set_acceleration({ x = 0, y = -1.0, z = 0 }) XBows:get_particle_effect_for_arrow('bubble', selfObj._old_pos) elseif selfObj._is_drowning then @@ -1287,7 +1324,7 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) selfObj.object:set_velocity(selfObj._velocity) end - selfObj.object:set_acceleration({x = 0, y = -9.81, z = 0}) + selfObj.object:set_acceleration({ x = 0, y = -9.81, z = 0 }) end if XBows.mesecons and node.name == 'x_bows:target' then @@ -1302,21 +1339,24 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) end if node_def.walkable then - selfObj.object:set_velocity({x=0, y=0, z=0}) - selfObj.object:set_acceleration({x=0, y=0, z=0}) + selfObj.object:set_velocity({ x = 0, y = 0, z = 0 }) + selfObj.object:set_acceleration({ x = 0, y = 0, z = 0 }) selfObj.object:set_pos(ip_pos) selfObj.object:set_rotation(selfObj.object:get_rotation()) selfObj._attached = true selfObj._attached_to.type = pointed_thing.type selfObj._attached_to.pos = pointed_thing.under - selfObj.object:set_properties({collisionbox = {-0.2, -0.2, -0.2, 0.2, 0.2, 0.2}}) + selfObj.object:set_properties({ collisionbox = { -0.2, -0.2, -0.2, 0.2, 0.2, 0.2 } }) -- remove last arrow when too many already attached local children = {} local projectile_entity = self.registered_arrows[selfObj._arrow_name].custom.projectile_entity for _, object in ipairs(minetest.get_objects_inside_radius(pointed_thing.under, 1)) do - if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == projectile_entity then + if not object:is_player() + and object:get_luaentity() + and object:get_luaentity().name == projectile_entity + then table.insert(children, object) end end @@ -1344,15 +1384,15 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) minetest.add_particlespawner({ amount = 5, time = 0.25, - minpos = {x = new_pos.x - 0.4, y = new_pos.y + 0.2, z = new_pos.z - 0.4}, - maxpos = {x = new_pos.x + 0.4, y = new_pos.y + 0.3, z = new_pos.z + 0.4}, - minvel = {x = 0, y = 3, z = 0}, - maxvel = {x = 0, y = 4, z = 0}, - minacc = {x = 0, y = -28, z = 0}, - maxacc = {x = 0, y = -32, z = 0}, + minpos = { x = new_pos.x - 0.4, y = new_pos.y + 0.2, z = new_pos.z - 0.4 }, + maxpos = { x = new_pos.x + 0.4, y = new_pos.y + 0.3, z = new_pos.z + 0.4 }, + minvel = { x = 0, y = 3, z = 0 }, + maxvel = { x = 0, y = 4, z = 0 }, + minacc = { x = 0, y = -28, z = 0 }, + maxacc = { x = 0, y = -32, z = 0 }, minexptime = 1, maxexptime = 1.5, - node = {name = node_def.name}, + node = { name = node_def.name }, collisiondetection = true, object_collision = true, }) @@ -1373,7 +1413,9 @@ function XBowsEntityDef.on_step(self, selfObj, dtime) selfObj._old_pos = pos end ----Function receive a "luaentity" table as `self`. Called when somebody punches the object. Note that you probably want to handle most punches using the automatic armor group system. Can return `true` to prevent the default damage mechanism. +---Function receive a "luaentity" table as `self`. Called when somebody punches the object. +---Note that you probably want to handle most punches using the automatic armor group system. +---Can return `true` to prevent the default damage mechanism. ---@param self XBows ---@param selfObj EnityCustomAttrDef ---@param puncher ObjectRef|nil @@ -1408,12 +1450,12 @@ function XBows.register_entity(self, name, def) def.initial_properties = mergeTables({ ---defaults visual = 'wielditem', - collisionbox = {0, 0, 0, 0, 0, 0}, - selectionbox = {0, 0, 0, 0, 0, 0}, + collisionbox = { 0, 0, 0, 0, 0, 0 }, + selectionbox = { 0, 0, 0, 0, 0, 0 }, physical = false, - textures = {'air'}, + textures = { 'air' }, hp_max = 1, - visual_size = {x = 1, y = 1, z = 1}, + visual_size = { x = 1, y = 1, z = 1 }, glow = 1 }, def.initial_properties or {}) @@ -1510,6 +1552,7 @@ end ---Gets arrow from quiver ---@param self XBowsQuiver ---@param player ObjectRef +---@diagnostic disable-next-line: codestyle-check ---@return {["found_arrow_stack"]: ItemStack|nil, ["quiver_id"]: string|nil, ["quiver_name"]: string|nil, ["found_arrow_stack_idx"]: number} function XBowsQuiver.get_itemstack_arrow_from_quiver(self, player) local player_inv = player:get_inventory() @@ -1591,7 +1634,10 @@ function XBowsQuiver.get_itemstack_arrow_from_quiver(self, player) table.insert(prev_detached_inv_list, detached_inv:get_stack('main', j)) if not qst:is_empty() and not found_arrow_stack then - local is_allowed_ammunition = self:is_allowed_ammunition(wielded_stack:get_name(), qst:get_name()) + local is_allowed_ammunition = self:is_allowed_ammunition( + wielded_stack:get_name(), + qst:get_name() + ) if is_allowed_ammunition then quiver_name = st:get_name() @@ -1703,32 +1749,32 @@ function XBowsQuiver.udate_or_create_hud(self, player, inv_list, idx) ---title image self.hud_item_ids[player_name].title_image = player:hud_add({ hud_elem_type = 'image', - position = {x = 1, y = 0.5}, - offset = {x = -120, y = -140}, + position = { x = 1, y = 0.5 }, + offset = { x = -120, y = -140 }, text = item_def.inventory_image, - scale = {x = 4, y = 4}, + scale = { x = 4, y = 4 }, alignment = 0, }) ---title copy self.hud_item_ids[player_name].title_copy = player:hud_add({ hud_elem_type = 'text', - position = {x = 1, y = 0.5}, - offset = {x = -120, y = -75}, + position = { x = 1, y = 0.5 }, + offset = { x = -120, y = -75 }, text = item_def.short_description, alignment = 0, - scale = {x = 100, y = 30}, + scale = { x = 100, y = 30 }, number = 0xFFFFFF, }) ---hotbar bg self.hud_item_ids[player_name].hotbar_bg = player:hud_add({ hud_elem_type = 'image', - position = {x = 1, y = 0.5}, - offset = {x = -238, y = 0}, + position = { x = 1, y = 0.5 }, + offset = { x = -238, y = 0 }, text = is_arrow and 'x_bows_single_hotbar.png' or 'x_bows_quiver_hotbar.png', - scale = {x = 1, y = 1}, - alignment = {x = 1, y = 0 }, + scale = { x = 1, y = 1 }, + alignment = { x = 1, y = 0 }, }) for j, qst in ipairs(inv_list) do @@ -1745,11 +1791,11 @@ function XBowsQuiver.udate_or_create_hud(self, player, inv_list, idx) ---ui selected bg self.hud_item_ids[player_name].hotbar_selected = player:hud_add({ hud_elem_type = 'image', - position = {x = 1, y = 0.5}, - offset = {x = -308 + (j * 74), y = 2}, + position = { x = 1, y = 0.5 }, + offset = { x = -308 + (j * 74), y = 2 }, text = 'x_bows_hotbar_selected.png', - scale = {x = 1, y = 1}, - alignment = {x = 1, y = 0 }, + scale = { x = 1, y = 1 }, + alignment = { x = 1, y = 0 }, }) end @@ -1757,21 +1803,21 @@ function XBowsQuiver.udate_or_create_hud(self, player, inv_list, idx) ---arrow inventory image table.insert(self.hud_item_ids[player_name].arrow_inv_img, player:hud_add({ hud_elem_type = 'image', - position = {x = 1, y = 0.5}, - offset = {x = -300 + (j * 74), y = 0}, + position = { x = 1, y = 0.5 }, + offset = { x = -300 + (j * 74), y = 0 }, text = found_arrow_stack_def.inventory_image, - scale = {x = 4, y = 4}, - alignment = {x = 1, y = 0 }, + scale = { x = 4, y = 4 }, + alignment = { x = 1, y = 0 }, })) ---stack count table.insert(self.hud_item_ids[player_name].stack_count, player:hud_add({ hud_elem_type = 'text', - position = {x = 1, y = 0.5}, - offset = {x = -244 + (j * 74), y = 23}, + position = { x = 1, y = 0.5 }, + offset = { x = -244 + (j * 74), y = 23 }, text = is_no_ammo and 0 or qst:get_count(), alignment = -1, - scale = {x = 50, y = 10}, + scale = { x = 50, y = 10 }, number = 0xFFFFFF, })) end @@ -1794,7 +1840,7 @@ function XBowsQuiver.get_or_create_detached_inv(self, quiver_id, player_name, qu local detached_inv if quiver_id ~= '' then - detached_inv = minetest.get_inventory({type='detached', name=quiver_id}) + detached_inv = minetest.get_inventory({ type = 'detached', name = quiver_id }) end if not detached_inv then @@ -1857,7 +1903,7 @@ function XBowsQuiver.get_or_create_detached_inv(self, quiver_id, player_name, qu if quiver_inv_st and quiver_inv_st:get_meta():get_string('quiver_id') == inv:get_location().name then if inv:is_empty('main') then - self:show_3d_quiver(player, {is_empty = true}) + self:show_3d_quiver(player, { is_empty = true }) else self:show_3d_quiver(player) end @@ -1875,7 +1921,7 @@ function XBowsQuiver.get_or_create_detached_inv(self, quiver_id, player_name, qu if quiver_inv_st and quiver_inv_st:get_meta():get_string('quiver_id') == inv:get_location().name then if inv:is_empty('main') then - self:show_3d_quiver(player, {is_empty = true}) + self:show_3d_quiver(player, { is_empty = true }) else self:show_3d_quiver(player) end @@ -1883,9 +1929,9 @@ function XBowsQuiver.get_or_create_detached_inv(self, quiver_id, player_name, qu self:save(inv, player) end, - }, player_name) + }, player_name) - detached_inv:set_size('main', 3 * 1) + detached_inv:set_size('main', 3 * 1) end ---populate items in inventory @@ -1907,11 +1953,11 @@ function XBowsQuiver.get_formspec(self, name) local list_pos_x = (list_w - width) / 2 local formspec = { - 'size['..list_w..',6]' , - 'list[detached:'..name..';main;'..list_pos_x..',0.3;'..width..',1;]', - 'list[current_player;main;0,'..(height + 0.85)..';'..list_w..',1;]', - 'list[current_player;main;0,'..(height + 2.08)..';'..list_w..',3;8]', - 'listring[detached:'..name..';main]', + 'size[' .. list_w .. ',6]', + 'list[detached:' .. name .. ';main;' .. list_pos_x .. ',0.3;' .. width .. ',1;]', + 'list[current_player;main;0,' .. (height + 0.85) .. ';' .. list_w .. ',1;]', + 'list[current_player;main;0,' .. (height + 2.08) .. ';' .. list_w .. ',3;8]', + 'listring[detached:' .. name .. ';main]', 'listring[current_player;main]' } @@ -1920,7 +1966,7 @@ function XBowsQuiver.get_formspec(self, name) end --update formspec - local inv = minetest.get_inventory({type='detached', name=name}) + local inv = minetest.get_inventory({ type = 'detached', name = name }) local invlist = inv:get_list(name) ---inventory slots overlay @@ -1951,9 +1997,9 @@ function XBowsQuiver.get_string_from_inv(self, inv) for i, st in ipairs(inv_list) do if not st:is_empty() then table.insert(t, st:to_table()) - content_description = content_description .. '\n' ..st:get_short_description()..' '..st:get_count() + content_description = content_description .. '\n' .. st:get_short_description() .. ' ' .. st:get_count() else - table.insert(t, {is_empty = true}) + table.insert(t, { is_empty = true }) end end @@ -1985,12 +2031,14 @@ end ---@param quiver_is_closed? boolean ---@return nil function XBowsQuiver.save(self, inv, player, quiver_is_closed) - local player_inv = player:get_inventory()--[[@as InvRef]] + local player_inv = player:get_inventory() --[[@as InvRef]] local inv_loc = inv:get_location() local quiver_item_name = quiver_is_closed and 'x_bows:quiver' or 'x_bows:quiver_open' local player_quiver_inv_stack = player_inv:get_stack('x_bows:quiver_inv', 1) - if not player_quiver_inv_stack:is_empty() and player_quiver_inv_stack:get_meta():get_string('quiver_id') == inv_loc.name then + if not player_quiver_inv_stack:is_empty() + and player_quiver_inv_stack:get_meta():get_string('quiver_id') == inv_loc.name + then local st_meta = player_quiver_inv_stack:get_meta() ---save inventory items in quiver item meta local string_from_inventory_result = self:get_string_from_inv(inv) @@ -1998,7 +2046,8 @@ function XBowsQuiver.save(self, inv, player, quiver_is_closed) st_meta:set_string('quiver_items', string_from_inventory_result.inv_string) ---update description - local new_description = player_quiver_inv_stack:get_short_description()..'\n'..string_from_inventory_result.content_description..'\n' + local new_description = player_quiver_inv_stack:get_short_description() .. '\n' .. + string_from_inventory_result.content_description .. '\n' st_meta:set_string('description', new_description) player_inv:set_stack('x_bows:quiver_inv', 1, player_quiver_inv_stack) @@ -2009,14 +2058,17 @@ function XBowsQuiver.save(self, inv, player, quiver_is_closed) for i, st in ipairs(inv_list) do local st_meta = st:get_meta() - if not st:is_empty() and st:get_name() == quiver_item_name and st_meta:get_string('quiver_id') == inv_loc.name then + if not st:is_empty() and st:get_name() == quiver_item_name + and st_meta:get_string('quiver_id') == inv_loc.name + then ---save inventory items in quiver item meta local string_from_inventory_result = self:get_string_from_inv(inv) st_meta:set_string('quiver_items', string_from_inventory_result.inv_string) ---update description - local new_description = st:get_short_description()..'\n'..string_from_inventory_result.content_description..'\n' + local new_description = st:get_short_description() .. '\n' .. + string_from_inventory_result.content_description .. '\n' st_meta:set_string('description', new_description) player_inv:set_stack('main', i, st) @@ -2033,11 +2085,13 @@ end ---@param player ObjectRef ---@return boolean function XBowsQuiver.quiver_can_allow(self, inv, player) - local player_inv = player:get_inventory()--[[@as InvRef]] + local player_inv = player:get_inventory() --[[@as InvRef]] local inv_loc = inv:get_location() local player_quiver_inv_stack = player_inv:get_stack('x_bows:quiver_inv', 1) - if not player_quiver_inv_stack:is_empty() and player_quiver_inv_stack:get_meta():get_string('quiver_id') == inv_loc.name then + if not player_quiver_inv_stack:is_empty() + and player_quiver_inv_stack:get_meta():get_string('quiver_id') == inv_loc.name + then ---find quiver in player `quiver_inv` inv list return true elseif player_inv and player_inv:contains_item('main', 'x_bows:quiver_open') then @@ -2048,7 +2102,9 @@ function XBowsQuiver.quiver_can_allow(self, inv, player) for i, st in ipairs(inv_list) do local st_meta = st:get_meta() - if not st:is_empty() and st:get_name() == 'x_bows:quiver_open' and st_meta:get_string('quiver_id') == inv_loc.name then + if not st:is_empty() and st:get_name() == 'x_bows:quiver_open' + and st_meta:get_string('quiver_id') == inv_loc.name + then return true end end @@ -2069,7 +2125,7 @@ function XBows.open_quiver(self, itemstack, user) ---create inventory id and save it if quiver_id == '' then - quiver_id = itemstack:get_name()..'_'..self.uuid() + quiver_id = itemstack:get_name() .. '_' .. self.uuid() itemstack_meta:set_string('quiver_id', quiver_id) end @@ -2120,7 +2176,9 @@ function XBowsQuiver.sfinv_register_page(self) local x_bows_registered_arrow_def = self.registered_arrows[context._itemstack_arrow:get_name()] if x_bows_registered_arrow_def then - formspec[#formspec + 1] = 'label[0,1.5;' .. minetest.formspec_escape(context._itemstack_arrow:get_short_description()) .. '\n'.. minetest.formspec_escape(x_bows_registered_arrow_def.custom.description_abilities) ..']' + formspec[#formspec + 1] = 'label[0,1.5;' .. + minetest.formspec_escape(context._itemstack_arrow:get_short_description()) .. '\n' .. + minetest.formspec_escape(x_bows_registered_arrow_def.custom.description_abilities) .. ']' end end @@ -2130,9 +2188,10 @@ function XBowsQuiver.sfinv_register_page(self) local quiver_id = st_meta:get_string('quiver_id') ---description - formspec[#formspec + 1] = 'label[3.5,1.5;' .. minetest.formspec_escape(context._itemstack_quiver:get_short_description()) .. ']' - formspec[#formspec + 1] = 'list[detached:'..quiver_id..';main;4.5,0.5;3,1;]' - formspec[#formspec + 1] = 'listring[detached:'..quiver_id..';main]' + formspec[#formspec + 1] = 'label[3.5,1.5;' .. + minetest.formspec_escape(context._itemstack_quiver:get_short_description()) .. ']' + formspec[#formspec + 1] = 'list[detached:' .. quiver_id .. ';main;4.5,0.5;3,1;]' + formspec[#formspec + 1] = 'listring[detached:' .. quiver_id .. ';main]' formspec[#formspec + 1] = 'listring[current_player;main]' end @@ -2187,7 +2246,9 @@ function XBowsQuiver.i3_register_page(self) local x_bows_registered_arrow_def = self.registered_arrows[context._itemstack_arrow:get_name()] if x_bows_registered_arrow_def then - formspec[#formspec + 1] = 'label[0.5,3;' .. minetest.formspec_escape(context._itemstack_arrow:get_short_description()) .. '\n'.. minetest.formspec_escape(x_bows_registered_arrow_def.custom.description_abilities) ..']' + formspec[#formspec + 1] = 'label[0.5,3;' .. + minetest.formspec_escape(context._itemstack_arrow:get_short_description()) .. '\n' .. + minetest.formspec_escape(x_bows_registered_arrow_def.custom.description_abilities) .. ']' end end @@ -2197,9 +2258,10 @@ function XBowsQuiver.i3_register_page(self) local quiver_id = st_meta:get_string('quiver_id') ---description - formspec[#formspec + 1] = 'label[5,3;' .. minetest.formspec_escape(context._itemstack_quiver:get_short_description()) .. ']' - formspec[#formspec + 1] = 'list[detached:'..quiver_id..';main;6.3,1.5;3,1;]' - formspec[#formspec + 1] = 'listring[detached:'..quiver_id..';main]' + formspec[#formspec + 1] = 'label[5,3;' .. + minetest.formspec_escape(context._itemstack_quiver:get_short_description()) .. ']' + formspec[#formspec + 1] = 'list[detached:' .. quiver_id .. ';main;6.3,1.5;3,1;]' + formspec[#formspec + 1] = 'listring[detached:' .. quiver_id .. ';main]' formspec[#formspec + 1] = 'listring[current_player;main]' end @@ -2219,13 +2281,13 @@ function XBowsQuiver.ui_register_page(self) 'listcolors[#00000000;#00000000]', ---arrow 'label[0.5,0.5;' .. minetest.formspec_escape(S('Arrows')) .. ':]', - unified_inventory.single_slot(0.4,0.9), + unified_inventory.single_slot(0.4, 0.9), 'list[current_player;x_bows:arrow_inv;0.5,1;1,1;]', 'listring[current_player;x_bows:arrow_inv]', 'listring[current_player;main]', ---quiver 'label[5,0.5;' .. minetest.formspec_escape(S('Quiver')) .. ':]', - unified_inventory.single_slot(4.9,0.9), + unified_inventory.single_slot(4.9, 0.9), 'list[current_player;x_bows:quiver_inv;5,1;1,1;]', 'listring[current_player;x_bows:quiver_inv]', 'listring[current_player;main]', @@ -2239,7 +2301,9 @@ function XBowsQuiver.ui_register_page(self) local x_bows_registered_arrow_def = self.registered_arrows[context._itemstack_arrow:get_name()] if x_bows_registered_arrow_def then - formspec[#formspec + 1] = 'label[0.5,2.5;' .. minetest.formspec_escape(context._itemstack_arrow:get_short_description()) .. '\n'.. minetest.formspec_escape(x_bows_registered_arrow_def.custom.description_abilities) ..']' + formspec[#formspec + 1] = 'label[0.5,2.5;' .. + minetest.formspec_escape(context._itemstack_arrow:get_short_description()) .. '\n' .. + minetest.formspec_escape(x_bows_registered_arrow_def.custom.description_abilities) .. ']' end end @@ -2249,12 +2313,13 @@ function XBowsQuiver.ui_register_page(self) local quiver_id = st_meta:get_string('quiver_id') ---description - formspec[#formspec + 1] = 'label[5,2.5;' .. minetest.formspec_escape(context._itemstack_quiver:get_short_description()) .. ']' - formspec[#formspec + 1] = unified_inventory.single_slot(6.4,0.9) - formspec[#formspec + 1] = unified_inventory.single_slot(7.65,0.9) - formspec[#formspec + 1] = unified_inventory.single_slot(8.9,0.9) - formspec[#formspec + 1] = 'list[detached:'..quiver_id..';main;6.5,1;3,1;]' - formspec[#formspec + 1] = 'listring[detached:'..quiver_id..';main]' + formspec[#formspec + 1] = 'label[5,2.5;' .. + minetest.formspec_escape(context._itemstack_quiver:get_short_description()) .. ']' + formspec[#formspec + 1] = unified_inventory.single_slot(6.4, 0.9) + formspec[#formspec + 1] = unified_inventory.single_slot(7.65, 0.9) + formspec[#formspec + 1] = unified_inventory.single_slot(8.9, 0.9) + formspec[#formspec + 1] = 'list[detached:' .. quiver_id .. ';main;6.5,1;3,1;]' + formspec[#formspec + 1] = 'listring[detached:' .. quiver_id .. ';main]' formspec[#formspec + 1] = 'listring[current_player;main]' end @@ -2291,7 +2356,9 @@ function XBowsQuiver.show_3d_quiver(self, player, props) ---cleanup for index, value in ipairs(textures) do - if value == 'x_bows_quiver_blank_mesh.png' or value == 'x_bows_quiver_mesh.png' or value == 'x_bows_quiver_empty_mesh.png' then + if value == 'x_bows_quiver_blank_mesh.png' or value == 'x_bows_quiver_mesh.png' + or value == 'x_bows_quiver_empty_mesh.png' + then table.remove(textures, index) end end @@ -2350,7 +2417,9 @@ function XBowsQuiver.show_3d_quiver(self, player, props) ---cleanup for index, value in ipairs(textures) do - if value == 'x_bows_quiver_blank_mesh.png' or value == 'x_bows_quiver_mesh.png' or value == 'x_bows_quiver_empty_mesh.png' then + if value == 'x_bows_quiver_blank_mesh.png' or value == 'x_bows_quiver_mesh.png' + or value == 'x_bows_quiver_empty_mesh.png' + then table.remove(textures, index) end end @@ -2385,7 +2454,9 @@ function XBowsQuiver.hide_3d_quiver(self, player) ---cleanup for index, value in ipairs(textures) do - if value == 'x_bows_quiver_mesh.png' or value == 'x_bows_quiver_blank_mesh.png' or value == 'x_bows_quiver_empty_mesh.png' then + if value == 'x_bows_quiver_mesh.png' or value == 'x_bows_quiver_blank_mesh.png' + or value == 'x_bows_quiver_empty_mesh.png' + then table.remove(textures, index) end end @@ -2433,7 +2504,9 @@ function XBowsQuiver.hide_3d_quiver(self, player) ---cleanup for index, value in ipairs(textures) do - if value == 'x_bows_quiver_mesh.png' or value == 'x_bows_quiver_blank_mesh.png' or value == 'x_bows_quiver_empty_mesh.png' then + if value == 'x_bows_quiver_mesh.png' or value == 'x_bows_quiver_blank_mesh.png' + or value == 'x_bows_quiver_empty_mesh.png' + then table.remove(textures, index) end end @@ -2453,7 +2526,7 @@ end ---@return string[] | nil local function split(str) if #str > 0 then - return str:sub(1,1), split(str:sub(2)) + return str:sub(1, 1), split(str:sub(2)) end end @@ -2464,7 +2537,7 @@ function XBows.show_damage_numbers(self, pos, damage, is_crit) ---get damage texture local dmgstr = tostring(math.round(damage)) - local results = {split(dmgstr)} + local results = { split(dmgstr) } local texture = '' local dmg_nr_offset = 0 @@ -2492,12 +2565,12 @@ function XBows.show_damage_numbers(self, pos, damage, is_crit) minetest.add_particlespawner({ amount = 1, time = 0.01, - minpos = {x = pos.x, y = pos.y + 1, z = pos.z}, - maxpos = {x = pos.x, y = pos.y + 2, z = pos.z}, - minvel = {x = math.random(-1, 1), y = 5, z = math.random(-1, 1)}, - maxvel = {x = math.random(-1, 1), y = 5, z = math.random(-1, 1)}, - minacc = {x = math.random(-1, 1), y = -7, z = math.random(-1, 1)}, - maxacc = {x = math.random(-1, 1), y = -7, z = math.random(-1, 1)}, + minpos = { x = pos.x, y = pos.y + 1, z = pos.z }, + maxpos = { x = pos.x, y = pos.y + 2, z = pos.z }, + minvel = { x = math.random(-1, 1), y = 5, z = math.random(-1, 1) }, + maxvel = { x = math.random(-1, 1), y = 5, z = math.random(-1, 1) }, + minacc = { x = math.random(-1, 1), y = -7, z = math.random(-1, 1) }, + maxacc = { x = math.random(-1, 1), y = -7, z = math.random(-1, 1) }, minexptime = 2, maxexptime = 2, minsize = size, diff --git a/arrow.lua b/arrow.lua index b5fd637..9c556ef 100644 --- a/arrow.lua +++ b/arrow.lua @@ -2,12 +2,12 @@ XBows:register_entity('arrow_entity', { initial_properties = { visual = 'mesh', mesh = 'x_bows_arrow.b3d', - textures = {'x_bows_arrow_mesh.png'}, + textures = { 'x_bows_arrow_mesh.png' }, }, _custom = { animations = { - idle = {{x = 41, y = 42}, 0, 0, false}, - on_hit_node = {{x = 1, y = 40}, 40, 0, false} + idle = { { x = 41, y = 42 }, 0, 0, false }, + on_hit_node = { { x = 1, y = 40 }, 40, 0, false } } } }) diff --git a/bin/lua-language-server-3.5.6-linux-x64.tar.gz b/bin/lua-language-server-3.5.6-linux-x64.tar.gz new file mode 100644 index 0000000..9b23cf5 Binary files /dev/null and b/bin/lua-language-server-3.5.6-linux-x64.tar.gz differ diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index 2eec204..767b39b 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -3,34 +3,6 @@ image: atlassian/default-image:3 pipelines: pull-requests: "**": - - step: - name: Lint code - script: - - apt-get update - - apt-get -y install lua5.1 - - apt-get -y install luarocks - - luarocks install luacheck - - luacheck . - branches: - master: - - step: - name: Lint code - script: - - apt-get update - - apt-get -y install lua5.1 - - apt-get -y install luarocks - - luarocks install luacheck - - luacheck . - tags: - "*": - - step: - name: Lint code - script: - - apt-get update - - apt-get -y install lua5.1 - - apt-get -y install luarocks - - luarocks install luacheck - - luacheck . - step: name: Install Node Dependencies caches: @@ -41,6 +13,84 @@ pipelines: - nvm install v17.2.0 - npm i -g npm@8 - npm ci + - parallel: + - step: + name: Lua Check + script: + - apt-get update + - apt-get -y install lua5.1 + - apt-get -y install luarocks + - luarocks install luacheck + - luacheck . + - step: + name: Lua Diagnostics + caches: + - node-modules + - npm + - nvm + script: + - nvm use v17.2.0 + - npm run lua-diagnostics + branches: + master: + - step: + name: Install Node Dependencies + caches: + - node-modules + - npm + - nvm + script: + - nvm install v17.2.0 + - npm i -g npm@8 + - npm ci + - parallel: + - step: + name: Lua Check + script: + - apt-get update + - apt-get -y install lua5.1 + - apt-get -y install luarocks + - luarocks install luacheck + - luacheck . + - step: + name: Lua Diagnostics + caches: + - node-modules + - npm + - nvm + script: + - nvm use v17.2.0 + - npm run lua-diagnostics + tags: + "*": + - step: + name: Install Node Dependencies + caches: + - node-modules + - npm + - nvm + script: + - nvm install v17.2.0 + - npm i -g npm@8 + - npm ci + - parallel: + - step: + name: Lua Check + script: + - apt-get update + - apt-get -y install lua5.1 + - apt-get -y install luarocks + - luarocks install luacheck + - luacheck . + - step: + name: Lua Diagnostics + caches: + - node-modules + - npm + - nvm + script: + - nvm use v17.2.0 + - npm run lua-diagnostics - step: name: Deploy to ContentDB caches: diff --git a/init.lua b/init.lua index 49de82a..dd150aa 100644 --- a/init.lua +++ b/init.lua @@ -1,15 +1,15 @@ -- X Bows -- by SaKeL -minetest = minetest.global_exists('minetest') and minetest--[[@as Minetest]] -ItemStack = minetest.global_exists('ItemStack') and ItemStack--[[@as ItemStack]] -vector = minetest.global_exists('vector') and vector--[[@as Vector]] -default = minetest.global_exists('default') and default--[[@as MtgDefault]] -sfinv = minetest.global_exists('sfinv') and sfinv--[[@as Sfinv]] -unified_inventory = minetest.global_exists('unified_inventory') and unified_inventory--[[@as UnifiedInventory]] -player_api = minetest.global_exists('player_api') and player_api--[[@as MtgPlayerApi]] +minetest = minetest.global_exists('minetest') and minetest --[[@as Minetest]] +ItemStack = minetest.global_exists('ItemStack') and ItemStack --[[@as ItemStack]] +vector = minetest.global_exists('vector') and vector --[[@as Vector]] +default = minetest.global_exists('default') and default --[[@as MtgDefault]] +sfinv = minetest.global_exists('sfinv') and sfinv --[[@as Sfinv]] +unified_inventory = minetest.global_exists('unified_inventory') and unified_inventory --[[@as UnifiedInventory]] +player_api = minetest.global_exists('player_api') and player_api --[[@as MtgPlayerApi]] -math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 9))--[[@as number]]) +math.randomseed(tonumber(tostring(os.time()):reverse():sub(1, 9))--[[@as number]] ) local path = minetest.get_modpath('x_bows') local mod_start_time = minetest.get_us_time() @@ -30,8 +30,8 @@ else end minetest.register_on_joinplayer(function(player) - local inv_quiver = player:get_inventory()--[[@as InvRef]] - local inv_arrow = player:get_inventory()--[[@as InvRef]] + local inv_quiver = player:get_inventory() --[[@as InvRef]] + local inv_arrow = player:get_inventory() --[[@as InvRef]] if XBows.settings.x_bows_show_3d_quiver and XBows.player_api then ---Order matters here @@ -63,7 +63,7 @@ minetest.register_on_joinplayer(function(player) ---set model textures if detached_inv:is_empty('main') then XBowsQuiver.quiver_empty_state[player:get_player_name()] = false - XBowsQuiver:show_3d_quiver(player, {is_empty = true}) + XBowsQuiver:show_3d_quiver(player, { is_empty = true }) else XBowsQuiver.quiver_empty_state[player:get_player_name()] = true XBowsQuiver:show_3d_quiver(player) @@ -90,19 +90,19 @@ if XBows.settings.x_bows_show_3d_quiver and XBows.player_api then player_api.register_model(model_name, { animation_speed = 30, - textures = {'character.png'}, + textures = { 'character.png' }, animations = { -- Standard animations. - stand = {x = 0, y = 79}, - lay = {x = 162, y = 166, eye_height = 0.3, override_local = true, - collisionbox = {-0.6, 0.0, -0.6, 0.6, 0.3, 0.6}}, - walk = {x = 168, y = 187}, - mine = {x = 189, y = 198}, - walk_mine = {x = 200, y = 219}, - sit = {x = 81, y = 160, eye_height = 0.8, override_local = true, - collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.0, 0.3}} + stand = { x = 0, y = 79 }, + lay = { x = 162, y = 166, eye_height = 0.3, override_local = true, + collisionbox = { -0.6, 0.0, -0.6, 0.6, 0.3, 0.6 } }, + walk = { x = 168, y = 187 }, + mine = { x = 189, y = 198 }, + walk_mine = { x = 200, y = 219 }, + sit = { x = 81, y = 160, eye_height = 0.8, override_local = true, + collisionbox = { -0.3, 0.0, -0.3, 0.3, 1.0, 0.3 } } }, - collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, + collisionbox = { -0.3, 0.0, -0.3, 0.3, 1.7, 0.3 }, stepheight = 0.6, eye_height = 1.47 }) @@ -218,7 +218,7 @@ minetest.register_on_player_inventory_action(function(player, action, inventory, local quiver_id = st_meta:get_string('quiver_id') if quiver_id == '' then - quiver_id = stack:get_name()..'_'..XBows.uuid() + quiver_id = stack:get_name() .. '_' .. XBows.uuid() st_meta:set_string('quiver_id', quiver_id) inventory:set_stack(inventory_info.to_list, inventory_info.to_index, stack) end @@ -240,7 +240,7 @@ minetest.register_on_player_inventory_action(function(player, action, inventory, ---set player visual if detached_inv:is_empty('main') then XBowsQuiver.quiver_empty_state[player:get_player_name()] = false - XBowsQuiver:show_3d_quiver(player, {is_empty = true}) + XBowsQuiver:show_3d_quiver(player, { is_empty = true }) else XBowsQuiver.quiver_empty_state[player:get_player_name()] = true XBowsQuiver:show_3d_quiver(player) @@ -311,7 +311,9 @@ minetest.register_globalstep(function(dtime) XBows.player_bow_sneak[player_name] = {} end - if minetest.get_item_group(wielded_stack_name, 'bow_charged') ~= 0 and not XBows.player_bow_sneak[player_name].sneak then + if minetest.get_item_group(wielded_stack_name, 'bow_charged') ~= 0 + and not XBows.player_bow_sneak[player_name].sneak + then --charged weapon if XBows.playerphysics then playerphysics.add_physics_factor(player, 'speed', 'x_bows:bow_charged_speed', 0.25) @@ -321,7 +323,9 @@ minetest.register_globalstep(function(dtime) XBows.player_bow_sneak[player_name].sneak = true player:set_fov(0.9, true, 0.4) - elseif minetest.get_item_group(wielded_stack_name, 'bow_charged') == 0 and XBows.player_bow_sneak[player_name].sneak then + elseif minetest.get_item_group(wielded_stack_name, 'bow_charged') == 0 + and XBows.player_bow_sneak[player_name].sneak + then if XBows.playerphysics then playerphysics.remove_physics_factor(player, 'speed', 'x_bows:bow_charged_speed') elseif XBows.player_monoids then @@ -341,4 +345,4 @@ end) local mod_end_time = (minetest.get_us_time() - mod_start_time) / 1000000 -print('[Mod] x_bows loaded.. ['.. mod_end_time ..'s]') +print('[Mod] x_bows loaded.. [' .. mod_end_time .. 's]') diff --git a/items.lua b/items.lua index 04fb0fc..1216f8b 100644 --- a/items.lua +++ b/items.lua @@ -7,9 +7,9 @@ XBows:register_bow('bow_wood', { uses = 385, crit_chance = 10, recipe = { - {'', 'default:stick', 'farming:string'}, - {'default:stick', '', 'farming:string'}, - {'', 'default:stick', 'farming:string'} + { '', 'default:stick', 'farming:string' }, + { 'default:stick', '', 'farming:string' }, + { '', 'default:stick', 'farming:string' } }, fuel_burntime = 3, allowed_ammunition = { @@ -29,14 +29,14 @@ XBows:register_arrow('arrow_wood', { inventory_image = 'x_bows_arrow_wood.png', custom = { recipe = { - {'default:flint'}, - {'group:stick'}, - {'group:wool'} + { 'default:flint' }, + { 'group:stick' }, + { 'group:wool' } }, tool_capabilities = { full_punch_interval = 1, max_drop_level = 0, - damage_groups = {fleshy=2} + damage_groups = { fleshy = 2 } }, fuel_burntime = 1 } @@ -48,14 +48,14 @@ XBows:register_arrow('arrow_stone', { inventory_image = 'x_bows_arrow_stone.png', custom = { recipe = { - {'default:flint'}, - {'group:stone'}, - {'group:wool'} + { 'default:flint' }, + { 'group:stone' }, + { 'group:wool' } }, tool_capabilities = { full_punch_interval = 1.2, max_drop_level = 0, - damage_groups = {fleshy=4} + damage_groups = { fleshy = 4 } } } }) @@ -66,14 +66,14 @@ XBows:register_arrow('arrow_bronze', { inventory_image = 'x_bows_arrow_bronze.png', custom = { recipe = { - {'default:flint'}, - {'default:bronze_ingot'}, - {'group:wool'} + { 'default:flint' }, + { 'default:bronze_ingot' }, + { 'group:wool' } }, tool_capabilities = { full_punch_interval = 0.8, max_drop_level = 1, - damage_groups = {fleshy=6} + damage_groups = { fleshy = 6 } } } }) @@ -84,14 +84,14 @@ XBows:register_arrow('arrow_steel', { inventory_image = 'x_bows_arrow_steel.png', custom = { recipe = { - {'default:flint'}, - {'default:steel_ingot'}, - {'group:wool'} + { 'default:flint' }, + { 'default:steel_ingot' }, + { 'group:wool' } }, tool_capabilities = { full_punch_interval = 0.7, max_drop_level = 1, - damage_groups = {fleshy=6} + damage_groups = { fleshy = 6 } } } }) @@ -102,14 +102,14 @@ XBows:register_arrow('arrow_mese', { inventory_image = 'x_bows_arrow_mese.png', custom = { recipe = { - {'default:flint'}, - {'default:mese_crystal'}, - {'group:wool'} + { 'default:flint' }, + { 'default:mese_crystal' }, + { 'group:wool' } }, tool_capabilities = { full_punch_interval = 0.7, max_drop_level = 1, - damage_groups = {fleshy=7} + damage_groups = { fleshy = 7 } } } }) @@ -120,28 +120,28 @@ XBows:register_arrow('arrow_diamond', { inventory_image = 'x_bows_arrow_diamond.png', custom = { recipe = { - {'default:flint'}, - {'default:diamond'}, - {'group:wool'} + { 'default:flint' }, + { 'default:diamond' }, + { 'group:wool' } }, tool_capabilities = { full_punch_interval = 0.7, max_drop_level = 1, - damage_groups = {fleshy=8} + damage_groups = { fleshy = 8 } } } }) XBows:register_quiver('quiver', { - description = S('Quiver') .. '\n\n' .. S('Empty') ..'\n', + description = S('Quiver') .. '\n\n' .. S('Empty') .. '\n', short_description = S('Quiver'), custom = { - description = S('Quiver') .. '\n\n' .. S('Empty') ..'\n', + description = S('Quiver') .. '\n\n' .. S('Empty') .. '\n', short_description = S('Quiver'), recipe = { - {'group:arrow', 'group:arrow', 'group:arrow'}, - {'group:arrow', 'wool:brown', 'group:arrow'}, - {'group:arrow', 'group:arrow', 'group:arrow'} + { 'group:arrow', 'group:arrow', 'group:arrow' }, + { 'group:arrow', 'wool:brown', 'group:arrow' }, + { 'group:arrow', 'group:arrow', 'group:arrow' } }, recipe_count = 1, faster_arrows = 5, diff --git a/nodes.lua b/nodes.lua index e5cac46..7d13d18 100644 --- a/nodes.lua +++ b/nodes.lua @@ -3,15 +3,15 @@ local S = minetest.get_translator(minetest.get_current_modname()) minetest.register_node('x_bows:target', { description = S('Target'), short_description = S('Target'), - tiles = {'x_bows_target.png'}, + tiles = { 'x_bows_target.png' }, is_ground_content = false, - groups = {snappy=3, flammable=4, fall_damage_add_percent = -30}, + groups = { snappy = 3, flammable = 4, fall_damage_add_percent = -30 }, sounds = minetest.global_exists('default') and default.node_sound_leaves_defaults() or {}, - mesecons = {receptor = {state = 'off'}}, + mesecons = { receptor = { state = 'off' } }, ---@param pos Vector ---@param elapsed number ---@return boolean - on_timer = function (pos, elapsed) + on_timer = function(pos, elapsed) if XBows.mesecons then mesecon.receptor_off(pos) end @@ -29,8 +29,8 @@ minetest.register_craft({ minetest.register_craft({ output = 'x_bows:target', recipe = { - {'', 'default:mese_crystal', ''}, - {'default:mese_crystal', 'farming:straw', 'default:mese_crystal'}, - {'', 'default:mese_crystal', ''}, + { '', 'default:mese_crystal', '' }, + { 'default:mese_crystal', 'farming:straw', 'default:mese_crystal' }, + { '', 'default:mese_crystal', '' }, } }) diff --git a/package-lock.json b/package-lock.json index 0a0c286..eb73212 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,463 +1,1388 @@ { - "name": "x_bows", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "x_bows", - "version": "1.0.0", - "license": "LGPL-2.1-or-later", - "devDependencies": { - "node-fetch": "^3.2.10", - "yargs": "^17.6.1" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "name": "x_bows", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "x_bows", + "version": "1.0.0", + "license": "LGPL-2.1-or-later", + "devDependencies": { + "jaguar": "^6.0.1", + "node-fetch": "^3.2.10", + "yargs": "^17.6.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + } }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", + "dev": true, + "dependencies": { + "pako": "~0.2.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/findit2": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", + "dev": true, + "engines": { + "node": ">=0.8.22" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gunzip-maybe": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", + "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", + "dev": true, + "dependencies": { + "browserify-zlib": "^0.1.4", + "is-deflate": "^1.0.0", + "is-gzip": "^1.0.0", + "peek-stream": "^1.1.0", + "pumpify": "^1.3.3", + "through2": "^2.0.3" + }, + "bin": { + "gunzip-maybe": "bin.js" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-deflate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", + "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", + "dev": true + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/jaguar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jaguar/-/jaguar-6.0.1.tgz", + "integrity": "sha512-WrJrwHHl4lHQa4dVG4fJTLxca19It/pTwtr5cnnUlY0MvWO0y1Y4dWn3ABVCEZzfd5gDbverVqin3tiZ/YloIQ==", + "dev": true, + "dependencies": { + "findit2": "^2.2.3", + "glob": "^7.1.0", + "gunzip-maybe": "^1.3.1", + "minimist": "^1.2.0", + "pipe-io": "^4.0.0", + "tar-fs": "^2.0.0", + "tar-stream": "^2.1.0", + "try-to-catch": "^3.0.0" + }, + "bin": { + "jaguar": "bin/jaguar.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", + "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/peek-stream": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", + "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" + } + }, + "node_modules/pipe-io": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pipe-io/-/pipe-io-4.0.1.tgz", + "integrity": "sha512-Wj9G85wJCpIgHq7xd0g4/IDjrA51pxmd+m9AbTiC6zRmWzVC6jOJIUyf92r7/B2+NE6zwqZIz0BZr85xkc3/Sg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/try-to-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", + "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.6.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.1.tgz", + "integrity": "sha512-leBuCGrL4dAd6ispNOGsJlhd0uZ6Qehkbu/B9KCR+Pxa/NVdNwi+i31lo0buCm6XxhJQFshXCD0/evfV4xfoUg==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } } - ], - "engines": { - "node": ">=10.5.0" - } }, - "node_modules/node-fetch": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", - "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.6.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.1.tgz", - "integrity": "sha512-leBuCGrL4dAd6ispNOGsJlhd0uZ6Qehkbu/B9KCR+Pxa/NVdNwi+i31lo0buCm6XxhJQFshXCD0/evfV4xfoUg==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", + "dev": true, + "requires": { + "pako": "~0.2.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "findit2": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", + "dev": true + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "gunzip-maybe": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", + "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", + "dev": true, + "requires": { + "browserify-zlib": "^0.1.4", + "is-deflate": "^1.0.0", + "is-gzip": "^1.0.0", + "peek-stream": "^1.1.0", + "pumpify": "^1.3.3", + "through2": "^2.0.3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-deflate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", + "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "jaguar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jaguar/-/jaguar-6.0.1.tgz", + "integrity": "sha512-WrJrwHHl4lHQa4dVG4fJTLxca19It/pTwtr5cnnUlY0MvWO0y1Y4dWn3ABVCEZzfd5gDbverVqin3tiZ/YloIQ==", + "dev": true, + "requires": { + "findit2": "^2.2.3", + "glob": "^7.1.0", + "gunzip-maybe": "^1.3.1", + "minimist": "^1.2.0", + "pipe-io": "^4.0.0", + "tar-fs": "^2.0.0", + "tar-stream": "^2.1.0", + "try-to-catch": "^3.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-fetch": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", + "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "peek-stream": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", + "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" + } + }, + "pipe-io": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pipe-io/-/pipe-io-4.0.1.tgz", + "integrity": "sha512-Wj9G85wJCpIgHq7xd0g4/IDjrA51pxmd+m9AbTiC6zRmWzVC6jOJIUyf92r7/B2+NE6zwqZIz0BZr85xkc3/Sg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "try-to-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", + "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.6.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.1.tgz", + "integrity": "sha512-leBuCGrL4dAd6ispNOGsJlhd0uZ6Qehkbu/B9KCR+Pxa/NVdNwi+i31lo0buCm6XxhJQFshXCD0/evfV4xfoUg==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } } - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true - }, - "node-fetch": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", - "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", - "dev": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "17.6.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.1.tgz", - "integrity": "sha512-leBuCGrL4dAd6ispNOGsJlhd0uZ6Qehkbu/B9KCR+Pxa/NVdNwi+i31lo0buCm6XxhJQFshXCD0/evfV4xfoUg==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } } diff --git a/package.json b/package.json index f1e17fa..c251c60 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "push:ci": "node ./scripts/deploy" + "push:ci": "node ./scripts/deploy", + "lua-diagnostics": "node ./scripts/lls-check" }, "repository": { "type": "git", @@ -26,6 +27,7 @@ }, "homepage": "https://bitbucket.org/minetest_gamers/x_bows#readme", "devDependencies": { + "jaguar": "^6.0.1", "node-fetch": "^3.2.10", "yargs": "^17.6.1" } diff --git a/particle_effects.lua b/particle_effects.lua index 78fbfb1..e32b2d8 100644 --- a/particle_effects.lua +++ b/particle_effects.lua @@ -13,10 +13,10 @@ XBows:register_particle_effect('arrow', { length = 1, }, glow = 1, - minvel = {x = 0, y = -0.1, z = 0}, - maxvel = {x = 0, y = -0.1, z = 0}, - minacc = {x = 0, y = -0.1, z = 0}, - maxacc = {x = 0, y = -0.1, z = 0} + minvel = { x = 0, y = -0.1, z = 0 }, + maxvel = { x = 0, y = -0.1, z = 0 }, + minacc = { x = 0, y = -0.1, z = 0 }, + maxacc = { x = 0, y = -0.1, z = 0 } }) XBows:register_particle_effect('arrow_crit', { @@ -34,10 +34,10 @@ XBows:register_particle_effect('arrow_crit', { length = 1, }, glow = 1, - minvel = {x = 0, y = -0.1, z = 0}, - maxvel = {x = 0, y = -0.1, z = 0}, - minacc = {x = 0, y = -0.1, z = 0}, - maxacc = {x = 0, y = -0.1, z = 0} + minvel = { x = 0, y = -0.1, z = 0 }, + maxvel = { x = 0, y = -0.1, z = 0 }, + minacc = { x = 0, y = -0.1, z = 0 }, + maxacc = { x = 0, y = -0.1, z = 0 } }) XBows:register_particle_effect('arrow_fast', { @@ -55,19 +55,19 @@ XBows:register_particle_effect('arrow_fast', { length = 1, }, glow = 1, - minvel = {x = 0, y = -0.1, z = 0}, - maxvel = {x = 0, y = -0.1, z = 0}, - minacc = {x = 0, y = -0.1, z = 0}, - maxacc = {x = 0, y = -0.1, z = 0} + minvel = { x = 0, y = -0.1, z = 0 }, + maxvel = { x = 0, y = -0.1, z = 0 }, + minacc = { x = 0, y = -0.1, z = 0 }, + maxacc = { x = 0, y = -0.1, z = 0 } }) XBows:register_particle_effect('bubble', { amount = 1, time = 1, - minvel = {x=1, y=1, z=0}, - maxvel = {x=1, y=1, z=0}, - minacc = {x=1, y=1, z=1}, - maxacc = {x=1, y=1, z=1}, + minvel = { x = 1, y = 1, z = 0 }, + maxvel = { x = 1, y = 1, z = 0 }, + minacc = { x = 1, y = 1, z = 1 }, + maxacc = { x = 1, y = 1, z = 1 }, minexptime = 0.2, maxexptime = 0.5, minsize = 0.5, diff --git a/scripts/lls-check.js b/scripts/lls-check.js new file mode 100644 index 0000000..2d4fa7d --- /dev/null +++ b/scripts/lls-check.js @@ -0,0 +1,93 @@ +import * as path from 'node:path' +import * as fs from 'node:fs' +import {exec} from 'node:child_process' +import yargs from 'yargs/yargs' +import {hideBin} from 'yargs/helpers' +import jaguar from 'jaguar' + +const argv = yargs(hideBin(process.argv)).argv +const cwd = process.cwd() +const logPath = path.join(cwd, 'logs') + +// Extract lua language server +const from = path.join(cwd, 'bin/lua-language-server-3.5.6-linux-x64.tar.gz'); +const to = path.join(cwd, 'bin', 'lua-language-server-3.5.6-linux-x64'); +const extract = jaguar.extract(from, to) + +// extract.on('file', (name) => { +// console.log(name) +// }) + +extract.on('start', () => { + console.log('Extracting...') +}) + +// extract.on('progress', (percent) => { +// console.log(percent + '%') +// }) + +extract.on('error', (error) => { + console.error(error) + process.exit(1) +}) + +extract.on('end', () => { + console.log('Extracting: Done') + + // Delete directory recursively + try { + fs.rmSync(logPath, { recursive: true, force: true }) + console.log(`Removed folder: ${logPath}`) + } catch (err) { + console.error(`Error while deleting ${logPath}.`) + console.error(err) + } + + let command = './bin/lua-language-server-3.5.6-linux-x64/bin/lua-language-server' + + if (argv.local) { + command = 'lua-language-server' + } + + exec(`${command} --logpath "${logPath}" --check "${cwd}"`, (error, stdout, stderr) => { + if (error) { + console.log(`error: ${error.message}`) + process.exit(1) + } + + if (stderr) { + console.log(`stderr: ${stderr}`) + process.exit(1) + } + + console.log(`\n${stdout}`) + + if (fs.existsSync('./logs/check.json')) { + const rawdata = fs.readFileSync('./logs/check.json') + const diagnosticsJson = JSON.parse(rawdata) + + Object.keys(diagnosticsJson).forEach((key) => { + console.log(key) + + diagnosticsJson[key].forEach((errObj) => { + console.log(`line: ${errObj.range.start.line} - ${errObj.message}`) + }) + }) + + console.error('Fix the errors/warnings above.') + process.exit(1) + } + + // Delete directory recursively + const llsFolder = path.join(cwd, 'bin', 'lua-language-server-3.5.6-linux-x64') + + try { + fs.rmSync(llsFolder, { recursive: true, force: true }) + console.log(`Removed folder: ${llsFolder}`) + } catch (err) { + console.error(`Error while deleting ${llsFolder}.`) + console.error(err) + process.exit(1) + } + }) +}) diff --git a/types/colors.type.lua b/types/colors.type.lua index 4e9dbe6..6ae5ef2 100644 --- a/types/colors.type.lua +++ b/types/colors.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---@alias ColorSpec string|ColorSpecTable A ColorSpec specifies a 32-bit color. It can be written in any of the following forms: `colorspec = {a=255, r=0, g=255, b=0}`, numerical form: The raw integer value of an ARGB8 quad: `colorspec = 0xFF00FF00`, string form: A ColorString (defined above): `colorspec = "green"` diff --git a/types/craft-recipe.type.lua b/types/craft-recipe.type.lua index 50e358c..b2e2bd6 100644 --- a/types/craft-recipe.type.lua +++ b/types/craft-recipe.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Crafting recipes diff --git a/types/decoration.type.lua b/types/decoration.type.lua index ee288e3..501bd7c 100644 --- a/types/decoration.type.lua +++ b/types/decoration.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---The varying types of decorations that can be placed. diff --git a/types/entity.type.lua b/types/entity.type.lua index 84da5d1..bb2c9c3 100644 --- a/types/entity.type.lua +++ b/types/entity.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Entity definition diff --git a/types/generic.type.lua b/types/generic.type.lua index 4f29264..97aba40 100644 --- a/types/generic.type.lua +++ b/types/generic.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---@alias Dump fun(obj: any, dumped?: any): string returns a string which makes `obj` human-readable, `obj`: arbitrary variable, `dumped`: table, default: `{}` diff --git a/types/inventory.type.lua b/types/inventory.type.lua index 442fc91..6a6dd6b 100644 --- a/types/inventory.type.lua +++ b/types/inventory.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki --An `InvRef` is a reference to an inventory. diff --git a/types/item.type.lua b/types/item.type.lua index 7a14b12..31ea2d0 100644 --- a/types/item.type.lua +++ b/types/item.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest item definition. Used by `minetest.register_node`, `minetest.register_craftitem`, and `minetest.register_tool`. diff --git a/types/itemstack.type.lua b/types/itemstack.type.lua index c3d516f..e8b1e1b 100644 --- a/types/itemstack.type.lua +++ b/types/itemstack.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---A native C++ format with many helper methods. Useful for converting between formats. diff --git a/types/mapgen-aliases.type.lua b/types/mapgen-aliases.type.lua index da039e5..c955426 100644 --- a/types/mapgen-aliases.type.lua +++ b/types/mapgen-aliases.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki --- In a game, a certain number of these must be set to tell core mapgens which of the game's nodes are to be used for core mapgen generation. diff --git a/types/math.type.lua b/types/math.type.lua index 4d62d97..c0078f9 100644 --- a/types/math.type.lua +++ b/types/math.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check, duplicate-doc-alias ---https://github.com/sumneko/lua-language-server/wiki ---@alias mathlib mathlib|MathAbstract diff --git a/types/meta.type.lua b/types/meta.type.lua index 234ce74..1a9e54e 100644 --- a/types/meta.type.lua +++ b/types/meta.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---@alias ItemStackMetaRef MetaDataRef|ItemStackMetaRefAbstract diff --git a/types/minetest.type.lua b/types/minetest.type.lua index 1e12922..7183043 100644 --- a/types/minetest.type.lua +++ b/types/minetest.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest globals @@ -68,7 +69,7 @@ ---@field register_on_player_receive_fields fun(func: fun(player: ObjectRef, formname: string, fields: table)): nil Called when the server received input from `player` in a formspec with the given `formname`. Specifically, this is called on any of the following events: a button was pressed, Enter was pressed while the focus was on a text field, a checkbox was toggled, something was selected in a dropdown list, a different tab was selected, selection was changed in a textlist or table, an entry was double-clicked in a textlist or table, a scrollbar was moved, or the form was actively closed by the player. ---@field get_inventory fun(location: {['"type"']: 'player'|'node'|'detached', ['"name"']: string|nil, ['"pos"']: Vector|nil}): InvRef ---@field dir_to_wallmounted fun(dir: Vector): number Convert a vector to a wallmounted value, used for `paramtype2="wallmounted"` ----@field item_place_node fun(itemstack: ItemStack, placer: ObjectRef, pointed_thing: PointedThingDef, param2?: , prevent_after_place?: boolean): Vector|nil Place item as a node, `param2` overrides `facedir` and wallmounted `param2`, `prevent_after_place`: if set to `true`, `after_place_node` is not called or the newly placed node to prevent a callback and placement loop. returns `itemstack, position`, `position`: the location the node was placed to. `nil` if nothing was placed. +---@field item_place_node fun(itemstack: ItemStack, placer: ObjectRef, pointed_thing: PointedThingDef, param2?: string , prevent_after_place?: boolean): Vector|nil Place item as a node, `param2` overrides `facedir` and wallmounted `param2`, `prevent_after_place`: if set to `true`, `after_place_node` is not called or the newly placed node to prevent a callback and placement loop. returns `itemstack, position`, `position`: the location the node was placed to. `nil` if nothing was placed. ---@field unregister_item fun(name: string): nil Unregisters the item from the engine, and deletes the entry with key `name` from `minetest.registered_items` and from the associated item table according to its nature: `minetest.registered_nodes`, etc. ---@field register_allow_player_inventory_action fun(func: fun(player: ObjectRef, action: string, inventory: InvRef, inventory_info: {["from_list"]: string, ["to_list"]: string, ["from_index"]: number, ["to_index"]: number, ["count"]: number} | {["listname"]: string, ["index"]: number, ["stack"]: ItemStack}): number): nil Determines how much of a stack may be taken, put or moved to a player inventory. `player` (type `ObjectRef`) is the player who modified the inventory, `inventory` (type `InvRef`). List of possible `action` (string) values and their `inventory_info` (table) contents: `move`: `{from_list=string, to_list=string, from_index=number, to_index=number, count=number}`, `put`: `{listname=string, index=number, stack=ItemStack}`, `take`: Same as `put`. Return a numeric value to limit the amount of items to be taken, put or moved. A value of `-1` for `take` will make the source stack infinite. ---@field register_on_player_inventory_action fun(func: fun(player: ObjectRef, action: string, inventory: InvRef, inventory_info: {["from_list"]: string, ["to_list"]: string, ["from_index"]: number, ["to_index"]: number, ["count"]: number} | {["listname"]: string, ["index"]: number, ["stack"]: ItemStack}): nil): nil Called after a take, put or move event from/to/in a player inventory. Function arguments: see `minetest.register_allow_player_inventory_action`. Does not accept or handle any return value. diff --git a/types/mtg-creative.type.lua b/types/mtg-creative.type.lua index df3ce0d..4b4199d 100644 --- a/types/mtg-creative.type.lua +++ b/types/mtg-creative.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest game creative mod diff --git a/types/mtg-default.type.lua b/types/mtg-default.type.lua index 884202b..721a8a9 100644 --- a/types/mtg-default.type.lua +++ b/types/mtg-default.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest game default mod diff --git a/types/mtg-dungeon-loot.type.lua b/types/mtg-dungeon-loot.type.lua index cea06f5..88faa2b 100644 --- a/types/mtg-dungeon-loot.type.lua +++ b/types/mtg-dungeon-loot.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest game dungeon loot mod API diff --git a/types/mtg-farming.type.lua b/types/mtg-farming.type.lua index ea47682..177c4b4 100644 --- a/types/mtg-farming.type.lua +++ b/types/mtg-farming.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest game farming mod diff --git a/types/mtg-player-api.type.lua b/types/mtg-player-api.type.lua index c0d2b76..f9a5cc3 100644 --- a/types/mtg-player-api.type.lua +++ b/types/mtg-player-api.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---The player API can register player models and update the player's appearance. ---@class MtgPlayerApi ---@field globalstep fun(dtime: number, ...): nil The function called by the globalstep that controls player animations. You can override this to replace the globalstep with your own implementation. Receives all args that minetest.register_globalstep() passes diff --git a/types/mtg-screwdriver.type.lua b/types/mtg-screwdriver.type.lua index 435f5d2..5550b16 100644 --- a/types/mtg-screwdriver.type.lua +++ b/types/mtg-screwdriver.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest game screwdriver mod diff --git a/types/mtg-sfinv.lua b/types/mtg-sfinv.lua index 7d0070b..bec0f9c 100644 --- a/types/mtg-sfinv.lua +++ b/types/mtg-sfinv.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---Sfinv API ---@class Sfinv ---@field register_page fun(name: string, def: SfinvDef): nil Register a page diff --git a/types/mtg-stairs.type.lua b/types/mtg-stairs.type.lua index f69e9d0..1984d79 100644 --- a/types/mtg-stairs.type.lua +++ b/types/mtg-stairs.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Minetest game stairs mod diff --git a/types/node.type.lua b/types/node.type.lua index 8290fc3..be63717 100644 --- a/types/node.type.lua +++ b/types/node.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---@alias NodeDef NodeDefAbstract | NodeDefMtgFarming diff --git a/types/nodetimer.type.lua b/types/nodetimer.type.lua index cbf2658..7a96ea7 100644 --- a/types/nodetimer.type.lua +++ b/types/nodetimer.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Node Timers: a high resolution persistent per-node timer. Can be gotten via `minetest.get_node_timer(pos)`. diff --git a/types/object.type.lua b/types/object.type.lua index 693b40b..3fea64e 100644 --- a/types/object.type.lua +++ b/types/object.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---@alias ObjectRef ObjectRefAbstract | ObjectRefLuaEntityRef diff --git a/types/particlespawner.type.lua b/types/particlespawner.type.lua index 8ea5800..73d2a91 100644 --- a/types/particlespawner.type.lua +++ b/types/particlespawner.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki --- ParticleSpawner definition diff --git a/types/pointed-thing.type.lua b/types/pointed-thing.type.lua index 5d2c1bb..8c21680 100644 --- a/types/pointed-thing.type.lua +++ b/types/pointed-thing.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Pointed thing definition diff --git a/types/raycast.type.lua b/types/raycast.type.lua index 066c19a..b0679fe 100644 --- a/types/raycast.type.lua +++ b/types/raycast.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---A raycast on the map. It works with selection boxes. The map is loaded as the ray advances. If the map is modified after the `Raycast` is created, the changes may or may not have an effect on the object. diff --git a/types/sound.type.lua b/types/sound.type.lua index a4abbc3..0ea957c 100644 --- a/types/sound.type.lua +++ b/types/sound.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ---Specifies a sound name, gain (=volume) and pitch. This is either a string or a table. In string form, you just specify the sound name or the empty string for no sound. diff --git a/types/string.type.lua b/types/string.type.lua index 62b3eca..b86a4fc 100644 --- a/types/string.type.lua +++ b/types/string.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check, duplicate-doc-alias ---https://github.com/sumneko/lua-language-server/wiki ---@alias string string|StringAbstract diff --git a/types/table.type.lua b/types/table.type.lua index fe8a08f..f8acf47 100644 --- a/types/table.type.lua +++ b/types/table.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check, duplicate-doc-alias ---https://github.com/sumneko/lua-language-server/wiki ---@alias tablelib tablelib|TableAbstract diff --git a/types/unified_inventory.type.lua b/types/unified_inventory.type.lua index 1f1bfd0..3f0baab 100644 --- a/types/unified_inventory.type.lua +++ b/types/unified_inventory.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---Base class Unified Inventory ---@class UnifiedInventory ---@field set_inventory_formspec fun(player: ObjectRef, formspecname: string): nil diff --git a/types/vector.type.lua b/types/vector.type.lua index d73d308..ceeb286 100644 --- a/types/vector.type.lua +++ b/types/vector.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---https://github.com/sumneko/lua-language-server/wiki ------All `vector.*` functions allow vectors `{x = X, y = Y, z = Z}` without metatables. Returned vectors always have a metatable set. diff --git a/types/xbows.type.lua b/types/xbows.type.lua index a813263..777d15d 100644 --- a/types/xbows.type.lua +++ b/types/xbows.type.lua @@ -1,3 +1,4 @@ +---@diagnostic disable: codestyle-check ---Base class XBows ---@class XBows ---@field pvp boolean @@ -16,7 +17,7 @@ ---@field registered_particle_spawners table ---@field registered_entities table ---@field player_bow_sneak table> ----@field settings {["x_bows_attach_arrows_to_entities"]: boolean, ["x_bows_show_damage_numbers"]: boolean, ["x_bows_show_3d_quiver"]: boolean} +---@field settings {["x_bows_attach_arrows_to_entities"]: boolean | nil, ["x_bows_show_damage_numbers"]: boolean | nil, ["x_bows_show_3d_quiver"]: boolean | nil} ---@field quiver table Quiver class ---@field charge_sound_after_job table ---@field is_allowed_ammunition fun(self: XBows, weapon_name: string, ammo_name: string): boolean Check if ammunition is allowed to charge this weapon