|
| 1 | +var $ = require('../internals/export'); |
1 | 2 | var hiddenKeys = require('../internals/hidden-keys');
|
2 | 3 | var isObject = require('../internals/is-object');
|
3 | 4 | var has = require('../internals/has');
|
4 | 5 | var defineProperty = require('../internals/object-define-property').f;
|
| 6 | +var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names'); |
| 7 | +var getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external'); |
5 | 8 | var uid = require('../internals/uid');
|
6 | 9 | var FREEZING = require('../internals/freezing');
|
7 | 10 |
|
| 11 | +var REQUIRED = false; |
8 | 12 | var METADATA = uid('meta');
|
9 | 13 | var id = 0;
|
10 | 14 |
|
@@ -48,12 +52,38 @@ var getWeakData = function (it, create) {
|
48 | 52 |
|
49 | 53 | // add metadata on freeze-family methods calling
|
50 | 54 | var onFreeze = function (it) {
|
51 |
| - if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); |
| 55 | + if (FREEZING && REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); |
52 | 56 | return it;
|
53 | 57 | };
|
54 | 58 |
|
| 59 | +var enable = function () { |
| 60 | + meta.enable = function () { /* empty */ }; |
| 61 | + REQUIRED = true; |
| 62 | + var getOwnPropertyNames = getOwnPropertyNamesModule.f; |
| 63 | + var splice = [].splice; |
| 64 | + var test = {}; |
| 65 | + test[METADATA] = 1; |
| 66 | + |
| 67 | + // prevent exposing of metadata key |
| 68 | + if (getOwnPropertyNames(test).length) { |
| 69 | + getOwnPropertyNamesModule.f = function (it) { |
| 70 | + var result = getOwnPropertyNames(it); |
| 71 | + for (var i = 0, length = result.length; i < length; i++) { |
| 72 | + if (result[i] === METADATA) { |
| 73 | + splice.call(result, i, 1); |
| 74 | + break; |
| 75 | + } |
| 76 | + } return result; |
| 77 | + }; |
| 78 | + |
| 79 | + $({ target: 'Object', stat: true, forced: true }, { |
| 80 | + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f |
| 81 | + }); |
| 82 | + } |
| 83 | +}; |
| 84 | + |
55 | 85 | var meta = module.exports = {
|
56 |
| - REQUIRED: false, |
| 86 | + enable: enable, |
57 | 87 | fastKey: fastKey,
|
58 | 88 | getWeakData: getWeakData,
|
59 | 89 | onFreeze: onFreeze
|
|
0 commit comments