Add boolean argument coercion helper

pull/30/head
Piotr 3 months ago
parent 22fb810725
commit 2574460a62

@ -4,12 +4,12 @@ import { LuaError } from '../LuaError'
import {
tostring,
posrelat,
coerceArgToNumber,
coerceArgToString,
hasOwnProperty,
LuaType,
coerceToBoolean
} from '../utils'
coerceArgToNumber,
coerceArgToString,
hasOwnProperty,
LuaType,
coerceArgToBoolean
} from '../utils'
const ROSETTA_STONE: Record<string, string> = {
'([^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 P = coerceArgToString(pattern, 'find', 2)
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
if (!PLAIN) {

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

Loading…
Cancel
Save