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.esm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.d.ts","sourceRoot":"","sources":["index.esm.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.esm.d.ts","sourceRoot":"","sources":["index.esm.js"],"names":[],"mappings":"AAy2CA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;IACE;;;;;;;OAOG;IACH,6BAJW,MAAM,aACN,OAAO,GACL,MAAM,CA2BlB;IACD;;;;OAIG;IACH,qBAHW,KAAK,SACL,MAAM,GAAC,MAAM,EAAE,GAAC,UAAU,EA6BpC;IAvBC;;;OAGG;IACH,cAFU,KAAK,CAEY;IAG3B,qBAAqB;IACrB,mBADW,MAAM,CACqC;IAEtD,uBAAuB;IACvB,QADW,MAAM,EAAE,CACH;IAChB,qCAAqC;IACrC,aADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACC;IAClC,qBAAqB;IACrB,sBADW,MAAM,CACqC;IAUxD;;;OAGG;IACH,WAFa,KAAK,CAIjB;IAED;;;;OAIG;IACH,SAFa,OAAO,CAiBnB;IAbC,qBAAqB;IACrB,uCAAoD;IAEpD,qBAAqB;IACrB,8BAAkB;IAElB,8BAAqB;IAGrB,+BAAsB;IAEtB,+BAAmB;IAIrB;;;;OAIG;IACH,yBAHW,gBAAgB,GACd,OAAO,CASnB;IAHC,2CAAyB;IAK3B;;;;;OAKG;IACH,cAHW,MAAM,GAAC,MAAM,GACX,MAAM,CAYlB;IAED;;;;;OAKG;IACH,YAHW,MAAM,GAAC,MAAM,GACX,MAAM,CAYlB;IAED;;;;;;;;;OASG;IACH,eAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,MAAM,GACX,MAAM,GAAC,IAAI,CAgBvB;IAED;;;;OAIG;IACH,kBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,GAAC,IAAI,CAAC,CAWvC;IAED;;;;OAIG;IACH,cAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,kBAkBC;IAED;;;;;OAKG;IACH,WAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,aAFa,OAAO,CAInB;IAED;;;;;;;OAOG;IACH,aAJW,MAAM,GAAC,IAAI,GACT,OAAO,CA4BnB;IAED;;;;;;OAMG;IACH,iBAaC;IAED;;;;;OAKG;IACH,iBAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAOlB;IAED;;;OAGG;IACH,eAFa,MAAM,CAIlB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,0BAUC;IAED;;;;OAIG;IACH,sCAgEC;IAED;;;;OAIG;IACH,oCAuGC;IAED;;;;OAIG;IACH,cAFa,MAAM,CAIlB;IAED;;;;;;;;OAQG;IACH,wBALW,MAAM,aACN,OAAO,GACL,MAAM,CAKlB;IAED;;;;;;;;OAQG;IACH,0BALW,MAAM,aACN,OAAO,GACL,MAAM,CAKlB;IAED;;;;;;;OAOG;IACH,gBAWC;CACF;AAwsMD;;;;;;;;;GASG;AACH;IACE;;OAEG;IACH,gCAAuD;IACvD;;OAEG;IACH,sBAAmC;IACnC;;;OAGG;IACH,yBAAyC;IACzC;;OAEG;IACH,sCAAmE;IACnE;;OAEG;IACH,6BAAiD;IACjD;;OAEG;IACH,2BAA6C;IAE7C;;;;;;;;;;OAUG;IACH,kBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;;;;OASG;IACH,6BAJW,MAAM,aACN,OAAO,GACL,MAAM,CAIlB;IAED;;;;;;;;;;OAUG;IACH,6BAHW,MAAM,GAAC,MAAM,GACX,MAAM,CAIlB;IAED;;;;;OAKG;IACH,sBAJW,MAAM,UACN,MAAM,GACJ,KAAK,CA2BjB;IAED;;;;;;;OAOG;IACH,sBALW,MAAM,SACN,MAAM,GAAC,MAAM,EAAE,GAAC,UAAU,GACxB,OAAO,CAKnB;IAED;;;OAGG;IACH,wBAWC;IAED;;;;OAIG;IACH,qBAHW,MAAM,SACN,MAAM,EAOhB;IAHC,qBAA2B;IAE3B,mBAAuB;IAGzB;;;OAGG;IACH,cAEC;IAED;;;OAGG;IACH,SAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,WAFa,MAAM,CAIlB;IACD,WAEC;IAED;;;;;OAKG;IACH,eAHW,MAAM,GAAC,MAAM,EAAE,GAAC,UAAU,GACxB,OAAO,CAInB;IAED;;;;;OAKG;IACH,eAHW,MAAM,GAAC,MAAM,EAAE,GAAC,UAAU,GACxB,OAAO,CAOnB;IAED;;;;;;;;OAQG;IACH,YAHW,MAAM,GAAC,MAAM,EAAE,GAAC,UAAU,GACxB,OAAO,CAUnB;IAED;;;;;;;;OAQG;IACH,iBAHW,MAAM,GAAC,MAAM,EAAE,GAAC,UAAU,GACxB,OAAO,CAKnB;IAED;;;;;;;;;;;;OAYG;IACH,aAJW,MAAM,UACN,MAAM,GACJ,MAAM,EAAE,CAgDpB;IAED;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAED;;;;;;;;;OASG;IACH,eAFa,MAAM,CAIlB;IAED;;;;;OAKG;IACH,cAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,eAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIlC;IAED;;;;OAIG;IACH,cAHW,GAAC,GACC,OAAO,CAUnB;CACF;AAtsOD;;GAEG;AACH;CAMC;AAxDD;IACE,8BAA8B;IAC9B,qBADY,MAAM,EAIjB;CACF;AA+DD;;GAEG;AACH;CAMC;AApBD;;GAEG;AACH;CAMC;AAaD;;GAEG;AACH;CAMC;AAjFD;;GAEG;AACH;IACE;;;OAGG;IACH,mBAHW,MAAM,UACN,MAAM,GAAC,IAAI,EAcrB;IAJC,qBAAqB;IACrB,OADW,MAAM,CACC;IAClB,0BAA0B;IAC1B,OADW,MAAM,GAAC,IAAI,CACJ;IAGpB;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,cAFa,MAAM,GAAC,IAAI,CAIvB;CACF;AAqhND;IACE,qBAAqB;IACrB,mBADW,MAAM,CACuB;IACxC,qBAAqB;IACrB,qBADW,MAAM,CAC2B;IAC5C,qBAAqB;IACrB,oBADW,MAAM,CACyB;IAE1C;;;;OAIG;IACH,qBAHW,MAAM,UACN,MAAM,EAiBhB;IAdC,eAAoB;IACpB,gBAAoB;IAQpB,iBAAwB;IACxB,eAAiB;IACjB,kBAAgB;IAChB,gBAAe;IACf;;;;;;aAAoB;IAGtB;;;;;;OAMG;IACH,aAJW,MAAM,GACJ,MAAM,CAoBlB;IAED;;;;OAIG;IACH,WAFa,IAAI,CAahB;IAED;;;;OAIG;IACH,aAHW,MAAM,GAAC,MAAM,EAAE,GAAC,UAAU,GACxB,MAAM,EAAE,CAoBpB;CACF;AAphOD;;GAEG;AACH;IACE,qBAAkD;IAClD,oBAEC;IAED;;;OAGG;IACH,kBAFa,OAAO,CAInB;IAED;;;OAGG;IACH,mBAFa,OAAO,CAInB;CACF;AAm0GD;;GAEG;AACH;IAEI,YAAc;IACd,cAAc;IAGd,eAAe;IACf,gBAAkB;IAClB,cAAc;IAKhB,sBAEC;IAGD,kBAEC;IAID,uBAEC;IAID,sBAOC;IAKD,+BAWC;IAID,oBAoBC;IAeD,8BAYC;IACD,8BAYC;IACD;;;OAGG;IACH,YAFa,MAAM,CAelB;CACF;AArxDD;IACE,gCAA4B;IAC5B,uBASC;IARC,UAAgB;IAChB,0BAA2B;IAC3B,mBAAmB;IACnB,gBAAsB;IACtB,mBAAuB;IACvB,oBAAoB;IACpB,gBAAmB;IACnB,cAAc;IAIhB;;;;aAuCC;IAGD,wBAyDC;IACD,mBAyCC;IAGD,kDA+CC;IAGD,yDA+CC;IAGD,0DAwCC;CACF"}
|
package/build/index.esm.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
|
|
@@ -222,7 +222,7 @@ class UnicodeTables {
|
|
|
222
222
|
static _CASE_ORBIT = null;
|
|
223
223
|
static get CASE_ORBIT() {
|
|
224
224
|
if (!this._CASE_ORBIT) {
|
|
225
|
-
this._CASE_ORBIT = decodeOrbit('rCrDIzDYqpII-LiC8cQlHa+0HGrpI6EzClClOBmOBkOBoOBpOBnOBrOBsOBqOlByPBzPBxPyK5crCz+HCydD1dD4dB5dB6dC8dEgeBheCieDmeDpeHj-HCweD1fDxeB+9HBwfC1FE2eBxfBjeBjdD1eDmpIHycB0fEmdBgda6cBhdD4cB1cdyhBC0hBK+hBDhiBBiiBIqiBIgkHChkHKikHDjkHBkkHImkHYjjBBnkH9gGygBB0gBB+gBBhhBBlkHBihBBqhBBijBBqypB4OhzHB70H6BgzHD-GiHo8HBp8HBq8HBr8HBs8HBt8HBu8HBv8HBg8HBh8HBi8HBj8HBk8HBl8HBm8HBn8HB48HB58HB68HB78HB88HB98HB+8HB-8HBw8HBx8HBy8HBz8HB08HB18HB28HB38HBo9HBp9HBq9HBr9HBs9HBt9HBu9HBv9HBg9HBh9HBi9HBj9HBk9HBl9HBm9HBn9HE89HJz9HClaFs+HJj+HHwcQwdQ8-HJz-HqJpdErCBlG-ohBrypBBokH6lVm4+BBl4+B');
|
|
225
|
+
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');
|
|
226
226
|
}
|
|
227
227
|
return this._CASE_ORBIT;
|
|
228
228
|
}
|
|
@@ -517,7 +517,7 @@ class Unicode {
|
|
|
517
517
|
// is tests whether rune is in the specified table of ranges.
|
|
518
518
|
static is(ranges, r) {
|
|
519
519
|
// Fast path for Latin-1 characters using linear search.
|
|
520
|
-
if (r <=
|
|
520
|
+
if (r <= Unicode.MAX_LATIN1) {
|
|
521
521
|
for (let i = 0; i < ranges.length; i++) {
|
|
522
522
|
const rhi = ranges.getHi(i);
|
|
523
523
|
if (r > rhi) {
|
|
@@ -534,24 +534,24 @@ class Unicode {
|
|
|
534
534
|
}
|
|
535
535
|
|
|
536
536
|
// Fallback to binary search for runes outside Latin-1
|
|
537
|
-
return ranges.length > 0 && r >= ranges.getLo(0) &&
|
|
537
|
+
return ranges.length > 0 && r >= ranges.getLo(0) && Unicode.is32(ranges, r);
|
|
538
538
|
}
|
|
539
539
|
|
|
540
540
|
// isUpper reports whether the rune is an upper case letter.
|
|
541
541
|
static isUpper(r) {
|
|
542
|
-
if (r <=
|
|
542
|
+
if (r <= Unicode.MAX_LATIN1) {
|
|
543
543
|
const s = String.fromCodePoint(r);
|
|
544
544
|
return s.toUpperCase() === s && s.toLowerCase() !== s;
|
|
545
545
|
}
|
|
546
|
-
return
|
|
546
|
+
return Unicode.is(UnicodeTables.Upper, r);
|
|
547
547
|
}
|
|
548
548
|
|
|
549
549
|
// isPrint reports whether the rune is printable (Unicode L/M/N/P/S or ' ').
|
|
550
550
|
static isPrint(r) {
|
|
551
|
-
if (r <=
|
|
552
|
-
return r >= 0x20 && r <
|
|
551
|
+
if (r <= Unicode.MAX_LATIN1) {
|
|
552
|
+
return r >= 0x20 && r < Unicode.MAX_ASCII || r >= 0xa1 && r !== 0xad;
|
|
553
553
|
}
|
|
554
|
-
return
|
|
554
|
+
return Unicode.is(UnicodeTables.Print, r);
|
|
555
555
|
}
|
|
556
556
|
|
|
557
557
|
// simpleFold iterates over Unicode code points equivalent under
|
|
@@ -606,11 +606,13 @@ class Unicode {
|
|
|
606
606
|
|
|
607
607
|
// Fast path for the common case where both runes are ASCII characters.
|
|
608
608
|
// Coerces both runes to lowercase if applicable.
|
|
609
|
-
if (r1 <=
|
|
610
|
-
|
|
609
|
+
if (r1 <= Unicode.MAX_ASCII && r2 <= Unicode.MAX_ASCII) {
|
|
610
|
+
// 65 is 'A', 90 is 'Z'
|
|
611
|
+
if (65 <= r1 && r1 <= 90) {
|
|
611
612
|
r1 |= 0x20;
|
|
612
613
|
}
|
|
613
|
-
|
|
614
|
+
// 65 is 'A', 90 is 'Z'
|
|
615
|
+
if (65 <= r2 && r2 <= 90) {
|
|
614
616
|
r2 |= 0x20;
|
|
615
617
|
}
|
|
616
618
|
return r1 === r2;
|
|
@@ -618,7 +620,7 @@ class Unicode {
|
|
|
618
620
|
|
|
619
621
|
// Fall back to full Unicode case folding otherwise.
|
|
620
622
|
// Invariant: r1 must be non-negative
|
|
621
|
-
for (let r =
|
|
623
|
+
for (let r = Unicode.simpleFold(r1); r !== r1; r = Unicode.simpleFold(r)) {
|
|
622
624
|
if (r === r2) {
|
|
623
625
|
return true;
|
|
624
626
|
}
|
|
@@ -627,6 +629,31 @@ class Unicode {
|
|
|
627
629
|
}
|
|
628
630
|
}
|
|
629
631
|
|
|
632
|
+
/**
|
|
633
|
+
* Size of the precomputed single-byte lookup table.
|
|
634
|
+
* Covers standard ASCII and Latin-1 characters for fast-path execution.
|
|
635
|
+
*/
|
|
636
|
+
const FAST_PATH_TABLE_SIZE = 256;
|
|
637
|
+
/**
|
|
638
|
+
* Precomputed lookup table for Word Boundary (\b, \B) assertions.
|
|
639
|
+
* * By precomputing the boolean results for standard ASCII word ranges
|
|
640
|
+
* ('a'-'z', 'A'-'Z', '0'-'9', '_'), we completely eliminate 4 logical
|
|
641
|
+
* branches from the NFA's hot execution loop. This prevents costly
|
|
642
|
+
* CPU branch mispredictions when scanning large strings.
|
|
643
|
+
*/
|
|
644
|
+
const WORD_RUNE_TABLE = new Uint8Array(FAST_PATH_TABLE_SIZE);
|
|
645
|
+
for (let i = 0; i < FAST_PATH_TABLE_SIZE; i++) {
|
|
646
|
+
WORD_RUNE_TABLE[i] = 97 <= i && i <= 122 ||
|
|
647
|
+
// 'a' - 'z'
|
|
648
|
+
65 <= i && i <= 90 ||
|
|
649
|
+
// 'A' - 'Z'
|
|
650
|
+
48 <= i && i <= 57 ||
|
|
651
|
+
// '0' - '9'
|
|
652
|
+
i === 95 // '_'
|
|
653
|
+
? 1 : 0;
|
|
654
|
+
}
|
|
655
|
+
let cachedNativeEncoder = null;
|
|
656
|
+
let cachedNativeDecoder = null;
|
|
630
657
|
/**
|
|
631
658
|
* Various constants and helper utilities.
|
|
632
659
|
*/
|
|
@@ -672,7 +699,7 @@ class Utils {
|
|
|
672
699
|
static escapeRune(rune) {
|
|
673
700
|
let out = '';
|
|
674
701
|
if (Unicode.isPrint(rune)) {
|
|
675
|
-
if (
|
|
702
|
+
if (Utils.METACHARACTERS.indexOf(String.fromCodePoint(rune)) >= 0) {
|
|
676
703
|
out += '\\';
|
|
677
704
|
}
|
|
678
705
|
out += String.fromCodePoint(rune);
|
|
@@ -725,12 +752,21 @@ class Utils {
|
|
|
725
752
|
return out;
|
|
726
753
|
}
|
|
727
754
|
|
|
728
|
-
// Returns the array of runes in the specified
|
|
755
|
+
// Returns the array of runes in the specified JS UTF-16 string.
|
|
729
756
|
static stringToRunes(str) {
|
|
730
|
-
|
|
757
|
+
const string = String(str);
|
|
758
|
+
const runes = [];
|
|
759
|
+
let i = 0;
|
|
760
|
+
while (i < string.length) {
|
|
761
|
+
const cp = string.codePointAt(i);
|
|
762
|
+
runes.push(cp);
|
|
763
|
+
// Surrogate pairs (Emojis, etc.) are > 0xFFFF
|
|
764
|
+
i += cp > Unicode.MAX_BMP ? 2 : 1;
|
|
765
|
+
}
|
|
766
|
+
return runes;
|
|
731
767
|
}
|
|
732
768
|
|
|
733
|
-
// Returns the
|
|
769
|
+
// Returns the JS UTF-16 string containing the single rune |r|.
|
|
734
770
|
static runeToString(r) {
|
|
735
771
|
return String.fromCodePoint(r);
|
|
736
772
|
}
|
|
@@ -739,7 +775,7 @@ class Utils {
|
|
|
739
775
|
// during the evaluation of the \b and \B zero-width assertions.
|
|
740
776
|
// These assertions are ASCII-only: the word characters are [A-Za-z0-9_].
|
|
741
777
|
static isWordRune(r) {
|
|
742
|
-
return
|
|
778
|
+
return r < FAST_PATH_TABLE_SIZE ? WORD_RUNE_TABLE[r] === 1 : false;
|
|
743
779
|
}
|
|
744
780
|
|
|
745
781
|
// emptyOpContext returns the zero-width assertions satisfied at the position
|
|
@@ -752,21 +788,24 @@ class Utils {
|
|
|
752
788
|
static emptyOpContext(r1, r2) {
|
|
753
789
|
let op = 0;
|
|
754
790
|
if (r1 < 0) {
|
|
755
|
-
op |=
|
|
791
|
+
op |= Utils.EMPTY_BEGIN_TEXT | Utils.EMPTY_BEGIN_LINE;
|
|
756
792
|
}
|
|
757
|
-
|
|
758
|
-
|
|
793
|
+
// Hardcode 10 for '\n'
|
|
794
|
+
if (r1 === 10) {
|
|
795
|
+
op |= Utils.EMPTY_BEGIN_LINE;
|
|
759
796
|
}
|
|
760
797
|
if (r2 < 0) {
|
|
761
|
-
op |=
|
|
798
|
+
op |= Utils.EMPTY_END_TEXT | Utils.EMPTY_END_LINE;
|
|
762
799
|
}
|
|
763
|
-
|
|
764
|
-
|
|
800
|
+
|
|
801
|
+
// Hardcode 10 for '\n'
|
|
802
|
+
if (r2 === 10) {
|
|
803
|
+
op |= Utils.EMPTY_END_LINE;
|
|
765
804
|
}
|
|
766
|
-
if (
|
|
767
|
-
op |=
|
|
805
|
+
if (Utils.isWordRune(r1) !== Utils.isWordRune(r2)) {
|
|
806
|
+
op |= Utils.EMPTY_WORD_BOUNDARY;
|
|
768
807
|
} else {
|
|
769
|
-
op |=
|
|
808
|
+
op |= Utils.EMPTY_NO_WORD_BOUNDARY;
|
|
770
809
|
}
|
|
771
810
|
return op;
|
|
772
811
|
}
|
|
@@ -781,7 +820,7 @@ class Utils {
|
|
|
781
820
|
static quoteMeta(str) {
|
|
782
821
|
return str.split('') // A char loop is correct because all metacharacters fit in one UTF-16 code.
|
|
783
822
|
.map(s => {
|
|
784
|
-
if (
|
|
823
|
+
if (Utils.METACHARACTERS.indexOf(s) >= 0) {
|
|
785
824
|
return `\\${s}`;
|
|
786
825
|
}
|
|
787
826
|
return s;
|
|
@@ -790,9 +829,23 @@ class Utils {
|
|
|
790
829
|
static charCount(codePoint) {
|
|
791
830
|
return codePoint > Unicode.MAX_BMP ? 2 : 1;
|
|
792
831
|
}
|
|
832
|
+
|
|
833
|
+
/**
|
|
834
|
+
* High-speed conversion from TypedArrays to standard JS Arrays.
|
|
835
|
+
* Bypasses the expensive Symbol.iterator overhead of Array.from()
|
|
836
|
+
*/
|
|
837
|
+
static toArray(typedArray) {
|
|
838
|
+
const len = typedArray.length;
|
|
839
|
+
const res = new Array(len);
|
|
840
|
+
for (let i = 0; i < len; i++) {
|
|
841
|
+
res[i] = typedArray[i];
|
|
842
|
+
}
|
|
843
|
+
return res;
|
|
844
|
+
}
|
|
793
845
|
static stringToUtf8ByteArray(str) {
|
|
794
846
|
if (globalThis.TextEncoder) {
|
|
795
|
-
|
|
847
|
+
if (!cachedNativeEncoder) cachedNativeEncoder = new TextEncoder();
|
|
848
|
+
return Utils.toArray(cachedNativeEncoder.encode(str));
|
|
796
849
|
} else {
|
|
797
850
|
// fallback, if no TextEncoder
|
|
798
851
|
let out = [],
|
|
@@ -822,7 +875,9 @@ class Utils {
|
|
|
822
875
|
}
|
|
823
876
|
static utf8ByteArrayToString(bytes) {
|
|
824
877
|
if (globalThis.TextDecoder) {
|
|
825
|
-
|
|
878
|
+
if (!cachedNativeDecoder) cachedNativeDecoder = new TextDecoder('utf-8');
|
|
879
|
+
const view = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
|
|
880
|
+
return cachedNativeDecoder.decode(view);
|
|
826
881
|
} else {
|
|
827
882
|
// fallback, if no TextDecoder
|
|
828
883
|
let out = [],
|
|
@@ -1119,15 +1174,34 @@ class MachineUTF8Input extends MachineInputBase {
|
|
|
1119
1174
|
if (targetLength === 0) {
|
|
1120
1175
|
return fromIndex <= this.end ? fromIndex : -1;
|
|
1121
1176
|
}
|
|
1177
|
+
const firstByte = target[0];
|
|
1122
1178
|
let limit = this.end - targetLength;
|
|
1123
|
-
|
|
1124
|
-
|
|
1179
|
+
// Feature detection: Native TypedArray indexOf (ES2015)
|
|
1180
|
+
const hasNativeIndexOf = typeof source.indexOf === 'function';
|
|
1181
|
+
let i = fromIndex;
|
|
1182
|
+
while (i <= limit) {
|
|
1183
|
+
// Fast-forward to the first matching byte using C++ bindings if available
|
|
1184
|
+
if (hasNativeIndexOf) {
|
|
1185
|
+
i = source.indexOf(firstByte, i);
|
|
1186
|
+
if (i === -1 || i > limit) return -1;
|
|
1187
|
+
} else {
|
|
1188
|
+
// Fallback: Manual loop
|
|
1189
|
+
while (i <= limit && source[i] !== firstByte) i++;
|
|
1190
|
+
if (i > limit) return -1;
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
// First byte matches, verify the rest of the target sequence
|
|
1194
|
+
let match = true;
|
|
1195
|
+
for (let j = 1; j < targetLength; j++) {
|
|
1125
1196
|
if (source[i + j] !== target[j]) {
|
|
1197
|
+
match = false;
|
|
1126
1198
|
break;
|
|
1127
|
-
} else if (j === targetLength - 1) {
|
|
1128
|
-
return i;
|
|
1129
1199
|
}
|
|
1130
1200
|
}
|
|
1201
|
+
if (match) {
|
|
1202
|
+
return i;
|
|
1203
|
+
}
|
|
1204
|
+
i++;
|
|
1131
1205
|
}
|
|
1132
1206
|
return -1;
|
|
1133
1207
|
}
|
|
@@ -1199,8 +1273,10 @@ class MachineUTF16Input extends MachineInputBase {
|
|
|
1199
1273
|
// Returns a bitmask of EMPTY_* flags.
|
|
1200
1274
|
context(pos) {
|
|
1201
1275
|
pos += this.start;
|
|
1202
|
-
|
|
1203
|
-
|
|
1276
|
+
|
|
1277
|
+
// We only care about ASCII word runes and newlines for context boundaries
|
|
1278
|
+
const r1 = pos > this.start && pos <= this.end ? this.charSequence.charCodeAt(pos - 1) : -1;
|
|
1279
|
+
const r2 = pos < this.end ? this.charSequence.charCodeAt(pos) : -1;
|
|
1204
1280
|
return Utils.emptyOpContext(r1, r2);
|
|
1205
1281
|
}
|
|
1206
1282
|
prefixLength(re2) {
|
|
@@ -2207,7 +2283,7 @@ class Machine {
|
|
|
2207
2283
|
return Utils.emptyInts();
|
|
2208
2284
|
}
|
|
2209
2285
|
// Use subarray() to create a zero-allocation view before converting
|
|
2210
|
-
return
|
|
2286
|
+
return Utils.toArray(this.matchcap.subarray(0, this.ncap));
|
|
2211
2287
|
}
|
|
2212
2288
|
|
|
2213
2289
|
// alloc() allocates a new thread with the given instruction.
|
|
@@ -3169,7 +3245,7 @@ class Backtracker {
|
|
|
3169
3245
|
}
|
|
3170
3246
|
|
|
3171
3247
|
// Must slice so we don't accidentally leak trailing arrays from previously recycled typed arrays
|
|
3172
|
-
const result = ncap === 0 ? [] :
|
|
3248
|
+
const result = ncap === 0 ? [] : Utils.toArray(b.matchcap.subarray(0, ncap));
|
|
3173
3249
|
bitStatePool.push(b);
|
|
3174
3250
|
return result;
|
|
3175
3251
|
}
|
|
@@ -3545,7 +3621,7 @@ class OnePass {
|
|
|
3545
3621
|
matchcap[0] = 0;
|
|
3546
3622
|
matchcap[1] = pos;
|
|
3547
3623
|
}
|
|
3548
|
-
return ncap === 0 ? [] :
|
|
3624
|
+
return ncap === 0 ? [] : Utils.toArray(matchcap);
|
|
3549
3625
|
}
|
|
3550
3626
|
case Inst.RUNE:
|
|
3551
3627
|
if (!inst.matchRune(rune)) return null;
|
|
@@ -3594,7 +3670,7 @@ class OnePass {
|
|
|
3594
3670
|
}
|
|
3595
3671
|
}
|
|
3596
3672
|
if (!matched) return null;
|
|
3597
|
-
return ncap === 0 ? [] :
|
|
3673
|
+
return ncap === 0 ? [] : Utils.toArray(matchcap);
|
|
3598
3674
|
}
|
|
3599
3675
|
}
|
|
3600
3676
|
|
|
@@ -5348,7 +5424,7 @@ class StringIterator {
|
|
|
5348
5424
|
return r;
|
|
5349
5425
|
}
|
|
5350
5426
|
lookingAt(s) {
|
|
5351
|
-
return this.
|
|
5427
|
+
return this.str.startsWith(s, this.position);
|
|
5352
5428
|
}
|
|
5353
5429
|
|
|
5354
5430
|
// Returns the rest of the pattern as a Java UTF-16 string.
|