From 18f8e89cb449a0eb305d621a38f463f8f150186e Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Fri, 19 Apr 2024 03:09:39 +1000 Subject: [PATCH] feat(array): isArray method --- imports/array/shared.lua | 19 ++++++++++++++++++- imports/triggerClientEvent/server.lua | 4 ++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/imports/array/shared.lua b/imports/array/shared.lua index b39100d..44fbf33 100644 --- a/imports/array/shared.lua +++ b/imports/array/shared.lua @@ -1,6 +1,8 @@ ---@class Array : OxClass local Array = lib.class('Array') +---@alias ArrayLike Array | { [number]: T } + ---@private function Array:constructor(...) local arr = { ... } @@ -18,7 +20,7 @@ function Array:__newindex(index, value) end ---Create a new array containing the elements from two arrays. ----@param arr Array | any[] +---@param arr ArrayLike function Array:merge(arr) local newArr = table.clone(self) local length = #self @@ -167,6 +169,21 @@ function Array:reduce(reducer, initialValue) return accumulator end +---Returns true if the given table is an instance of array or an array-like table. +---@param tbl ArrayLike +---@return boolean +function Array.isArray(tbl) + if not type(tbl) == 'table' then return false end + + local tableType = table.type(tbl) + + if tableType == 'array' or tableType == 'empty' or Array.instanceOf(tbl, Array) then + return true + end + + return false +end + lib.array = Array return lib.array diff --git a/imports/triggerClientEvent/server.lua b/imports/triggerClientEvent/server.lua index 3294339..fc49af0 100644 --- a/imports/triggerClientEvent/server.lua +++ b/imports/triggerClientEvent/server.lua @@ -3,13 +3,13 @@ --- ---Provides non-neglibible performance gains due to msgpacking all arguments _once_, instead of per-target. ---@param eventName string ----@param targetIds number | number[] +---@param targetIds number | ArrayLike ---@param ... any function lib.triggerClientEvent(eventName, targetIds, ...) local payload = msgpack.pack_args(...) local payloadLen = #payload - if type(targetIds) == 'table' and table.type(targetIds) == 'array' then + if lib.array.isArray(targetIds) then for i = 1, #targetIds do TriggerClientEventInternal(eventName, targetIds[i] --[[@as string]], payload, payloadLen) end