123456789101112131415161718192021222324252627 |
- 'use strict';
- var DESCRIPTORS = require('../internals/descriptors');
- var isArray = require('../internals/is-array');
-
- var $TypeError = TypeError;
- // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
-
- // Safari < 13 does not throw an error in this case
- var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {
- // makes no sense without proper strict mode support
- if (this !== undefined) return true;
- try {
- // eslint-disable-next-line es/no-object-defineproperty -- safe
- Object.defineProperty([], 'length', { writable: false }).length = 1;
- } catch (error) {
- return error instanceof TypeError;
- }
- }();
-
- module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {
- if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {
- throw new $TypeError('Cannot set read only .length');
- } return O.length = length;
- } : function (O, length) {
- return O.length = length;
- };
|