Source code
Revision control
Copy as Markdown
Other Tools
{
"name": "es5-shim",
"version": "2.0.0",
"description": "ES5 as implementable on previous engines",
"contributors": [
{
"name": "Kris Kowal",
"email": "kris@cixar.com",
},
{
"name": "Sami Samhuri",
"email": "sami.samhuri@gmail.com",
},
{
"name": "Florian Schäfer",
"email": "florian.schaefer@gmail.com",
},
{
"name": "Irakli Gozalishvili",
"email": "rfobic@gmail.com",
},
{
"name": "Kit Cambridge",
"email": "kitcambridge@gmail.com",
}
],
"bugs": {
"mail": "kris@cixar.com",
},
"licenses": [
{
"type": "MIT",
}
],
"main": "es5-shim.js",
"repository": {
"type": "git",
},
"engines": {
"node": ">=0.2.0"
},
"readme": "\n`es5-shim.js` and `es5-shim.min.js` monkey-patch a JavaScript context to\ncontain all EcmaScript 5 methods that can be faithfully emulated with a\nlegacy JavaScript engine.\n\n`es5-sham.js` and `es5-sham.min.js` monkey-patch other ES5 methods as\nclosely as possible. For these methods, as closely as possible to ES5\nis not very close. Many of these shams are intended only to allow code\nto be written to ES5 without causing run-time errors in older engines.\nIn many cases, this means that these shams cause many ES5 methods to\nsilently fail. Decide carefully whether this is what you want.\n\n\n## Tests\n\nThe tests are written with the Jasmine BDD test framework.\nTo run the tests, navigate to <root-folder>/tests/. \n\nIn order to run against the shim-code, the tests attempt to kill the current \nimplementation of the missing methods. This happens in <root-folder>/tests/helpers/h-kill.js.\nSo in order to run the tests against the build-in methods, invalidate that file somehow\n(comment-out, delete the file, delete the script-tag, etc.).\n\n## Shims\n\n### Complete tests ###\n\n* Array.prototype.every\n* Array.prototype.filter\n* Array.prototype.forEach\n* Array.prototype.indexOf\n* Array.prototype.lastIndexOf\n* Array.prototype.map\n* Array.prototype.some\n* Array.prototype.reduce\n* Array.prototype.reduceRight\n* Array.isArray\n* Date.now\n* Date.prototype.toJSON\n* Function.prototype.bind\n * /!\\ Caveat: the bound function's length is always 0.\n * /!\\ Caveat: the bound function has a prototype property.\n * /!\\ Caveat: bound functions do not try too hard to keep you\n from manipulating their ``arguments`` and ``caller`` properties.\n * /!\\ Caveat: bound functions don't have checks in ``call`` and\n ``apply`` to avoid executing as a constructor.\n* Object.keys\n* String.prototype.trim\n\n### Untested ###\n\n* Date.parse (for ISO parsing)\n* Date.prototype.toISOString\n\n## Shams\n\n* /?\\ Object.create\n\n For the case of simply \"begetting\" an object that\n inherits prototypically from another, this should work\n fine across legacy engines.\n\n /!\\ Object.create(null) will work only in browsers that\n support prototype assignment. This creates an object\n that does not have any properties inherited from\n Object.prototype. It will silently fail otherwise.\n\n /!\\ The second argument is passed to\n Object.defineProperties which will probably fail\n silently.\n\n* /?\\ Object.getPrototypeOf\n\n This will return \"undefined\" in some cases. It uses\n __proto__ if it's available. Failing that, it uses\n constructor.prototype, which depends on the constructor\n property of the object's prototype having not been\n replaced. If your object was created like this, it\n won't work:\n\n function Foo() {\n }\n Foo.prototype = {};\n\n Because the prototype reassignment destroys the\n constructor property.\n\n This will work for all objects that were created using\n `Object.create` implemented with this library.\n\n* /!\\ Object.getOwnPropertyNames\n\n This method uses Object.keys, so it will not be accurate\n on legacy engines.\n\n* Object.isSealed\n\n Returns \"false\" in all legacy engines for all objects,\n which is conveniently guaranteed to be accurate.\n\n* Object.isFrozen\n\n Returns \"false\" in all legacy engines for all objects,\n which is conveniently guaranteed to be accurate.\n\n* Object.isExtensible\n\n Works like a charm, by trying very hard to extend the\n object then redacting the extension.\n\n### Fail silently\n\n* /!\\ Object.getOwnPropertyDescriptor\n \n The behavior of this shim does not conform to ES5. It\n should probably not be used at this time, until its\n behavior has been reviewed and been confirmed to be\n useful in legacy engines.\n\n* /!\\ Object.defineProperty\n\n This method will silently fail to set \"writable\",\n \"enumerable\", and \"configurable\" properties.\n \n Providing a getter or setter with \"get\" or \"set\" on a\n descriptor will silently fail on engines that lack\n \"__defineGetter__\" and \"__defineSetter__\", which include\n all versions of IE up to version 8 so far.\n\n IE 8 provides a version of this method but it only works\n on DOM objects. Thus, the shim will not get installed\n and attempts to set \"value\" properties will fail\n silently on non-DOM objects.\n\n https://github.com/kriskowal/es5-shim/issues#issue/5\n\n* /!\\ Object.defineProperties\n\n This uses the Object.defineProperty shim\n\n* Object.seal\n\n Silently fails on all legacy engines. This should be\n fine unless you are depending on the safety and security\n provisions of this method, which you cannot possibly\n obtain in legacy engines.\n\n* Object.freeze\n\n Silently fails on all legacy engines. This should be\n fine unless you are depending on the safety and security\n provisions of this method, which you cannot possibly\n obtain in legacy engines.\n\n* Object.preventExtensions\n\n Silently fails on all legacy engines. This should be\n fine unless you are depending on the safety and security\n provisions of this method, which you cannot possibly\n obtain in legacy engines.\n\n",
"readmeFilename": "README.md",
"_id": "es5-shim@2.0.0"
}