string-match-left-right 8.2.4 → 8.2.5

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/CHANGELOG.md CHANGED
@@ -23,7 +23,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
23
23
 
24
24
  ### BREAKING CHANGES
25
25
 
26
- - programs now are in ES Modules and won't work with Common JS require()
26
+ - programs now are in ES Modules and won't work with Common JS `require()`
27
27
 
28
28
  ## 7.1.0 (2021-05-24)
29
29
 
@@ -46,7 +46,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
46
46
  ### Features
47
47
 
48
48
  - algorithm improvements to avoid false positives in too early matches ([552df88](https://github.com/codsen/codsen/commit/552df885c6d97b5e1d8c5767071d0b993f214052))
49
- - opts.hungry ([68b1c0f](https://github.com/codsen/codsen/commit/68b1c0fae857573c2230a5baea1b149e1a87eeb5))
49
+ - `opts.hungry` ([68b1c0f](https://github.com/codsen/codsen/commit/68b1c0fae857573c2230a5baea1b149e1a87eeb5))
50
50
 
51
51
  ### BREAKING CHANGES
52
52
 
@@ -57,7 +57,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
57
57
 
58
58
  ### Fixed
59
59
 
60
- - add testStats to npmignore ([f3c84e9](https://github.com/codsen/codsen/commit/f3c84e95afc5514214312f913692d85b2e12eb29))
60
+ - add `testStats` to _npmignore_ ([f3c84e9](https://github.com/codsen/codsen/commit/f3c84e95afc5514214312f913692d85b2e12eb29))
61
61
 
62
62
  ## 6.0.0 (2021-01-23)
63
63
 
@@ -71,7 +71,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
71
71
 
72
72
  ## 5.0.0 (2020-11-28)
73
73
 
74
- Accidental version bump during migration to sourcehut. Sorry about that.
74
+ Accidental version bump during migration to SourceHut. Sorry about that.
75
75
 
76
76
  ## 4.0.1 (2020-03-24)
77
77
 
@@ -86,7 +86,7 @@ Accidental version bump during migration to sourcehut. Sorry about that.
86
86
  - `opts.maxMismatches` higher than one ([c0a416a](https://gitlab.com/codsen/codsen/commit/c0a416afd32aa39698703437aed36b81cb04abd6))
87
87
  - add insurance against the variable being not string ([e53f435](https://gitlab.com/codsen/codsen/commit/e53f435206b1b2daf1e7d9c45c8373933d09eca9))
88
88
  - fix `opts.matchRight` ([ba40509](https://gitlab.com/codsen/codsen/commit/ba40509c63463e2579efd9ebfdd21b97e6faa665))
89
- - fix maxMismatches ([be34351](https://gitlab.com/codsen/codsen/commit/be34351d02b683b191af669a33e896c04f49aacf))
89
+ - fix `maxMismatches` ([be34351](https://gitlab.com/codsen/codsen/commit/be34351d02b683b191af669a33e896c04f49aacf))
90
90
  - fix the excessive skipping ([e97899d](https://gitlab.com/codsen/codsen/commit/e97899d92ff5794e817ff2b24ece83e1b4d3b327))
91
91
  - insurance against undefined value ([a0d5193](https://gitlab.com/codsen/codsen/commit/a0d519349b1b53852b1e6ce1948c24eb1f855667))
92
92
 
@@ -95,14 +95,14 @@ Accidental version bump during migration to sourcehut. Sorry about that.
95
95
  - `opts.maxMismatches` ([5288fe9](https://gitlab.com/codsen/codsen/commit/5288fe9667a34a3f447c3c13a63629bc9132b4ff))
96
96
  - case when character is omitted from the source and maxMismatches allows that ([1b47eba](https://gitlab.com/codsen/codsen/commit/1b47eba3683b77511c45d02b4f2553db729ff401))
97
97
  - merge marchForward and marchBackward into one, simplify the API ([e873ee6](https://gitlab.com/codsen/codsen/commit/e873ee652da54e352c52419042e0327b3a49cdd5))
98
- - opts.lastMustMatch ([12ad597](https://gitlab.com/codsen/codsen/commit/12ad597c9b84d34208be620f1a8ef605b62beceb))
99
- - opts.skipWhitespace ([6d9c847](https://gitlab.com/codsen/codsen/commit/6d9c8479f090b22bee4d70230d2d069f198e7e81))
98
+ - `opts.lastMustMatch` ([12ad597](https://gitlab.com/codsen/codsen/commit/12ad597c9b84d34208be620f1a8ef605b62beceb))
99
+ - `opts.skipWhitespace` ([6d9c847](https://gitlab.com/codsen/codsen/commit/6d9c8479f090b22bee4d70230d2d069f198e7e81))
100
100
  - rebase to make twice as fast ([4530b9f](https://gitlab.com/codsen/codsen/commit/4530b9f98357654f1a35552b80810ce158dce3bd))
101
- - remove opts.skipInnerWhitespace ([541c1c5](https://gitlab.com/codsen/codsen/commit/541c1c5b47e1667e77328ba586e1e5cc725fcad9))
101
+ - remove `opts.skipInnerWhitespace` ([541c1c5](https://gitlab.com/codsen/codsen/commit/541c1c5b47e1667e77328ba586e1e5cc725fcad9))
102
102
 
103
103
  ### BREAKING CHANGES
104
104
 
105
- - no more opts.relaxedApi - it's relaxed as much as possible by default, no
105
+ - no more `opts.relaxedApi` - it's relaxed as much as possible by default, no
106
106
  emoji-related code
107
107
 
108
108
  ## CHANGES
@@ -135,11 +135,9 @@ Accidental version bump during migration to sourcehut. Sorry about that.
135
135
 
136
136
  ## 3.4.0 (2018-06-11)
137
137
 
138
- GitHub sold us out. In the meantime, we:
139
-
140
- - Migrated to BitBucket (to host repo + perform CI) and Codacy (for code quality audit)
141
- - Dropped BitHound (RIP) and Travis
142
- - Removed `package-lock`
138
+ - migrated to BitBucket (to host repo + perform CI) and Codacy (for code quality audit)
139
+ - dropped BitHound (RIP) and Travis
140
+ - removed `package-lock`
143
141
 
144
142
  ## 3.3.0 (2018-05-16)
145
143
 
@@ -168,9 +166,9 @@ GitHub sold us out. In the meantime, we:
168
166
  - `opts.trimCharsBeforeMatching` must be a string of single character or an array of single characters. Previously merged string of characters was accepted but now it's not accepted.
169
167
  - Callback `cb` now returns three arguments:
170
168
 
171
- 1. `char` - the character just outside of the matched substring (as previously)
172
- 2. `theRemainderOfTheString` - whole string outside of the matched substring (as previously)
173
- 3. `index` - NEW - the index of the `char`.
169
+ 1. `char` - the character just outside of the matched substring (as previously)
170
+ 2. `theRemainderOfTheString` - whole string outside of the matched substring (as previously)
171
+ 3. `index` - NEW - the index of the `char`.
174
172
 
175
173
  Index is handy in cases when you set trimming and it's not clear where exactly is the `char` located in the string. Also, from here you can easily calculate the index of the match - just substract its length from `index`.
176
174
 
@@ -195,9 +193,9 @@ If you relied on the result being explicitly Boolean, `true` or `false`, prepare
195
193
  ### Features
196
194
 
197
195
  - Stringifying of `opts.trimCharsBeforeMatching` now occurs only if element is not string.
198
- - Callbacks, [opts.cbLeft and opts.cbRight](https://www.npmjs.com/package/string-match-left-right#optscbleft-and-optscbright), get second argument - whole substring of what's on that side. First argument it received is first character, second is whole substring (including first character).
196
+ - Callbacks, [`opts.cbLeft` and `opts.cbRight`](https://www.npmjs.com/package/string-match-left-right#optscbleft-and-optscbright), get second argument - whole substring of what's on that side. First argument it received is first character, second is whole substring (including first character).
199
197
 
200
- I needed this when I was coding [email-remove-unused-css](https://github.com/codsen/email-remove-unused-css) and I was traversing the string. I wanted to check, do any of given _heads_ are equal to what's on the right of the current character being traversed. For example, if there are Nunjucks variables in HTML, they would start with `{{` and end with `}}`. I wanted `email-remove-unused-css` to ignore everything between such `heads` and `tails` (which can be customised to anything, to support any templating/programming languages).
198
+ I needed this when I was coding [`email-remove-unused-css`](https://github.com/codsen/email-remove-unused-css) and I was traversing the string. I wanted to check, do any of given _heads_ are equal to what's on the right of the current character being traversed. For example, if there are Nunjucks variables in HTML, they would start with `{{` and end with `}}`. I wanted `email-remove-unused-css` to ignore everything between such `heads` and `tails` (which can be customised to anything, to support any templating/programming languages).
201
199
 
202
200
  ## 1.3.0 (2017-11-23)
203
201
 
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * @name string-match-left-right
3
3
  * @fileoverview Match substrings on the left or right of a given index, ignoring whitespace
4
- * @version 8.2.4
4
+ * @version 8.2.5
5
5
  * @author Roy Revelt, Codsen Ltd
6
6
  * @license MIT
7
7
  * {@link https://codsen.com/os/string-match-left-right/}
8
8
  */
9
9
 
10
- import{arrayiffy as N}from"arrayiffy-if-string";var O="8.2.4";var x=O;function w(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function p(t){return typeof t=="string"}var R={cb:void 0,i:!1,trimBeforeMatching:!1,trimCharsBeforeMatching:[],maxMismatches:0,firstMustMatch:!1,lastMustMatch:!1,hungry:!1},k=t=>t+1;function A(t,s,n,a,u=!1,o=k){let i=typeof n=="function"?n():n;if(+s<0&&u&&i==="EOL")return i;let r={...R,...a};if(s>=t.length&&!u)return!1;let c=u?1:n.length,E=0,h=!1,l=!1,m=!1,b=r.maxMismatches,e=s,g=!1,f=!1,$=!1;function d(){return E===1&&b<r.maxMismatches-1}for(;t[e];){let T=o(e);if(r.trimBeforeMatching&&t[e].trim()===""){if(!t[T]&&u&&n==="EOL")return!0;e=o(e);continue}if(r&&!r.i&&r.trimCharsBeforeMatching&&r.trimCharsBeforeMatching.includes(t[e])||r?.i&&r.trimCharsBeforeMatching&&r.trimCharsBeforeMatching.map(D=>D.toLowerCase()).includes(t[e].toLowerCase())){if(u&&n==="EOL"&&!t[T])return!0;e=o(e);continue}let M=T>e?n[n.length-c]:n[c-1];if(!r.i&&t[e]===M||r.i&&t[e].toLowerCase()===M.toLowerCase()){if(g||(g=!0),m||(m=!0),c===n.length){if(f=!0,b!==r.maxMismatches)return!1}else c===1&&($=!0);if(c-=1,E++,d())return!1;if(!c)return E!==n.length||b===r.maxMismatches||!h?e:!1}else if(!h&&!E&&(h=!0),r.maxMismatches&&b&&e){b-=1;for(let D=0;D<=b;D++){let C=T>e?n[n.length-c+1+D]:n[c-2-D],y=t[o(e)];if(C&&(!r.i&&t[e]===C||r.i&&t[e].toLowerCase()===C.toLowerCase())&&(!r.firstMustMatch||c!==n.length)){if(E++,d())return!1;c-=2,g=!0;break}else if(y&&C&&(!r.i&&y===C||r.i&&y.toLowerCase()===C.toLowerCase())&&(!r.firstMustMatch||c!==n.length)){if(!E&&!r.hungry)return!1;c-=1,g=!0;break}else if(C===void 0&&b>=0&&g&&(!r.firstMustMatch||f)&&(!r.lastMustMatch||$))return e}g||(l=e)}else return e===0&&c===1&&!r.lastMustMatch&&m?0:!1;if(l!==!1&&l!==e&&(l=!1),c<1)return e;e=o(e)}if(c>0)return u&&i==="EOL"?!0:r&&r.maxMismatches>=c&&m?l||0:!1}function V(t,s,n,a,u){if(w(u)&&Object.prototype.hasOwnProperty.call(u,"trimBeforeMatching")&&u&&typeof u.trimBeforeMatching!="boolean")throw new Error(`string-match-left-right/${t}(): [THROW_ID_09] opts.trimBeforeMatching should be boolean!${Array.isArray(u.trimBeforeMatching)?" Did you mean to use opts.trimCharsBeforeMatching?":""}`);let o={...R,...u};if(typeof o.trimCharsBeforeMatching=="string"&&(o.trimCharsBeforeMatching=N(o.trimCharsBeforeMatching)),o.trimCharsBeforeMatching=o.trimCharsBeforeMatching.map(h=>p(h)?h:String(h)),!p(s)||!s.length)return!1;if(!Number.isInteger(n)||n<0)throw new Error(`string-match-left-right/${t}(): [THROW_ID_03] the second argument should be a natural number. Currently it's of a type: ${typeof n}, equal to:
10
+ import{arrayiffy as N}from"arrayiffy-if-string";var O="8.2.5";var x=O;function w(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function p(t){return typeof t=="string"}var R={cb:void 0,i:!1,trimBeforeMatching:!1,trimCharsBeforeMatching:[],maxMismatches:0,firstMustMatch:!1,lastMustMatch:!1,hungry:!1},k=t=>t+1;function A(t,s,n,a,u=!1,o=k){let i=typeof n=="function"?n():n;if(+s<0&&u&&i==="EOL")return i;let r={...R,...a};if(s>=t.length&&!u)return!1;let c=u?1:n.length,E=0,h=!1,l=!1,m=!1,b=r.maxMismatches,e=s,g=!1,f=!1,$=!1;function d(){return E===1&&b<r.maxMismatches-1}for(;t[e];){let T=o(e);if(r.trimBeforeMatching&&t[e].trim()===""){if(!t[T]&&u&&n==="EOL")return!0;e=o(e);continue}if(r&&!r.i&&r.trimCharsBeforeMatching&&r.trimCharsBeforeMatching.includes(t[e])||r?.i&&r.trimCharsBeforeMatching&&r.trimCharsBeforeMatching.map(D=>D.toLowerCase()).includes(t[e].toLowerCase())){if(u&&n==="EOL"&&!t[T])return!0;e=o(e);continue}let M=T>e?n[n.length-c]:n[c-1];if(!r.i&&t[e]===M||r.i&&t[e].toLowerCase()===M.toLowerCase()){if(g||(g=!0),m||(m=!0),c===n.length){if(f=!0,b!==r.maxMismatches)return!1}else c===1&&($=!0);if(c-=1,E++,d())return!1;if(!c)return E!==n.length||b===r.maxMismatches||!h?e:!1}else if(!h&&!E&&(h=!0),r.maxMismatches&&b&&e){b-=1;for(let D=0;D<=b;D++){let C=T>e?n[n.length-c+1+D]:n[c-2-D],y=t[o(e)];if(C&&(!r.i&&t[e]===C||r.i&&t[e].toLowerCase()===C.toLowerCase())&&(!r.firstMustMatch||c!==n.length)){if(E++,d())return!1;c-=2,g=!0;break}else if(y&&C&&(!r.i&&y===C||r.i&&y.toLowerCase()===C.toLowerCase())&&(!r.firstMustMatch||c!==n.length)){if(!E&&!r.hungry)return!1;c-=1,g=!0;break}else if(C===void 0&&b>=0&&g&&(!r.firstMustMatch||f)&&(!r.lastMustMatch||$))return e}g||(l=e)}else return e===0&&c===1&&!r.lastMustMatch&&m?0:!1;if(l!==!1&&l!==e&&(l=!1),c<1)return e;e=o(e)}if(c>0)return u&&i==="EOL"?!0:r&&r.maxMismatches>=c&&m?l||0:!1}function V(t,s,n,a,u){if(w(u)&&Object.prototype.hasOwnProperty.call(u,"trimBeforeMatching")&&u&&typeof u.trimBeforeMatching!="boolean")throw new Error(`string-match-left-right/${t}(): [THROW_ID_09] opts.trimBeforeMatching should be boolean!${Array.isArray(u.trimBeforeMatching)?" Did you mean to use opts.trimCharsBeforeMatching?":""}`);let o={...R,...u};if(typeof o.trimCharsBeforeMatching=="string"&&(o.trimCharsBeforeMatching=N(o.trimCharsBeforeMatching)),o.trimCharsBeforeMatching=o.trimCharsBeforeMatching.map(h=>p(h)?h:String(h)),!p(s)||!s.length)return!1;if(!Number.isInteger(n)||n<0)throw new Error(`string-match-left-right/${t}(): [THROW_ID_03] the second argument should be a natural number. Currently it's of a type: ${typeof n}, equal to:
11
11
  ${JSON.stringify(n,null,4)}`);let i,r;if(p(a))i=[a];else if(Array.isArray(a))i=a;else if(!a)i=a;else if(typeof a=="function")i=[],i.push(a);else throw new Error(`string-match-left-right/${t}(): [THROW_ID_05] the third argument, whatToMatch, is neither string nor array of strings! It's ${typeof a}, equal to:
12
12
  ${JSON.stringify(a,null,4)}`);if(u&&!w(u))throw new Error(`string-match-left-right/${t}(): [THROW_ID_06] the fourth argument, options object, should be a plain object. Currently it's of a type "${typeof u}", and equal to:
13
13
  ${JSON.stringify(u,null,4)}`);let c=0,E="";if(o?.trimCharsBeforeMatching&&o.trimCharsBeforeMatching.some((h,l)=>h.length>1?(c=l,E=h,!0):!1))throw new Error(`string-match-left-right/${t}(): [THROW_ID_07] the fourth argument, options object contains trimCharsBeforeMatching. It was meant to list the single characters but one of the entries at index ${c} is longer than 1 character, ${E.length} (equals to ${E}). Please split it into separate characters and put into array as separate elements.`);if(!i||!Array.isArray(i)||Array.isArray(i)&&!i.length||Array.isArray(i)&&i.length===1&&p(i[0])&&!i[0].trim()){if(typeof o.cb=="function"){let l,m=n;if((t==="matchLeftIncl"||t==="matchRight")&&(m+=1),t[5]==="L")for(let f=m;f--;){let $=s[f];if((!o.trimBeforeMatching||o.trimBeforeMatching&&$!==void 0&&$.trim())&&(!o.trimCharsBeforeMatching?.length||$!==void 0&&!o.trimCharsBeforeMatching.includes($))){l=f;break}}else if(t.startsWith("matchRight"))for(let f=m;f<s.length;f++){let $=s[f];if((!o.trimBeforeMatching||o.trimBeforeMatching&&$.trim())&&(!o.trimCharsBeforeMatching?.length||!o.trimCharsBeforeMatching.includes($))){l=f;break}}if(l===void 0)return!1;let b=s[l],e=l+1,g="";return e&&e>0&&(g=s.slice(0,e)),t[5]==="L"||l&&l>0&&(g=s.slice(l)),o.cb(b,g,l)}let h="";throw u||(h=" More so, the whole options object, the fourth input argument, is missing!"),new Error(`string-match-left-right/${t}(): [THROW_ID_08] the third argument, "whatToMatch", was given as an empty string. This means, you intend to match purely by a callback. The callback was not set though, the opts key "cb" is not set!${h}`)}for(let h=0,l=i.length;h<l;h++){r=typeof i[h]=="function";let m=i[h],b,e,g="",f=n;t==="matchRight"?f+=1:t==="matchLeft"&&(f-=1);let $=A(s,f,m,o,r,d=>t[5]==="L"?d-1:d+1);if($&&r&&typeof m=="function"&&m()==="EOL")return m()&&(o.cb?o.cb(b,g,e):!0)?m():!1;if(Number.isInteger($)&&(e=t.startsWith("matchLeft")?$-1:$+1,t[5]==="L"?g=s.slice(0,$):g=s.slice(e)),e<0&&(e=void 0),s[e]&&(b=s[e]),Number.isInteger($)&&(o.cb?o.cb(b,g,e):!0))return m}return!1}function J(t,s,n,a){return V("matchLeftIncl",t,s,n,a)}function F(t,s,n,a){return V("matchLeft",t,s,n,a)}function H(t,s,n,a){return V("matchRightIncl",t,s,n,a)}function j(t,s,n,a){return V("matchRight",t,s,n,a)}export{k as defaultGetNextIdx,R as defaults,F as matchLeft,J as matchLeftIncl,j as matchRight,H as matchRightIncl,x as version};
@@ -1,20 +1,20 @@
1
1
  /**
2
2
  * @name string-match-left-right
3
3
  * @fileoverview Match substrings on the left or right of a given index, ignoring whitespace
4
- * @version 8.2.4
4
+ * @version 8.2.5
5
5
  * @author Roy Revelt, Codsen Ltd
6
6
  * @license MIT
7
7
  * {@link https://codsen.com/os/string-match-left-right/}
8
8
  */
9
9
 
10
- "use strict";var stringMatchLeftRight=(()=>{var y=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames,N=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var k=(t,n,e)=>n in t?y(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e,p=(t,n)=>{for(var e in n||(n={}))A.call(n,e)&&k(t,e,n[e]);if(N)for(var e of N(n))H.call(n,e)&&k(t,e,n[e]);return t};var j=(t,n)=>{for(var e in n)y(t,e,{get:n[e],enumerable:!0})},P=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let a of F(n))!A.call(t,a)&&a!==e&&y(t,a,{get:()=>n[a],enumerable:!(i=J(n,a))||i.enumerable});return t};var U=t=>P(y({},"__esModule",{value:!0}),t);var X={};j(X,{defaultGetNextIdx:()=>x,defaults:()=>R,matchLeft:()=>Y,matchLeftIncl:()=>q,matchRight:()=>K,matchRightIncl:()=>G,version:()=>W});function L(t){return typeof t!="string"?t:t.length?[t]:[]}var B="8.2.4";var W=B;function I(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function M(t){return typeof t=="string"}var R={cb:void 0,i:!1,trimBeforeMatching:!1,trimCharsBeforeMatching:[],maxMismatches:0,firstMustMatch:!1,lastMustMatch:!1,hungry:!1},x=t=>t+1;function _(t,n,e,i,a=!1,s=x){let c=typeof e=="function"?e():e;if(+n<0&&a&&c==="EOL")return c;let o=p(p({},R),i);if(n>=t.length&&!a)return!1;let u=a?1:e.length,E=0,T=!1,C=!1,h=!1,l=o.maxMismatches,r=n,f=!1,$=!1,b=!1;function g(){return E===1&&l<o.maxMismatches-1}for(;t[r];){let D=s(r);if(o.trimBeforeMatching&&t[r].trim()===""){if(!t[D]&&a&&e==="EOL")return!0;r=s(r);continue}if(o&&!o.i&&o.trimCharsBeforeMatching&&o.trimCharsBeforeMatching.includes(t[r])||(o==null?void 0:o.i)&&o.trimCharsBeforeMatching&&o.trimCharsBeforeMatching.map(V=>V.toLowerCase()).includes(t[r].toLowerCase())){if(a&&e==="EOL"&&!t[D])return!0;r=s(r);continue}let S=D>r?e[e.length-u]:e[u-1];if(!o.i&&t[r]===S||o.i&&t[r].toLowerCase()===S.toLowerCase()){if(f||(f=!0),h||(h=!0),u===e.length){if($=!0,l!==o.maxMismatches)return!1}else u===1&&(b=!0);if(u-=1,E++,g())return!1;if(!u)return E!==e.length||l===o.maxMismatches||!T?r:!1}else if(!T&&!E&&(T=!0),o.maxMismatches&&l&&r){l-=1;for(let V=0;V<=l;V++){let d=D>r?e[e.length-u+1+V]:e[u-2-V],w=t[s(r)];if(d&&(!o.i&&t[r]===d||o.i&&t[r].toLowerCase()===d.toLowerCase())&&(!o.firstMustMatch||u!==e.length)){if(E++,g())return!1;u-=2,f=!0;break}else if(w&&d&&(!o.i&&w===d||o.i&&w.toLowerCase()===d.toLowerCase())&&(!o.firstMustMatch||u!==e.length)){if(!E&&!o.hungry)return!1;u-=1,f=!0;break}else if(d===void 0&&l>=0&&f&&(!o.firstMustMatch||$)&&(!o.lastMustMatch||b))return r}f||(C=r)}else return r===0&&u===1&&!o.lastMustMatch&&h?0:!1;if(C!==!1&&C!==r&&(C=!1),u<1)return r;r=s(r)}if(u>0)return a&&c==="EOL"?!0:o&&o.maxMismatches>=u&&h?C||0:!1}function O(t,n,e,i,a){var T,C;if(I(a)&&Object.prototype.hasOwnProperty.call(a,"trimBeforeMatching")&&a&&typeof a.trimBeforeMatching!="boolean")throw new Error(`string-match-left-right/${t}(): [THROW_ID_09] opts.trimBeforeMatching should be boolean!${Array.isArray(a.trimBeforeMatching)?" Did you mean to use opts.trimCharsBeforeMatching?":""}`);let s=p(p({},R),a);if(typeof s.trimCharsBeforeMatching=="string"&&(s.trimCharsBeforeMatching=L(s.trimCharsBeforeMatching)),s.trimCharsBeforeMatching=s.trimCharsBeforeMatching.map(h=>M(h)?h:String(h)),!M(n)||!n.length)return!1;if(!Number.isInteger(e)||e<0)throw new Error(`string-match-left-right/${t}(): [THROW_ID_03] the second argument should be a natural number. Currently it's of a type: ${typeof e}, equal to:
10
+ "use strict";var stringMatchLeftRight=(()=>{var y=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames,N=Object.getOwnPropertySymbols;var A=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var k=(t,n,e)=>n in t?y(t,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[n]=e,p=(t,n)=>{for(var e in n||(n={}))A.call(n,e)&&k(t,e,n[e]);if(N)for(var e of N(n))H.call(n,e)&&k(t,e,n[e]);return t};var j=(t,n)=>{for(var e in n)y(t,e,{get:n[e],enumerable:!0})},P=(t,n,e,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let a of F(n))!A.call(t,a)&&a!==e&&y(t,a,{get:()=>n[a],enumerable:!(i=J(n,a))||i.enumerable});return t};var U=t=>P(y({},"__esModule",{value:!0}),t);var X={};j(X,{defaultGetNextIdx:()=>x,defaults:()=>R,matchLeft:()=>Y,matchLeftIncl:()=>q,matchRight:()=>K,matchRightIncl:()=>G,version:()=>W});function L(t){return typeof t!="string"?t:t.length?[t]:[]}var B="8.2.5";var W=B;function I(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function M(t){return typeof t=="string"}var R={cb:void 0,i:!1,trimBeforeMatching:!1,trimCharsBeforeMatching:[],maxMismatches:0,firstMustMatch:!1,lastMustMatch:!1,hungry:!1},x=t=>t+1;function _(t,n,e,i,a=!1,s=x){let c=typeof e=="function"?e():e;if(+n<0&&a&&c==="EOL")return c;let o=p(p({},R),i);if(n>=t.length&&!a)return!1;let u=a?1:e.length,E=0,T=!1,C=!1,h=!1,l=o.maxMismatches,r=n,f=!1,$=!1,b=!1;function g(){return E===1&&l<o.maxMismatches-1}for(;t[r];){let D=s(r);if(o.trimBeforeMatching&&t[r].trim()===""){if(!t[D]&&a&&e==="EOL")return!0;r=s(r);continue}if(o&&!o.i&&o.trimCharsBeforeMatching&&o.trimCharsBeforeMatching.includes(t[r])||(o==null?void 0:o.i)&&o.trimCharsBeforeMatching&&o.trimCharsBeforeMatching.map(V=>V.toLowerCase()).includes(t[r].toLowerCase())){if(a&&e==="EOL"&&!t[D])return!0;r=s(r);continue}let S=D>r?e[e.length-u]:e[u-1];if(!o.i&&t[r]===S||o.i&&t[r].toLowerCase()===S.toLowerCase()){if(f||(f=!0),h||(h=!0),u===e.length){if($=!0,l!==o.maxMismatches)return!1}else u===1&&(b=!0);if(u-=1,E++,g())return!1;if(!u)return E!==e.length||l===o.maxMismatches||!T?r:!1}else if(!T&&!E&&(T=!0),o.maxMismatches&&l&&r){l-=1;for(let V=0;V<=l;V++){let d=D>r?e[e.length-u+1+V]:e[u-2-V],w=t[s(r)];if(d&&(!o.i&&t[r]===d||o.i&&t[r].toLowerCase()===d.toLowerCase())&&(!o.firstMustMatch||u!==e.length)){if(E++,g())return!1;u-=2,f=!0;break}else if(w&&d&&(!o.i&&w===d||o.i&&w.toLowerCase()===d.toLowerCase())&&(!o.firstMustMatch||u!==e.length)){if(!E&&!o.hungry)return!1;u-=1,f=!0;break}else if(d===void 0&&l>=0&&f&&(!o.firstMustMatch||$)&&(!o.lastMustMatch||b))return r}f||(C=r)}else return r===0&&u===1&&!o.lastMustMatch&&h?0:!1;if(C!==!1&&C!==r&&(C=!1),u<1)return r;r=s(r)}if(u>0)return a&&c==="EOL"?!0:o&&o.maxMismatches>=u&&h?C||0:!1}function O(t,n,e,i,a){var T,C;if(I(a)&&Object.prototype.hasOwnProperty.call(a,"trimBeforeMatching")&&a&&typeof a.trimBeforeMatching!="boolean")throw new Error(`string-match-left-right/${t}(): [THROW_ID_09] opts.trimBeforeMatching should be boolean!${Array.isArray(a.trimBeforeMatching)?" Did you mean to use opts.trimCharsBeforeMatching?":""}`);let s=p(p({},R),a);if(typeof s.trimCharsBeforeMatching=="string"&&(s.trimCharsBeforeMatching=L(s.trimCharsBeforeMatching)),s.trimCharsBeforeMatching=s.trimCharsBeforeMatching.map(h=>M(h)?h:String(h)),!M(n)||!n.length)return!1;if(!Number.isInteger(e)||e<0)throw new Error(`string-match-left-right/${t}(): [THROW_ID_03] the second argument should be a natural number. Currently it's of a type: ${typeof e}, equal to:
11
11
  ${JSON.stringify(e,null,4)}`);let c,o;if(M(i))c=[i];else if(Array.isArray(i))c=i;else if(!i)c=i;else if(typeof i=="function")c=[],c.push(i);else throw new Error(`string-match-left-right/${t}(): [THROW_ID_05] the third argument, whatToMatch, is neither string nor array of strings! It's ${typeof i}, equal to:
12
12
  ${JSON.stringify(i,null,4)}`);if(a&&!I(a))throw new Error(`string-match-left-right/${t}(): [THROW_ID_06] the fourth argument, options object, should be a plain object. Currently it's of a type "${typeof a}", and equal to:
13
13
  ${JSON.stringify(a,null,4)}`);let u=0,E="";if((s==null?void 0:s.trimCharsBeforeMatching)&&s.trimCharsBeforeMatching.some((h,l)=>h.length>1?(u=l,E=h,!0):!1))throw new Error(`string-match-left-right/${t}(): [THROW_ID_07] the fourth argument, options object contains trimCharsBeforeMatching. It was meant to list the single characters but one of the entries at index ${u} is longer than 1 character, ${E.length} (equals to ${E}). Please split it into separate characters and put into array as separate elements.`);if(!c||!Array.isArray(c)||Array.isArray(c)&&!c.length||Array.isArray(c)&&c.length===1&&M(c[0])&&!c[0].trim()){if(typeof s.cb=="function"){let l,r=e;if((t==="matchLeftIncl"||t==="matchRight")&&(r+=1),t[5]==="L")for(let g=r;g--;){let m=n[g];if((!s.trimBeforeMatching||s.trimBeforeMatching&&m!==void 0&&m.trim())&&(!((T=s.trimCharsBeforeMatching)!=null&&T.length)||m!==void 0&&!s.trimCharsBeforeMatching.includes(m))){l=g;break}}else if(t.startsWith("matchRight"))for(let g=r;g<n.length;g++){let m=n[g];if((!s.trimBeforeMatching||s.trimBeforeMatching&&m.trim())&&(!((C=s.trimCharsBeforeMatching)!=null&&C.length)||!s.trimCharsBeforeMatching.includes(m))){l=g;break}}if(l===void 0)return!1;let f=n[l],$=l+1,b="";return $&&$>0&&(b=n.slice(0,$)),t[5]==="L"||l&&l>0&&(b=n.slice(l)),s.cb(f,b,l)}let h="";throw a||(h=" More so, the whole options object, the fourth input argument, is missing!"),new Error(`string-match-left-right/${t}(): [THROW_ID_08] the third argument, "whatToMatch", was given as an empty string. This means, you intend to match purely by a callback. The callback was not set though, the opts key "cb" is not set!${h}`)}for(let h=0,l=c.length;h<l;h++){o=typeof c[h]=="function";let r=c[h],f,$,b="",g=e;t==="matchRight"?g+=1:t==="matchLeft"&&(g-=1);let m=_(n,g,r,s,o,D=>t[5]==="L"?D-1:D+1);if(m&&o&&typeof r=="function"&&r()==="EOL")return r()&&(s.cb?s.cb(f,b,$):!0)?r():!1;if(Number.isInteger(m)&&($=t.startsWith("matchLeft")?m-1:m+1,t[5]==="L"?b=n.slice(0,m):b=n.slice($)),$<0&&($=void 0),n[$]&&(f=n[$]),Number.isInteger(m)&&(s.cb?s.cb(f,b,$):!0))return r}return!1}function q(t,n,e,i){return O("matchLeftIncl",t,n,e,i)}function Y(t,n,e,i){return O("matchLeft",t,n,e,i)}function G(t,n,e,i){return O("matchRightIncl",t,n,e,i)}function K(t,n,e,i){return O("matchRight",t,n,e,i)}return U(X);})();
14
14
  /**
15
15
  * @name arrayiffy-if-string
16
16
  * @fileoverview Put non-empty strings into arrays, turn empty-ones into empty arrays. Bypass everything else.
17
- * @version 4.1.3
17
+ * @version 4.1.4
18
18
  * @author Roy Revelt, Codsen Ltd
19
19
  * @license MIT
20
20
  * {@link https://codsen.com/os/arrayiffy-if-string/}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "string-match-left-right",
3
- "version": "8.2.4",
3
+ "version": "8.2.5",
4
4
  "description": "Match substrings on the left or right of a given index, ignoring whitespace",
5
5
  "keywords": [
6
6
  "left",
@@ -39,7 +39,7 @@
39
39
  "examples": "node '../../ops/scripts/run-examples.js'",
40
40
  "lect": "node '../../ops/lect/lect.js' && yarn run prettier 'README.md' '.all-contributorsrc' 'rollup.config.js' --write",
41
41
  "letspublish": "yarn publish || :",
42
- "lint": "eslint . --fix",
42
+ "lint": "eslint . --ext .js --ext .ts --fix",
43
43
  "perf": "node perf/check.js",
44
44
  "prepare": "echo 'ready'",
45
45
  "prettier": "prettier",
@@ -66,9 +66,9 @@
66
66
  }
67
67
  },
68
68
  "dependencies": {
69
- "arrayiffy-if-string": "^4.1.3",
69
+ "arrayiffy-if-string": "^4.1.4",
70
70
  "lodash.isplainobject": "^4.0.6",
71
- "string-character-is-astral-surrogate": "^2.1.3"
71
+ "string-character-is-astral-surrogate": "^2.1.4"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@types/lodash.isplainobject": "^4.0.7"
@@ -1,25 +0,0 @@
1
- // Quick Take
2
-
3
- import { strict as assert } from "assert";
4
-
5
- import {
6
- matchLeftIncl,
7
- matchRightIncl,
8
- matchLeft,
9
- matchRight,
10
- } from "../dist/string-match-left-right.esm.js";
11
-
12
- // 3rd character is "d" because indexes start from zero.
13
- // We're checking the string to the left of it, "bcd", inclusive of current character ("d").
14
- // This means, "bcd" has to end with existing character and the other chars to the left
15
- // must match exactly:
16
- assert.equal(matchLeftIncl("abcdefghi", 3, ["bcd"]), "bcd");
17
-
18
- // neither "ab" nor "zz" are to the left of 3rd index, "d":
19
- assert.equal(matchLeft("abcdefghi", 3, ["ab", `zz`]), false);
20
-
21
- // "def" is to the right of 3rd index (including it), "d":
22
- assert.equal(matchRightIncl("abcdefghi", 3, ["def", `zzz`]), "def");
23
-
24
- // One of values, "ef" is exactly to the right of 3rd index, "d":
25
- assert.equal(matchRight("abcdefghi", 3, ["ef", `zz`]), "ef");
package/examples/cb.js DELETED
@@ -1,26 +0,0 @@
1
- /* eslint-disable no-unused-vars */
2
- // The Callback Use
3
-
4
- import { strict as assert } from "assert";
5
-
6
- import {
7
- matchLeftIncl,
8
- matchRightIncl,
9
- matchLeft,
10
- matchRight,
11
- } from "../dist/string-match-left-right.esm.js";
12
-
13
- // imagine you looped the string and wanted to catch where does attribute "class" start
14
- // and end (not to mention to ensure that it's a real attribute, not something ending with this
15
- // string "class").
16
- // You catch "=", an index number 8.
17
- // This library can check, is "class" to the left of it and feed what's to the left of it
18
- // to your supplied callback function, which happens to be a checker "is it a space":
19
- function isSpace(char) {
20
- return typeof char === "string" && char.trim() === "";
21
- }
22
-
23
- assert.equal(
24
- matchLeft('<a class="something">', 8, "class", { cb: isSpace }),
25
- "class"
26
- );