UNPKG

@awayfl/avm2

Version:

Virtual machine for executing AS3 code

59 lines (58 loc) 2.02 kB
import { isNumeric } from '@awayfl/swf-loader'; import { assert, isNullOrUndefined } from '@awayjs/graphics'; import { release } from '@awayfl/swf-loader'; /** * Transforms an AS value into a JS value. */ export function transformASValueToJS(sec, value, deep, replacerFunction, key) { if (replacerFunction === void 0) { replacerFunction = null; } if (key === void 0) { key = null; } if (replacerFunction) value = replacerFunction(key, value); if (typeof value !== 'object' || isNullOrUndefined(value)) { return value; } if (isNullOrUndefined(value)) { return value; } if (sec.AXArray.axIsType(value)) { var resultList = []; // this can be a JS array var list = Array.isArray(value) ? value : value.value; for (var i = 0; i < list.length; i++) { var entry = list[i]; var jsValue = deep ? transformASValueToJS(sec, entry, true, replacerFunction, i.toString()) : entry; resultList.push(jsValue); } return resultList; } if (sec.ObjectVector.axClass.axIsType(value)) { var resultList = []; var list = value._buffer; for (var i = 0; i < list.length; i++) { var entry = list[i]; var jsValue = deep ? transformASValueToJS(sec, entry, true, replacerFunction, i.toString()) : entry; resultList.push(jsValue); } return resultList; } var keys = Object.keys(value); var resultObject = {}; for (var i = 0; i < keys.length; i++) { var key_1 = keys[i]; if (key_1 == '__scope__') { continue; } var jsKey = key_1; if (!isNumeric(key_1)) { release || assert(key_1.indexOf('$Bg') === 0); jsKey = key_1.substr(3); } var v = value[key_1]; if (deep) { v = transformASValueToJS(sec, v, true, replacerFunction, jsKey); } resultObject[jsKey] = v; } return resultObject; }