import { mb_strwidth } from "@/util/mb_strwidth"; import { isArray, isBoolean, isInteger, isString } from "lodash-es"; const stringArgs = [ 'nationName', 'optionText', 'itemType', 'nationType', 'itemCode', 'commandType', ] as const; const intArgs = [ 'crewType', 'destGeneralID', 'destCityID', 'destNationID', 'amount', 'colorType', 'year', 'month', 'srcArmType', 'destArmType', //숙련전환 전용 ] as const; const booleanArgs = [ 'isGold', 'buyRice', ] as const; const integerArrayArgs = [ 'destNationIDList', 'destGeneralIDList', 'amountList' ] as const; type StringKeys = typeof stringArgs[number]; type IntKeys = typeof intArgs[number]; type BooleanKeys = typeof booleanArgs[number]; type IntegerArrayKeys = typeof integerArrayArgs[number]; export type Args = { [key in StringKeys]?: string; } & { [key in IntKeys]?: number; } & { [key in BooleanKeys]?: boolean; } & { [key in IntegerArrayKeys]?: number[] }; export function testSubmitArgs(args: Args): true | ['int' | 'string' | 'boolean' | 'int[]', keyof Args, number | string | boolean | number[]] { for (const intKey of intArgs) { const testVal = args[intKey]; if (testVal === undefined) { continue; } if (!isInteger(testVal)) { return ['int', intKey, testVal]; } } for (const stringKey of stringArgs) { const testVal = args[stringKey]; if (testVal === undefined) { continue; } if (!isString(testVal)) { return ['string', stringKey, testVal]; } if(stringKey == 'nationName' && mb_strwidth(testVal) > 18){ throw `길이가 반각 18자 분량을 넘었습니다.`; } } for (const booleanKey of booleanArgs) { const testVal = args[booleanKey]; if (testVal === undefined) { continue; } if (!isBoolean(testVal)) { return ['boolean', booleanKey, testVal]; } } for (const integerArrayKey of integerArrayArgs) { const testVal = args[integerArrayKey]; if (testVal === undefined) { continue; } if (!isArray(args[integerArrayKey])) { return ['int[]', integerArrayKey, testVal]; } for (const value of testVal) { if (!isInteger(value)) { return ['int[]', integerArrayKey, testVal]; } } } return true; }