From d98a3af2652a734a64bdbdca3f809f20d9ed9245 Mon Sep 17 00:00:00 2001 From: Metee Tanathip Date: Fri, 9 Feb 2024 16:22:12 +0700 Subject: [PATCH 1/3] feat: add TypeCheck to check value types --- [core]/es_extended/common/functions.lua | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/[core]/es_extended/common/functions.lua b/[core]/es_extended/common/functions.lua index f6414bdc..86f1b910 100644 --- a/[core]/es_extended/common/functions.lua +++ b/[core]/es_extended/common/functions.lua @@ -106,3 +106,25 @@ end function ESX.Round(value, numDecimalPlaces) return ESX.Math.Round(value, numDecimalPlaces) end + +function ESX.TypeCheck(value, ...) + local types = { ... } + + if (#types == 0) then return true end + + local mapType = {} + for i = 1, #types, 1 do + mapType[types[i]] = true + end + + local valueType = type(value) + local requireTypes = table.concat(types, " or ") + local errorMessage = ("bad value (%s expected, got %s)"):format(requireTypes, valueType) + local matches = mapType[valueType] ~= nil + + -- Need feedback on this one, should we assert or return false and error message? + -- i prefer assert, but i'm open to suggestions + assert(matches, errorMessage) + + return matches, errorMessage +end From 6b45a1a597e0307c9aadad5c96153ccaf6438bf1 Mon Sep 17 00:00:00 2001 From: Metee Tanathip Date: Mon, 12 Feb 2024 04:14:09 +0700 Subject: [PATCH 2/3] refactor: removed `TypeCheck` - replaced `TypeCheck` with `AssertType` this function will assert - add : `ValidateType` this function will return Boolean and error message --- [core]/es_extended/common/functions.lua | 29 +++++++++++++++++-------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/[core]/es_extended/common/functions.lua b/[core]/es_extended/common/functions.lua index 86f1b910..cda9e63b 100644 --- a/[core]/es_extended/common/functions.lua +++ b/[core]/es_extended/common/functions.lua @@ -107,24 +107,35 @@ function ESX.Round(value, numDecimalPlaces) return ESX.Math.Round(value, numDecimalPlaces) end -function ESX.TypeCheck(value, ...) +function ESX.ValidateType(value, ...) local types = { ... } - if (#types == 0) then return true end local mapType = {} for i = 1, #types, 1 do - mapType[types[i]] = true + local validateType = types[i] + assert(type(validateType) == "string", "bad argument types, only expected string") -- should never use anyhing else than string + mapType[validateType] = true end local valueType = type(value) - local requireTypes = table.concat(types, " or ") - local errorMessage = ("bad value (%s expected, got %s)"):format(requireTypes, valueType) - local matches = mapType[valueType] ~= nil - -- Need feedback on this one, should we assert or return false and error message? - -- i prefer assert, but i'm open to suggestions + local matches = (mapType[valueType] ~= nil) + + if not (matches) then + local requireTypes = table.concat(types, " or ") + local errorMessage = ("bad value (%s expected, got %s)"):format(requireTypes, valueType) + + return false, errorMessage + end + + return true +end + +function ESX.AssertType(...) + local matches, errorMessage = ESX.ValidateType(...) + assert(matches, errorMessage) - return matches, errorMessage + return matches end From ffac35cdfe184cc78fa611499cd3dd9a42ab3da2 Mon Sep 17 00:00:00 2001 From: Metee Tanathip Date: Fri, 1 Mar 2024 10:04:36 +0700 Subject: [PATCH 3/3] style: removed brackets --- [core]/es_extended/common/functions.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/[core]/es_extended/common/functions.lua b/[core]/es_extended/common/functions.lua index cda9e63b..0e9adb08 100644 --- a/[core]/es_extended/common/functions.lua +++ b/[core]/es_extended/common/functions.lua @@ -109,7 +109,7 @@ end function ESX.ValidateType(value, ...) local types = { ... } - if (#types == 0) then return true end + if #types == 0 then return true end local mapType = {} for i = 1, #types, 1 do @@ -120,9 +120,9 @@ function ESX.ValidateType(value, ...) local valueType = type(value) - local matches = (mapType[valueType] ~= nil) + local matches = mapType[valueType] ~= nil - if not (matches) then + if not matches then local requireTypes = table.concat(types, " or ") local errorMessage = ("bad value (%s expected, got %s)"):format(requireTypes, valueType)