index.ts.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <title>Code coverage report for index.ts</title>
  5. <meta charset="utf-8" />
  6. <link rel="stylesheet" href="prettify.css" />
  7. <link rel="stylesheet" href="base.css" />
  8. <meta name="viewport" content="width=device-width, initial-scale=1">
  9. <style type='text/css'>
  10. .coverage-summary .sorter {
  11. background-image: url(sort-arrow-sprite.png);
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <div class='wrapper'>
  17. <div class='pad1'>
  18. <h1>
  19. <a href="index.html">All files</a> index.ts
  20. </h1>
  21. <div class='clearfix'>
  22. <div class='fl pad1y space-right2'>
  23. <span class="strong">100% </span>
  24. <span class="quiet">Statements</span>
  25. <span class='fraction'>65/65</span>
  26. </div>
  27. <div class='fl pad1y space-right2'>
  28. <span class="strong">100% </span>
  29. <span class="quiet">Branches</span>
  30. <span class='fraction'>38/38</span>
  31. </div>
  32. <div class='fl pad1y space-right2'>
  33. <span class="strong">100% </span>
  34. <span class="quiet">Functions</span>
  35. <span class='fraction'>7/7</span>
  36. </div>
  37. <div class='fl pad1y space-right2'>
  38. <span class="strong">100% </span>
  39. <span class="quiet">Lines</span>
  40. <span class='fraction'>62/62</span>
  41. </div>
  42. </div>
  43. </div>
  44. <div class='status-line high'></div>
  45. <pre><table class="coverage">
  46. <tr><td class="line-count quiet">1
  47. 2
  48. 3
  49. 4
  50. 5
  51. 6
  52. 7
  53. 8
  54. 9
  55. 10
  56. 11
  57. 12
  58. 13
  59. 14
  60. 15
  61. 16
  62. 17
  63. 18
  64. 19
  65. 20
  66. 21
  67. 22
  68. 23
  69. 24
  70. 25
  71. 26
  72. 27
  73. 28
  74. 29
  75. 30
  76. 31
  77. 32
  78. 33
  79. 34
  80. 35
  81. 36
  82. 37
  83. 38
  84. 39
  85. 40
  86. 41
  87. 42
  88. 43
  89. 44
  90. 45
  91. 46
  92. 47
  93. 48
  94. 49
  95. 50
  96. 51
  97. 52
  98. 53
  99. 54
  100. 55
  101. 56
  102. 57
  103. 58
  104. 59
  105. 60
  106. 61
  107. 62
  108. 63
  109. 64
  110. 65
  111. 66
  112. 67
  113. 68
  114. 69
  115. 70
  116. 71
  117. 72
  118. 73
  119. 74
  120. 75
  121. 76
  122. 77
  123. 78
  124. 79
  125. 80
  126. 81
  127. 82
  128. 83
  129. 84
  130. 85
  131. 86
  132. 87
  133. 88
  134. 89
  135. 90
  136. 91
  137. 92
  138. 93
  139. 94
  140. 95
  141. 96
  142. 97
  143. 98
  144. 99
  145. 100
  146. 101
  147. 102
  148. 103
  149. 104
  150. 105
  151. 106
  152. 107
  153. 108
  154. 109
  155. 110
  156. 111
  157. 112
  158. 113
  159. 114
  160. 115
  161. 116
  162. 117
  163. 118
  164. 119
  165. 120
  166. 121
  167. 122
  168. 123
  169. 124
  170. 125
  171. 126
  172. 127
  173. 128
  174. 129
  175. 130
  176. 131
  177. 132
  178. 133
  179. 134
  180. 135
  181. 136
  182. 137
  183. 138
  184. 139
  185. 140
  186. 141
  187. 142
  188. 143
  189. 144
  190. 145
  191. 146
  192. 147</td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
  193. <span class="cline-any cline-yes">1x</span>
  194. <span class="cline-any cline-yes">1x</span>
  195. <span class="cline-any cline-yes">1x</span>
  196. <span class="cline-any cline-yes">1x</span>
  197. <span class="cline-any cline-yes">1x</span>
  198. <span class="cline-any cline-yes">1x</span>
  199. <span class="cline-any cline-neutral">&nbsp;</span>
  200. <span class="cline-any cline-neutral">&nbsp;</span>
  201. <span class="cline-any cline-neutral">&nbsp;</span>
  202. <span class="cline-any cline-neutral">&nbsp;</span>
  203. <span class="cline-any cline-neutral">&nbsp;</span>
  204. <span class="cline-any cline-neutral">&nbsp;</span>
  205. <span class="cline-any cline-neutral">&nbsp;</span>
  206. <span class="cline-any cline-neutral">&nbsp;</span>
  207. <span class="cline-any cline-neutral">&nbsp;</span>
  208. <span class="cline-any cline-neutral">&nbsp;</span>
  209. <span class="cline-any cline-neutral">&nbsp;</span>
  210. <span class="cline-any cline-neutral">&nbsp;</span>
  211. <span class="cline-any cline-neutral">&nbsp;</span>
  212. <span class="cline-any cline-neutral">&nbsp;</span>
  213. <span class="cline-any cline-neutral">&nbsp;</span>
  214. <span class="cline-any cline-yes">1x</span>
  215. <span class="cline-any cline-neutral">&nbsp;</span>
  216. <span class="cline-any cline-yes">1x</span>
  217. <span class="cline-any cline-neutral">&nbsp;</span>
  218. <span class="cline-any cline-neutral">&nbsp;</span>
  219. <span class="cline-any cline-neutral">&nbsp;</span>
  220. <span class="cline-any cline-neutral">&nbsp;</span>
  221. <span class="cline-any cline-neutral">&nbsp;</span>
  222. <span class="cline-any cline-neutral">&nbsp;</span>
  223. <span class="cline-any cline-yes">1x</span>
  224. <span class="cline-any cline-yes">50x</span>
  225. <span class="cline-any cline-yes">1x</span>
  226. <span class="cline-any cline-neutral">&nbsp;</span>
  227. <span class="cline-any cline-neutral">&nbsp;</span>
  228. <span class="cline-any cline-yes">49x</span>
  229. <span class="cline-any cline-yes">1x</span>
  230. <span class="cline-any cline-neutral">&nbsp;</span>
  231. <span class="cline-any cline-neutral">&nbsp;</span>
  232. <span class="cline-any cline-yes">48x</span>
  233. <span class="cline-any cline-yes">6x</span>
  234. <span class="cline-any cline-neutral">&nbsp;</span>
  235. <span class="cline-any cline-neutral">&nbsp;</span>
  236. <span class="cline-any cline-yes">42x</span>
  237. <span class="cline-any cline-neutral">&nbsp;</span>
  238. <span class="cline-any cline-neutral">&nbsp;</span>
  239. <span class="cline-any cline-neutral">&nbsp;</span>
  240. <span class="cline-any cline-neutral">&nbsp;</span>
  241. <span class="cline-any cline-neutral">&nbsp;</span>
  242. <span class="cline-any cline-neutral">&nbsp;</span>
  243. <span class="cline-any cline-neutral">&nbsp;</span>
  244. <span class="cline-any cline-yes">42x</span>
  245. <span class="cline-any cline-yes">42x</span>
  246. <span class="cline-any cline-yes">42x</span>
  247. <span class="cline-any cline-neutral">&nbsp;</span>
  248. <span class="cline-any cline-neutral">&nbsp;</span>
  249. <span class="cline-any cline-neutral">&nbsp;</span>
  250. <span class="cline-any cline-neutral">&nbsp;</span>
  251. <span class="cline-any cline-yes">85x</span>
  252. <span class="cline-any cline-yes">3x</span>
  253. <span class="cline-any cline-neutral">&nbsp;</span>
  254. <span class="cline-any cline-neutral">&nbsp;</span>
  255. <span class="cline-any cline-yes">260x</span>
  256. <span class="cline-any cline-yes">260x</span>
  257. <span class="cline-any cline-yes">41x</span>
  258. <span class="cline-any cline-neutral">&nbsp;</span>
  259. <span class="cline-any cline-neutral">&nbsp;</span>
  260. <span class="cline-any cline-neutral">&nbsp;</span>
  261. <span class="cline-any cline-yes">38x</span>
  262. <span class="cline-any cline-yes">38x</span>
  263. <span class="cline-any cline-yes">38x</span>
  264. <span class="cline-any cline-yes">8x</span>
  265. <span class="cline-any cline-yes">30x</span>
  266. <span class="cline-any cline-yes">1x</span>
  267. <span class="cline-any cline-yes">1x</span>
  268. <span class="cline-any cline-neutral">&nbsp;</span>
  269. <span class="cline-any cline-yes">38x</span>
  270. <span class="cline-any cline-yes">1x</span>
  271. <span class="cline-any cline-neutral">&nbsp;</span>
  272. <span class="cline-any cline-yes">37x</span>
  273. <span class="cline-any cline-neutral">&nbsp;</span>
  274. <span class="cline-any cline-yes">148x</span>
  275. <span class="cline-any cline-yes">148x</span>
  276. <span class="cline-any cline-neutral">&nbsp;</span>
  277. <span class="cline-any cline-neutral">&nbsp;</span>
  278. <span class="cline-any cline-yes">37x</span>
  279. <span class="cline-any cline-neutral">&nbsp;</span>
  280. <span class="cline-any cline-neutral">&nbsp;</span>
  281. <span class="cline-any cline-yes">1x</span>
  282. <span class="cline-any cline-neutral">&nbsp;</span>
  283. <span class="cline-any cline-neutral">&nbsp;</span>
  284. <span class="cline-any cline-yes">82x</span>
  285. <span class="cline-any cline-yes">75x</span>
  286. <span class="cline-any cline-neutral">&nbsp;</span>
  287. <span class="cline-any cline-yes">7x</span>
  288. <span class="cline-any cline-yes">1x</span>
  289. <span class="cline-any cline-neutral">&nbsp;</span>
  290. <span class="cline-any cline-yes">6x</span>
  291. <span class="cline-any cline-neutral">&nbsp;</span>
  292. <span class="cline-any cline-neutral">&nbsp;</span>
  293. <span class="cline-any cline-neutral">&nbsp;</span>
  294. <span class="cline-any cline-yes">75x</span>
  295. <span class="cline-any cline-yes">58x</span>
  296. <span class="cline-any cline-neutral">&nbsp;</span>
  297. <span class="cline-any cline-yes">17x</span>
  298. <span class="cline-any cline-yes">1x</span>
  299. <span class="cline-any cline-neutral">&nbsp;</span>
  300. <span class="cline-any cline-yes">16x</span>
  301. <span class="cline-any cline-neutral">&nbsp;</span>
  302. <span class="cline-any cline-neutral">&nbsp;</span>
  303. <span class="cline-any cline-neutral">&nbsp;</span>
  304. <span class="cline-any cline-yes">58x</span>
  305. <span class="cline-any cline-yes">45x</span>
  306. <span class="cline-any cline-neutral">&nbsp;</span>
  307. <span class="cline-any cline-yes">13x</span>
  308. <span class="cline-any cline-yes">1x</span>
  309. <span class="cline-any cline-neutral">&nbsp;</span>
  310. <span class="cline-any cline-yes">12x</span>
  311. <span class="cline-any cline-neutral">&nbsp;</span>
  312. <span class="cline-any cline-neutral">&nbsp;</span>
  313. <span class="cline-any cline-neutral">&nbsp;</span>
  314. <span class="cline-any cline-yes">45x</span>
  315. <span class="cline-any cline-neutral">&nbsp;</span>
  316. <span class="cline-any cline-neutral">&nbsp;</span>
  317. <span class="cline-any cline-neutral">&nbsp;</span>
  318. <span class="cline-any cline-neutral">&nbsp;</span>
  319. <span class="cline-any cline-neutral">&nbsp;</span>
  320. <span class="cline-any cline-neutral">&nbsp;</span>
  321. <span class="cline-any cline-neutral">&nbsp;</span>
  322. <span class="cline-any cline-neutral">&nbsp;</span>
  323. <span class="cline-any cline-yes">13x</span>
  324. <span class="cline-any cline-neutral">&nbsp;</span>
  325. <span class="cline-any cline-yes">7x</span>
  326. <span class="cline-any cline-neutral">&nbsp;</span>
  327. <span class="cline-any cline-neutral">&nbsp;</span>
  328. <span class="cline-any cline-neutral">&nbsp;</span>
  329. <span class="cline-any cline-yes">9x</span>
  330. <span class="cline-any cline-yes">9x</span>
  331. <span class="cline-any cline-yes">5x</span>
  332. <span class="cline-any cline-neutral">&nbsp;</span>
  333. <span class="cline-any cline-yes">4x</span>
  334. <span class="cline-any cline-neutral">&nbsp;</span>
  335. <span class="cline-any cline-neutral">&nbsp;</span>
  336. <span class="cline-any cline-neutral">&nbsp;</span>
  337. <span class="cline-any cline-yes">1x</span>
  338. <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const unquote = require('unquote')
  339. const systemFontKeywords = require('css-system-font-keywords')
  340. const fontWeightKeywords = require('css-font-weight-keywords')
  341. const fontStyleKeywords = require('css-font-style-keywords')
  342. const fontStretchKeywords = require('css-font-stretch-keywords')
  343. import * as cssListHelpers from 'css-list-helpers'
  344. import * as helpers from './helpers'
  345. &nbsp;
  346. export interface ISystemFont {
  347. system: string
  348. }
  349. &nbsp;
  350. export interface IFont {
  351. style?: string
  352. variant?: string
  353. weight?: string
  354. stretch?: string
  355. size?: string
  356. lineHeight?: string | number
  357. family?: string[]
  358. }
  359. &nbsp;
  360. const errorPrefix = '[parse-css-font]'
  361. &nbsp;
  362. const firstDeclarations: ['style', 'weight', 'stretch', 'variant'] = [
  363. 'style',
  364. 'weight',
  365. 'stretch',
  366. 'variant',
  367. ]
  368. &nbsp;
  369. export default function parseCSSFont(value: string) {
  370. if (typeof value !== 'string') {
  371. throw error('Expected a string.', TypeError)
  372. }
  373. &nbsp;
  374. if (value === '') {
  375. throw error('Cannot parse an empty string.')
  376. }
  377. &nbsp;
  378. if (systemFontKeywords.indexOf(value) !== -1) {
  379. return { system: value } as ISystemFont
  380. }
  381. &nbsp;
  382. const font: IFont = {
  383. lineHeight: 'normal',
  384. stretch: '',
  385. style: '',
  386. variant: '',
  387. weight: '',
  388. }
  389. &nbsp;
  390. const consumers = [style, weight, stretch, variant]
  391. const tokens = cssListHelpers.splitBySpaces(value)
  392. nextToken: for (
  393. let token = tokens.shift();
  394. !!token;
  395. token = tokens.shift()
  396. ) {
  397. if (token === 'normal') {
  398. continue
  399. }
  400. &nbsp;
  401. for (const consume of consumers) {
  402. if (consume(token)) {
  403. continue nextToken
  404. }
  405. }
  406. &nbsp;
  407. const parts = cssListHelpers.split(token, ['/'])
  408. font.size = parts[0]
  409. if (!!parts[1]) {
  410. font.lineHeight = parseLineHeight(parts[1])
  411. } else if (tokens[0] === '/') {
  412. tokens.shift()
  413. font.lineHeight = parseLineHeight(tokens.shift() as string)
  414. }
  415. if (!tokens.length) {
  416. throw error('Missing required font-family.')
  417. }
  418. font.family = cssListHelpers.splitByCommas(tokens.join(' ')).map(unquote)
  419. &nbsp;
  420. for (const name of firstDeclarations) {
  421. font[name] = font[name] || 'normal'
  422. }
  423. &nbsp;
  424. return font
  425. }
  426. &nbsp;
  427. throw error('Missing required font-size.')
  428. &nbsp;
  429. function style(token: string) {
  430. if (fontStyleKeywords.indexOf(token) === -1) {
  431. return
  432. }
  433. if (font.style) {
  434. throw error('Font style already defined.')
  435. }
  436. return (font.style = token)
  437. }
  438. &nbsp;
  439. function weight(token: string) {
  440. if (fontWeightKeywords.indexOf(token) === -1) {
  441. return
  442. }
  443. if (font.weight) {
  444. throw error('Font weight already defined.')
  445. }
  446. return (font.weight = token)
  447. }
  448. &nbsp;
  449. function stretch(token: string) {
  450. if (fontStretchKeywords.indexOf(token) === -1) {
  451. return
  452. }
  453. if (font.stretch) {
  454. throw error('Font stretch already defined.')
  455. }
  456. return (font.stretch = token)
  457. }
  458. &nbsp;
  459. function variant(token: string) {
  460. return (
  461. !helpers.isSize(token) &amp;&amp;
  462. (font.variant = font.variant ? [font.variant, token].join(' ') : token)
  463. )
  464. }
  465. }
  466. &nbsp;
  467. function error(
  468. message: string,
  469. ErrorType: typeof Error | typeof TypeError = Error,
  470. ) {
  471. return new ErrorType(`${errorPrefix} ${message}`)
  472. }
  473. &nbsp;
  474. function parseLineHeight(value: string) {
  475. const parsed = parseFloat(value)
  476. if (parsed.toString() === value) {
  477. return parsed
  478. }
  479. return value
  480. }
  481. &nbsp;
  482. // @ts-ignore
  483. module.exports = Object.assign(exports.default, exports)
  484. &nbsp;</pre></td></tr>
  485. </table></pre>
  486. <div class='push'></div><!-- for sticky footer -->
  487. </div><!-- /wrapper -->
  488. <div class='footer quiet pad2 space-top1 center small'>
  489. Code coverage
  490. generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Jan 28 2019 01:02:41 GMT-0600 (Central Standard Time)
  491. </div>
  492. </div>
  493. <script src="prettify.js"></script>
  494. <script>
  495. window.onload = function () {
  496. if (typeof prettyPrint === 'function') {
  497. prettyPrint();
  498. }
  499. };
  500. </script>
  501. <script src="sorter.js"></script>
  502. </body>
  503. </html>