'use strict'; var GetIntrinsic = require('get-intrinsic'); var $concat = GetIntrinsic('%Array.prototype.concat%'); var callBind = require('call-bind'); var callBound = require('call-bind/callBound'); var $slice = callBound('Array.prototype.slice'); var hasSymbols = require('has-symbols/shams')(); var isConcatSpreadable = hasSymbols && Symbol.isConcatSpreadable; /** @type {never[]} */ var empty = []; var $concatApply = isConcatSpreadable ? callBind.apply($concat, empty) : null; var isArray = isConcatSpreadable ? require('isarray') : null; /** @type {typeof Array.prototype.concat} */ var safeConcat = isConcatSpreadable // eslint-disable-next-line no-unused-vars ? function safeArrayConcat(item) { for (var i = 0; i < arguments.length; i += 1) { /** @type {typeof item} */ var arg = arguments[i]; // @ts-expect-error ts(2538) see https://github.com/microsoft/TypeScript/issues/9998#issuecomment-1890787975; works if `const` if (arg && typeof arg === 'object' && typeof arg[isConcatSpreadable] === 'boolean') { // @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing if (!empty[isConcatSpreadable]) { // @ts-expect-error ts(7015) TS doesn't yet support Symbol indexing empty[isConcatSpreadable] = true; } // @ts-expect-error ts(2721) ts(18047) not sure why TS can't figure out this can't be nul /** @type {T[]} */ var arr = isArray(arg) ? $slice(arg) : [arg]; // @ts-expect-error ts(7015) TS can't handle expandos on an array arr[isConcatSpreadable] = true; // shadow the property. TODO: use [[Define]] arguments[i] = arr; } } // @ts-expect-error ts(2345) TS doesn't understand that apply can take an arguments object return $concatApply(arguments); } : callBind($concat, empty); module.exports = safeConcat;