UrgentcareCLI 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (308) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +60 -25
  4. data/Notes +1 -1
  5. data/README.md +5 -5
  6. data/Rakefile +2 -0
  7. data/UrgentCare.gemspec +3 -3
  8. data/background.jpg +0 -0
  9. data/lib/UrgentCare.rb +3 -0
  10. data/lib/UrgentCare/CLI.rb +6 -2
  11. data/lib/UrgentCare/version.rb +1 -1
  12. data/lib/Urgentcare/Scraper.rb +65 -23
  13. data/node_modules/.bin/rimraf +1 -0
  14. data/node_modules/.package-lock.json +250 -0
  15. data/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  16. data/node_modules/balanced-match/LICENSE.md +21 -0
  17. data/node_modules/balanced-match/README.md +97 -0
  18. data/node_modules/balanced-match/index.js +62 -0
  19. data/node_modules/balanced-match/package.json +48 -0
  20. data/node_modules/brace-expansion/LICENSE +21 -0
  21. data/node_modules/brace-expansion/README.md +129 -0
  22. data/node_modules/brace-expansion/index.js +201 -0
  23. data/node_modules/brace-expansion/package.json +47 -0
  24. data/node_modules/concat-map/.travis.yml +4 -0
  25. data/node_modules/concat-map/LICENSE +18 -0
  26. data/node_modules/concat-map/README.markdown +62 -0
  27. data/node_modules/concat-map/example/map.js +6 -0
  28. data/node_modules/concat-map/index.js +13 -0
  29. data/node_modules/concat-map/package.json +43 -0
  30. data/node_modules/concat-map/test/map.js +39 -0
  31. data/node_modules/core-util-is/LICENSE +19 -0
  32. data/node_modules/core-util-is/README.md +3 -0
  33. data/node_modules/core-util-is/float.patch +604 -0
  34. data/node_modules/core-util-is/lib/util.js +107 -0
  35. data/node_modules/core-util-is/package.json +32 -0
  36. data/node_modules/core-util-is/test.js +68 -0
  37. data/node_modules/fs.realpath/LICENSE +43 -0
  38. data/node_modules/fs.realpath/README.md +33 -0
  39. data/node_modules/fs.realpath/index.js +66 -0
  40. data/node_modules/fs.realpath/old.js +303 -0
  41. data/node_modules/fs.realpath/package.json +26 -0
  42. data/node_modules/glob/LICENSE +21 -0
  43. data/node_modules/glob/README.md +375 -0
  44. data/node_modules/glob/changelog.md +67 -0
  45. data/node_modules/glob/common.js +234 -0
  46. data/node_modules/glob/glob.js +788 -0
  47. data/node_modules/glob/package.json +51 -0
  48. data/node_modules/glob/sync.js +484 -0
  49. data/node_modules/immediate/LICENSE.txt +20 -0
  50. data/node_modules/immediate/README.md +93 -0
  51. data/node_modules/immediate/dist/immediate.js +75 -0
  52. data/node_modules/immediate/dist/immediate.min.js +1 -0
  53. data/node_modules/immediate/lib/browser.js +69 -0
  54. data/node_modules/immediate/lib/index.js +73 -0
  55. data/node_modules/immediate/package.json +42 -0
  56. data/node_modules/inflight/LICENSE +15 -0
  57. data/node_modules/inflight/README.md +37 -0
  58. data/node_modules/inflight/inflight.js +54 -0
  59. data/node_modules/inflight/package.json +29 -0
  60. data/node_modules/inherits/LICENSE +16 -0
  61. data/node_modules/inherits/README.md +42 -0
  62. data/node_modules/inherits/inherits.js +9 -0
  63. data/node_modules/inherits/inherits_browser.js +27 -0
  64. data/node_modules/inherits/package.json +29 -0
  65. data/node_modules/isarray/.npmignore +1 -0
  66. data/node_modules/isarray/.travis.yml +4 -0
  67. data/node_modules/isarray/Makefile +6 -0
  68. data/node_modules/isarray/README.md +60 -0
  69. data/node_modules/isarray/component.json +19 -0
  70. data/node_modules/isarray/index.js +5 -0
  71. data/node_modules/isarray/package.json +45 -0
  72. data/node_modules/isarray/test.js +20 -0
  73. data/node_modules/jszip/.codeclimate.yml +16 -0
  74. data/node_modules/jszip/.editorconfig +8 -0
  75. data/node_modules/jszip/.jshintignore +1 -0
  76. data/node_modules/jszip/.jshintrc +21 -0
  77. data/node_modules/jszip/.travis.yml +17 -0
  78. data/node_modules/jszip/CHANGES.md +163 -0
  79. data/node_modules/jszip/LICENSE.markdown +651 -0
  80. data/node_modules/jszip/README.markdown +35 -0
  81. data/node_modules/jszip/dist/jszip.js +30 -0
  82. data/node_modules/jszip/dist/jszip.min.js +13 -0
  83. data/node_modules/jszip/index.d.ts +270 -0
  84. data/node_modules/jszip/lib/base64.js +106 -0
  85. data/node_modules/jszip/lib/compressedObject.js +74 -0
  86. data/node_modules/jszip/lib/compressions.js +14 -0
  87. data/node_modules/jszip/lib/crc32.js +77 -0
  88. data/node_modules/jszip/lib/defaults.js +11 -0
  89. data/node_modules/jszip/lib/external.js +19 -0
  90. data/node_modules/jszip/lib/flate.js +85 -0
  91. data/node_modules/jszip/lib/generate/ZipFileWorker.js +540 -0
  92. data/node_modules/jszip/lib/generate/index.js +57 -0
  93. data/node_modules/jszip/lib/index.js +52 -0
  94. data/node_modules/jszip/lib/license_header.js +11 -0
  95. data/node_modules/jszip/lib/load.js +81 -0
  96. data/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +74 -0
  97. data/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +42 -0
  98. data/node_modules/jszip/lib/nodejsUtils.js +57 -0
  99. data/node_modules/jszip/lib/object.js +389 -0
  100. data/node_modules/jszip/lib/readable-stream-browser.js +9 -0
  101. data/node_modules/jszip/lib/reader/ArrayReader.js +57 -0
  102. data/node_modules/jszip/lib/reader/DataReader.js +116 -0
  103. data/node_modules/jszip/lib/reader/NodeBufferReader.js +19 -0
  104. data/node_modules/jszip/lib/reader/StringReader.js +38 -0
  105. data/node_modules/jszip/lib/reader/Uint8ArrayReader.js +22 -0
  106. data/node_modules/jszip/lib/reader/readerFor.js +28 -0
  107. data/node_modules/jszip/lib/signature.js +7 -0
  108. data/node_modules/jszip/lib/stream/ConvertWorker.js +26 -0
  109. data/node_modules/jszip/lib/stream/Crc32Probe.js +24 -0
  110. data/node_modules/jszip/lib/stream/DataLengthProbe.js +29 -0
  111. data/node_modules/jszip/lib/stream/DataWorker.js +116 -0
  112. data/node_modules/jszip/lib/stream/GenericWorker.js +263 -0
  113. data/node_modules/jszip/lib/stream/StreamHelper.js +212 -0
  114. data/node_modules/jszip/lib/support.js +38 -0
  115. data/node_modules/jszip/lib/utf8.js +275 -0
  116. data/node_modules/jszip/lib/utils.js +476 -0
  117. data/node_modules/jszip/lib/zipEntries.js +262 -0
  118. data/node_modules/jszip/lib/zipEntry.js +294 -0
  119. data/node_modules/jszip/lib/zipObject.js +133 -0
  120. data/node_modules/jszip/package.json +63 -0
  121. data/node_modules/jszip/vendor/FileSaver.js +247 -0
  122. data/node_modules/lie/README.md +62 -0
  123. data/node_modules/lie/dist/lie.js +350 -0
  124. data/node_modules/lie/dist/lie.min.js +1 -0
  125. data/node_modules/lie/dist/lie.polyfill.js +358 -0
  126. data/node_modules/lie/dist/lie.polyfill.min.js +1 -0
  127. data/node_modules/lie/lib/browser.js +273 -0
  128. data/node_modules/lie/lib/index.js +298 -0
  129. data/node_modules/lie/license.md +7 -0
  130. data/node_modules/lie/lie.d.ts +244 -0
  131. data/node_modules/lie/package.json +69 -0
  132. data/node_modules/lie/polyfill.js +4 -0
  133. data/node_modules/minimatch/LICENSE +15 -0
  134. data/node_modules/minimatch/README.md +209 -0
  135. data/node_modules/minimatch/minimatch.js +923 -0
  136. data/node_modules/minimatch/package.json +30 -0
  137. data/node_modules/once/LICENSE +15 -0
  138. data/node_modules/once/README.md +79 -0
  139. data/node_modules/once/once.js +42 -0
  140. data/node_modules/once/package.json +33 -0
  141. data/node_modules/pako/CHANGELOG.md +164 -0
  142. data/node_modules/pako/LICENSE +21 -0
  143. data/node_modules/pako/README.md +191 -0
  144. data/node_modules/pako/dist/pako.js +6818 -0
  145. data/node_modules/pako/dist/pako.min.js +1 -0
  146. data/node_modules/pako/dist/pako_deflate.js +3997 -0
  147. data/node_modules/pako/dist/pako_deflate.min.js +1 -0
  148. data/node_modules/pako/dist/pako_inflate.js +3300 -0
  149. data/node_modules/pako/dist/pako_inflate.min.js +1 -0
  150. data/node_modules/pako/index.js +14 -0
  151. data/node_modules/pako/lib/deflate.js +400 -0
  152. data/node_modules/pako/lib/inflate.js +423 -0
  153. data/node_modules/pako/lib/utils/common.js +105 -0
  154. data/node_modules/pako/lib/utils/strings.js +187 -0
  155. data/node_modules/pako/lib/zlib/README +59 -0
  156. data/node_modules/pako/lib/zlib/adler32.js +51 -0
  157. data/node_modules/pako/lib/zlib/constants.js +68 -0
  158. data/node_modules/pako/lib/zlib/crc32.js +59 -0
  159. data/node_modules/pako/lib/zlib/deflate.js +1874 -0
  160. data/node_modules/pako/lib/zlib/gzheader.js +58 -0
  161. data/node_modules/pako/lib/zlib/inffast.js +345 -0
  162. data/node_modules/pako/lib/zlib/inflate.js +1556 -0
  163. data/node_modules/pako/lib/zlib/inftrees.js +343 -0
  164. data/node_modules/pako/lib/zlib/messages.js +32 -0
  165. data/node_modules/pako/lib/zlib/trees.js +1222 -0
  166. data/node_modules/pako/lib/zlib/zstream.js +47 -0
  167. data/node_modules/pako/package.json +44 -0
  168. data/node_modules/path-is-absolute/index.js +20 -0
  169. data/node_modules/path-is-absolute/license +21 -0
  170. data/node_modules/path-is-absolute/package.json +43 -0
  171. data/node_modules/path-is-absolute/readme.md +59 -0
  172. data/node_modules/process-nextick-args/index.js +45 -0
  173. data/node_modules/process-nextick-args/license.md +19 -0
  174. data/node_modules/process-nextick-args/package.json +25 -0
  175. data/node_modules/process-nextick-args/readme.md +18 -0
  176. data/node_modules/readable-stream/.travis.yml +34 -0
  177. data/node_modules/readable-stream/CONTRIBUTING.md +38 -0
  178. data/node_modules/readable-stream/GOVERNANCE.md +136 -0
  179. data/node_modules/readable-stream/LICENSE +47 -0
  180. data/node_modules/readable-stream/README.md +58 -0
  181. data/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +60 -0
  182. data/node_modules/readable-stream/duplex-browser.js +1 -0
  183. data/node_modules/readable-stream/duplex.js +1 -0
  184. data/node_modules/readable-stream/lib/_stream_duplex.js +131 -0
  185. data/node_modules/readable-stream/lib/_stream_passthrough.js +47 -0
  186. data/node_modules/readable-stream/lib/_stream_readable.js +1019 -0
  187. data/node_modules/readable-stream/lib/_stream_transform.js +214 -0
  188. data/node_modules/readable-stream/lib/_stream_writable.js +687 -0
  189. data/node_modules/readable-stream/lib/internal/streams/BufferList.js +79 -0
  190. data/node_modules/readable-stream/lib/internal/streams/destroy.js +74 -0
  191. data/node_modules/readable-stream/lib/internal/streams/stream-browser.js +1 -0
  192. data/node_modules/readable-stream/lib/internal/streams/stream.js +1 -0
  193. data/node_modules/readable-stream/package.json +52 -0
  194. data/node_modules/readable-stream/passthrough.js +1 -0
  195. data/node_modules/readable-stream/readable-browser.js +7 -0
  196. data/node_modules/readable-stream/readable.js +19 -0
  197. data/node_modules/readable-stream/transform.js +1 -0
  198. data/node_modules/readable-stream/writable-browser.js +1 -0
  199. data/node_modules/readable-stream/writable.js +8 -0
  200. data/node_modules/rimraf/LICENSE +15 -0
  201. data/node_modules/rimraf/README.md +101 -0
  202. data/node_modules/rimraf/bin.js +50 -0
  203. data/node_modules/rimraf/package.json +29 -0
  204. data/node_modules/rimraf/rimraf.js +372 -0
  205. data/node_modules/safe-buffer/LICENSE +21 -0
  206. data/node_modules/safe-buffer/README.md +584 -0
  207. data/node_modules/safe-buffer/index.d.ts +187 -0
  208. data/node_modules/safe-buffer/index.js +62 -0
  209. data/node_modules/safe-buffer/package.json +37 -0
  210. data/node_modules/selenium-webdriver/CHANGES.md +1114 -0
  211. data/node_modules/selenium-webdriver/LICENSE +202 -0
  212. data/node_modules/selenium-webdriver/NOTICE +2 -0
  213. data/node_modules/selenium-webdriver/README.md +229 -0
  214. data/node_modules/selenium-webdriver/chrome.js +295 -0
  215. data/node_modules/selenium-webdriver/chromium.js +829 -0
  216. data/node_modules/selenium-webdriver/devtools/CDPConnection.js +35 -0
  217. data/node_modules/selenium-webdriver/edge.js +224 -0
  218. data/node_modules/selenium-webdriver/example/chrome_android.js +45 -0
  219. data/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js +46 -0
  220. data/node_modules/selenium-webdriver/example/firefox_channels.js +84 -0
  221. data/node_modules/selenium-webdriver/example/google_search.js +50 -0
  222. data/node_modules/selenium-webdriver/example/google_search_test.js +70 -0
  223. data/node_modules/selenium-webdriver/example/headless.js +63 -0
  224. data/node_modules/selenium-webdriver/example/logging.js +64 -0
  225. data/node_modules/selenium-webdriver/firefox.js +789 -0
  226. data/node_modules/selenium-webdriver/http/index.js +324 -0
  227. data/node_modules/selenium-webdriver/http/util.js +172 -0
  228. data/node_modules/selenium-webdriver/ie.js +503 -0
  229. data/node_modules/selenium-webdriver/index.js +825 -0
  230. data/node_modules/selenium-webdriver/io/exec.js +162 -0
  231. data/node_modules/selenium-webdriver/io/index.js +348 -0
  232. data/node_modules/selenium-webdriver/io/zip.js +223 -0
  233. data/node_modules/selenium-webdriver/lib/atoms/find-elements.js +123 -0
  234. data/node_modules/selenium-webdriver/lib/atoms/get-attribute.js +101 -0
  235. data/node_modules/selenium-webdriver/lib/atoms/is-displayed.js +101 -0
  236. data/node_modules/selenium-webdriver/lib/atoms/mutation-listener.js +55 -0
  237. data/node_modules/selenium-webdriver/lib/by.js +415 -0
  238. data/node_modules/selenium-webdriver/lib/capabilities.js +553 -0
  239. data/node_modules/selenium-webdriver/lib/command.js +206 -0
  240. data/node_modules/selenium-webdriver/lib/error.js +605 -0
  241. data/node_modules/selenium-webdriver/lib/http.js +704 -0
  242. data/node_modules/selenium-webdriver/lib/input.js +946 -0
  243. data/node_modules/selenium-webdriver/lib/logging.js +661 -0
  244. data/node_modules/selenium-webdriver/lib/promise.js +285 -0
  245. data/node_modules/selenium-webdriver/lib/proxy.js +212 -0
  246. data/node_modules/selenium-webdriver/lib/session.js +77 -0
  247. data/node_modules/selenium-webdriver/lib/symbols.js +37 -0
  248. data/node_modules/selenium-webdriver/lib/until.js +429 -0
  249. data/node_modules/selenium-webdriver/lib/webdriver.js +2919 -0
  250. data/node_modules/selenium-webdriver/net/index.js +107 -0
  251. data/node_modules/selenium-webdriver/net/portprober.js +75 -0
  252. data/node_modules/selenium-webdriver/opera.js +406 -0
  253. data/node_modules/selenium-webdriver/package.json +54 -0
  254. data/node_modules/selenium-webdriver/proxy.js +32 -0
  255. data/node_modules/selenium-webdriver/remote/index.js +624 -0
  256. data/node_modules/selenium-webdriver/safari.js +168 -0
  257. data/node_modules/selenium-webdriver/testing/index.js +504 -0
  258. data/node_modules/set-immediate-shim/index.js +7 -0
  259. data/node_modules/set-immediate-shim/package.json +34 -0
  260. data/node_modules/set-immediate-shim/readme.md +31 -0
  261. data/node_modules/string_decoder/.travis.yml +50 -0
  262. data/node_modules/string_decoder/LICENSE +48 -0
  263. data/node_modules/string_decoder/README.md +47 -0
  264. data/node_modules/string_decoder/lib/string_decoder.js +296 -0
  265. data/node_modules/string_decoder/package.json +31 -0
  266. data/node_modules/tmp/CHANGELOG.md +288 -0
  267. data/node_modules/tmp/LICENSE +21 -0
  268. data/node_modules/tmp/README.md +365 -0
  269. data/node_modules/tmp/lib/tmp.js +780 -0
  270. data/node_modules/tmp/node_modules/.bin/rimraf +1 -0
  271. data/node_modules/tmp/node_modules/rimraf/CHANGELOG.md +65 -0
  272. data/node_modules/tmp/node_modules/rimraf/LICENSE +15 -0
  273. data/node_modules/tmp/node_modules/rimraf/README.md +101 -0
  274. data/node_modules/tmp/node_modules/rimraf/bin.js +68 -0
  275. data/node_modules/tmp/node_modules/rimraf/package.json +32 -0
  276. data/node_modules/tmp/node_modules/rimraf/rimraf.js +360 -0
  277. data/node_modules/tmp/package.json +58 -0
  278. data/node_modules/util-deprecate/History.md +16 -0
  279. data/node_modules/util-deprecate/LICENSE +24 -0
  280. data/node_modules/util-deprecate/README.md +53 -0
  281. data/node_modules/util-deprecate/browser.js +67 -0
  282. data/node_modules/util-deprecate/node.js +6 -0
  283. data/node_modules/util-deprecate/package.json +27 -0
  284. data/node_modules/wrappy/LICENSE +15 -0
  285. data/node_modules/wrappy/README.md +36 -0
  286. data/node_modules/wrappy/package.json +29 -0
  287. data/node_modules/wrappy/wrappy.js +33 -0
  288. data/node_modules/ws/LICENSE +21 -0
  289. data/node_modules/ws/README.md +496 -0
  290. data/node_modules/ws/browser.js +8 -0
  291. data/node_modules/ws/index.js +10 -0
  292. data/node_modules/ws/lib/buffer-util.js +129 -0
  293. data/node_modules/ws/lib/constants.js +10 -0
  294. data/node_modules/ws/lib/event-target.js +184 -0
  295. data/node_modules/ws/lib/extension.js +223 -0
  296. data/node_modules/ws/lib/limiter.js +55 -0
  297. data/node_modules/ws/lib/permessage-deflate.js +517 -0
  298. data/node_modules/ws/lib/receiver.js +507 -0
  299. data/node_modules/ws/lib/sender.js +405 -0
  300. data/node_modules/ws/lib/stream.js +165 -0
  301. data/node_modules/ws/lib/validation.js +104 -0
  302. data/node_modules/ws/lib/websocket-server.js +418 -0
  303. data/node_modules/ws/lib/websocket.js +942 -0
  304. data/node_modules/ws/package.json +56 -0
  305. data/package-lock.json +458 -0
  306. data/package.json +5 -0
  307. data/selenium.log +1 -0
  308. metadata +314 -19
@@ -0,0 +1,2 @@
1
+ tidelift: "npm/balanced-match"
2
+ patreon: juliangruber
@@ -0,0 +1,21 @@
1
+ (MIT)
2
+
3
+ Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
9
+ of the Software, and to permit persons to whom the Software is furnished to do
10
+ so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,97 @@
1
+ # balanced-match
2
+
3
+ Match balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!
4
+
5
+ [![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)
6
+ [![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)
7
+
8
+ [![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)
9
+
10
+ ## Example
11
+
12
+ Get the first matching pair of braces:
13
+
14
+ ```js
15
+ var balanced = require('balanced-match');
16
+
17
+ console.log(balanced('{', '}', 'pre{in{nested}}post'));
18
+ console.log(balanced('{', '}', 'pre{first}between{second}post'));
19
+ console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post'));
20
+ ```
21
+
22
+ The matches are:
23
+
24
+ ```bash
25
+ $ node example.js
26
+ { start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
27
+ { start: 3,
28
+ end: 9,
29
+ pre: 'pre',
30
+ body: 'first',
31
+ post: 'between{second}post' }
32
+ { start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
33
+ ```
34
+
35
+ ## API
36
+
37
+ ### var m = balanced(a, b, str)
38
+
39
+ For the first non-nested matching pair of `a` and `b` in `str`, return an
40
+ object with those keys:
41
+
42
+ * **start** the index of the first match of `a`
43
+ * **end** the index of the matching `b`
44
+ * **pre** the preamble, `a` and `b` not included
45
+ * **body** the match, `a` and `b` not included
46
+ * **post** the postscript, `a` and `b` not included
47
+
48
+ If there's no match, `undefined` will be returned.
49
+
50
+ If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
51
+
52
+ ### var r = balanced.range(a, b, str)
53
+
54
+ For the first non-nested matching pair of `a` and `b` in `str`, return an
55
+ array with indexes: `[ <a index>, <b index> ]`.
56
+
57
+ If there's no match, `undefined` will be returned.
58
+
59
+ If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
60
+
61
+ ## Installation
62
+
63
+ With [npm](https://npmjs.org) do:
64
+
65
+ ```bash
66
+ npm install balanced-match
67
+ ```
68
+
69
+ ## Security contact information
70
+
71
+ To report a security vulnerability, please use the
72
+ [Tidelift security contact](https://tidelift.com/security).
73
+ Tidelift will coordinate the fix and disclosure.
74
+
75
+ ## License
76
+
77
+ (MIT)
78
+
79
+ Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
80
+
81
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
82
+ this software and associated documentation files (the "Software"), to deal in
83
+ the Software without restriction, including without limitation the rights to
84
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
85
+ of the Software, and to permit persons to whom the Software is furnished to do
86
+ so, subject to the following conditions:
87
+
88
+ The above copyright notice and this permission notice shall be included in all
89
+ copies or substantial portions of the Software.
90
+
91
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
92
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
93
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
94
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
95
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
96
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
97
+ SOFTWARE.
@@ -0,0 +1,62 @@
1
+ 'use strict';
2
+ module.exports = balanced;
3
+ function balanced(a, b, str) {
4
+ if (a instanceof RegExp) a = maybeMatch(a, str);
5
+ if (b instanceof RegExp) b = maybeMatch(b, str);
6
+
7
+ var r = range(a, b, str);
8
+
9
+ return r && {
10
+ start: r[0],
11
+ end: r[1],
12
+ pre: str.slice(0, r[0]),
13
+ body: str.slice(r[0] + a.length, r[1]),
14
+ post: str.slice(r[1] + b.length)
15
+ };
16
+ }
17
+
18
+ function maybeMatch(reg, str) {
19
+ var m = str.match(reg);
20
+ return m ? m[0] : null;
21
+ }
22
+
23
+ balanced.range = range;
24
+ function range(a, b, str) {
25
+ var begs, beg, left, right, result;
26
+ var ai = str.indexOf(a);
27
+ var bi = str.indexOf(b, ai + 1);
28
+ var i = ai;
29
+
30
+ if (ai >= 0 && bi > 0) {
31
+ if(a===b) {
32
+ return [ai, bi];
33
+ }
34
+ begs = [];
35
+ left = str.length;
36
+
37
+ while (i >= 0 && !result) {
38
+ if (i == ai) {
39
+ begs.push(i);
40
+ ai = str.indexOf(a, i + 1);
41
+ } else if (begs.length == 1) {
42
+ result = [ begs.pop(), bi ];
43
+ } else {
44
+ beg = begs.pop();
45
+ if (beg < left) {
46
+ left = beg;
47
+ right = bi;
48
+ }
49
+
50
+ bi = str.indexOf(b, i + 1);
51
+ }
52
+
53
+ i = ai < bi && ai >= 0 ? ai : bi;
54
+ }
55
+
56
+ if (begs.length) {
57
+ result = [ left, right ];
58
+ }
59
+ }
60
+
61
+ return result;
62
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "balanced-match",
3
+ "description": "Match balanced character pairs, like \"{\" and \"}\"",
4
+ "version": "1.0.2",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git://github.com/juliangruber/balanced-match.git"
8
+ },
9
+ "homepage": "https://github.com/juliangruber/balanced-match",
10
+ "main": "index.js",
11
+ "scripts": {
12
+ "test": "tape test/test.js",
13
+ "bench": "matcha test/bench.js"
14
+ },
15
+ "devDependencies": {
16
+ "matcha": "^0.7.0",
17
+ "tape": "^4.6.0"
18
+ },
19
+ "keywords": [
20
+ "match",
21
+ "regexp",
22
+ "test",
23
+ "balanced",
24
+ "parse"
25
+ ],
26
+ "author": {
27
+ "name": "Julian Gruber",
28
+ "email": "mail@juliangruber.com",
29
+ "url": "http://juliangruber.com"
30
+ },
31
+ "license": "MIT",
32
+ "testling": {
33
+ "files": "test/*.js",
34
+ "browsers": [
35
+ "ie/8..latest",
36
+ "firefox/20..latest",
37
+ "firefox/nightly",
38
+ "chrome/25..latest",
39
+ "chrome/canary",
40
+ "opera/12..latest",
41
+ "opera/next",
42
+ "safari/5.1..latest",
43
+ "ipad/6.0..latest",
44
+ "iphone/6.0..latest",
45
+ "android-browser/4.2..latest"
46
+ ]
47
+ }
48
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,129 @@
1
+ # brace-expansion
2
+
3
+ [Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
4
+ as known from sh/bash, in JavaScript.
5
+
6
+ [![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)
7
+ [![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)
8
+ [![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/)
9
+
10
+ [![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)
11
+
12
+ ## Example
13
+
14
+ ```js
15
+ var expand = require('brace-expansion');
16
+
17
+ expand('file-{a,b,c}.jpg')
18
+ // => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
19
+
20
+ expand('-v{,,}')
21
+ // => ['-v', '-v', '-v']
22
+
23
+ expand('file{0..2}.jpg')
24
+ // => ['file0.jpg', 'file1.jpg', 'file2.jpg']
25
+
26
+ expand('file-{a..c}.jpg')
27
+ // => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
28
+
29
+ expand('file{2..0}.jpg')
30
+ // => ['file2.jpg', 'file1.jpg', 'file0.jpg']
31
+
32
+ expand('file{0..4..2}.jpg')
33
+ // => ['file0.jpg', 'file2.jpg', 'file4.jpg']
34
+
35
+ expand('file-{a..e..2}.jpg')
36
+ // => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
37
+
38
+ expand('file{00..10..5}.jpg')
39
+ // => ['file00.jpg', 'file05.jpg', 'file10.jpg']
40
+
41
+ expand('{{A..C},{a..c}}')
42
+ // => ['A', 'B', 'C', 'a', 'b', 'c']
43
+
44
+ expand('ppp{,config,oe{,conf}}')
45
+ // => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
46
+ ```
47
+
48
+ ## API
49
+
50
+ ```js
51
+ var expand = require('brace-expansion');
52
+ ```
53
+
54
+ ### var expanded = expand(str)
55
+
56
+ Return an array of all possible and valid expansions of `str`. If none are
57
+ found, `[str]` is returned.
58
+
59
+ Valid expansions are:
60
+
61
+ ```js
62
+ /^(.*,)+(.+)?$/
63
+ // {a,b,...}
64
+ ```
65
+
66
+ A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
67
+
68
+ ```js
69
+ /^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
70
+ // {x..y[..incr]}
71
+ ```
72
+
73
+ A numeric sequence from `x` to `y` inclusive, with optional increment.
74
+ If `x` or `y` start with a leading `0`, all the numbers will be padded
75
+ to have equal length. Negative numbers and backwards iteration work too.
76
+
77
+ ```js
78
+ /^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
79
+ // {x..y[..incr]}
80
+ ```
81
+
82
+ An alphabetic sequence from `x` to `y` inclusive, with optional increment.
83
+ `x` and `y` must be exactly one character, and if given, `incr` must be a
84
+ number.
85
+
86
+ For compatibility reasons, the string `${` is not eligible for brace expansion.
87
+
88
+ ## Installation
89
+
90
+ With [npm](https://npmjs.org) do:
91
+
92
+ ```bash
93
+ npm install brace-expansion
94
+ ```
95
+
96
+ ## Contributors
97
+
98
+ - [Julian Gruber](https://github.com/juliangruber)
99
+ - [Isaac Z. Schlueter](https://github.com/isaacs)
100
+
101
+ ## Sponsors
102
+
103
+ This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)!
104
+
105
+ Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)!
106
+
107
+ ## License
108
+
109
+ (MIT)
110
+
111
+ Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
112
+
113
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
114
+ this software and associated documentation files (the "Software"), to deal in
115
+ the Software without restriction, including without limitation the rights to
116
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
117
+ of the Software, and to permit persons to whom the Software is furnished to do
118
+ so, subject to the following conditions:
119
+
120
+ The above copyright notice and this permission notice shall be included in all
121
+ copies or substantial portions of the Software.
122
+
123
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
124
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
125
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
126
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
127
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
128
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
129
+ SOFTWARE.
@@ -0,0 +1,201 @@
1
+ var concatMap = require('concat-map');
2
+ var balanced = require('balanced-match');
3
+
4
+ module.exports = expandTop;
5
+
6
+ var escSlash = '\0SLASH'+Math.random()+'\0';
7
+ var escOpen = '\0OPEN'+Math.random()+'\0';
8
+ var escClose = '\0CLOSE'+Math.random()+'\0';
9
+ var escComma = '\0COMMA'+Math.random()+'\0';
10
+ var escPeriod = '\0PERIOD'+Math.random()+'\0';
11
+
12
+ function numeric(str) {
13
+ return parseInt(str, 10) == str
14
+ ? parseInt(str, 10)
15
+ : str.charCodeAt(0);
16
+ }
17
+
18
+ function escapeBraces(str) {
19
+ return str.split('\\\\').join(escSlash)
20
+ .split('\\{').join(escOpen)
21
+ .split('\\}').join(escClose)
22
+ .split('\\,').join(escComma)
23
+ .split('\\.').join(escPeriod);
24
+ }
25
+
26
+ function unescapeBraces(str) {
27
+ return str.split(escSlash).join('\\')
28
+ .split(escOpen).join('{')
29
+ .split(escClose).join('}')
30
+ .split(escComma).join(',')
31
+ .split(escPeriod).join('.');
32
+ }
33
+
34
+
35
+ // Basically just str.split(","), but handling cases
36
+ // where we have nested braced sections, which should be
37
+ // treated as individual members, like {a,{b,c},d}
38
+ function parseCommaParts(str) {
39
+ if (!str)
40
+ return [''];
41
+
42
+ var parts = [];
43
+ var m = balanced('{', '}', str);
44
+
45
+ if (!m)
46
+ return str.split(',');
47
+
48
+ var pre = m.pre;
49
+ var body = m.body;
50
+ var post = m.post;
51
+ var p = pre.split(',');
52
+
53
+ p[p.length-1] += '{' + body + '}';
54
+ var postParts = parseCommaParts(post);
55
+ if (post.length) {
56
+ p[p.length-1] += postParts.shift();
57
+ p.push.apply(p, postParts);
58
+ }
59
+
60
+ parts.push.apply(parts, p);
61
+
62
+ return parts;
63
+ }
64
+
65
+ function expandTop(str) {
66
+ if (!str)
67
+ return [];
68
+
69
+ // I don't know why Bash 4.3 does this, but it does.
70
+ // Anything starting with {} will have the first two bytes preserved
71
+ // but *only* at the top level, so {},a}b will not expand to anything,
72
+ // but a{},b}c will be expanded to [a}c,abc].
73
+ // One could argue that this is a bug in Bash, but since the goal of
74
+ // this module is to match Bash's rules, we escape a leading {}
75
+ if (str.substr(0, 2) === '{}') {
76
+ str = '\\{\\}' + str.substr(2);
77
+ }
78
+
79
+ return expand(escapeBraces(str), true).map(unescapeBraces);
80
+ }
81
+
82
+ function identity(e) {
83
+ return e;
84
+ }
85
+
86
+ function embrace(str) {
87
+ return '{' + str + '}';
88
+ }
89
+ function isPadded(el) {
90
+ return /^-?0\d/.test(el);
91
+ }
92
+
93
+ function lte(i, y) {
94
+ return i <= y;
95
+ }
96
+ function gte(i, y) {
97
+ return i >= y;
98
+ }
99
+
100
+ function expand(str, isTop) {
101
+ var expansions = [];
102
+
103
+ var m = balanced('{', '}', str);
104
+ if (!m || /\$$/.test(m.pre)) return [str];
105
+
106
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
107
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
108
+ var isSequence = isNumericSequence || isAlphaSequence;
109
+ var isOptions = m.body.indexOf(',') >= 0;
110
+ if (!isSequence && !isOptions) {
111
+ // {a},b}
112
+ if (m.post.match(/,.*\}/)) {
113
+ str = m.pre + '{' + m.body + escClose + m.post;
114
+ return expand(str);
115
+ }
116
+ return [str];
117
+ }
118
+
119
+ var n;
120
+ if (isSequence) {
121
+ n = m.body.split(/\.\./);
122
+ } else {
123
+ n = parseCommaParts(m.body);
124
+ if (n.length === 1) {
125
+ // x{{a,b}}y ==> x{a}y x{b}y
126
+ n = expand(n[0], false).map(embrace);
127
+ if (n.length === 1) {
128
+ var post = m.post.length
129
+ ? expand(m.post, false)
130
+ : [''];
131
+ return post.map(function(p) {
132
+ return m.pre + n[0] + p;
133
+ });
134
+ }
135
+ }
136
+ }
137
+
138
+ // at this point, n is the parts, and we know it's not a comma set
139
+ // with a single entry.
140
+
141
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
142
+ var pre = m.pre;
143
+ var post = m.post.length
144
+ ? expand(m.post, false)
145
+ : [''];
146
+
147
+ var N;
148
+
149
+ if (isSequence) {
150
+ var x = numeric(n[0]);
151
+ var y = numeric(n[1]);
152
+ var width = Math.max(n[0].length, n[1].length)
153
+ var incr = n.length == 3
154
+ ? Math.abs(numeric(n[2]))
155
+ : 1;
156
+ var test = lte;
157
+ var reverse = y < x;
158
+ if (reverse) {
159
+ incr *= -1;
160
+ test = gte;
161
+ }
162
+ var pad = n.some(isPadded);
163
+
164
+ N = [];
165
+
166
+ for (var i = x; test(i, y); i += incr) {
167
+ var c;
168
+ if (isAlphaSequence) {
169
+ c = String.fromCharCode(i);
170
+ if (c === '\\')
171
+ c = '';
172
+ } else {
173
+ c = String(i);
174
+ if (pad) {
175
+ var need = width - c.length;
176
+ if (need > 0) {
177
+ var z = new Array(need + 1).join('0');
178
+ if (i < 0)
179
+ c = '-' + z + c.slice(1);
180
+ else
181
+ c = z + c;
182
+ }
183
+ }
184
+ }
185
+ N.push(c);
186
+ }
187
+ } else {
188
+ N = concatMap(n, function(el) { return expand(el, false) });
189
+ }
190
+
191
+ for (var j = 0; j < N.length; j++) {
192
+ for (var k = 0; k < post.length; k++) {
193
+ var expansion = pre + N[j] + post[k];
194
+ if (!isTop || isSequence || expansion)
195
+ expansions.push(expansion);
196
+ }
197
+ }
198
+
199
+ return expansions;
200
+ }
201
+