Add boolean argument coercion helper

master
Piotr 3 months ago committed by Teodor Tanasoaia
parent 95b6489f18
commit 61366d4800

@ -4,12 +4,12 @@ import { LuaError } from '../LuaError'
import { import {
tostring, tostring,
posrelat, posrelat,
coerceArgToNumber, coerceArgToNumber,
coerceArgToString, coerceArgToString,
hasOwnProperty, hasOwnProperty,
LuaType, LuaType,
coerceToBoolean coerceArgToBoolean
} from '../utils' } from '../utils'
const ROSETTA_STONE: Record<string, string> = { const ROSETTA_STONE: Record<string, string> = {
'([^a-zA-Z0-9%(])-': '$1*?', '([^a-zA-Z0-9%(])-': '$1*?',
@ -125,7 +125,7 @@ function find(s: LuaType, pattern: LuaType, init: LuaType, plain: LuaType): (num
const S = coerceArgToString(s, 'find', 1) const S = coerceArgToString(s, 'find', 1)
const P = coerceArgToString(pattern, 'find', 2) const P = coerceArgToString(pattern, 'find', 2)
const INIT = init === undefined ? 1 : coerceArgToNumber(init, 'find', 3) const INIT = init === undefined ? 1 : coerceArgToNumber(init, 'find', 3)
const PLAIN = plain === undefined ? false : coerceToBoolean(plain) const PLAIN = plain === undefined ? false : coerceArgToBoolean(plain, 'find', 4)
// Regex // Regex
if (!PLAIN) { if (!PLAIN) {

@ -157,23 +157,27 @@ function coerceToString(val: LuaType, errorMessage?: string): string {
throwCoerceError(val, errorMessage) throwCoerceError(val, errorMessage)
} }
function coerceArg<T>( function coerceArg<T>(
value: LuaType, value: LuaType,
coerceFunc: (val: LuaType, errorMessage?: string) => T, coerceFunc: (val: LuaType, errorMessage?: string) => T,
typ: 'number' | 'string', typ: 'number' | 'string' | 'boolean',
funcName: string, funcName: string,
index: number index: number
): T { ): T {
return coerceFunc(value, `bad argument #${index} to '${funcName}' (${typ} expected, got %type)`) return coerceFunc(value, `bad argument #${index} to '${funcName}' (${typ} expected, got %type)`)
} }
function coerceArgToNumber(value: LuaType, funcName: string, index: number): number { function coerceArgToNumber(value: LuaType, funcName: string, index: number): number {
return coerceArg<number>(value, coerceToNumber, 'number', funcName, index) return coerceArg<number>(value, coerceToNumber, 'number', funcName, index)
} }
function coerceArgToString(value: LuaType, funcName: string, index: number): string { function coerceArgToString(value: LuaType, funcName: string, index: number): string {
return coerceArg<string>(value, coerceToString, 'string', funcName, index) return coerceArg<string>(value, coerceToString, 'string', funcName, index)
} }
function coerceArgToBoolean(value: LuaType, funcName: string, index: number): boolean {
return coerceArg<boolean>(value, coerceToBoolean, 'boolean', funcName, index)
}
function coerceArgToTable(value: LuaType, funcName: string, index: number): Table { function coerceArgToTable(value: LuaType, funcName: string, index: number): Table {
if (value instanceof Table) { if (value instanceof Table) {
@ -203,14 +207,15 @@ export {
Config, Config,
type, type,
tostring, tostring,
posrelat, posrelat,
coerceToBoolean, coerceToBoolean,
coerceToNumber, coerceToNumber,
coerceToString, coerceToString,
coerceArgToNumber, coerceArgToBoolean,
coerceArgToString, coerceArgToNumber,
coerceArgToTable, coerceArgToString,
coerceArgToFunction, coerceArgToTable,
ensureArray, coerceArgToFunction,
hasOwnProperty ensureArray,
} hasOwnProperty
}

Loading…
Cancel
Save