@awayfl/avm2
Version:
Virtual machine for executing AS3 code
59 lines (58 loc) • 2.02 kB
JavaScript
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;
}