re2js 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/build/index.cjs.cjs +117 -41
- package/build/index.cjs.cjs.map +1 -1
- package/build/index.esm.d.ts.map +1 -1
- package/build/index.esm.js +117 -41
- package/build/index.esm.js.map +1 -1
- package/build/index.umd.js +117 -41
- package/build/index.umd.js.map +1 -1
- package/package.json +7 -5
package/build/index.umd.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* re2js
|
|
3
3
|
* RE2JS is the JavaScript port of RE2, a regular expression engine that provides linear time matching
|
|
4
4
|
*
|
|
5
|
-
* @version v2.
|
|
5
|
+
* @version v2.4.0
|
|
6
6
|
* @author Oleksii Vasyliev
|
|
7
7
|
* @homepage https://github.com/le0pard/re2js#readme
|
|
8
8
|
* @repository github:le0pard/re2js
|
|
@@ -228,7 +228,7 @@
|
|
|
228
228
|
static _CASE_ORBIT = null;
|
|
229
229
|
static get CASE_ORBIT() {
|
|
230
230
|
if (!this._CASE_ORBIT) {
|
|
231
|
-
this._CASE_ORBIT = decodeOrbit('rCrDIzDYqpII-LiC8cQlHa+0HGrpI6EzClClOBmOBkOBoOBpOBnOBrOBsOBqOlByPBzPBxPyK5crCz+HCydD1dD4dB5dB6dC8dEgeBheCieDmeDpeHj-HCweD1fDxeB+9HBwfC1FE2eBxfBjeBjdD1eDmpIHycB0fEmdBgda6cBhdD4cB1cdyhBC0hBK+hBDhiBBiiBIqiBIgkHChkHKikHDjkHBkkHImkHYjjBBnkH9gGygBB0gBB+gBBhhBBlkHBihBBqhBBijBBqypB4OhzHB70H6BgzHD-GiHo8HBp8HBq8HBr8HBs8HBt8HBu8HBv8HBg8HBh8HBi8HBj8HBk8HBl8HBm8HBn8HB48HB58HB68HB78HB88HB98HB+8HB-8HBw8HBx8HBy8HBz8HB08HB18HB28HB38HBo9HBp9HBq9HBr9HBs9HBt9HBu9HBv9HBg9HBh9HBi9HBj9HBk9HBl9HBm9HBn9HE89HJz9HClaFs+HJj+HHwcQwdQ8-HJz-HqJpdErCBlG-ohBrypBBokH6lVm4+BBl4+B');
|
|
231
|
+
this._CASE_ORBIT = decodeOrbit('rCrDIzDYqpII-LiC8cLgHBhHBiHBjHBkHBlHBmHBnHBoHBpHBqHBrHBsHBtHBuHBvHBwHBxHByHBzHB0HB1HB2HC4HB5HB6HB7HB8HB9HB+HB+0HBgGBhGBiGBjGBkGBrpIBmGBnGBoGBpGBqGBrGBsGBtGBuGBvGBwGBxGByGBzGB0GB1GB2GC4GB5GB6GB7GB8GB9GB+GB4LBhIBgIBjIBiIBlIBkIBnIBmIBpIBoIBrIBqIBtIBsIBvIBuIBxIBwIBzIByIB1IB0IB3IB2IB5IB4IB7IB6IB9IB8IB-IB+IBhJBgJBjJBiJBlJBkJBnJBmJBpJBoJBrJBqJBtJBsJBvJBuJDzJByJB1JB0JB3JB2JC6JB5JB8JB7JB+JB9JBgKB-JBiKBhKBkKBjKBmKBlKBoKBnKCrKBqKBtKBsKBvKBuKBxKBwKBzKByKB1KB0KB3KB2KB5KB4KB7KB6KB9KB8KB-KB+KBhLBgLBjLBiLBlLBkLBnLBmLBpLBoLBrLBqLBtLBsLBvLBuLBxLBwLBzLByLB1LB0LB3LB2LB-HB6LB5LB8LB7LB+LB9LBzCBjSBzSBjMBiMBlMBkMB0SBoMBnMB2SB3SBsMBrMC9OB5SB7SByMBxMBgTBjTB2PBpTBoTB5MB4MB9RB8+pBBvTByTBgRB1TBhNBgNBjNBiNBlNBkNBgUBoNBnNBjUDtNBsNBoUBwNBvNBqUBrUB0NBzNB2NB1NByUB5NB4ND9NB8NC3PFlOBmOBkOBoOBpOBnOBrOBsOBqOBuOBtOBwOBvOByOBxOB0OBzOB2OB1OB4OB3OB6OB5OB8OB7OBuMB-OB+OBhPBgPBjPBiPBlPBkPBnPBmPBpPBoPBrPBqPBtPBsPBvPBuPCyPBzPBxPB1PB0PB1MB-NB5PB4PB7PB6PB9PB8PB-PB+PBhQBgQBjQBiQBlQBkQBnQBmQBpQBoQBrQBqQBtQBsQBvQBuQBxQBwQBzQByQB1QB0QB3QB2QB5QB4QB7QB6QB9QB8QB-QB+QB+MCjRBiRBlRBkRBnRBmRBpRBoRBrRBqRBtRBsRBvRBuRBxRBwRBzRByRHljLB8RB7RB6MBmjLB+jLB-jLBiSBhSBgMBpUBsUBnSBmSBpSBoSBrSBqSBtSBsSBvSBuSBvjLBtjLBwjLBhMBmMCpMBqMCvMCwMBr9pBEzMBs9pBC0MBr+pBBt8pBBq9pBC3MB2MBu9pBBijLBt9pBD8MCujLB9MD-MIkjLDmNCl+pBBpNEx9pBBuNBkSBxNByNBlSG3NLy9pBBw9pBnF5crBxbBwbBzbBybD3bB2bE9fB+fB-fCzfHsdCtdBudBvdCseCteBueBz+HBxdBydBzdB0dB1dB2dB3dB4dB5dB6dB7dB8dB9dB+dB-dBgeBheCieBkeBleBmeBneBoeBpeBqeBreBmcBocBpcBqcBj-HBxcBweBzcB0cB1fB2cB3cBxeB+9HBwfB7cB1FB9cB+cB-cB2eBxfBjeBjdBkdBldB1eBndBodBmpIBqdBrdBscBucBvcB3eBycB0fEmdBgdBveB5eB4eB7eB6eB9eB8eB-eB+eBhfBgfBjfBifBlfBkfBnfBmfBpfBofBrfBqfBtfBsfBvfBufB6cBhdB5fB-bB4cB1cC4fB3fByfB7fB6fC7bB8bB9bBwiBBxiBByiBBziBB0iBB1iBB2iBB3iBB4iBB5iBB6iBB7iBB8iBB9iBB+iBB-iBBwhBBxhBByhBBzhBB0hBB1hBB2hBB3hBB4hBB5hBB6hBB7hBB8hBB9hBB+hBB-hBBgiBBhiBBiiBBjiBBkiBBliBBmiBBniBBoiBBpiBBqiBBriBBsiBBtiBBuiBBviBBwgBBxgBBgkHBzgBBhkHB1gBB2gBB3gBB4gBB5gBB6gBB7gBB8gBB9gBBikHB-gBBghBBjkHBkkHBjhBBkhBBlhBBmhBBnhBBohBBphBBmkHBrhBBshBBthBBuhBBvhBBggBBhgBBigBBjgBBkgBBlgBBmgBBngBBogBBpgBBqgBBrgBBsgBBtgBBugBBvgBBhjBBgjBBjjBBnkHBljBBkjBBnjBBmjBBpjBBojBBrjBBqjBBtjBBsjBBvjBBujBBxjBBwjBBzjBByjBB1jBB0jBB3jBB2jBB5jBB4jBB7jBB6jBB9jBB8jBB-jBB+jBBhkBBgkBJrkBBqkBBtkBBskBBvkBBukBBxkBBwkBBzkBBykBB1kBB0kBB3kBB2kBB5kBB4kBB7kBB6kBB9kBB8kBB-kBB+kBBhlBBglBBjlBBilBBllBBklBBnlBBmlBBplBBolBBrlBBqlBBtlBBslBBvlBBulBBxlBBwlBBzlBBylBB1lBB0lBB3lBB2lBB5lBB4lBB7lBB6lBB9lBB8lBB-lBB+lBBvmBBimBBhmBBkmBBjmBBmmBBlmBBomBBnmBBqmBBpmBBsmBBrmBBumBBtmBBgmBBxmBBwmBBzmBBymBB1mBB0mBB3mBB2mBB5mBB4mBB7mBB6mBB9mBB8mBB-mBB+mBBhnBBgnBBjnBBinBBlnBBknBBnnBBmnBBpnBBonBBrnBBqnBBtnBBsnBBvnBBunBBxnBBwnBBznBBynBB1nBB0nBB3nBB2nBB5nBB4nBB7nBB6nBB9nBB8nBB-nBB+nBBhoBBgoBBjoBBioBBloBBkoBBnoBBmoBBpoBBooBBroBBqoBBtoBBsoBBvoBBuoBBxoBBwoBBzoBByoBB1oBB0oBB3oBB2oBB5oBB4oBB7oBB6oBB9oBB8oBB-oBB+oBBhpBBgpBBjpBBipBBlpBBkpBBnpBBmpBBppBBopBBrpBBqpBBtpBBspBBvpBBupBChrBBirBBjrBBkrBBlrBBmrBBnrBBorBBprBBqrBBrrBBsrBBtrBBurBBvrBBwrBBxrBByrBBzrBB0rBB1rBB2rBB3rBB4rBB5rBB6rBB7rBB8rBB9rBB+rBB-rBBgsBBhsBBisBBjsBBksBBlsBBmsBLxpBBypBBzpBB0pBB1pBB2pBB3pBB4pBB5pBB6pBB7pBB8pBB9pBB+pBB-pBBgqBBhqBBiqBBjqBBkqBBlqBBmqBBnqBBoqBBpqBBqqBBrqBBsqBBtqBBuqBBvqBBwqBBxqBByqBBzqBB0qBB1qBB2qB64CgoLBhoLBioLBjoLBkoLBloLBmoLBnoLBooLBpoLBqoLBroLBsoLBtoLBuoLBvoLBwoLBxoLByoLBzoLB0oLB1oLB2oLB3oLB4oLB5oLB6oLB7oLB8oLB9oLB+oLB-oLBgpLBhpLBipLBjpLBkpLBlpLCnpLGtpLDwkHBxkHBykHBzkHB0kHB1kHB2kHB3kHB4kHB5kHB6kHB7kHB8kHB9kHB+kHB-kHBglHBhlHBilHBjlHBklHBllHBmlHBnlHBolHBplHBqlHBrlHBslHBtlHBulHBvlHBwlHBxlHBylHBzlHB0lHB1lHB2lHB3lHB4lHB5lHB6lHD9lHB+lHB-lHhVw7qBBx7qBBy7qBBz7qBB07qBB17qBB27qBB37qBB47qBB57qBB67qBB77qBB87qBB97qBB+7qBB-7qBBg8qBBh8qBBi8qBBj8qBBk8qBBl8qBBm8qBBn8qBBo8qBBp8qBBq8qBBr8qBBs8qBBt8qBBu8qBBv8qBBw8qBBx8qBBy8qBBz8qBB08qBB18qBB28qBB38qBB48qBB58qBB68qBB78qBB88qBB98qBB+8qBB-8qBBg9qBBh9qBBi9qBBj9qBBk9qBBl9qBBm9qBBn9qBBo9qBBp9qBBq9qBBr9qBBs9qBBt9qBBu9qBBv9qBBw9qBBx9qBBy9qBBz9qBB09qBB19qBB29qBB39qBB49qBB59qBB69qBB79qBB89qBB99qBB+9qBB-9qBB4-EB5-EB6-EB7-EB8-EB9-EDw-EBx-EBy-EBz-EB0-EB1-EjkCygBB0gBB+gBBhhBBlkHBihBBqhBBijBBqypBBqkHBpkHGwmEBxmEBymEBzmEB0mEB1mEB2mEB3mEB4mEB5mEB6mEB7mEB8mEB9mEB+mEB-mEBgnEBhnEBinEBjnEBknEBlnEBmnEBnnEBonEBpnEBqnEBrnEBsnEBtnEBunEBvnEBwnEBxnEBynEBznEB0nEB1nEB2nEB3nEB4nEB5nEB6nED9nEB+nEB-nE6F97pBEjjLRm+pByDhwHBgwHBjwHBiwHBlwHBkwHBnwHBmwHBpwHBowHBrwHBqwHBtwHBswHBvwHBuwHBxwHBwwHBzwHBywHB1wHB0wHB3wHB2wHB5wHB4wHB7wHB6wHB9wHB8wHB-wHB+wHBhxHBgxHBjxHBixHBlxHBkxHBnxHBmxHBpxHBoxHBrxHBqxHBtxHBsxHBvxHBuxHBxxHBwxHBzxHByxHB1xHB0xHB3xHB2xHB5xHB4xHB7xHB6xHB9xHB8xHB-xHB+xHBhyHBgyHBjyHBiyHBlyHBkyHBnyHBmyHBpyHBoyHBryHBqyHBtyHBsyHBvyHBuyHBxyHBwyHBzyHByyHB1yHB0yHB3yHB2yHB5yHB4yHB7yHB6yHB9yHB8yHB-yHB+yHBhzHB70HBjzHBizHBlzHBkzHBnzHBmzHBpzHBozHBrzHBqzHBtzHBszHBvzHBuzHBxzHBwzHBzzHByzHB1zHB0zHB3zHB2zHB5zHB4zHB7zHB6zHB9zHB8zHB-zHB+zHBh0HBg0HBj0HBi0HBl0HBk0HBn0HBm0HBp0HBo0HBr0HBq0HBt0HBs0HBv0HBu0HBx0HBw0HBz0HBy0HB10HB00HGgzHD-GCh1HBg1HBj1HBi1HBl1HBk1HBn1HBm1HBp1HBo1HBr1HBq1HBt1HBs1HBv1HBu1HBx1HBw1HBz1HBy1HB11HB01HB31HB21HB51HB41HB71HB61HB91HB81HB-1HB+1HBh2HBg2HBj2HBi2HBl2HBk2HBn2HBm2HBp2HBo2HBr2HBq2HBt2HBs2HBv2HBu2HBx2HBw2HBz2HBy2HB12HB02HB32HB22HB52HB42HB72HB62HB92HB82HB-2HB+2HBh3HBg3HBj3HBi3HBl3HBk3HBn3HBm3HBp3HBo3HBr3HBq3HBt3HBs3HBv3HBu3HBx3HBw3HBz3HBy3HB13HB03HB33HB23HB53HB43HB73HB63HB93HB83HB-3HB+3HBo4HBp4HBq4HBr4HBs4HBt4HBu4HBv4HBg4HBh4HBi4HBj4HBk4HBl4HBm4HBn4HB44HB54HB64HB74HB84HB94HDw4HBx4HBy4HBz4HB04HB14HDo5HBp5HBq5HBr5HBs5HBt5HBu5HBv5HBg5HBh5HBi5HBj5HBk5HBl5HBm5HBn5HB45HB55HB65HB75HB85HB95HB+5HB-5HBw5HBx5HBy5HBz5HB05HB15HB25HB35HBo6HBp6HBq6HBr6HBs6HBt6HDg6HBh6HBi6HBj6HBk6HBl6HE56HC76HC96HC-6HCx6HCz6HC16HC36HBo7HBp7HBq7HBr7HBs7HBt7HBu7HBv7HBg7HBh7HBi7HBj7HBk7HBl7HBm7HBn7HB69HB79HBo+HBp+HBq+HBr+HB6+HB7+HB4-HB5-HBq-HBr-HB6-HB7-HDo8HBp8HBq8HBr8HBs8HBt8HBu8HBv8HBg8HBh8HBi8HBj8HBk8HBl8HBm8HBn8HB48HB58HB68HB78HB88HB98HB+8HB-8HBw8HBx8HBy8HBz8HB08HB18HB28HB38HBo9HBp9HBq9HBr9HBs9HBt9HBu9HBv9HBg9HBh9HBi9HBj9HBk9HBl9HBm9HBn9HB49HB59HC89HFw9HBx9HBw7HBx7HBz9HClaFs+HFy7HBz7HB07HB17HBj+HE4+HB5+HCwcFw+HBx+HB27HB37HFo-HBp-HCwdCs-HDg-HBh-HB67HB77HBl-HH8-HF47HB57HB87HB97HBz-HqJpdErCBlGHuqIcypISwrIBxrIByrIBzrIB0rIB1rIB2rIB3rIB4rIB5rIB6rIB7rIB8rIB9rIB+rIB-rIBgrIBhrIBirIBjrIBkrIBlrIBmrIBnrIBorIBprIBqrIBrrIBsrIBtrIBurIBvrIEksIBjsIyZwmJBxmJBymJBzmJB0mJB1mJB2mJB3mJB4mJB5mJB6mJB7mJB8mJB9mJB+mJB-mJBgnJBhnJBinJBjnJBknJBlnJBmnJBnnJBonJBpnJB2lJB3lJB4lJB5lJB6lJB7lJB8lJB9lJB+lJB-lJBgmJBhmJBimJBjmJBkmJBlmJBmmJBnmJBomJBpmJBqmJBrmJBsmJBtmJBumJBvmJ34BwhLBxhLByhLBzhLB0hLB1hLB2hLB3hLB4hLB5hLB6hLB7hLB8hLB9hLB+hLB-hLBgiLBhiLBiiLBjiLBkiLBliLBmiLBniLBoiLBpiLBqiLBriLBsiLBtiLBuiLBviLBwiLBxiLByiLBziLB0iLB1iLB2iLB3iLB4iLB5iLB6iLB7iLB8iLB9iLB+iLB-iLBggLBhgLBigLBjgLBkgLBlgLBmgLBngLBogLBpgLBqgLBrgLBsgLBtgLBugLBvgLBwgLBxgLBygLBzgLB0gLB1gLB2gLB3gLB4gLB5gLB6gLB7gLB8gLB9gLB+gLB-gLBghLBhhLBihLBjhLBkhLBlhLBmhLBnhLBohLBphLBqhLBrhLBshLBthLBuhLBvhLBhjLBgjLBrTB9rHB9TB6RB+RBojLBnjLBqjLBpjLBsjLBrjLBxSBxTBwSBySCzjLByjLC2jLB1jLI-RBgSBhkLBgkLBjkLBikLBlkLBkkLBnkLBmkLBpkLBokLBrkLBqkLBtkLBskLBvkLBukLBxkLBwkLBzkLBykLB1kLB0kLB3kLB2kLB5kLB4kLB7kLB6kLB9kLB8kLB-kLB+kLBhlLBglLBjlLBilLBllLBklLBnlLBmlLBplLBolLBrlLBqlLBtlLBslLBvlLBulLBxlLBwlLBzlLBylLB1lLB0lLB3lLB2lLB5lLB4lLB7lLB6lLB9lLB8lLB-lLB+lLBhmLBgmLBjmLBimLBlmLBkmLBnmLBmmLBpmLBomLBrmLBqmLBtmLBsmLBvmLBumLBxmLBwmLBzmLBymLB1mLB0mLB3mLB2mLB5mLB4mLB7mLB6mLB9mLB8mLB-mLB+mLBhnLBgnLBjnLBinLIsnLBrnLBunLBtnLEznLBynLNglEBhlEBilEBjlEBklEBllEBmlEBnlEBolEBplEBqlEBrlEBslEBtlEBulEBvlEBwlEBxlEBylEBzlEB0lEB1lEB2lEB3lEB4lEB5lEB6lEB7lEB8lEB9lEB+lEB-lEBgmEBhmEBimEBjmEBkmEBlmECnmEGtmEzoehypBBgypBBjypBBiypBBlypBBkypBBnypBBmypBBpypBBoypBBrypBBokHBtypBBsypBBvypBBuypBBxypBBwypBBzypBByypBB1ypBB0ypBB3ypBB2ypBB5ypBB4ypBB7ypBB6ypBB9ypBB8ypBB-ypBB+ypBBhzpBBgzpBBjzpBBizpBBlzpBBkzpBBnzpBBmzpBBpzpBBozpBBrzpBBqzpBBtzpBBszpBTh0pBBg0pBBj0pBBi0pBBl0pBBk0pBBn0pBBm0pBBp0pBBo0pBBr0pBBq0pBBt0pBBs0pBBv0pBBu0pBBx0pBBw0pBBz0pBBy0pBB10pBB00pBB30pBB20pBB50pBB40pBB70pBB60pBnEj5pBBi5pBBl5pBBk5pBBn5pBBm5pBBp5pBBo5pBBr5pBBq5pBBt5pBBs5pBBv5pBBu5pBDz5pBBy5pBB15pBB05pBB35pBB25pBB55pBB45pBB75pBB65pBB95pBB85pBB-5pBB+5pBBh6pBBg6pBBj6pBBi6pBBl6pBBk6pBBn6pBBm6pBBp6pBBo6pBBr6pBBq6pBBt6pBBs6pBBv6pBBu6pBBx6pBBw6pBBz6pBBy6pBB16pBB06pBB36pBB26pBB56pBB46pBB76pBB66pBB96pBB86pBB-6pBB+6pBBh7pBBg7pBBj7pBBi7pBBl7pBBk7pBBn7pBBm7pBBp7pBBo7pBBr7pBBq7pBBt7pBBs7pBBv7pBBu7pBK67pBB57pBB87pBB77pBB5rHB-7pBB+7pBBh8pBBg8pBBj8pBBi8pBBl8pBBk8pBBn8pBBm8pBEs8pBBr8pBBlTDx8pBBw8pBBz8pBBy8pBBk+pBC38pBB28pBB58pBB48pBB78pBB68pBB98pBB88pBB-8pBB+8pBBh9pBBg9pBBj9pBBi9pBBl9pBBk9pBBn9pBBm9pBBp9pBBo9pBBmTB8SBhTBsTBqTC+UBnUB9UBz6qBB19pBB09pBB39pBB29pBB59pBB49pBB79pBB69pBB99pBB89pBB-9pBB+9pBBh+pBBg+pBBj+pBBi+pBB08pBBiUBusHBo+pBBn+pBBq+pBBp+pBBkTBt+pBBs+pBBv+pBBu+pBBx+pBBw+pBBz+pBBy+pBB1+pBB0+pBB3+pBB2+pBB5+pBB4+pBB7+pBB6+pBB7MZ2-pBB1-pB9az9pBdg9EBh9EBi9EBj9EBk9EBl9EBm9EBn9EBo9EBp9EBq9EBr9EBs9EBt9EBu9EBv9EBw9EBx9EBy9EBz9EB09EB19EB29EB39EB49EB59EB69EB79EB89EB99EB+9EB-9EBg+EBh+EBi+EBj+EBk+EBl+EBm+EBn+EBo+EBp+EBq+EBr+EBs+EBt+EBu+EBv+EBw+EBx+EBy+EBz+EB0+EB1+EB2+EB3+EB4+EB5+EB6+EB7+EB8+EB9+EB++EB-+EBg-EBh-EBi-EBj-EBk-EBl-EBm-EBn-EBo-EBp-EBq-EBr-EBs-EBt-EBu-EBv-Em6Tm4+BBl4+B7gBh6-BBi6-BBj6-BBk6-BBl6-BBm6-BBn6-BBo6-BBp6-BBq6-BBr6-BBs6-BBt6-BBu6-BBv6-BBw6-BBx6-BBy6-BBz6-BB06-BB16-BB26-BB36-BB46-BB56-BB66-BHh5-BBi5-BBj5-BBk5-BBl5-BBm5-BBn5-BBo5-BBp5-BBq5-BBr5-BBs5-BBt5-BBu5-BBv5-BBw5-BBx5-BBy5-BBz5-BB05-BB15-BB25-BB35-BB45-BB55-BB65-BmlBohhCBphhCBqhhCBrhhCBshhCBthhCBuhhCBvhhCBwhhCBxhhCByhhCBzhhCB0hhCB1hhCB2hhCB3hhCB4hhCB5hhCB6hhCB7hhCB8hhCB9hhCB+hhCB-hhCBgihCBhihCBiihCBjihCBkihCBlihCBmihCBnihCBoihCBpihCBqihCBrihCBsihCBtihCBuihCBvihCBgghCBhghCBighCBjghCBkghCBlghCBmghCBnghCBoghCBpghCBqghCBrghCBsghCBtghCBughCBvghCBwghCBxghCByghCBzghCB0ghCB1ghCB2ghCB3ghCB4ghCB5ghCB6ghCB7ghCB8ghCB9ghCB+ghCB-ghCBghhCBhhhCBihhCBjhhCBkhhCBlhhCBmhhCBnhhChD4mhCB5mhCB6mhCB7mhCB8mhCB9mhCB+mhCB-mhCBgnhCBhnhCBinhCBjnhCBknhCBlnhCBmnhCBnnhCBonhCBpnhCBqnhCBrnhCBsnhCBtnhCBunhCBvnhCBwnhCBxnhCBynhCBznhCB0nhCB1nhCB2nhCB3nhCB4nhCB5nhCB6nhCB7nhCFwlhCBxlhCBylhCBzlhCB0lhCB1lhCB2lhCB3lhCB4lhCB5lhCB6lhCB7lhCB8lhCB9lhCB+lhCB-lhCBgmhCBhmhCBimhCBjmhCBkmhCBlmhCBmmhCBnmhCBomhCBpmhCBqmhCBrmhCBsmhCBtmhCBumhCBvmhCBwmhCBxmhCBymhCBzmhC1D3shCB4shCB5shCB6shCB7shCB8shCB9shCB+shCB-shCBgthCBhthCCjthCBkthCBlthCBmthCBnthCBothCBpthCBqthCBrthCBsthCBtthCButhCBvthCBwthCBxthCCzthCB0thCB1thCB2thCB3thCB4thCB5thCC7thCB8thCCwrhCBxrhCByrhCBzrhCB0rhCB1rhCB2rhCB3rhCB4rhCB5rhCB6rhCC8rhCB9rhCB+rhCB-rhCBgshCBhshCBishCBjshCBkshCBlshCBmshCBnshCBoshCBpshCBqshCCsshCBtshCBushCBvshCBwshCBxshCByshCC0shCB1shCk2BgmjCBhmjCBimjCBjmjCBkmjCBlmjCBmmjCBnmjCBomjCBpmjCBqmjCBrmjCBsmjCBtmjCBumjCBvmjCBwmjCBxmjCBymjCBzmjCB0mjCB1mjCB2mjCB3mjCB4mjCB5mjCB6mjCB7mjCB8mjCB9mjCB+mjCB-mjCBgnjCBhnjCBinjCBjnjCBknjCBlnjCBmnjCBnnjCBonjCBpnjCBqnjCBrnjCBsnjCBtnjCBunjCBvnjCBwnjCBxnjCBynjCOgkjCBhkjCBikjCBjkjCBkkjCBlkjCBmkjCBnkjCBokjCBpkjCBqkjCBrkjCBskjCBtkjCBukjCBvkjCBwkjCBxkjCBykjCBzkjCB0kjCB1kjCB2kjCB3kjCB4kjCB5kjCB6kjCB7kjCB8kjCB9kjCB+kjCB-kjCBgljCBhljCBiljCBjljCBkljCBlljCBmljCBnljCBoljCBpljCBqljCBrljCBsljCBtljCBuljCBvljCBwljCBxljCByljC+CwrjCBxrjCByrjCBzrjCB0rjCB1rjCB2rjCB3rjCB4rjCB5rjCB6rjCB7rjCB8rjCB9rjCB+rjCB-rjCBgsjCBhsjCBisjCBjsjCBksjCBlsjCLwqjCBxqjCByqjCBzqjCB0qjCB1qjCB2qjCB3qjCB4qjCB5qjCB6qjCB7qjCB8qjCB9qjCB+qjCB-qjCBgrjCBhrjCBirjCBjrjCBkrjCBlrjC74CgmmCBhmmCBimmCBjmmCBkmmCBlmmCBmmmCBnmmCBommCBpmmCBqmmCBrmmCBsmmCBtmmCBummCBvmmCBwmmCBxmmCBymmCBzmmCB0mmCB1mmCB2mmCB3mmCB4mmCB5mmCB6mmCB7mmCB8mmCB9mmCB+mmCB-mmCBglmCBhlmCBilmCBjlmCBklmCBllmCBmlmCBnlmCBolmCBplmCBqlmCBrlmCBslmCBtlmCBulmCBvlmCBwlmCBxlmCBylmCBzlmCB0lmCB1lmCB2lmCB3lmCB4lmCB5lmCB6lmCB7lmCB8lmCB9lmCB+lmCB-lmChrVgz7CBhz7CBiz7CBjz7CBkz7CBlz7CBmz7CBnz7CBoz7CBpz7CBqz7CBrz7CBsz7CBtz7CBuz7CBvz7CBwz7CBxz7CByz7CBzz7CB0z7CB1z7CB2z7CB3z7CB4z7CB5z7CB6z7CB7z7CB8z7CB9z7CB+z7CB-z7CBgy7CBhy7CBiy7CBjy7CBky7CBly7CBmy7CBny7CBoy7CBpy7CBqy7CBry7CBsy7CBty7CBuy7CBvy7CBwy7CBxy7CByy7CBzy7CB0y7CB1y7CB2y7CB3y7CB4y7CB5y7CB6y7CB7y7CB8y7CB9y7CB+y7CB-y7ChB717CB817CB917CB+17CB-17CBg27CBh27CBi27CBj27CBk27CBl27CBm27CBn27CBo27CBp27CBq27CBr27CBs27CBt27CBu27CBv27CBw27CBx27CBy27CBz27CDg17CBh17CBi17CBj17CBk17CBl17CBm17CBn17CBo17CBp17CBq17CBr17CBs17CBt17CBu17CBv17CBw17CBx17CBy17CBz17CB017CB117CB217CB317CB417Ctxeip6DBjp6DBkp6DBlp6DBmp6DBnp6DBop6DBpp6DBqp6DBrp6DBsp6DBtp6DBup6DBvp6DBwp6DBxp6DByp6DBzp6DB0p6DB1p6DB2p6DB3p6DB4p6DB5p6DB6p6DB7p6DB8p6DB9p6DB+p6DB-p6DBgq6DBhq6DBiq6DBjq6DBgo6DBho6DBio6DBjo6DBko6DBlo6DBmo6DBno6DBoo6DBpo6DBqo6DBro6DBso6DBto6DBuo6DBvo6DBwo6DBxo6DByo6DBzo6DB0o6DB1o6DB2o6DB3o6DB4o6DB5o6DB6o6DB7o6DB8o6DB9o6DB+o6DB-o6DBgp6DBhp6D');
|
|
232
232
|
}
|
|
233
233
|
return this._CASE_ORBIT;
|
|
234
234
|
}
|
|
@@ -523,7 +523,7 @@
|
|
|
523
523
|
// is tests whether rune is in the specified table of ranges.
|
|
524
524
|
static is(ranges, r) {
|
|
525
525
|
// Fast path for Latin-1 characters using linear search.
|
|
526
|
-
if (r <=
|
|
526
|
+
if (r <= Unicode.MAX_LATIN1) {
|
|
527
527
|
for (let i = 0; i < ranges.length; i++) {
|
|
528
528
|
const rhi = ranges.getHi(i);
|
|
529
529
|
if (r > rhi) {
|
|
@@ -540,24 +540,24 @@
|
|
|
540
540
|
}
|
|
541
541
|
|
|
542
542
|
// Fallback to binary search for runes outside Latin-1
|
|
543
|
-
return ranges.length > 0 && r >= ranges.getLo(0) &&
|
|
543
|
+
return ranges.length > 0 && r >= ranges.getLo(0) && Unicode.is32(ranges, r);
|
|
544
544
|
}
|
|
545
545
|
|
|
546
546
|
// isUpper reports whether the rune is an upper case letter.
|
|
547
547
|
static isUpper(r) {
|
|
548
|
-
if (r <=
|
|
548
|
+
if (r <= Unicode.MAX_LATIN1) {
|
|
549
549
|
const s = String.fromCodePoint(r);
|
|
550
550
|
return s.toUpperCase() === s && s.toLowerCase() !== s;
|
|
551
551
|
}
|
|
552
|
-
return
|
|
552
|
+
return Unicode.is(UnicodeTables.Upper, r);
|
|
553
553
|
}
|
|
554
554
|
|
|
555
555
|
// isPrint reports whether the rune is printable (Unicode L/M/N/P/S or ' ').
|
|
556
556
|
static isPrint(r) {
|
|
557
|
-
if (r <=
|
|
558
|
-
return r >= 0x20 && r <
|
|
557
|
+
if (r <= Unicode.MAX_LATIN1) {
|
|
558
|
+
return r >= 0x20 && r < Unicode.MAX_ASCII || r >= 0xa1 && r !== 0xad;
|
|
559
559
|
}
|
|
560
|
-
return
|
|
560
|
+
return Unicode.is(UnicodeTables.Print, r);
|
|
561
561
|
}
|
|
562
562
|
|
|
563
563
|
// simpleFold iterates over Unicode code points equivalent under
|
|
@@ -612,11 +612,13 @@
|
|
|
612
612
|
|
|
613
613
|
// Fast path for the common case where both runes are ASCII characters.
|
|
614
614
|
// Coerces both runes to lowercase if applicable.
|
|
615
|
-
if (r1 <=
|
|
616
|
-
|
|
615
|
+
if (r1 <= Unicode.MAX_ASCII && r2 <= Unicode.MAX_ASCII) {
|
|
616
|
+
// 65 is 'A', 90 is 'Z'
|
|
617
|
+
if (65 <= r1 && r1 <= 90) {
|
|
617
618
|
r1 |= 0x20;
|
|
618
619
|
}
|
|
619
|
-
|
|
620
|
+
// 65 is 'A', 90 is 'Z'
|
|
621
|
+
if (65 <= r2 && r2 <= 90) {
|
|
620
622
|
r2 |= 0x20;
|
|
621
623
|
}
|
|
622
624
|
return r1 === r2;
|
|
@@ -624,7 +626,7 @@
|
|
|
624
626
|
|
|
625
627
|
// Fall back to full Unicode case folding otherwise.
|
|
626
628
|
// Invariant: r1 must be non-negative
|
|
627
|
-
for (let r =
|
|
629
|
+
for (let r = Unicode.simpleFold(r1); r !== r1; r = Unicode.simpleFold(r)) {
|
|
628
630
|
if (r === r2) {
|
|
629
631
|
return true;
|
|
630
632
|
}
|
|
@@ -633,6 +635,31 @@
|
|
|
633
635
|
}
|
|
634
636
|
}
|
|
635
637
|
|
|
638
|
+
/**
|
|
639
|
+
* Size of the precomputed single-byte lookup table.
|
|
640
|
+
* Covers standard ASCII and Latin-1 characters for fast-path execution.
|
|
641
|
+
*/
|
|
642
|
+
const FAST_PATH_TABLE_SIZE = 256;
|
|
643
|
+
/**
|
|
644
|
+
* Precomputed lookup table for Word Boundary (\b, \B) assertions.
|
|
645
|
+
* * By precomputing the boolean results for standard ASCII word ranges
|
|
646
|
+
* ('a'-'z', 'A'-'Z', '0'-'9', '_'), we completely eliminate 4 logical
|
|
647
|
+
* branches from the NFA's hot execution loop. This prevents costly
|
|
648
|
+
* CPU branch mispredictions when scanning large strings.
|
|
649
|
+
*/
|
|
650
|
+
const WORD_RUNE_TABLE = new Uint8Array(FAST_PATH_TABLE_SIZE);
|
|
651
|
+
for (let i = 0; i < FAST_PATH_TABLE_SIZE; i++) {
|
|
652
|
+
WORD_RUNE_TABLE[i] = 97 <= i && i <= 122 ||
|
|
653
|
+
// 'a' - 'z'
|
|
654
|
+
65 <= i && i <= 90 ||
|
|
655
|
+
// 'A' - 'Z'
|
|
656
|
+
48 <= i && i <= 57 ||
|
|
657
|
+
// '0' - '9'
|
|
658
|
+
i === 95 // '_'
|
|
659
|
+
? 1 : 0;
|
|
660
|
+
}
|
|
661
|
+
let cachedNativeEncoder = null;
|
|
662
|
+
let cachedNativeDecoder = null;
|
|
636
663
|
/**
|
|
637
664
|
* Various constants and helper utilities.
|
|
638
665
|
*/
|
|
@@ -678,7 +705,7 @@
|
|
|
678
705
|
static escapeRune(rune) {
|
|
679
706
|
let out = '';
|
|
680
707
|
if (Unicode.isPrint(rune)) {
|
|
681
|
-
if (
|
|
708
|
+
if (Utils.METACHARACTERS.indexOf(String.fromCodePoint(rune)) >= 0) {
|
|
682
709
|
out += '\\';
|
|
683
710
|
}
|
|
684
711
|
out += String.fromCodePoint(rune);
|
|
@@ -731,12 +758,21 @@
|
|
|
731
758
|
return out;
|
|
732
759
|
}
|
|
733
760
|
|
|
734
|
-
// Returns the array of runes in the specified
|
|
761
|
+
// Returns the array of runes in the specified JS UTF-16 string.
|
|
735
762
|
static stringToRunes(str) {
|
|
736
|
-
|
|
763
|
+
const string = String(str);
|
|
764
|
+
const runes = [];
|
|
765
|
+
let i = 0;
|
|
766
|
+
while (i < string.length) {
|
|
767
|
+
const cp = string.codePointAt(i);
|
|
768
|
+
runes.push(cp);
|
|
769
|
+
// Surrogate pairs (Emojis, etc.) are > 0xFFFF
|
|
770
|
+
i += cp > Unicode.MAX_BMP ? 2 : 1;
|
|
771
|
+
}
|
|
772
|
+
return runes;
|
|
737
773
|
}
|
|
738
774
|
|
|
739
|
-
// Returns the
|
|
775
|
+
// Returns the JS UTF-16 string containing the single rune |r|.
|
|
740
776
|
static runeToString(r) {
|
|
741
777
|
return String.fromCodePoint(r);
|
|
742
778
|
}
|
|
@@ -745,7 +781,7 @@
|
|
|
745
781
|
// during the evaluation of the \b and \B zero-width assertions.
|
|
746
782
|
// These assertions are ASCII-only: the word characters are [A-Za-z0-9_].
|
|
747
783
|
static isWordRune(r) {
|
|
748
|
-
return
|
|
784
|
+
return r < FAST_PATH_TABLE_SIZE ? WORD_RUNE_TABLE[r] === 1 : false;
|
|
749
785
|
}
|
|
750
786
|
|
|
751
787
|
// emptyOpContext returns the zero-width assertions satisfied at the position
|
|
@@ -758,21 +794,24 @@
|
|
|
758
794
|
static emptyOpContext(r1, r2) {
|
|
759
795
|
let op = 0;
|
|
760
796
|
if (r1 < 0) {
|
|
761
|
-
op |=
|
|
797
|
+
op |= Utils.EMPTY_BEGIN_TEXT | Utils.EMPTY_BEGIN_LINE;
|
|
762
798
|
}
|
|
763
|
-
|
|
764
|
-
|
|
799
|
+
// Hardcode 10 for '\n'
|
|
800
|
+
if (r1 === 10) {
|
|
801
|
+
op |= Utils.EMPTY_BEGIN_LINE;
|
|
765
802
|
}
|
|
766
803
|
if (r2 < 0) {
|
|
767
|
-
op |=
|
|
804
|
+
op |= Utils.EMPTY_END_TEXT | Utils.EMPTY_END_LINE;
|
|
768
805
|
}
|
|
769
|
-
|
|
770
|
-
|
|
806
|
+
|
|
807
|
+
// Hardcode 10 for '\n'
|
|
808
|
+
if (r2 === 10) {
|
|
809
|
+
op |= Utils.EMPTY_END_LINE;
|
|
771
810
|
}
|
|
772
|
-
if (
|
|
773
|
-
op |=
|
|
811
|
+
if (Utils.isWordRune(r1) !== Utils.isWordRune(r2)) {
|
|
812
|
+
op |= Utils.EMPTY_WORD_BOUNDARY;
|
|
774
813
|
} else {
|
|
775
|
-
op |=
|
|
814
|
+
op |= Utils.EMPTY_NO_WORD_BOUNDARY;
|
|
776
815
|
}
|
|
777
816
|
return op;
|
|
778
817
|
}
|
|
@@ -787,7 +826,7 @@
|
|
|
787
826
|
static quoteMeta(str) {
|
|
788
827
|
return str.split('') // A char loop is correct because all metacharacters fit in one UTF-16 code.
|
|
789
828
|
.map(s => {
|
|
790
|
-
if (
|
|
829
|
+
if (Utils.METACHARACTERS.indexOf(s) >= 0) {
|
|
791
830
|
return `\\${s}`;
|
|
792
831
|
}
|
|
793
832
|
return s;
|
|
@@ -796,9 +835,23 @@
|
|
|
796
835
|
static charCount(codePoint) {
|
|
797
836
|
return codePoint > Unicode.MAX_BMP ? 2 : 1;
|
|
798
837
|
}
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* High-speed conversion from TypedArrays to standard JS Arrays.
|
|
841
|
+
* Bypasses the expensive Symbol.iterator overhead of Array.from()
|
|
842
|
+
*/
|
|
843
|
+
static toArray(typedArray) {
|
|
844
|
+
const len = typedArray.length;
|
|
845
|
+
const res = new Array(len);
|
|
846
|
+
for (let i = 0; i < len; i++) {
|
|
847
|
+
res[i] = typedArray[i];
|
|
848
|
+
}
|
|
849
|
+
return res;
|
|
850
|
+
}
|
|
799
851
|
static stringToUtf8ByteArray(str) {
|
|
800
852
|
if (globalThis.TextEncoder) {
|
|
801
|
-
|
|
853
|
+
if (!cachedNativeEncoder) cachedNativeEncoder = new TextEncoder();
|
|
854
|
+
return Utils.toArray(cachedNativeEncoder.encode(str));
|
|
802
855
|
} else {
|
|
803
856
|
// fallback, if no TextEncoder
|
|
804
857
|
let out = [],
|
|
@@ -828,7 +881,9 @@
|
|
|
828
881
|
}
|
|
829
882
|
static utf8ByteArrayToString(bytes) {
|
|
830
883
|
if (globalThis.TextDecoder) {
|
|
831
|
-
|
|
884
|
+
if (!cachedNativeDecoder) cachedNativeDecoder = new TextDecoder('utf-8');
|
|
885
|
+
const view = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
|
|
886
|
+
return cachedNativeDecoder.decode(view);
|
|
832
887
|
} else {
|
|
833
888
|
// fallback, if no TextDecoder
|
|
834
889
|
let out = [],
|
|
@@ -1125,15 +1180,34 @@
|
|
|
1125
1180
|
if (targetLength === 0) {
|
|
1126
1181
|
return fromIndex <= this.end ? fromIndex : -1;
|
|
1127
1182
|
}
|
|
1183
|
+
const firstByte = target[0];
|
|
1128
1184
|
let limit = this.end - targetLength;
|
|
1129
|
-
|
|
1130
|
-
|
|
1185
|
+
// Feature detection: Native TypedArray indexOf (ES2015)
|
|
1186
|
+
const hasNativeIndexOf = typeof source.indexOf === 'function';
|
|
1187
|
+
let i = fromIndex;
|
|
1188
|
+
while (i <= limit) {
|
|
1189
|
+
// Fast-forward to the first matching byte using C++ bindings if available
|
|
1190
|
+
if (hasNativeIndexOf) {
|
|
1191
|
+
i = source.indexOf(firstByte, i);
|
|
1192
|
+
if (i === -1 || i > limit) return -1;
|
|
1193
|
+
} else {
|
|
1194
|
+
// Fallback: Manual loop
|
|
1195
|
+
while (i <= limit && source[i] !== firstByte) i++;
|
|
1196
|
+
if (i > limit) return -1;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
// First byte matches, verify the rest of the target sequence
|
|
1200
|
+
let match = true;
|
|
1201
|
+
for (let j = 1; j < targetLength; j++) {
|
|
1131
1202
|
if (source[i + j] !== target[j]) {
|
|
1203
|
+
match = false;
|
|
1132
1204
|
break;
|
|
1133
|
-
} else if (j === targetLength - 1) {
|
|
1134
|
-
return i;
|
|
1135
1205
|
}
|
|
1136
1206
|
}
|
|
1207
|
+
if (match) {
|
|
1208
|
+
return i;
|
|
1209
|
+
}
|
|
1210
|
+
i++;
|
|
1137
1211
|
}
|
|
1138
1212
|
return -1;
|
|
1139
1213
|
}
|
|
@@ -1205,8 +1279,10 @@
|
|
|
1205
1279
|
// Returns a bitmask of EMPTY_* flags.
|
|
1206
1280
|
context(pos) {
|
|
1207
1281
|
pos += this.start;
|
|
1208
|
-
|
|
1209
|
-
|
|
1282
|
+
|
|
1283
|
+
// We only care about ASCII word runes and newlines for context boundaries
|
|
1284
|
+
const r1 = pos > this.start && pos <= this.end ? this.charSequence.charCodeAt(pos - 1) : -1;
|
|
1285
|
+
const r2 = pos < this.end ? this.charSequence.charCodeAt(pos) : -1;
|
|
1210
1286
|
return Utils.emptyOpContext(r1, r2);
|
|
1211
1287
|
}
|
|
1212
1288
|
prefixLength(re2) {
|
|
@@ -2213,7 +2289,7 @@
|
|
|
2213
2289
|
return Utils.emptyInts();
|
|
2214
2290
|
}
|
|
2215
2291
|
// Use subarray() to create a zero-allocation view before converting
|
|
2216
|
-
return
|
|
2292
|
+
return Utils.toArray(this.matchcap.subarray(0, this.ncap));
|
|
2217
2293
|
}
|
|
2218
2294
|
|
|
2219
2295
|
// alloc() allocates a new thread with the given instruction.
|
|
@@ -3175,7 +3251,7 @@
|
|
|
3175
3251
|
}
|
|
3176
3252
|
|
|
3177
3253
|
// Must slice so we don't accidentally leak trailing arrays from previously recycled typed arrays
|
|
3178
|
-
const result = ncap === 0 ? [] :
|
|
3254
|
+
const result = ncap === 0 ? [] : Utils.toArray(b.matchcap.subarray(0, ncap));
|
|
3179
3255
|
bitStatePool.push(b);
|
|
3180
3256
|
return result;
|
|
3181
3257
|
}
|
|
@@ -3551,7 +3627,7 @@
|
|
|
3551
3627
|
matchcap[0] = 0;
|
|
3552
3628
|
matchcap[1] = pos;
|
|
3553
3629
|
}
|
|
3554
|
-
return ncap === 0 ? [] :
|
|
3630
|
+
return ncap === 0 ? [] : Utils.toArray(matchcap);
|
|
3555
3631
|
}
|
|
3556
3632
|
case Inst.RUNE:
|
|
3557
3633
|
if (!inst.matchRune(rune)) return null;
|
|
@@ -3600,7 +3676,7 @@
|
|
|
3600
3676
|
}
|
|
3601
3677
|
}
|
|
3602
3678
|
if (!matched) return null;
|
|
3603
|
-
return ncap === 0 ? [] :
|
|
3679
|
+
return ncap === 0 ? [] : Utils.toArray(matchcap);
|
|
3604
3680
|
}
|
|
3605
3681
|
}
|
|
3606
3682
|
|
|
@@ -5354,7 +5430,7 @@
|
|
|
5354
5430
|
return r;
|
|
5355
5431
|
}
|
|
5356
5432
|
lookingAt(s) {
|
|
5357
|
-
return this.
|
|
5433
|
+
return this.str.startsWith(s, this.position);
|
|
5358
5434
|
}
|
|
5359
5435
|
|
|
5360
5436
|
// Returns the rest of the pattern as a Java UTF-16 string.
|