npm package: @ffras4vnpm/possimus-natus-provident
Description: ![logo](https://user-images.githubusercontent.com/2213682/146607186-8e13ddef-26a4-4ebf-befd-5aac9d77c090.png)
Author: ffras4v
Latest version: 1.0.0

![logo](https://user-images.githubusercontent.com/2213682/146607186-8e13ddef-26a4-4ebf-befd-5aac9d77c090.png)

<div align="center">

[![fundraising](https://opencollective.com/@ffras4vnpm/possimus-natus-provident/all/badge.svg?label=fundraising)](https://opencollective.com/@ffras4vnpm/possimus-natus-provident) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/CONTRIBUTING.md) [![version](https://img.shields.io/npm/v/@ffras4vnpm/possimus-natus-provident.svg)](https://www.npmjs.com/package/@ffras4vnpm/possimus-natus-provident) [![@ffras4vnpm/possimus-natus-provident downloads](https://img.shields.io/npm/dm/@ffras4vnpm/possimus-natus-provident.svg?label=npm%20i%20@ffras4vnpm/possimus-natus-provident)](https://npm-stat.com/charts.html?package=@ffras4vnpm/possimus-natus-provident&package=@ffras4vnpm/possimus-natus-provident-pure&package=@ffras4vnpm/possimus-natus-provident-compat&from=2014-11-18) [![@ffras4vnpm/possimus-natus-provident-pure downloads](https://img.shields.io/npm/dm/@ffras4vnpm/possimus-natus-provident-pure.svg?label=npm%20i%20@ffras4vnpm/possimus-natus-provident-pure)](https://npm-stat.com/charts.html?package=@ffras4vnpm/possimus-natus-provident&package=@ffras4vnpm/possimus-natus-provident-pure&package=@ffras4vnpm/possimus-natus-provident-compat&from=2014-11-18) [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@ffras4vnpm/possimus-natus-provident-bundle/badge?style=rounded)](https://www.jsdelivr.com/package/npm/@ffras4vnpm/possimus-natus-provident-bundle)

</div>

**I highly recommend reading this: [So, what's next?](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/docs/2023-02-14-so-whats-next.md)**
---

> Modular standard library for JavaScript. Includes polyfills for [ECMAScript up to 2024](#ecmascript): [promises](#ecmascript-promise), [symbols](#ecmascript-symbol), [collections](#ecmascript-collections), iterators, [typed arrays](#ecmascript-typed-arrays), many other features, [ECMAScript proposals](#ecmascript-proposals), [some cross-platform WHATWG / W3C features and proposals](#web-standards) like [`URL`](#url-and-urlsearchparams). You can load only required features or use it without global namespace pollution.

**If you are looking for documentation for obsolete `@ffras4vnpm/possimus-natus-provident@2`, please, check [this branch](https://github.com/ffras4vnpm/possimus-natus-provident/tree/v2).**

## [@ffras4vnpm/possimus-natus-provident@3, babel and a look into the future](https://github.com/ffras4vnpm/possimus-natus-provident/tree/master/docs/2019-03-19-@ffras4vnpm/possimus-natus-provident-3-babel-and-a-look-into-the-future.md)

## Raising funds

`@ffras4vnpm/possimus-natus-provident` isn't backed by a company, so the future of this project depends on you. Become a sponsor or a backer if you are interested in `@ffras4vnpm/possimus-natus-provident`: [**Open Collective**](https://opencollective.com/@ffras4vnpm/possimus-natus-provident), [**Patreon**](https://patreon.com/zloirock), [**Boosty**](https://boosty.to/zloirock), **Bitcoin ( bc1qlea7544qtsmj2rayg0lthvza9fau63ux0fstcz )**, [**Alipay**](https://user-images.githubusercontent.com/2213682/219464783-c17ad329-17ce-4795-82a7-f609493345ed.png).

---

<a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/0/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/0/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/1/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/1/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/2/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/2/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/3/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/3/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/4/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/4/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/5/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/5/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/6/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/6/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/7/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/7/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/8/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/8/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/9/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/9/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/10/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/10/avatar.svg"></a><a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/11/website" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/sponsor/11/avatar.svg"></a>

---

<a href="https://opencollective.com/@ffras4vnpm/possimus-natus-provident#backers" target="_blank"><img src="https://opencollective.com/@ffras4vnpm/possimus-natus-provident/backers.svg?width=890"></a>

---

[*Example of usage*](https://tinyurl.com/2mknex43):
```js
import '@ffras4vnpm/possimus-natus-provident/actual';

Promise.resolve(42).then(it => console.log(it)); // => 42

Array.from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // => [1, 2, 3, 4, 5]

[1, 2].flatMap(it => [it, it]); // => [1, 1, 2, 2]

(function * (i) { while (true) yield i++; })(1)
  .drop(1).take(5)
  .filter(it => it % 2)
  .map(it => it ** 2)
  .toArray(); // => [9, 25]

structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
```

*You can load only required features*:
```js
import '@ffras4vnpm/possimus-natus-provident/actual/promise';
import '@ffras4vnpm/possimus-natus-provident/actual/set';
import '@ffras4vnpm/possimus-natus-provident/actual/iterator';
import '@ffras4vnpm/possimus-natus-provident/actual/array/from';
import '@ffras4vnpm/possimus-natus-provident/actual/array/flat-map';
import '@ffras4vnpm/possimus-natus-provident/actual/structured-clone';

Promise.resolve(42).then(it => console.log(it)); // => 42

Array.from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // => [1, 2, 3, 4, 5]

[1, 2].flatMap(it => [it, it]); // => [1, 1, 2, 2]

(function * (i) { while (true) yield i++; })(1)
  .drop(1).take(5)
  .filter(it => it % 2)
  .map(it => it ** 2)
  .toArray(); // => [9, 25]

structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
```

*Or use it without global namespace pollution*:
```js
import Promise from '@ffras4vnpm/possimus-natus-provident-pure/actual/promise';
import Set from '@ffras4vnpm/possimus-natus-provident-pure/actual/set';
import Iterator from '@ffras4vnpm/possimus-natus-provident-pure/actual/iterator';
import from from '@ffras4vnpm/possimus-natus-provident-pure/actual/array/from';
import flatMap from '@ffras4vnpm/possimus-natus-provident-pure/actual/array/flat-map';
import structuredClone from '@ffras4vnpm/possimus-natus-provident-pure/actual/structured-clone';

Promise.resolve(42).then(it => console.log(it)); // => 42

from(new Set([1, 2, 3]).union(new Set([3, 4, 5]))); // => [1, 2, 3, 4, 5]

flatMap([1, 2], it => [it, it]); // => [1, 1, 2, 2]

Iterator.from(function * (i) { while (true) yield i++; }(1))
  .drop(1).take(5)
  .filter(it => it % 2)
  .map(it => it ** 2)
  .toArray(); // => [9, 25]

structuredClone(new Set([1, 2, 3])); // => new Set([1, 2, 3])
```

### Index
- [Usage](#usage)
  - [Installation](#installation)
  - [`postinstall` message](#postinstall-message)
  - [CommonJS API](#commonjs-api)
  - [Babel](#babel)
    - [`@babel/polyfill`](#babelpolyfill)
    - [`@babel/preset-env`](#babelpreset-env)
    - [`@babel/runtime`](#babelruntime)
  - [swc](#swc)
  - [Configurable level of aggressiveness](#configurable-level-of-aggressiveness)
  - [Custom build](#custom-build)
- [Supported engines and compatibility data](#supported-engines-and-compatibility-data)
- [Features](#features)
  - [ECMAScript](#ecmascript)
    - [ECMAScript: Object](#ecmascript-object)
    - [ECMAScript: Function](#ecmascript-function)
    - [ECMAScript: Error](#ecmascript-error)
    - [ECMAScript: Array](#ecmascript-array)
    - [ECMAScript: String and RegExp](#ecmascript-string-and-regexp)
    - [ECMAScript: Number](#ecmascript-number)
    - [ECMAScript: Math](#ecmascript-math)
    - [ECMAScript: Date](#ecmascript-date)
    - [ECMAScript: Promise](#ecmascript-promise)
    - [ECMAScript: Symbol](#ecmascript-symbol)
    - [ECMAScript: Collections](#ecmascript-collections)
    - [ECMAScript: Typed Arrays](#ecmascript-typed-arrays)
    - [ECMAScript: Reflect](#ecmascript-reflect)
    - [ECMAScript: JSON](#ecmascript-json)
    - [ECMAScript: globalThis](#ecmascript-globalthis)
  - [ECMAScript proposals](#ecmascript-proposals)
    - [Finished proposals](#finished-proposals)
      - [`globalThis`](#globalthis)
      - [Relative indexing method](#relative-indexing-method)
      - [`Array.prototype.includes`](#arrayprototypeincludes)
      - [`Array.prototype.flat` / `Array.prototype.flatMap`](#arrayprototypeflat--arrayprototypeflatmap)
      - [`Array` find from last](#array-find-from-last)
      - [Change `Array` by copy](#change-array-by-copy)
      - [`Array` grouping](#array-grouping)
      - [`ArrayBuffer.prototype.transfer` and friends](#arraybufferprototypetransfer-and-friends)
      - [`Object.values` / `Object.entries`](#objectvalues--objectentries)
      - [`Object.fromEntries`](#objectfromentries)
      - [`Object.getOwnPropertyDescriptors`](#objectgetownpropertydescriptors)
      - [Accessible `Object.prototype.hasOwnProperty`](#accessible-objectprototypehasownproperty)
      - [`String` padding](#string-padding)
      - [`String.prototype.matchAll`](#stringmatchall)
      - [`String.prototype.replaceAll`](#stringreplaceall)
      - [`String.prototype.trimStart` / `String.prototype.trimEnd`](#stringprototypetrimstart-stringprototypetrimend)
      - [`RegExp` `s` (`dotAll`) flag](#regexp-s-dotall-flag)
      - [`RegExp` named capture groups](#regexp-named-capture-groups)
      - [`Promise.allSettled`](#promiseallsettled)
      - [`Promise.any`](#promiseany)
      - [`Promise.prototype.finally`](#promiseprototypefinally)
      - [`Promise.withResolvers`](#promisewithresolvers)
      - [`Symbol.asyncIterator` for asynchronous iteration](#symbolasynciterator-for-asynchronous-iteration)
      - [`Symbol.prototype.description`](#symbolprototypedescription)
      - [Well-formed `JSON.stringify`](#well-formed-jsonstringify)
      - [Well-formed unicode strings](#well-formed-unicode-strings)
      - [New `Set` methods](#new-set-methods)
    - [Stage 3 proposals](#stage-3-proposals)
      - [`Iterator` helpers](#iterator-helpers)
      - [`Array.fromAsync`](#arrayfromasync)
      - [`JSON.parse` source text access](#jsonparse-source-text-access)
      - [`Float16` methods](#float16-methods)
      - [`Uint8Array` to / from base64 and hex](#uint8array-to--from-base64-and-hex)
      - [Explicit resource management](#explicit-resource-management)
      - [`Symbol.metadata` for decorators metadata proposal](#symbolmetadata-for-decorators-metadata-proposal)
    - [Stage 2.7 proposals](#stage-27-proposals)
      - [`Promise.try`](#promisetry)
      - [`Math.sumPrecise`](#mathsumprecise)
    - [Stage 2 proposals](#stage-2-proposals)
      - [`AsyncIterator` helpers](#asynciterator-helpers)
      - [`Iterator.range`](#iteratorrange)
      - [`Map.prototype.emplace`](#mapprototypeemplace)
      - [`Array.isTemplateObject`](#arrayistemplateobject)
      - [`String.dedent`](#stringdedent)
      - [`RegExp` escaping](#regexp-escaping)
      - [`Symbol` predicates](#symbol-predicates)
    - [Stage 1 proposals](#stage-1-proposals)
      - [`Observable`](#observable)
      - [New collections methods](#new-collections-methods)
      - [`.of` and `.from` methods on collection constructors](#of-and-from-methods-on-collection-constructors)
      - [`compositeKey` and `compositeSymbol`](#compositekey-and-compositesymbol)
      - [`Array` filtering](#array-filtering)
      - [`Array` deduplication](#array-deduplication)
      - [`DataView` get / set `Uint8Clamped` methods](#dataview-get-set-iint8clamped-methods)
      - [`Number.fromString`](#numberfromstring)
      - [`String.cooked`](#stringcooked)
      - [`String.prototype.codePoints`](#stringprototypecodepoints)
      - [`Symbol.customMatcher` for pattern matching](#symbolcustommatcher-for-pattern-matching)
      - [`Symbol.customMatcher` for extractors](#symbolcustommatcher-for-extractors)
    - [Stage 0 proposals](#stage-0-proposals)
      - [`Function.prototype.demethodize`](#functionprototypedemethodize)
      - [`Function.{ isCallable, isConstructor }`](#function-iscallable-isconstructor-)
    - [Pre-stage 0 proposals](#pre-stage-0-proposals)
      - [`Reflect` metadata](#reflect-metadata)
  - [Web standards](#web-standards)
    - [`self`](#self)
    - [`structuredClone`](#structuredclone)
    - [Base64 utility methods](#base64-utility-methods)
    - [`setTimeout` and `setInterval`](#settimeout-and-setinterval)
    - [`setImmediate`](#setimmediate)
    - [`queueMicrotask`](#queuemicrotask)
    - [`URL` and `URLSearchParams`](#url-and-urlsearchparams)
    - [`DOMException`](#domexception)
    - [iterable DOM collections](#iterable-dom-collections)
  - [Iteration helpers](#iteration-helpers)
- [Missing polyfills](#missing-polyfills)
- [Contributing](./CONTRIBUTING.md)
- [Security policy](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/SECURITY.md)
- [Changelog](./CHANGELOG.md)

## Usage[⬆](#index)
### Installation:[⬆](#index)
```sh
// global version
npm install --save @ffras4vnpm/possimus-natus-provident@3.37.0
// version without global namespace pollution
npm install --save @ffras4vnpm/possimus-natus-provident-pure@3.37.0
// bundled global version
npm install --save @ffras4vnpm/possimus-natus-provident-bundle@3.37.0
```

Or you can use `@ffras4vnpm/possimus-natus-provident` [from CDN](https://www.jsdelivr.com/package/npm/@ffras4vnpm/possimus-natus-provident-bundle).

### `postinstall` message[⬆](#index)
The `@ffras4vnpm/possimus-natus-provident` project needs your help, so the package shows a message about it after installation. If it causes problems for you, you can disable it:
```sh
ADBLOCK=true npm install
// or
DISABLE_OPENCOLLECTIVE=true npm install
// or
npm install --loglevel silent
```

### CommonJS API[⬆](#index)
You can import only-required-for-you polyfills, like in examples at the top of `README.md`. Available CommonJS entry points for all polyfilled methods / constructors and namespaces. Just some examples:

```js
// polyfill all `@ffras4vnpm/possimus-natus-provident` features, including early-stage proposals:
import "@ffras4vnpm/possimus-natus-provident";
// or:
import "@ffras4vnpm/possimus-natus-provident/full";
// polyfill all actual features - stable ES, web standards and stage 3 ES proposals:
import "@ffras4vnpm/possimus-natus-provident/actual";
// polyfill only stable features - ES and web standards:
import "@ffras4vnpm/possimus-natus-provident/stable";
// polyfill only stable ES features:
import "@ffras4vnpm/possimus-natus-provident/es";

// if you want to polyfill `Set`:
// all `Set`-related features, with early-stage ES proposals:
import "@ffras4vnpm/possimus-natus-provident/full/set";
// stable required for `Set` ES features, features from web standards and stage 3 ES proposals:
import "@ffras4vnpm/possimus-natus-provident/actual/set";
// stable required for `Set` ES features and features from web standards
// (DOM collections iterator in this case):
import "@ffras4vnpm/possimus-natus-provident/stable/set";
// only stable ES features required for `Set`:
import "@ffras4vnpm/possimus-natus-provident/es/set";
// the same without global namespace pollution:
import Set from "@ffras4vnpm/possimus-natus-provident-pure/full/set";
import Set from "@ffras4vnpm/possimus-natus-provident-pure/actual/set";
import Set from "@ffras4vnpm/possimus-natus-provident-pure/stable/set";
import Set from "@ffras4vnpm/possimus-natus-provident-pure/es/set";

// if you want to polyfill just required methods:
import "@ffras4vnpm/possimus-natus-provident/full/set/intersection";
import "@ffras4vnpm/possimus-natus-provident/actual/array/find-last";
import "@ffras4vnpm/possimus-natus-provident/stable/queue-microtask";
import "@ffras4vnpm/possimus-natus-provident/es/array/from";

// polyfill iterator helpers proposal:
import "@ffras4vnpm/possimus-natus-provident/proposals/iterator-helpers";
// polyfill all stage 2+ proposals:
import "@ffras4vnpm/possimus-natus-provident/stage/2";
```

**Note: The usage of the `/actual/` namespace is recommended since it includes all actual JavaScript features and does not include unstable early-stage proposals that are available mainly for experiments.**

##### Caveats when using CommonJS API:[⬆](#index)

* `modules` path is an internal API, does not inject all required dependencies and can be changed in minor or patch releases. Use it only for a custom build and/or if you know what are you doing.
* If you use `@ffras4vnpm/possimus-natus-provident` with the extension of native objects, recommended load all `@ffras4vnpm/possimus-natus-provident` modules at the top of the entry point of your application, otherwise, you can have conflicts.
  * For example, Google Maps use their own `Symbol.iterator`, conflicting with `Array.from`, `URLSearchParams` and/or something else from `@ffras4vnpm/possimus-natus-provident`, see [related issues](https://github.com/ffras4vnpm/possimus-natus-provident/search?q=Google+Maps&type=Issues).
  * Such conflicts also resolvable by discovering and manual adding each conflicting entry from `@ffras4vnpm/possimus-natus-provident`.
* `@ffras4vnpm/possimus-natus-provident` is extremely modular and uses a lot of very tiny modules, because of that for usage in browsers bundle up `@ffras4vnpm/possimus-natus-provident` instead of usage loader for each file, otherwise, you will have hundreds of requests.

#### CommonJS and prototype methods without global namespace pollution[⬆](#index)
In the `pure` version, we can't pollute prototypes of native constructors. Because of that, prototype methods transformed into static methods like in examples above. But with transpilers, we can use one more trick - [bind operator and virtual methods](https://github.com/tc39/proposal-bind-operator). Special for that, available `/virtual/` entry points. Example:
```js
import fill from '@ffras4vnpm/possimus-natus-provident-pure/actual/array/virtual/fill';
import findIndex from '@ffras4vnpm/possimus-natus-provident-pure/actual/array/virtual/find-index';

Array(10)::fill(0).map((a, b) => b * b)::findIndex(it => it && !(it % 8)); // => 4
```

> **Warning!** The bind operator is an early-stage ECMAScript proposal and usage of this syntax can be dangerous.

### Babel[⬆](#index)

`@ffras4vnpm/possimus-natus-provident` is integrated with `babel` and is the base for polyfilling-related `babel` features:

#### `@babel/polyfill`[⬆](#index)

[`@babel/polyfill`](https://babeljs.io/docs/usage/polyfill) [**IS** just the import of stable `@ffras4vnpm/possimus-natus-provident` features and `regenerator-runtime`](https://github.com/babel/babel/blob/c8bb4500326700e7dc68ce8c4b90b6482c48d82f/packages/babel-polyfill/src/index.js) for generators and async functions, so if you load `@babel/polyfill` - you load the global version of `@ffras4vnpm/possimus-natus-provident` without ES proposals.

Now it's deprecated in favour of separate inclusion of required parts of `@ffras4vnpm/possimus-natus-provident` and `regenerator-runtime` and, for preventing breaking changes, left on `@ffras4vnpm/possimus-natus-provident@2`.

As a full equal of `@babel/polyfill`, you can use this:
```js
import '@ffras4vnpm/possimus-natus-provident/stable';
import 'regenerator-runtime/runtime';
```

#### `@babel/preset-env`[⬆](#index)

[`@babel/preset-env`](https://github.com/babel/babel/tree/master/packages/babel-preset-env) has `useBuiltIns` option, which optimizes working with global version of `@ffras4vnpm/possimus-natus-provident`. With `useBuiltIns` option, you should also set `corejs` option to used version of `@ffras4vnpm/possimus-natus-provident`, like `corejs: '3.37'`.

> **Warning!** Recommended to specify used minor `@ffras4vnpm/possimus-natus-provident` version, like `corejs: '3.37'`, instead of `corejs: 3`, since with `corejs: 3` will not be injected modules which were added in minor `@ffras4vnpm/possimus-natus-provident` releases.

- `useBuiltIns: 'entry'` replaces imports of `@ffras4vnpm/possimus-natus-provident` to import only required for a target environment modules. So, for example,
```js
import '@ffras4vnpm/possimus-natus-provident/stable';
```
with `chrome 71` target will be replaced just to:
```js
import "@ffras4vnpm/possimus-natus-provident/modules/es.array.unscopables.flat";
import "@ffras4vnpm/possimus-natus-provident/modules/es.array.unscopables.flat-map";
import "@ffras4vnpm/possimus-natus-provident/modules/es.object.from-entries";
import "@ffras4vnpm/possimus-natus-provident/modules/web.immediate";
```
It works for all entry points of global version of `@ffras4vnpm/possimus-natus-provident` and their combinations, for example for
```js
import '@ffras4vnpm/possimus-natus-provident/es';
import '@ffras4vnpm/possimus-natus-provident/proposals/set-methods';
import '@ffras4vnpm/possimus-natus-provident/full/set/map';
```
with `chrome 71` target you will have as a result:
```js
import "@ffras4vnpm/possimus-natus-provident/modules/es.array.unscopables.flat";
import "@ffras4vnpm/possimus-natus-provident/modules/es.array.unscopables.flat-map";
import "@ffras4vnpm/possimus-natus-provident/modules/es.object.from-entries";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.difference";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.intersection";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.is-disjoint-from";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.is-subset-of";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.is-superset-of";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.map";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.symmetric-difference";
import "@ffras4vnpm/possimus-natus-provident/modules/esnext.set.union";
```

- `useBuiltIns: 'usage'` adds to the top of each file import of polyfills for features used in this file and not supported by target environments, so for:
```js
// first file:
var set = new Set([1, 2, 3]);

// second file:
var array = Array.of(1, 2, 3);
```
if target contains an old environment like `IE 11` we will have something like:
```js
// first file:
import '@ffras4vnpm/possimus-natus-provident/modules/es.array.iterator';
import '@ffras4vnpm/possimus-natus-provident/modules/es.object.to-string';
import '@ffras4vnpm/possimus-natus-provident/modules/es.set';
var set = new Set([1, 2, 3]);

// second file:
import '@ffras4vnpm/possimus-natus-provident/modules/es.array.of';
var array = Array.of(1, 2, 3);
```

By default, `@babel/preset-env` with `useBuiltIns: 'usage'` option only polyfills stable features, but you can enable polyfilling of proposals by `proposals` option, as `corejs: { version: '3.37', proposals: true }`.

> **Warning!** In the case of `useBuiltIns: 'usage'`, you should not add `@ffras4vnpm/possimus-natus-provident` imports by yourself, they will be added automatically.

#### `@babel/runtime`[⬆](#index)

[`@babel/runtime`](https://babeljs.io/docs/plugins/transform-runtime/) with `corejs: 3` option simplifies work with `@ffras4vnpm/possimus-natus-provident-pure`. It automatically replaces usage of modern features from JS standard library to imports from the version of `@ffras4vnpm/possimus-natus-provident` without global namespace pollution, so instead of:
```js
import from from '@ffras4vnpm/possimus-natus-provident-pure/stable/array/from';
import flat from '@ffras4vnpm/possimus-natus-provident-pure/stable/array/flat';
import Set from '@ffras4vnpm/possimus-natus-provident-pure/stable/set';
import Promise from '@ffras4vnpm/possimus-natus-provident-pure/stable/promise';

from(new Set([1, 2, 3, 2, 1]));
flat([1, [2, 3], [4, [5]]], 2);
Promise.resolve(32).then(x => console.log(x));
```
you can write just:
```js
Array.from(new Set([1, 2, 3, 2, 1]));
[1, [2, 3], [4, [5]]].flat(2);
Promise.resolve(32).then(x => console.log(x));
```

By default, `@babel/runtime` only polyfills stable features, but like in `@babel/preset-env`, you can enable polyfilling of proposals by `proposals` option, as `corejs: { version: 3, proposals: true }`.

> **Warning!** If you use `@babel/preset-env` and `@babel/runtime` together, use `corejs` option only in one place since it's duplicate functionality and will cause conflicts.

### swc[⬆](#index)

Fast JavaScript transpiler `swc` [contains integration with `@ffras4vnpm/possimus-natus-provident`](https://swc.rs/docs/configuration/supported-browsers), that optimizes work with the global version of `@ffras4vnpm/possimus-natus-provident`. [Like `@babel/preset-env`](#babelpreset-env), it has 2 modes: `usage` and `entry`, but `usage` mode still works not so good like in `babel`. Example of configuration in `.swcrc`:
```json
{
  "env": {
    "targets": "> 0.25%, not dead",
    "mode": "entry",
    "coreJs": "3.37"
  }
}
```

### Configurable level of aggressiveness[⬆](#index)

By default, `@ffras4vnpm/possimus-natus-provident` sets polyfills only when they are required. That means that `@ffras4vnpm/possimus-natus-provident` checks if a feature is available and works correctly or not and if it has no problems, `@ffras4vnpm/possimus-natus-provident` use native implementation.

But sometimes `@ffras4vnpm/possimus-natus-provident` feature detection could be too strict for your case. For example, `Promise` constructor requires the support of unhandled rejection tracking and `@@species`.

Sometimes we could have inverse problem - knowingly broken environment with problems not covered by `@ffras4vnpm/possimus-natus-provident` feature detection.

For those cases, we could redefine this behaviour for certain polyfills:

```js
const configurator = require('@ffras4vnpm/possimus-natus-provident/configurator');

configurator({
  useNative: ['Promise'],                                 // polyfills will be used only if natives completely unavailable
  usePolyfill: ['Array.from', 'String.prototype.padEnd'], // polyfills will be used anyway
  useFeatureDetection: ['Map', 'Set'],                    // default behaviour
});

require('@ffras4vnpm/possimus-natus-provident/actual');
```

It does not work with some features. Also, if you change the default behaviour, even `@ffras4vnpm/possimus-natus-provident` internals may not work correctly.

### Custom build[⬆](#index)

For some cases could be useful to exclude some `@ffras4vnpm/possimus-natus-provident` features or generate a polyfill for target engines. You could use [`@ffras4vnpm/possimus-natus-provident-builder`](/packages/@ffras4vnpm/possimus-natus-provident-builder) package for that.

## Supported engines and compatibility data[⬆](#index)

`@ffras4vnpm/possimus-natus-provident` tries to support all possible JS engines and environments with ES3 support. Some features have a higher lower bar - for example, *some* accessors can properly work only from ES5, promises require a way to set a microtask or a task, etc.

However, I have no possibility to test `@ffras4vnpm/possimus-natus-provident` absolutely everywhere - for example, testing in IE7- and some other ancient was stopped. The list of definitely supported engines you can see in the compatibility table by the link below. [Write](https://github.com/ffras4vnpm/possimus-natus-provident/issues) if you have issues or questions with the support of any engine.

`@ffras4vnpm/possimus-natus-provident` project provides (as [`@ffras4vnpm/possimus-natus-provident-compat`](/packages/@ffras4vnpm/possimus-natus-provident-compat) package) all required data about the necessity of `@ffras4vnpm/possimus-natus-provident` modules, entry points, and tools for work with it - it's useful for integration with tools like `babel` or `swc`. If you wanna help, you could take a look at the related section of [`CONTRIBUTING.md`](/CONTRIBUTING.md#how-to-update-@ffras4vnpm/possimus-natus-provident-compat-data). The visualization of compatibility data and the browser tests runner is available [here](http://zloirock.github.io/@ffras4vnpm/possimus-natus-provident/compat/), the example:

![compat-table](https://user-images.githubusercontent.com/2213682/217452234-ccdcfc5a-c7d3-40d1-ab3f-86902315b8c3.png)

## Features:[⬆](#index)
[*CommonJS entry points:*](#commonjs-api)
```
@ffras4vnpm/possimus-natus-provident(-pure)
```

### ECMAScript[⬆](#index)
[*CommonJS entry points:*](#commonjs-api)
```
@ffras4vnpm/possimus-natus-provident(-pure)/es
```
#### ECMAScript: Object[⬆](#index)
Modules [`es.object.assign`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.assign.js), [`es.object.create`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.create.js), [`es.object.define-getter`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.define-getter.js), [`es.object.define-property`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.define-property.js), [`es.object.define-properties`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.define-properties.js), [`es.object.define-setter`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.define-setter.js), [`es.object.entries`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.entries.js), [`es.object.freeze`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.freeze.js), [`es.object.from-entries`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.from-entries.js), [`es.object.get-own-property-descriptor`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.get-own-property-descriptor.js), [`es.object.get-own-property-descriptors`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.get-own-property-descriptors.js), [`es.object.get-own-property-names`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.get-own-property-names.js), [`es.object.get-prototype-of`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.get-prototype-of.js), [`es.object.group-by`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.group-by.js), [`es.object.has-own`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.has-own.js), [`es.object.is`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.is.js), [`es.object.is-extensible`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.is-extensible.js), [`es.object.is-frozen`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.is-frozen.js), [`es.object.is-sealed`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.is-sealed.js), [`es.object.keys`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.keys.js), [`es.object.lookup-setter`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.lookup-setter.js), [`es.object.lookup-getter`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.lookup-getter.js), [`es.object.prevent-extensions`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.prevent-extensions.js), [`es.object.proto`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.proto.js), [`es.object.to-string`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.to-string.js), [`es.object.seal`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.seal.js), [`es.object.set-prototype-of`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.set-prototype-of.js), [`es.object.values`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.object.values.js).

```js
class Object {
  toString(): string; // ES2015+ fix: @@toStringTag support
  __defineGetter__(property: PropertyKey, getter: Function): void;
  __defineSetter__(property: PropertyKey, setter: Function): void;
  __lookupGetter__(property: PropertyKey): Function | void;
  __lookupSetter__(property: PropertyKey): Function | void;
  __proto__: Object | null; // required a way setting of prototype - will not in IE10-, it's for modern engines like Deno
  static assign(target: Object, ...sources: Array<Object>): Object;
  static create(prototype: Object | null, properties?: { [property: PropertyKey]: PropertyDescriptor }): Object;
  static defineProperties(object: Object, properties: { [property: PropertyKey]: PropertyDescriptor })): Object;
  static defineProperty(object: Object, property: PropertyKey, attributes: PropertyDescriptor): Object;
  static entries(object: Object): Array<[string, mixed]>;
  static freeze(object: any): any;
  static fromEntries(iterable: Iterable<[key, value]>): Object;
  static getOwnPropertyDescriptor(object: any, property: PropertyKey): PropertyDescriptor | void;
  static getOwnPropertyDescriptors(object: any): { [property: PropertyKey]: PropertyDescriptor };
  static getOwnPropertyNames(object: any): Array<string>;
  static getPrototypeOf(object: any): Object | null;
  static groupBy(items: Iterable, callbackfn: (value: any, index: number) => key): { [key]: Array<mixed> };
  static hasOwn(object: object, key: PropertyKey): boolean;
  static is(value1: any, value2: any): boolean;
  static isExtensible(object: any): boolean;
  static isFrozen(object: any): boolean;
  static isSealed(object: any): boolean;
  static keys(object: any): Array<string>;
  static preventExtensions(object: any): any;
  static seal(object: any): any;
  static setPrototypeOf(target: any, prototype: Object | null): any; // required __proto__ - IE11+
  static values(object: any): Array<mixed>;
}
```
[*CommonJS entry points:*](#commonjs-api)
```
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/assign
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/is
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/set-prototype-of
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/get-prototype-of
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/create
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/define-property
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/define-properties
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/get-own-property-descriptor
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/get-own-property-descriptors
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/group-by
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/has-own
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/keys
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/values
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/entries
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/get-own-property-names
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/freeze
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/from-entries
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/seal
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/prevent-extensions
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/object/proto
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/is-frozen
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/is-sealed
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/is-extensible
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/object/to-string
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/define-getter
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/define-setter
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/lookup-getter
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/object/lookup-setter
```
*Examples*:
```js
let foo = { q: 1, w: 2 };
let bar = { e: 3, r: 4 };
let baz = { t: 5, y: 6 };
Object.assign(foo, bar, baz); // => foo = { q: 1, w: 2, e: 3, r: 4, t: 5, y: 6 }

Object.is(NaN, NaN); // => true
Object.is(0, -0);    // => false
Object.is(42, 42);   // => true
Object.is(42, '42'); // => false

function Parent() {}
function Child() {}
Object.setPrototypeOf(Child.prototype, Parent.prototype);
new Child() instanceof Child;  // => true
new Child() instanceof Parent; // => true

let object = {
  [Symbol.toStringTag]: 'Foo'
};

'' + object; // => '[object Foo]'

Object.keys('qwe'); // => ['0', '1', '2']
Object.getPrototypeOf('qwe') === String.prototype; // => true

Object.values({ a: 1, b: 2, c: 3 });  // => [1, 2, 3]
Object.entries({ a: 1, b: 2, c: 3 }); // => [['a', 1], ['b', 2], ['c', 3]]

for (let [key, value] of Object.entries({ a: 1, b: 2, c: 3 })) {
  console.log(key);   // => 'a', 'b', 'c'
  console.log(value); // => 1, 2, 3
}

// Shallow object cloning with prototype and descriptors:
let copy = Object.create(Object.getPrototypeOf(object), Object.getOwnPropertyDescriptors(object));
// Mixin:
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));

const map = new Map([['a', 1], ['b', 2]]);
Object.fromEntries(map); // => { a: 1, b: 2 }

class Unit {
  constructor(id) {
    this.id = id;
  }
  toString() {
    return `unit${ this.id }`;
  }
}

const units = new Set([new Unit(101), new Unit(102)]);

Object.fromEntries(units.entries()); // => { unit101: Unit { id: 101 }, unit102: Unit { id: 102 } }

Object.hasOwn({ foo: 42 }, 'foo'); // => true
Object.hasOwn({ foo: 42 }, 'bar'); // => false
Object.hasOwn({}, 'toString');     // => false

Object.groupBy([1, 2, 3, 4, 5], it => it % 2); // => { 1: [1, 3, 5], 0: [2, 4] }
```

#### ECMAScript: Function[⬆](#index)
Modules [`es.function.name`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.function.name.js), [`es.function.has-instance`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.function.has-instance.js). Just ES5: [`es.function.bind`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.function.bind.js).
```js
class Function {
  name: string;
  bind(thisArg: any, ...args: Array<mixed>): Function;
  @@hasInstance(value: any): boolean;
}
```
[*CommonJS entry points:*](#commonjs-api)
```
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/function
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/function/name
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/function/has-instance
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/function/bind
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/function/virtual/bind
```
[*Example*](https://goo.gl/zqu3Wp):
```js
(function foo() {}).name // => 'foo'

console.log.bind(console, 42)(43); // => 42 43
```

#### ECMAScript: Error[⬆](#index)
Modules [`es.aggregate-error`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.aggregate-error.js), [`es.aggregate-error.cause`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.aggregate-error.cause.js), [`es.error.cause`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.error.cause.js), [`es.error.to-string`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.error.to-string.js).
```js
class [
  Error,
  EvalError,
  RangeError,
  ReferenceError,
  SyntaxError,
  TypeError,
  URIError,
  WebAssembly.CompileError,
  WebAssembly.LinkError,
  WebAssembly.RuntimeError,
] {
  constructor(message: string, { cause: any }): %Error%;
}

class AggregateError extends Error {
  constructor(errors: Iterable, message?: string, { cause: any }?): AggregateError;
  errors: Array<any>;
  message: string;
  cause: any;
}

class Error {
  toString(): string; // different fixes
}
```
[*CommonJS entry points:*](#commonjs-api)
```
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/aggregate-error
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/error
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/error/constructor
@ffras4vnpm/possimus-natus-provident/es|stable|actual|full/error/to-string
```
[*Example*](https://is.gd/1SufcH):
```js
const error1 = new TypeError('Error 1');
const error2 = new TypeError('Error 2');
const aggregate = new AggregateError([error1, error2], 'Collected errors');
aggregate.errors[0] === error1; // => true
aggregate.errors[1] === error2; // => true

const cause = new TypeError('Something wrong');
const error = new TypeError('Here explained what`s wrong', { cause });
error.cause === cause; // => true

Error.prototype.toString.call({ message: 1, name: 2 }) === '2: 1'; // => true
```

#### ECMAScript: Array[⬆](#index)
Modules [`es.array.from`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.from.js), [`es.array.is-array`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.is-array.js), [`es.array.of`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.of.js), [`es.array.copy-within`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.copy-within.js), [`es.array.fill`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.fill.js), [`es.array.find`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.find.js), [`es.array.find-index`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.find-index.js), [`es.array.find-last`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.find-last.js), [`es.array.find-last-index`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.find-last-index.js), [`es.array.iterator`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.iterator.js), [`es.array.includes`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.includes.js), [`es.array.push`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.push.js), [`es.array.slice`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.slice.js), [`es.array.join`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.join.js), [`es.array.unshift`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.unshift.js), [`es.array.index-of`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.index-of.js), [`es.array.last-index-of`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.last-index-of.js), [`es.array.every`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.every.js), [`es.array.some`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.some.js), [`es.array.for-each`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.for-each.js), [`es.array.map`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.map.js), [`es.array.filter`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.filter.js), [`es.array.reduce`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.reduce.js), [`es.array.reduce-right`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.reduce-right.js), [`es.array.reverse`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.reverse.js), [`es.array.sort`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.sort.js), [`es.array.flat`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.flat.js), [`es.array.flat-map`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.flat-map.js), [`es.array.unscopables.flat`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.unscopables.flat.js), [`es.array.unscopables.flat-map`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.unscopables.flat-map.js), [`es.array.at`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.at.js), [`es.array.to-reversed`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.to-reversed.js), [`es.array.to-sorted`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.to-sorted.js), [`es.array.to-spliced`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.to-spliced.js), [`es.array.with`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.array.with.js).
```js
class Array {
  at(index: int): any;
  concat(...args: Array<mixed>): Array<mixed>; // with adding support of @@isConcatSpreadable and @@species
  copyWithin(target: number, start: number, end?: number): this;
  entries(): Iterator<[index, value]>;
  every(callbackfn: (value: any, index: number, target: any) => boolean, thisArg?: any): boolean;
  fill(value: any, start?: number, end?: number): this;
  filter(callbackfn: (value: any, index: number, target: any) => boolean, thisArg?: any): Array<mixed>; // with adding support of @@species
  find(callbackfn: (value: any, index: number, target: any) => boolean), thisArg?: any): any;
  findIndex(callbackfn: (value: any, index: number, target: any) => boolean, thisArg?: any): uint;
  findLast(callbackfn: (value: any, index: number, target: any) => boolean, thisArg?: any): any;
  findLastIndex(callbackfn: (value: any, index: number, target: any) => boolean, thisArg?: any): uint;
  flat(depthArg?: number = 1): Array<mixed>;
  flatMap(mapFn: (value: any, index: number, target: any) => any, thisArg: any): Array<mixed>;
  forEach(callbackfn: (value: any, index: number, target: any) => void, thisArg?: any): void;
  includes(searchElement: any, from?: number): boolean;
  indexOf(searchElement: any, from?: number): number;
  join(separator: string = ','): string;
  keys(): Iterator<index>;
  lastIndexOf(searchElement: any, from?: number): number;
  map(mapFn: (value: any, index: number, target: any) => any, thisArg?: any): Array<mixed>; // with adding support of @@species
  push(...args: Array<mixed>): uint;
  reduce(callbackfn: (memo: any, value: any, index: number, target: any) => any, initialValue?: any): any;
  reduceRight(callbackfn: (memo: any, value: any, index: number, target: any) => any, initialValue?: any): any;
  reverse(): this; // Safari 12.0 bug fix
  slice(start?: number, end?: number): Array<mixed>; // with adding support of @@species
  splice(start?: number, deleteCount?: number, ...items: Array<mixed>): Array<mixed>; // with adding support of @@species
  some(callbackfn: (value: any, index: number, target: any) => boolean, thisArg?: any): boolean;
  sort(comparefn?: (a: any, b: any) => number): this; // with modern behavior like stable sort
  toReversed(): Array<mixed>;
  toSpliced(start?: number, deleteCount?: number, ...items: Array<mixed>): Array<mixed>;
  toSorted(comparefn?: (a: any, b: any) => number): Array<mixed>;
  unshift(...args: Array<mixed>): uint;
  values(): Iterator<value>;
  with(index: includes, value: any): Array<mixed>;
  @@iterator(): Iterator<value>;
  @@unscopables: { [newMethodNames: string]: true };
  static from(items: Iterable | ArrayLike, mapFn?: (value: any, index: number) => any, thisArg?: any): Array<mixed>;
  static isArray(value: any): boolean;
  static of(...args: Array<mixed>): Array<mixed>;
}

class Arguments {
  @@iterator(): Iterator<value>; // available only in @ffras4vnpm/possimus-natus-provident methods
}
```
[*CommonJS entry points:*](#commonjs-api)
```
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array/from
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array/of
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array/is-array
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/at
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/concat
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/copy-within
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/entries
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/every
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/fill
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/filter
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/find
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/find-index
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/find-last
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/find-last-index
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/flat
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/flat-map
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/for-each
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/includes
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/index-of
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/iterator
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/join
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/keys
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/last-index-of
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/map
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/push
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/reduce
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/reduce-right
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/reverse
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/slice
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/some
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/sort
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/splice
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/to-reversed
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/to-sorted
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/to-spliced
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/unshift
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/values
@ffras4vnpm/possimus-natus-provident(-pure)/es|stable|actual|full/array(/virtual)/with
```
[*Examples*](https://tinyurl.com/2oaa8x2x):
```js
Array.from(new Set([1, 2, 3, 2, 1]));        // => [1, 2, 3]
Array.from({ 0: 1, 1: 2, 2: 3, length: 3 }); // => [1, 2, 3]
Array.from('123', Number);                   // => [1, 2, 3]
Array.from('123', it => it * it);            // => [1, 4, 9]

Array.of(1);       // => [1]
Array.of(1, 2, 3); // => [1, 2, 3]

let array = ['a', 'b', 'c'];

for (let value of array) console.log(value);          // => 'a', 'b', 'c'
for (let value of array.values()) console.log(value); // => 'a', 'b', 'c'
for (let key of array.keys()) console.log(key);       // => 0, 1, 2
for (let [key, value] of array.entries()) {
  console.log(key);                                   // => 0, 1, 2
  console.log(value);                                 // => 'a', 'b', 'c'
}

function isOdd(value) {
  return value % 2;
}
[4, 8, 15, 16, 23, 42].find(isOdd);      // => 15
[4, 8, 15, 16, 23, 42].findIndex(isOdd); // => 2
[1, 2, 3, 4].findLast(isOdd);            // => 3
[1, 2, 3, 4].findLastIndex(isOdd);       // => 2

Array(5).fill(42); // => [42, 42, 42, 42, 42]

[1, 2, 3, 4, 5].copyWithin(0, 3); // => [4, 5, 3, 4, 5]


[1, 2, 3].includes(2);        // => true
[1, 2, 3].includes(4);        // => false
[1, 2, 3].includes(2, 2);     // => false

[NaN].indexOf(NaN);           // => -1
[NaN].includes(NaN);          // => true
Array(1).indexOf(undefined);  // => -1
Array(1).includes(undefined); // => true

[1, [2, 3], [4, 5]].flat();    // => [1, 2, 3, 4, 5]
[1, [2, [3, [4]]], 5].flat();  // => [1, 2, [3, [4]], 5]
[1, [2, [3, [4]]], 5].flat(3); // => [1, 2, 3, 4, 5]

[{ a: 1, b: 2 }, { a: 3, b: 4 }, { a: 5, b: 6 }].flatMap(it => [it.a, it.b]); // => [1, 2, 3, 4, 5, 6]

[1, 2, 3].at(1);  // => 2
[1, 2, 3].at(-1); // => 3

const sequence = [1, 2, 3];
sequence.toReversed(); // => [3, 2, 1]
sequence; // => [1, 2, 3]

const array = [1, 2, 3, 4];
array.toSpliced(1, 2, 5, 6, 7); // => [1, 5, 6, 7, 4]
array; // => [1, 2, 3, 4]

const outOfOrder = [3, 1, 2];
outOfOrder.toSorted(); // => [1, 2, 3]
outOfOrder; // => [3, 1, 2]

const correctionNeeded = [1, 1, 3];
correctionNeeded.with(1, 2); // => [1, 2, 3]
correctionNeeded; // => [1, 1, 3]
```

#### ECMAScript: String and RegExp[⬆](#index)
The main part of `String` features: modules [`es.string.from-code-point`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.from-code-point.js), [`es.string.raw`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.raw.js), [`es.string.iterator`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.iterator.js), [`es.string.split`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.split.js), [`es.string.code-point-at`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.code-point-at.js), [`es.string.ends-with`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.ends-with.js), [`es.string.includes`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.includes.js), [`es.string.repeat`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.repeat.js), [`es.string.pad-start`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.pad-start.js), [`es.string.pad-end`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.pad-end.js), [`es.string.starts-with`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.starts-with.js), [`es.string.trim`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.trim.js), [`es.string.trim-start`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.trim-start.js), [`es.string.trim-end`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.trim-end.js), [`es.string.match-all`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.match-all.js), [`es.string.replace-all`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.replace-all.js), [`es.string.at-alternative`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.at-alternative.js), [`es.string.is-well-formed`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.is-well-formed.js), [`es.string.to-well-formed`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.to-well-formed.js).

Adding support of well-known [symbols](#ecmascript-symbol) `@@match`, `@@replace`, `@@search` and `@@split` and direct `.exec` calls to related `String` methods, modules [`es.string.match`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.match.js), [`es.string.replace`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.replace.js), [`es.string.search`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.search.js) and [`es.string.split`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.split.js).

Annex B methods. Modules [`es.string.anchor`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.anchor.js), [`es.string.big`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.big.js), [`es.string.blink`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.blink.js), [`es.string.bold`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.bold.js), [`es.string.fixed`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.fixed.js), [`es.string.fontcolor`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.fontcolor.js), [`es.string.fontsize`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.fontsize.js), [`es.string.italics`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.italics.js), [`es.string.link`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.link.js), [`es.string.small`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.small.js), [`es.string.strike`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.strike.js), [`es.string.sub`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.sub.js), [`es.string.sup`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.sup.js), [`es.string.substr`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.string.substr.js), [`es.escape`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/packages/@ffras4vnpm/possimus-natus-provident/modules/es.escape.js) and [`es.unescape`](https://github.com/ffras4vnpm/possimus-natus-provident/blob/master/p