UNPKG

1.01 kBJavaScriptView Raw
1'use strict';
2var DESCRIPTORS = require('../internals/descriptors');
3var isArray = require('../internals/is-array');
4
5var $TypeError = TypeError;
6// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
7var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
8
9// Safari < 13 does not throw an error in this case
10var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {
11 // makes no sense without proper strict mode support
12 if (this !== undefined) return true;
13 try {
14 // eslint-disable-next-line es/no-object-defineproperty -- safe
15 Object.defineProperty([], 'length', { writable: false }).length = 1;
16 } catch (error) {
17 return error instanceof TypeError;
18 }
19}();
20
21module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {
22 if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {
23 throw new $TypeError('Cannot set read only .length');
24 } return O.length = length;
25} : function (O, length) {
26 return O.length = length;
27};