cocos-enhance-kit/engine/gulp/util/fix-jsb-javascriptcore.js
2022-06-25 00:23:03 +08:00

43 lines
1.3 KiB
JavaScript

// fix `typeof constructor` on JavaScriptCore
const ES = require('event-stream');
const Path = require('path');
const getRealTypeOfObj = (function __realTypeOfObj (obj) {
if (obj) {
if (obj.toString) {
if (obj.toString() === '[object CallbackConstructor]')
return 'function';
}
else {
// "Cannot convert object to primitive value"
}
}
return 'object';
}).toString();
const TYPEOF_SHIM = `\n${getRealTypeOfObj}\nvar __typeofVal = "";`;
const TYPEOF_REG = /typeof\s+([$A-Za-z_][0-9A-Za-z_$\.\[\]]*)([\s!=;\)])/g;
const TYPEOF_REPLACEMENT = '(__typeofVal = typeof $1, __typeofVal === "object" ? __realTypeOfObj($1) : __typeofVal)$2';
const SUPPORT_JSC = false;
module.exports = function () {
return ES.through(function (file) {
if (Path.extname(file.path) === '.js' && SUPPORT_JSC) {
var content = file.contents.toString();
content = content.replace(TYPEOF_REG, TYPEOF_REPLACEMENT);
content += TYPEOF_SHIM;
// make shim as local variables so that variable names will be mangled
content = '(function () {' + content + '})();';
file.contents = new Buffer(content);
}
this.emit('data', file);
});
};