mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2024-12-26 11:48:29 +00:00
43 lines
1.3 KiB
JavaScript
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);
|
|
});
|
|
};
|