compose-regexp
Advanced tools
Comparing version 0.6.21 to 0.6.22
# Change Log | ||
## v0.6.22 | ||
*2022-05-08* | ||
### Bug fixes | ||
- Better handling of empty parameter lists. | ||
## v0.6.21 | ||
@@ -4,0 +12,0 @@ |
@@ -623,3 +623,4 @@ (function (global, factory) { | ||
var flags = hasOwn.call(options, 'flags') ? options.flagsOp(getFlags(), options.flags) : getFlags(); | ||
var result = new RegExp((x.source || ''), flags); | ||
var either = options.either; | ||
var result = new RegExp((either ? x.source || '[]': x.source || ''), flags); | ||
metadata.set(result, metadata.set(x.key, {})); | ||
@@ -645,2 +646,3 @@ metadata.set(result, 'source', x.source); | ||
var empty = /(?:)/; | ||
var never = /[]/; | ||
@@ -652,5 +654,5 @@ function throwIfNoLookBehind(name) { | ||
function either() { | ||
if (!arguments.length) return empty | ||
if (!arguments.length) return never | ||
$$_resetRefCapsAndFlags(); | ||
return finalize(assemble(arguments, true, false, 0)) | ||
return finalize(assemble(arguments, true, false, 0), {either: true}) | ||
} | ||
@@ -668,6 +670,6 @@ | ||
function makeAssertion (before, direction, gate, name) { | ||
function makeAssertion (before, direction, emptyFallback, gate, name) { | ||
return function () { | ||
if (gate != null) gate(name); | ||
if (!arguments.length) return empty | ||
if (!arguments.length) return emptyFallback | ||
var previousDir = $direction.current; | ||
@@ -685,6 +687,6 @@ $direction.current = direction; | ||
var lookAhead = makeAssertion('(?=', 1); | ||
var notAhead = makeAssertion('(?!', 1); | ||
var lookBehind = makeAssertion('(?<=', -1, throwIfNoLookBehind, "lookBehind"); | ||
var notBehind = makeAssertion('(?<!', -1, throwIfNoLookBehind, "notBehind"); | ||
var lookAhead = makeAssertion('(?=', 1, empty); | ||
var notAhead = makeAssertion('(?!', 1, never); | ||
var lookBehind = makeAssertion('(?<=', -1, empty, throwIfNoLookBehind, "lookBehind"); | ||
var notBehind = makeAssertion('(?<!', -1, never, throwIfNoLookBehind, "notBehind"); | ||
@@ -698,2 +700,3 @@ var call = _suffix.call; | ||
// without allocating an array. The operator is passed as `this` which is ignored. | ||
if (arguments.length === 1) throw new SyntaxError("Suffix to an empty prefix") | ||
var res = call.apply(_sequence, arguments); | ||
@@ -700,0 +703,0 @@ return finalize(decorate(res, {condition: needsWrappingForQuantifier, open: '(?:', suffix: this})) |
/**@license MIT-compose-regexp.js-©Pierre-Yves Gérardy*/ | ||
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define("compose-regexp",["exports"],e):(n="undefined"!=typeof globalThis?globalThis:n||self,e(n.composeRegexp={}))}(this,function(n){"use strict";function e(n){return n}function r(n){return-1===n.indexOf("\\")?n:JSON.parse('"'+n.replace(/$|"|\\x([\dA-Fa-f]{2})|\\u\{([\dA-Fa-f]{1,6})\}/g,function(n,e,r){return""===n?'"':'"'===n?'\\"':String.fromCodePoint(parseInt(e||r,16))}))}function t(){return"_"+Math.floor(Math.random()*Math.pow(2,32)).toString(36)}function u(){return{captureCount:null,direction:0,hasRefs:null,hasFinalRef:null,isDisjunction:null,isOneGroupOrAssertion:null,source:null,unicode:null}}function i(n){if(n instanceof Y){var e=en.get(n);return null==e&&en.set(n,e=u()),e}return n||u()}function o(n,e){return Object.defineProperty(function(r){var t=xn.get(r.key,n);return null!=t?t:xn.set(r.key,n,e(r))},"name",{value:n})}function f(n){return xn.get(n,"source")||xn.set(n,"source",n.source)}function c(n){function e(n){n.lastIndex=u.lastIndex,u=n}var t,u=yn;for(kn.length=0,yn.lastIndex=0;t=u.exec(n);)if(u===yn)if("["===t[0])e(hn);else{if("."===t[0]||"[^]"===t[0]||null!=t[1]&&!un.test(r(t[1]))||null!=t[2])return!0;if(null!=t[3])kn.unshift(t[3]);else if(null!=t[4]){if(("(?="===kn[0]||"(?!"===kn[0])&&")"!==t[4])return!0;kn.shift()}}else if("]"===t[0])e(yn);else if(null!=t[1]||null!=t[2])return!0;return!1}function l(n){var e=n.source;if(null==e||"^"===e||"$"===e||"\\b"===e||"\\B"===e)throw new SyntaxError("Nothing to repeat: /"+(e||"(?:)")+"/");if(1===e.length||sn.test(e)||K.U&&an.test(e))return!1;if(!bn(n))return!0;if(/^\(\?<?[!=]/.test(e))throw new SyntaxError("Nothing to repeat: /"+e+"/");return!1}function s(n){var e=!1;return n.replace(on,function(n,r){if("]"===n){if(!e)return"\\]";e=!1}else if(!e&&null!=r){if("["!==r)return"\\"+r;e=!0}return n})}function a(n){var e=n;return function(n){if("regexp"===n.kind||"result"===n.kind){if(vn(n)){L.hasRefs=!0;var r=!1;n.source=n.source.replace(ln,function(n,t,u,i){if(!r){if(null!=t){var o=Number(t)+e;if(o>99)throw new RangeError("Too many back references");return"\\"+String(o)}if(null!=u)return"0"===u?"\\"+String(i):"$d:"+(Number(u)-1)+",n:"+i+"^"}return"["===n?r=!0:"]"===n&&(r=!1),n})}L.hasFinalRef=!!xn.get(n.key,"hasFinalRef"),e+=wn(n)}return L.captureCount=e,n}}function p(n){var e=n.source;if(K.U&&("regexp"===n.kind&&!n.key.unicode||"result"===n.kind&&!xn.get(n.key,"unicode"))){if(c(e))throw new SyntaxError("Can't upgrade the RegExp to Unicode /"+e+"/"+("regexp"===n.kind?n.key.flags:""));n.source=s(e)}var r=!1;return"regexp"===n.kind&&(n.key.dotAll||n.key.multiline)&&(n.source=e.replace(tn,function(e){return r?("]"===e&&(r=!1),e):("["===e&&(r=!0),n.key.dotAll&&"."===e?"[^]":n.key.multiline&&"^"===e&&H?cn.source:n.key.multiline&&"$"===e&&H?fn.source:e)})),n}function d(n){var e=n.key.flags;if(!En.test(e))throw new TypeError("Unkown flags: "+e.replace(new RegExp("["+G.join()+"]","g"),""));var r=!!n.key.unicode,t=n.key.ignoreCase,u=n.key.multiline;if(null!=K.I&&t!==K.I)throw new SyntaxError("Can't combine i and non-i regexps: "+n.key);if(!H&&null!=K.M&&u!==K.M)throw new SyntaxError("Can't combine m and non-m regexps: "+n.key);return K.I=t,K.M=u,K.U=K.U||r,n}function g(n){var e=xn.get(n.key,"direction");if(e*$n.current==-1)throw new TypeError("Illegal "+Rn[e]+" RegExp argument while building a "+Rn[$n.current]+" one: /"+n.source+"/");return 0!==e&&(L.hasRefs=!0),n}function h(n){return n?function(n,e){return n.source=null==n.source?e.source:e.source+"|"+n.source,n}:function(n,e){return n.source=null==n.source?e.source:e.source+("string"!==e.kind&&vn(e)&&xn.get(e.key,"hasFinalRef")&&/^\d/.test(n.source)?"(?:)":"")+n.source,n}}function y(){L={hasRefs:!1,hasFinalRef:!1,captureCount:0},K={U:!1,I:null,M:null}}function x(n){var e=L,r=K;try{return n()}finally{L=e,K=r}}function k(n,e){return e.condition&&!e.condition(n)||(n.source=e.open+(n.source||"")+")"),e.suffix&&(n.source+=e.suffix),n}function w(n){return k(n,{condition:function(n){return("regexp"===n.kind||"result"===n.kind)&&mn(n)},open:"(?:"})}function v(n){if("number"==typeof n||"string"==typeof n)return{key:null,kind:"string",source:String(n).replace(pn,"\\$&")};throw new TypeError("Can't compose type "+typeof n+" as RegExp")}function m(n,r,t,u){return t=t||n.length>1,V.call(n,function n(u){return(!r&&t?w:e)(Array.isArray(u)?m(u,!1,t,0):"function"==typeof u?n(x(u)):u instanceof Y?g(d({key:u,kind:"regexp",source:f(u)})):v(u))}).map(p).map(a(u)).reduceRight(h(r),{key:xn.set(null,Object.assign({direction:L.hasRefs?$n.current:0,isDisjunction:r&&(n.length>1||1===n.length&&n[0]instanceof Y&&xn.get(n[0],"isDisjunction")),unicode:K.U},L)),kind:"result",source:null})}function b(){return(K.I?"i":"")+(H?"":K.M?"m":"")+(K.U?"u":"")}function E(n,e){e=e||{};var r=Q.call(e,"flags")?e.flagsOp(b(),e.flags):b(),t=new RegExp(n.source||"",r);return xn.set(t,xn.set(n.key,{})),xn.set(t,"source",n.source),Q.call(e,"direction")&&xn.set(t,"direction",e.direction),t}function R(n){if(!H)throw new Error("no support for /(?<=...)/ which is required by "+n+"()")}function $(){return arguments.length?(y(),E(m(arguments,!0,!1,0))):Sn}function S(){return m(arguments,!1,!1,0)}function A(){return arguments.length?(y(),E(S.apply(null,arguments))):Sn}function O(n,e,r,t){return function(){if(null!=r&&r(t),!arguments.length)return Sn;var u=$n.current;$n.current=e;try{y();return E(k(S.apply(null,arguments),{open:n}),{direction:0})}finally{$n.current=u}}}function I(){return y(),E(k(_n.apply(S,arguments),{condition:l,open:"(?:",suffix:this}))}function j(n){"string"!=typeof n&&(n="{"+String(n)+"}");var e=n.match(dn);if(!e||e[3]&&Number(e[3])<Number(e[2]))throw new SyntaxError("Invalid suffix '"+n+"'.");return 1===arguments.length?I.bind(n,n):I.apply(n,arguments)}function _(n){return!J||un.test(r(n))}function F(n){var e=typeof n;return"string"===e&&_(n)||"number"===e&&0<n&&Math.round(n)===n}function C(n,e){if(!F(n))throw new SyntaxError("Bad ref: "+n);if(null!=e&&("number"!=typeof e||e<1||e!==e|0))throw new RangeError("Bad depth: "+e);if("string"==typeof n)return new RegExp("\\k<"+n+">");var r=new RegExp("$d:"+(e||"0")+",n:"+n+"^");return xn.set(r,{direction:$n.current,hasFinalRef:!0,hasRefs:!0}),r}function B(){return y(),E(k(m(arguments,!1,!1,1),{open:"("}))}function M(n){if("string"!=typeof n)throw new TypeError("String expected, got "+typeof n);return _(n),y(),E(k(m(X.call(arguments,1),!1,!1,1),{open:"(?<"+n+">"}))}function D(n){return 1===arguments.length?M.bind(null,n):M.apply(null,arguments)}function U(n,e){return n=n.split(""),e.split("").forEach(function(e){-1===n.indexOf(e)&&n.push(e)}),n.sort().join("")}function T(n){return y(),-1!==n.indexOf("u")&&(K.U=!0),E(_n.apply(S,arguments),{flagsOp:this,flags:n})}function N(){return 1===$n.current?A(An(B.apply(null,arguments)),C(1)):A(C(1),In(B.apply(null,arguments)))}function P(n,e){return A(On(e),n)}function W(n,e){return A(An(e),n)}function z(n){return P(J&&n.unicode?Bn:/[^]/,n)}function Z(n){return R("bound"),$([jn(n),An(n)],[In(n),On(n)])}function q(n){return R("noBound"),$([jn(n),On(n)],[In(n),An(n)])}var G=[];"dgimsuy".split("").forEach(function(n){try{new RegExp("",n),G.push(n)}catch(n){}});var J=-1!==G.indexOf("u"),H=!1;try{new RegExp("(?<=)"),H=!0}catch(n){}var K,L,Q={}.hasOwnProperty,V=[].map,X=[].slice,Y=RegExp,nn={value:void 0,writable:!1,enumerable:!1,configurable:!1},en={key:"__$$__compose_regexp__$$__"+t()+t()+t()+t(),set:function(n,e){var r=typeof n;if(null==n||"object"!==r&&"function"!==r)throw new TypeError("Bad WeakMap key");var t=n[en.key];if(!t)return nn.value={keys:[this],values:[e]},Object.defineProperty(n,en.key,nn),this;var u=t.keys.indexOf(this);return 0===u?(t.keys.push(this),t.values.push(e),this):(t.values[u]=e,this)},get:function(n){var e=n[en.key];if(e){var r=e.keys.indexOf(this);if(-1!==r)return e.values[r]}}},rn=/\\[^]|\(\?(?::|<?[=!])|[\[\](]/g,tn=/\\.|\.|\(\?:\^\|\(\?<=\[\\n\\r\\u2028\\u2029\]\)\)|\(\?:\$\|\(\?=\[\\n\\r\\u2028\\u2029\]\)\)|\[|\]|\^|\$/g,un=J&&new RegExp("^[_$\\p{ID_Start}][$\\p{ID_Continue}]*$","u"),on=/\\.|\{\d+,?\d*\}|(\[|\]|\{|\})/g,fn=/(?:$|(?=[\n\r\u2028\u2029]))/,cn=/(?:^|(?<=[\n\r\u2028\u2029]))/,ln=/\\[^1-9]|[\[\]]|\\(\d{1,2})|\$d:(\d+),n:(\d+)\^/g,sn=/^(?:\\.|\[(?=((?:\\.|.)*?))\1\])$/,an=/^\\p\{[A-Za-z][A-Za-z=]*\}$/,pn=/[.?*+^$[\]\\(){}|]/g,dn=/^(?:[+*?]|\{(?=((\d+)))\1,?(\d*)\})\??$/,gn=/(\\.)|[-()|\[\]]((?=\?<?[=!]))?/g,hn=/\\u(?:[0-9A-Fa-f]){4}|\\x(?:[0-9A-Fa-f]){2}|\\c[A-Za-z]|\\([^.?*+^$[\]\\(){}|\/DSWdswfnrtv-])|(\\[DSWdsw]-[^\]]|.-\\[DSWdsw])|\\.|\]/g,yn=/\\u(?:[0-9A-Fa-f]){4}|\\x(?:[0-9A-Fa-f]){2}|\\c[A-Za-z]|\\k<(.*?)>|\\([^.?*+^$[\]\\(){}|\/DSWdswBbfnrtv])|\\.|\.|\[\^\]|\[|(\((?:\?[^])?)|(\)(?:[+?*]|\{\d+,?\d*\})?)/g,xn={set:function(n,e,r){var t=i(n);return"object"==typeof e?Object.assign(t,e):t[e]=r},get:function(n,e){return i(n)[e]}},kn=[],wn=o("captureCount",function(n){var e,r=0;for(rn.lastIndex=0;e=rn.exec(n.source);)"("===e[0]&&(r+=1);return r}),vn=o("hasRefs",function(n){var e,r=!1,t=!1,u=!1;for(ln.lastIndex=0;e=ln.exec(n.source);)u||null==e[1]&&null==e[2]?"["===e[0]?u=!0:"]"===e[0]&&(u=!1):(r=!0,ln.lastIndex===n.source.length&&(t=!0));return xn.set(n.key,"hasFinalRef",t),r}),mn=o("isDisjunction",function(n){if(-1===n.source.indexOf("|"))return!1;var e,r=0,t=!1;for(gn.lastIndex=0;e=gn.exec(n.source);)if(null==e[1]&&(t||"("!==e[0]||r++,t||")"!==e[0]||r--,t||"["!==e[0]&&"[-"!==e[0]||(t=!0),t&&"]"===e[0]&&(t=!1),0===r&&!t&&"|"===e[0]))return!0;return!1}),bn=o("isOneGroupOrAssertion",function(n){var e=n.source;if("("!==e.charAt(0)||")"!==e.charAt(e.length-1))return!1;var r,t=0,u=!1;for(gn.lastIndex=0;r=gn.exec(e);)if(null==r[1]){if(u||"("!==r[0]||t++,!u&&")"===r[0]&&0===--t&&r.index!==e.length-1)return!1;u||"["!==r[0]&&"[-"!==r||(u=!0),u&&"]"===r[0]&&(u=!1)}else if(r.index===e.length-2)return!1;return!0}),En=new RegExp("^(?:(["+G.join("")+"])(?!.*\\1))*$"),Rn={"-1":"backward",1:"forward"},$n={current:1},Sn=/(?:)/,An=O("(?=",1),On=O("(?!",1),In=O("(?<=",-1,R,"lookBehind"),jn=O("(?<!",-1,R,"notBehind"),_n=I.call,Fn=j("?"),Cn={add:function(n){if("string"!=typeof n)throw TypeError("String expected as first argument, got "+typeof n);if(!En.test(n))throw new SyntaxError("Invalid flags: "+n);return 1===arguments.length?T.bind(U,n):T.apply(U,arguments)}},Bn=J&&new RegExp("[^]","u"),Mn={difference:P,intersection:W,complement:z,union:$};n.atomic=N,n.bound=Z,n.capture=B,n.charSet=Mn,n.either=$,n.flags=Cn,n.lookAhead=An,n.lookBehind=In,n.maybe=Fn,n.namedCapture=D,n.noBound=q,n.notAhead=On,n.notBehind=jn,n.ref=C,n.sequence=A,n.suffix=j,Object.defineProperty(n,"__esModule",{value:!0})}); | ||
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define("compose-regexp",["exports"],n):(e="undefined"!=typeof globalThis?globalThis:e||self,n(e.composeRegexp={}))}(this,function(e){"use strict";function n(e){return e}function r(e){return-1===e.indexOf("\\")?e:JSON.parse('"'+e.replace(/$|"|\\x([\dA-Fa-f]{2})|\\u\{([\dA-Fa-f]{1,6})\}/g,function(e,n,r){return""===e?'"':'"'===e?'\\"':String.fromCodePoint(parseInt(n||r,16))}))}function t(){return"_"+Math.floor(Math.random()*Math.pow(2,32)).toString(36)}function u(){return{captureCount:null,direction:0,hasRefs:null,hasFinalRef:null,isDisjunction:null,isOneGroupOrAssertion:null,source:null,unicode:null}}function i(e){if(e instanceof Y){var n=ne.get(e);return null==n&&ne.set(e,n=u()),n}return e||u()}function o(e,n){return Object.defineProperty(function(r){var t=ye.get(r.key,e);return null!=t?t:ye.set(r.key,e,n(r))},"name",{value:e})}function f(e){return ye.get(e,"source")||ye.set(e,"source",e.source)}function c(e){function n(e){e.lastIndex=u.lastIndex,u=e}var t,u=he;for(xe.length=0,he.lastIndex=0;t=u.exec(e);)if(u===he)if("["===t[0])n(ge);else{if("."===t[0]||"[^]"===t[0]||null!=t[1]&&!ue.test(r(t[1]))||null!=t[2])return!0;if(null!=t[3])xe.unshift(t[3]);else if(null!=t[4]){if(("(?="===xe[0]||"(?!"===xe[0])&&")"!==t[4])return!0;xe.shift()}}else if("]"===t[0])n(he);else if(null!=t[1]||null!=t[2])return!0;return!1}function l(e){var n=e.source;if(null==n||"^"===n||"$"===n||"\\b"===n||"\\B"===n)throw new SyntaxError("Nothing to repeat: /"+(n||"(?:)")+"/");if(1===n.length||le.test(n)||K.U&&se.test(n))return!1;if(!me(e))return!0;if(/^\(\?<?[!=]/.test(n))throw new SyntaxError("Nothing to repeat: /"+n+"/");return!1}function s(e){var n=!1;return e.replace(ie,function(e,r){if("]"===e){if(!n)return"\\]";n=!1}else if(!n&&null!=r){if("["!==r)return"\\"+r;n=!0}return e})}function a(e){var n=e;return function(e){if("regexp"===e.kind||"result"===e.kind){if(ke(e)){L.hasRefs=!0;var r=!1;e.source=e.source.replace(ce,function(e,t,u,i){if(!r){if(null!=t){var o=Number(t)+n;if(o>99)throw new RangeError("Too many back references");return"\\"+String(o)}if(null!=u)return"0"===u?"\\"+String(i):"$d:"+(Number(u)-1)+",n:"+i+"^"}return"["===e?r=!0:"]"===e&&(r=!1),e})}L.hasFinalRef=!!ye.get(e.key,"hasFinalRef"),n+=we(e)}return L.captureCount=n,e}}function p(e){var n=e.source;if(K.U&&("regexp"===e.kind&&!e.key.unicode||"result"===e.kind&&!ye.get(e.key,"unicode"))){if(c(n))throw new SyntaxError("Can't upgrade the RegExp to Unicode /"+n+"/"+("regexp"===e.kind?e.key.flags:""));e.source=s(n)}var r=!1;return"regexp"===e.kind&&(e.key.dotAll||e.key.multiline)&&(e.source=n.replace(te,function(n){return r?("]"===n&&(r=!1),n):("["===n&&(r=!0),e.key.dotAll&&"."===n?"[^]":e.key.multiline&&"^"===n&&H?fe.source:e.key.multiline&&"$"===n&&H?oe.source:n)})),e}function d(e){var n=e.key.flags;if(!be.test(n))throw new TypeError("Unkown flags: "+n.replace(new RegExp("["+G.join()+"]","g"),""));var r=!!e.key.unicode,t=e.key.ignoreCase,u=e.key.multiline;if(null!=K.I&&t!==K.I)throw new SyntaxError("Can't combine i and non-i regexps: "+e.key);if(!H&&null!=K.M&&u!==K.M)throw new SyntaxError("Can't combine m and non-m regexps: "+e.key);return K.I=t,K.M=u,K.U=K.U||r,e}function g(e){var n=ye.get(e.key,"direction");if(n*Re.current==-1)throw new TypeError("Illegal "+Ee[n]+" RegExp argument while building a "+Ee[Re.current]+" one: /"+e.source+"/");return 0!==n&&(L.hasRefs=!0),e}function h(e){return e?function(e,n){return e.source=null==e.source?n.source:n.source+"|"+e.source,e}:function(e,n){return e.source=null==e.source?n.source:n.source+("string"!==n.kind&&ke(n)&&ye.get(n.key,"hasFinalRef")&&/^\d/.test(e.source)?"(?:)":"")+e.source,e}}function y(){L={hasRefs:!1,hasFinalRef:!1,captureCount:0},K={U:!1,I:null,M:null}}function x(e){var n=L,r=K;try{return e()}finally{L=n,K=r}}function w(e,n){return n.condition&&!n.condition(e)||(e.source=n.open+(e.source||"")+")"),n.suffix&&(e.source+=n.suffix),e}function k(e){return w(e,{condition:function(e){return("regexp"===e.kind||"result"===e.kind)&&ve(e)},open:"(?:"})}function v(e){if("number"==typeof e||"string"==typeof e)return{key:null,kind:"string",source:String(e).replace(ae,"\\$&")};throw new TypeError("Can't compose type "+typeof e+" as RegExp")}function m(e,r,t,u){return t=t||e.length>1,V.call(e,function e(u){return(!r&&t?k:n)(Array.isArray(u)?m(u,!1,t,0):"function"==typeof u?e(x(u)):u instanceof Y?g(d({key:u,kind:"regexp",source:f(u)})):v(u))}).map(p).map(a(u)).reduceRight(h(r),{key:ye.set(null,Object.assign({direction:L.hasRefs?Re.current:0,isDisjunction:r&&(e.length>1||1===e.length&&e[0]instanceof Y&&ye.get(e[0],"isDisjunction")),unicode:K.U},L)),kind:"result",source:null})}function b(){return(K.I?"i":"")+(H?"":K.M?"m":"")+(K.U?"u":"")}function E(e,n){n=n||{};var r=Q.call(n,"flags")?n.flagsOp(b(),n.flags):b(),t=n.either,u=new RegExp(t?e.source||"[]":e.source||"",r);return ye.set(u,ye.set(e.key,{})),ye.set(u,"source",e.source),Q.call(n,"direction")&&ye.set(u,"direction",n.direction),u}function R(e){if(!H)throw new Error("no support for /(?<=...)/ which is required by "+e+"()")}function S(){return arguments.length?(y(),E(m(arguments,!0,!1,0),{either:!0})):$e}function $(){return m(arguments,!1,!1,0)}function A(){return arguments.length?(y(),E($.apply(null,arguments))):Se}function O(e,n,r,t,u){return function(){if(null!=t&&t(u),!arguments.length)return r;var i=Re.current;Re.current=n;try{y();return E(w($.apply(null,arguments),{open:e}),{direction:0})}finally{Re.current=i}}}function I(){if(y(),1===arguments.length)throw new SyntaxError("Suffix to an empty prefix");return E(w(_e.apply($,arguments),{condition:l,open:"(?:",suffix:this}))}function j(e){"string"!=typeof e&&(e="{"+String(e)+"}");var n=e.match(pe);if(!n||n[3]&&Number(n[3])<Number(n[2]))throw new SyntaxError("Invalid suffix '"+e+"'.");return 1===arguments.length?I.bind(e,e):I.apply(e,arguments)}function _(e){return!J||ue.test(r(e))}function F(e){var n=typeof e;return"string"===n&&_(e)||"number"===n&&0<e&&Math.round(e)===e}function C(e,n){if(!F(e))throw new SyntaxError("Bad ref: "+e);if(null!=n&&("number"!=typeof n||n<1||n!==n|0))throw new RangeError("Bad depth: "+n);if("string"==typeof e)return new RegExp("\\k<"+e+">");var r=new RegExp("$d:"+(n||"0")+",n:"+e+"^");return ye.set(r,{direction:Re.current,hasFinalRef:!0,hasRefs:!0}),r}function B(){return y(),E(w(m(arguments,!1,!1,1),{open:"("}))}function M(e){if("string"!=typeof e)throw new TypeError("String expected, got "+typeof e);return _(e),y(),E(w(m(X.call(arguments,1),!1,!1,1),{open:"(?<"+e+">"}))}function D(e){return 1===arguments.length?M.bind(null,e):M.apply(null,arguments)}function U(e,n){return e=e.split(""),n.split("").forEach(function(n){-1===e.indexOf(n)&&e.push(n)}),e.sort().join("")}function T(e){return y(),-1!==e.indexOf("u")&&(K.U=!0),E(_e.apply($,arguments),{flagsOp:this,flags:e})}function N(){return 1===Re.current?A(Ae(B.apply(null,arguments)),C(1)):A(C(1),Ie(B.apply(null,arguments)))}function P(e,n){return A(Oe(n),e)}function W(e,n){return A(Ae(n),e)}function z(e){return P(J&&e.unicode?Be:/[^]/,e)}function Z(e){return R("bound"),S([je(e),Ae(e)],[Ie(e),Oe(e)])}function q(e){return R("noBound"),S([je(e),Oe(e)],[Ie(e),Ae(e)])}var G=[];"dgimsuy".split("").forEach(function(e){try{new RegExp("",e),G.push(e)}catch(e){}});var J=-1!==G.indexOf("u"),H=!1;try{new RegExp("(?<=)"),H=!0}catch(e){}var K,L,Q={}.hasOwnProperty,V=[].map,X=[].slice,Y=RegExp,ee={value:void 0,writable:!1,enumerable:!1,configurable:!1},ne={key:"__$$__compose_regexp__$$__"+t()+t()+t()+t(),set:function(e,n){var r=typeof e;if(null==e||"object"!==r&&"function"!==r)throw new TypeError("Bad WeakMap key");var t=e[ne.key];if(!t)return ee.value={keys:[this],values:[n]},Object.defineProperty(e,ne.key,ee),this;var u=t.keys.indexOf(this);return 0===u?(t.keys.push(this),t.values.push(n),this):(t.values[u]=n,this)},get:function(e){var n=e[ne.key];if(n){var r=n.keys.indexOf(this);if(-1!==r)return n.values[r]}}},re=/\\[^]|\(\?(?::|<?[=!])|[\[\](]/g,te=/\\.|\.|\(\?:\^\|\(\?<=\[\\n\\r\\u2028\\u2029\]\)\)|\(\?:\$\|\(\?=\[\\n\\r\\u2028\\u2029\]\)\)|\[|\]|\^|\$/g,ue=J&&new RegExp("^[_$\\p{ID_Start}][$\\p{ID_Continue}]*$","u"),ie=/\\.|\{\d+,?\d*\}|(\[|\]|\{|\})/g,oe=/(?:$|(?=[\n\r\u2028\u2029]))/,fe=/(?:^|(?<=[\n\r\u2028\u2029]))/,ce=/\\[^1-9]|[\[\]]|\\(\d{1,2})|\$d:(\d+),n:(\d+)\^/g,le=/^(?:\\.|\[(?=((?:\\.|.)*?))\1\])$/,se=/^\\p\{[A-Za-z][A-Za-z=]*\}$/,ae=/[.?*+^$[\]\\(){}|]/g,pe=/^(?:[+*?]|\{(?=((\d+)))\1,?(\d*)\})\??$/,de=/(\\.)|[-()|\[\]]((?=\?<?[=!]))?/g,ge=/\\u(?:[0-9A-Fa-f]){4}|\\x(?:[0-9A-Fa-f]){2}|\\c[A-Za-z]|\\([^.?*+^$[\]\\(){}|\/DSWdswfnrtv-])|(\\[DSWdsw]-[^\]]|.-\\[DSWdsw])|\\.|\]/g,he=/\\u(?:[0-9A-Fa-f]){4}|\\x(?:[0-9A-Fa-f]){2}|\\c[A-Za-z]|\\k<(.*?)>|\\([^.?*+^$[\]\\(){}|\/DSWdswBbfnrtv])|\\.|\.|\[\^\]|\[|(\((?:\?[^])?)|(\)(?:[+?*]|\{\d+,?\d*\})?)/g,ye={set:function(e,n,r){var t=i(e);return"object"==typeof n?Object.assign(t,n):t[n]=r},get:function(e,n){return i(e)[n]}},xe=[],we=o("captureCount",function(e){var n,r=0;for(re.lastIndex=0;n=re.exec(e.source);)"("===n[0]&&(r+=1);return r}),ke=o("hasRefs",function(e){var n,r=!1,t=!1,u=!1;for(ce.lastIndex=0;n=ce.exec(e.source);)u||null==n[1]&&null==n[2]?"["===n[0]?u=!0:"]"===n[0]&&(u=!1):(r=!0,ce.lastIndex===e.source.length&&(t=!0));return ye.set(e.key,"hasFinalRef",t),r}),ve=o("isDisjunction",function(e){if(-1===e.source.indexOf("|"))return!1;var n,r=0,t=!1;for(de.lastIndex=0;n=de.exec(e.source);)if(null==n[1]&&(t||"("!==n[0]||r++,t||")"!==n[0]||r--,t||"["!==n[0]&&"[-"!==n[0]||(t=!0),t&&"]"===n[0]&&(t=!1),0===r&&!t&&"|"===n[0]))return!0;return!1}),me=o("isOneGroupOrAssertion",function(e){var n=e.source;if("("!==n.charAt(0)||")"!==n.charAt(n.length-1))return!1;var r,t=0,u=!1;for(de.lastIndex=0;r=de.exec(n);)if(null==r[1]){if(u||"("!==r[0]||t++,!u&&")"===r[0]&&0===--t&&r.index!==n.length-1)return!1;u||"["!==r[0]&&"[-"!==r||(u=!0),u&&"]"===r[0]&&(u=!1)}else if(r.index===n.length-2)return!1;return!0}),be=new RegExp("^(?:(["+G.join("")+"])(?!.*\\1))*$"),Ee={"-1":"backward",1:"forward"},Re={current:1},Se=/(?:)/,$e=/[]/,Ae=O("(?=",1,Se),Oe=O("(?!",1,$e),Ie=O("(?<=",-1,Se,R,"lookBehind"),je=O("(?<!",-1,$e,R,"notBehind"),_e=I.call,Fe=j("?"),Ce={add:function(e){if("string"!=typeof e)throw TypeError("String expected as first argument, got "+typeof e);if(!be.test(e))throw new SyntaxError("Invalid flags: "+e);return 1===arguments.length?T.bind(U,e):T.apply(U,arguments)}},Be=J&&new RegExp("[^]","u"),Me={difference:P,intersection:W,complement:z,union:S};e.atomic=N,e.bound=Z,e.capture=B,e.charSet=Me,e.either=S,e.flags=Ce,e.lookAhead=Ae,e.lookBehind=Ie,e.maybe=Fe,e.namedCapture=D,e.noBound=q,e.notAhead=Oe,e.notBehind=je,e.ref=C,e.sequence=A,e.suffix=j,Object.defineProperty(e,"__esModule",{value:!0})}); |
{ | ||
"name": "compose-regexp", | ||
"version": "0.6.21", | ||
"version": "0.6.22", | ||
"description": "A set of functions to build and compose complex regular expressions", | ||
@@ -48,3 +48,3 @@ "type": "module", | ||
"devDependencies": { | ||
"compose-regexp": "0.6.20", | ||
"stable-version": "npm:compose-regexp@0.6.21", | ||
"gosub": "1.1.0", | ||
@@ -51,0 +51,0 @@ "ospec": "^4.1.1", |
@@ -103,3 +103,3 @@ #  | ||
`compose-regexp` is reasonably small (~3.8 KiB after compression), and doesn't have dependencies. You can use it as a plain dependency, or, for client-side apps, in a server-side script that generates the RegExps that you ship to the browsers. | ||
`compose-regexp` is reasonably small (~4 KiB after compression), and doesn't have dependencies. You can use it as a plain dependency, or, for client-side apps, in a server-side script that generates the RegExps that you ship to the browsers. | ||
@@ -672,2 +672,4 @@ ## Usage | ||
- The logic to detect empty patterns only works for rudimentary ones (enough to deal with what we produce AFAICT). TODO: improve this | ||
## License MIT | ||
@@ -674,0 +676,0 @@ |
@@ -1,2 +0,2 @@ | ||
import {atomic, capture, either, flags, lookAhead, maybe, sequence, suffix} from '../node_modules/compose-regexp/compose-regexp.js' | ||
import {atomic, capture, either, flags, lookAhead, maybe, sequence, suffix} from 'stable-version' | ||
@@ -3,0 +3,0 @@ // function compare(x, ref) { |
import fs from "fs" | ||
import {either, flags, lookAhead, lookBehind, namedCapture as tag, sequence, suffix} from '../compose-regexp.js' | ||
import {either, flags, lookAhead, lookBehind, namedCapture as tag, sequence, suffix} from 'stable-version' | ||
@@ -5,0 +5,0 @@ // My doc-toc replacement: |
@@ -20,2 +20,3 @@ import {slice, supportsLookBehind, supportsU, unescape} from './utils.js' | ||
var empty = /(?:)/ | ||
var never = /[]/ | ||
@@ -27,5 +28,5 @@ function throwIfNoLookBehind(name) { | ||
export function either() { | ||
if (!arguments.length) return empty | ||
if (!arguments.length) return never | ||
$$_resetRefCapsAndFlags() | ||
return finalize(assemble(arguments, true, false, 0)) | ||
return finalize(assemble(arguments, true, false, 0), {either: true}) | ||
} | ||
@@ -43,6 +44,6 @@ | ||
function makeAssertion (before, direction, gate, name) { | ||
function makeAssertion (before, direction, emptyFallback, gate, name) { | ||
return function () { | ||
if (gate != null) gate(name) | ||
if (!arguments.length) return empty | ||
if (!arguments.length) return emptyFallback | ||
var previousDir = $direction.current | ||
@@ -60,6 +61,6 @@ $direction.current = direction | ||
export var lookAhead = makeAssertion('(?=', 1) | ||
export var notAhead = makeAssertion('(?!', 1) | ||
export var lookBehind = makeAssertion('(?<=', -1, throwIfNoLookBehind, "lookBehind") | ||
export var notBehind = makeAssertion('(?<!', -1, throwIfNoLookBehind, "notBehind") | ||
export var lookAhead = makeAssertion('(?=', 1, empty) | ||
export var notAhead = makeAssertion('(?!', 1, never) | ||
export var lookBehind = makeAssertion('(?<=', -1, empty, throwIfNoLookBehind, "lookBehind") | ||
export var notBehind = makeAssertion('(?<!', -1, never, throwIfNoLookBehind, "notBehind") | ||
@@ -73,2 +74,3 @@ var call = _suffix.call | ||
// without allocating an array. The operator is passed as `this` which is ignored. | ||
if (arguments.length === 1) throw new SyntaxError("Suffix to an empty prefix") | ||
var res = call.apply(_sequence, arguments) | ||
@@ -75,0 +77,0 @@ return finalize(decorate(res, {condition: needsWrappingForQuantifier, open: '(?:', suffix: this})) |
@@ -512,3 +512,4 @@ | ||
var flags = hasOwn.call(options, 'flags') ? options.flagsOp(getFlags(), options.flags) : getFlags() | ||
var result = new RegExp((x.source || ''), flags) | ||
var either = options.either | ||
var result = new RegExp((either ? x.source || '[]': x.source || ''), flags) | ||
metadata.set(result, metadata.set(x.key, {})) | ||
@@ -515,0 +516,0 @@ metadata.set(result, 'source', x.source) |
@@ -23,4 +23,6 @@ import o from 'ospec' | ||
o('string and a lack of arguments are normalized', function(){ | ||
void [ | ||
either, sequence, | ||
sequence, either, | ||
lookAhead, notAhead, | ||
@@ -36,12 +38,25 @@ flags.add(''), capture | ||
// empty arg list | ||
if (f !== capture) | ||
o(f()) | ||
.satisfies(r(new RegExp(''))) | ||
}) | ||
o(sequence()).satisfies(r(new RegExp(''))) | ||
o(sequence([])).satisfies(r(new RegExp(''))) | ||
else | ||
o(f()) | ||
.satisfies(r(/()/)) | ||
o(flags.add('')()).satisfies(r(new RegExp(''))) | ||
o(flags.add('', [])).satisfies(r(new RegExp(''))) | ||
}) | ||
o(either()).satisfies(r(/[]/)) | ||
o(either([])).satisfies(r(/[]/)) | ||
o(lookAhead()).satisfies(m({ok:['']})) | ||
o(lookAhead([])).satisfies(m({ok:['']})) | ||
o(notAhead()).satisfies(m({ko:['']})) | ||
o(notAhead([])).satisfies(m({ko:['']})) | ||
o(lookBehind()).satisfies(m({ok:['']})) | ||
o(lookBehind([])).satisfies(m({ok:['']})) | ||
o(notBehind()).satisfies(m({ko:['']})) | ||
o(notBehind([])).satisfies(m({ko:['']})) | ||
o(()=>suffix('*')()).throws(SyntaxError) | ||
}) | ||
@@ -48,0 +63,0 @@ }) |
Sorry, the diff of this file is not supported yet
172255
2907
697