string-match-left-right 8.2.4 → 8.2.6
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 +17 -19
- package/README.md +13 -16
- package/dist/string-match-left-right.esm.js +2 -2
- package/dist/string-match-left-right.umd.js +3 -3
- package/package.json +4 -4
- package/examples/_quickTake.js +0 -25
- package/examples/cb.js +0 -26
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
|
|
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
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
-
|
|
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.
|
|
172
|
-
2.
|
|
173
|
-
3.
|
|
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
|
|
package/README.md
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
<h1 align="center">string-match-left-right</h1>
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
<p align="center">Match substrings on the left or right of a given index, ignoring whitespace</p>
|
|
4
4
|
|
|
5
|
-
<
|
|
6
|
-
<a href="https://www.npmjs.com/package/string-match-left-right" rel="nofollow noreferrer noopener">
|
|
7
|
-
<img src="https://img.shields.io/badge/-npm-blue?style=flat-square" alt="page on npm">
|
|
8
|
-
</a>
|
|
5
|
+
<p align="center">
|
|
9
6
|
<a href="https://codsen.com/os/string-match-left-right" rel="nofollow noreferrer noopener">
|
|
10
7
|
<img src="https://img.shields.io/badge/-codsen-blue?style=flat-square" alt="page on codsen.com">
|
|
11
8
|
</a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/string-match-left-right" rel="nofollow noreferrer noopener">
|
|
10
|
+
<img src="https://img.shields.io/badge/-npm-blue?style=flat-square" alt="page on npm">
|
|
11
|
+
</a>
|
|
12
12
|
<a href="https://github.com/codsen/codsen/tree/main/packages/string-match-left-right" rel="nofollow noreferrer noopener">
|
|
13
13
|
<img src="https://img.shields.io/badge/-github-blue?style=flat-square" alt="page on github">
|
|
14
14
|
</a>
|
|
15
15
|
<a href="https://npmcharts.com/compare/string-match-left-right?interval=30" rel="nofollow noreferrer noopener" target="_blank">
|
|
16
16
|
<img src="https://img.shields.io/npm/dm/string-match-left-right.svg?style=flat-square" alt="Downloads per month">
|
|
17
17
|
</a>
|
|
18
|
-
<a href="https://
|
|
19
|
-
<img src="https://img.shields.io/badge/
|
|
20
|
-
</a>
|
|
21
|
-
<img src="https://img.shields.io/badge/licence-MIT-brightgreen.svg?style=flat-square" alt="MIT License">
|
|
22
|
-
<a href="https://liberamanifesto.com" rel="nofollow noreferrer noopener" target="_blank">
|
|
23
|
-
<img src="https://img.shields.io/badge/libera-manifesto-lightgrey.svg?style=flat-square" alt="libera manifesto">
|
|
18
|
+
<a href="https://codsen.com/os/string-match-left-right/changelog" rel="nofollow noreferrer noopener">
|
|
19
|
+
<img src="https://img.shields.io/badge/changelog-here-brightgreen?style=flat-square" alt="changelog">
|
|
24
20
|
</a>
|
|
25
|
-
|
|
21
|
+
<img src="https://img.shields.io/badge/licence-MIT-brightgreen.svg?style=flat-square" alt="MIT Licence">
|
|
22
|
+
</p>
|
|
26
23
|
|
|
27
24
|
## Install
|
|
28
25
|
|
|
@@ -70,8 +67,8 @@ To report bugs or request features or assistance, [raise an issue](https://githu
|
|
|
70
67
|
|
|
71
68
|
## Licence
|
|
72
69
|
|
|
73
|
-
MIT License
|
|
70
|
+
MIT License.
|
|
74
71
|
|
|
75
|
-
Copyright
|
|
72
|
+
Copyright © 2010-2022 Roy Revelt and other contributors.
|
|
76
73
|
|
|
77
|
-
<img src="https://codsen.com/images/png-codsen-ok.png" width="98" alt="ok" align="center"> <img src="https://codsen.com/images/png-codsen-1.png" width="148" alt="codsen" align="center"> <img src="https://codsen.com/images/png-codsen-star-small.png" width="32" alt="star" align="center">
|
|
74
|
+
<p align="center"><img src="https://codsen.com/images/png-codsen-ok.png" width="98" alt="ok" align="center"> <img src="https://codsen.com/images/png-codsen-1.png" width="148" alt="codsen" align="center"> <img src="https://codsen.com/images/png-codsen-star-small.png" width="32" alt="star" align="center"></p>
|
|
@@ -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
|
+
* @version 8.2.6
|
|
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.
|
|
10
|
+
import{arrayiffy as N}from"arrayiffy-if-string";var O="8.2.6";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
|
+
* @version 8.2.6
|
|
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.
|
|
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.6";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.
|
|
17
|
+
* @version 4.1.5
|
|
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.
|
|
3
|
+
"version": "8.2.6",
|
|
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.
|
|
69
|
+
"arrayiffy-if-string": "^4.1.5",
|
|
70
70
|
"lodash.isplainobject": "^4.0.6",
|
|
71
|
-
"string-character-is-astral-surrogate": "^2.1.
|
|
71
|
+
"string-character-is-astral-surrogate": "^2.1.5"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@types/lodash.isplainobject": "^4.0.7"
|
package/examples/_quickTake.js
DELETED
|
@@ -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
|
-
);
|