From ea075b488ba7faff5d980026961e6a6920a878f8 Mon Sep 17 00:00:00 2001 From: Zane Rockenbaugh Date: Sun, 1 Sep 2024 19:01:58 -0500 Subject: [PATCH 1/3] Saving QA files for release v1.0.0-alpha.9. --- qa/coverage/base.css | 224 +++++ qa/coverage/block-navigation.js | 87 ++ qa/coverage/clover.xml | 711 ++++++++++++++ qa/coverage/coverage-final.json | 25 + qa/coverage/favicon.png | Bin 0 -> 445 bytes qa/coverage/index.html | 146 +++ qa/coverage/prettify.css | 1 + qa/coverage/prettify.js | 2 + qa/coverage/sort-arrow-sprite.png | Bin 0 -> 138 bytes qa/coverage/sorter.js | 196 ++++ qa/coverage/src/boolean-string.mjs.html | 481 ++++++++++ qa/coverage/src/card-number.mjs.html | 559 +++++++++++ qa/coverage/src/date-time.mjs.html | 865 ++++++++++++++++++ qa/coverage/src/day.mjs.html | 577 ++++++++++++ qa/coverage/src/ein.mjs.html | 238 +++++ qa/coverage/src/email.mjs.html | 544 +++++++++++ qa/coverage/src/index.html | 266 ++++++ qa/coverage/src/integer.mjs.html | 319 +++++++ qa/coverage/src/lib/check-max-min.mjs.html | 157 ++++ .../src/lib/check-validate-input.mjs.html | 118 +++ .../src/lib/check-validate-value.mjs.html | 118 +++ .../lib/date-time/convert-month-name.mjs.html | 175 ++++ ...convert-timezone-offset-to-string.mjs.html | 130 +++ .../date-time/get-timezone-offset.mjs.html | 277 ++++++ qa/coverage/src/lib/date-time/index.html | 206 +++++ .../date-time/make-date-time-string.mjs.html | 154 ++++ .../process-idiomatic-date-time.mjs.html | 541 +++++++++++ .../process-iso-8601-date-time.mjs.html | 385 ++++++++ .../process-rfc-2822-date-time.mjs.html | 199 ++++ qa/coverage/src/lib/index.html | 191 ++++ .../src/lib/possible-boolean-values.mjs.html | 169 ++++ qa/coverage/src/lib/type-checks.mjs.html | 148 +++ qa/coverage/src/lib/validate-helper.mjs.html | 169 ++++ qa/coverage/src/numeric.mjs.html | 313 +++++++ qa/coverage/src/ssn.mjs.html | 238 +++++ qa/coverage/src/time-of-day.mjs.html | 553 +++++++++++ qa/coverage/src/validated-string.mjs.html | 484 ++++++++++ qa/lint.txt | 1 + qa/unit-test.txt | 60 ++ 39 files changed, 10027 insertions(+) create mode 100644 qa/coverage/base.css create mode 100644 qa/coverage/block-navigation.js create mode 100644 qa/coverage/clover.xml create mode 100644 qa/coverage/coverage-final.json create mode 100644 qa/coverage/favicon.png create mode 100644 qa/coverage/index.html create mode 100644 qa/coverage/prettify.css create mode 100644 qa/coverage/prettify.js create mode 100644 qa/coverage/sort-arrow-sprite.png create mode 100644 qa/coverage/sorter.js create mode 100644 qa/coverage/src/boolean-string.mjs.html create mode 100644 qa/coverage/src/card-number.mjs.html create mode 100644 qa/coverage/src/date-time.mjs.html create mode 100644 qa/coverage/src/day.mjs.html create mode 100644 qa/coverage/src/ein.mjs.html create mode 100644 qa/coverage/src/email.mjs.html create mode 100644 qa/coverage/src/index.html create mode 100644 qa/coverage/src/integer.mjs.html create mode 100644 qa/coverage/src/lib/check-max-min.mjs.html create mode 100644 qa/coverage/src/lib/check-validate-input.mjs.html create mode 100644 qa/coverage/src/lib/check-validate-value.mjs.html create mode 100644 qa/coverage/src/lib/date-time/convert-month-name.mjs.html create mode 100644 qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html create mode 100644 qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html create mode 100644 qa/coverage/src/lib/date-time/index.html create mode 100644 qa/coverage/src/lib/date-time/make-date-time-string.mjs.html create mode 100644 qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html create mode 100644 qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html create mode 100644 qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html create mode 100644 qa/coverage/src/lib/index.html create mode 100644 qa/coverage/src/lib/possible-boolean-values.mjs.html create mode 100644 qa/coverage/src/lib/type-checks.mjs.html create mode 100644 qa/coverage/src/lib/validate-helper.mjs.html create mode 100644 qa/coverage/src/numeric.mjs.html create mode 100644 qa/coverage/src/ssn.mjs.html create mode 100644 qa/coverage/src/time-of-day.mjs.html create mode 100644 qa/coverage/src/validated-string.mjs.html create mode 100644 qa/lint.txt create mode 100644 qa/unit-test.txt diff --git a/qa/coverage/base.css b/qa/coverage/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/qa/coverage/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/qa/coverage/block-navigation.js b/qa/coverage/block-navigation.js new file mode 100644 index 0000000..cc12130 --- /dev/null +++ b/qa/coverage/block-navigation.js @@ -0,0 +1,87 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + if ( + document.getElementById('fileSearch') === document.activeElement && + document.activeElement != null + ) { + // if we're currently focused on the search input, we don't want to navigate + return; + } + + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/qa/coverage/clover.xml b/qa/coverage/clover.xml new file mode 100644 index 0000000..5ccf953 --- /dev/null +++ b/qa/coverage/clover.xml @@ -0,0 +1,711 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qa/coverage/coverage-final.json b/qa/coverage/coverage-final.json new file mode 100644 index 0000000..37ef46b --- /dev/null +++ b/qa/coverage/coverage-final.json @@ -0,0 +1,25 @@ +{"/Users/zane/playground/string-input/src/boolean-string.mjs": {"path":"/Users/zane/playground/string-input/src/boolean-string.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":28,"column":19},"end":{"line":127,"column":1}},"7":{"start":{"line":28,"column":46},"end":{"line":28,"column":59}},"8":{"start":{"line":36,"column":6},"end":{"line":30,"column":8}},"9":{"start":{"line":36,"column":6},"end":{"line":31,"column":19}},"10":{"start":{"line":31,"column":19},"end":{"line":31,"column":null}},"11":{"start":{"line":36,"column":6},"end":{"line":32,"column":13}},"12":{"start":{"line":32,"column":13},"end":{"line":32,"column":null}},"13":{"start":{"line":36,"column":6},"end":{"line":33,"column":11}},"14":{"start":{"line":33,"column":11},"end":{"line":33,"column":null}},"15":{"start":{"line":36,"column":6},"end":{"line":34,"column":10}},"16":{"start":{"line":36,"column":6},"end":{"line":35,"column":30}},"17":{"start":{"line":35,"column":30},"end":{"line":35,"column":null}},"18":{"start":{"line":38,"column":2},"end":{"line":38,"column":null}},"19":{"start":{"line":40,"column":2},"end":{"line":40,"column":null}},"20":{"start":{"line":42,"column":2},"end":{"line":53,"column":null}},"21":{"start":{"line":46,"column":4},"end":{"line":52,"column":null}},"22":{"start":{"line":55,"column":2},"end":{"line":66,"column":null}},"23":{"start":{"line":59,"column":4},"end":{"line":65,"column":null}},"24":{"start":{"line":69,"column":2},"end":{"line":117,"column":null}},"25":{"start":{"line":70,"column":4},"end":{"line":70,"column":null}},"26":{"start":{"line":72,"column":7},"end":{"line":117,"column":null}},"27":{"start":{"line":73,"column":4},"end":{"line":73,"column":null}},"28":{"start":{"line":76,"column":25},"end":{"line":76,"column":49}},"29":{"start":{"line":77,"column":4},"end":{"line":98,"column":null}},"30":{"start":{"line":78,"column":6},"end":{"line":84,"column":null}},"31":{"start":{"line":86,"column":9},"end":{"line":98,"column":null}},"32":{"start":{"line":91,"column":6},"end":{"line":97,"column":null}},"33":{"start":{"line":99,"column":4},"end":{"line":116,"column":null}},"34":{"start":{"line":103,"column":6},"end":{"line":103,"column":null}},"35":{"start":{"line":105,"column":9},"end":{"line":116,"column":null}},"36":{"start":{"line":106,"column":6},"end":{"line":106,"column":null}},"37":{"start":{"line":109,"column":6},"end":{"line":115,"column":null}},"38":{"start":{"line":119,"column":28},"end":{"line":122,"column":3}},"39":{"start":{"line":123,"column":2},"end":{"line":123,"column":null}},"40":{"start":{"line":124,"column":2},"end":{"line":124,"column":null}},"41":{"start":{"line":126,"column":2},"end":{"line":126,"column":null}},"42":{"start":{"line":129,"column":0},"end":{"line":129,"column":null}},"43":{"start":{"line":130,"column":0},"end":{"line":130,"column":null}},"44":{"start":{"line":130,"column":25},"end":{"line":130,"column":null}}},"fnMap":{"0":{"name":"BooleanString","decl":{"start":{"line":28,"column":6},"end":{"line":28,"column":19}},"loc":{"start":{"line":28,"column":61},"end":{"line":127,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":130,"column":25},"end":{"line":130,"column":31}},"loc":{"start":{"line":130,"column":25},"end":{"line":130,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":46},"end":{"line":28,"column":59}},"type":"cond-expr","locations":[{"start":{"line":28,"column":46},"end":{"line":28,"column":49}},{"start":{"line":28,"column":49},"end":{"line":28,"column":59}}]},"1":{"loc":{"start":{"line":28,"column":46},"end":{"line":28,"column":49}},"type":"binary-expr","locations":[{"start":{"line":28,"column":46},"end":{"line":28,"column":49}},{"start":{"line":28,"column":46},"end":{"line":28,"column":49}}]},"2":{"loc":{"start":{"line":28,"column":49},"end":{"line":28,"column":59}},"type":"binary-expr","locations":[{"start":{"line":28,"column":49},"end":{"line":28,"column":53}},{"start":{"line":28,"column":57},"end":{"line":28,"column":59}}]},"3":{"loc":{"start":{"line":31,"column":19},"end":{"line":31,"column":null}},"type":"cond-expr","locations":[{"start":{"line":31,"column":22},"end":{"line":31,"column":27}},{"start":{"line":31,"column":27},"end":{"line":31,"column":null}}]},"4":{"loc":{"start":{"line":32,"column":13},"end":{"line":32,"column":null}},"type":"cond-expr","locations":[{"start":{"line":32,"column":16},"end":{"line":32,"column":21}},{"start":{"line":32,"column":21},"end":{"line":32,"column":null}}]},"5":{"loc":{"start":{"line":33,"column":11},"end":{"line":33,"column":null}},"type":"cond-expr","locations":[{"start":{"line":33,"column":14},"end":{"line":33,"column":19}},{"start":{"line":33,"column":19},"end":{"line":33,"column":null}}]},"6":{"loc":{"start":{"line":35,"column":30},"end":{"line":35,"column":null}},"type":"cond-expr","locations":[{"start":{"line":35,"column":33},"end":{"line":35,"column":38}},{"start":{"line":35,"column":38},"end":{"line":35,"column":null}}]},"7":{"loc":{"start":{"line":42,"column":2},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":53,"column":null}}]},"8":{"loc":{"start":{"line":43,"column":4},"end":{"line":44,"column":73}},"type":"binary-expr","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":28}},{"start":{"line":44,"column":8},"end":{"line":44,"column":21}},{"start":{"line":44,"column":25},"end":{"line":44,"column":38}},{"start":{"line":44,"column":42},"end":{"line":44,"column":55}},{"start":{"line":44,"column":59},"end":{"line":44,"column":72}}]},"9":{"loc":{"start":{"line":55,"column":2},"end":{"line":66,"column":null}},"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":66,"column":null}}]},"10":{"loc":{"start":{"line":56,"column":4},"end":{"line":57,"column":76}},"type":"binary-expr","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},{"start":{"line":57,"column":8},"end":{"line":57,"column":23}},{"start":{"line":57,"column":27},"end":{"line":57,"column":40}},{"start":{"line":57,"column":44},"end":{"line":57,"column":58}},{"start":{"line":57,"column":62},"end":{"line":57,"column":75}}]},"11":{"loc":{"start":{"line":69,"column":2},"end":{"line":117,"column":null}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":117,"column":null}},{"start":{"line":72,"column":7},"end":{"line":117,"column":null}}]},"12":{"loc":{"start":{"line":72,"column":7},"end":{"line":117,"column":null}},"type":"if","locations":[{"start":{"line":72,"column":7},"end":{"line":117,"column":null}},{"start":{"line":75,"column":7},"end":{"line":117,"column":null}}]},"13":{"loc":{"start":{"line":77,"column":4},"end":{"line":98,"column":null}},"type":"if","locations":[{"start":{"line":77,"column":4},"end":{"line":98,"column":null}},{"start":{"line":86,"column":9},"end":{"line":98,"column":null}}]},"14":{"loc":{"start":{"line":77,"column":8},"end":{"line":77,"column":66}},"type":"binary-expr","locations":[{"start":{"line":77,"column":8},"end":{"line":77,"column":26}},{"start":{"line":77,"column":30},"end":{"line":77,"column":66}}]},"15":{"loc":{"start":{"line":86,"column":9},"end":{"line":98,"column":null}},"type":"if","locations":[{"start":{"line":86,"column":9},"end":{"line":98,"column":null}}]},"16":{"loc":{"start":{"line":87,"column":6},"end":{"line":88,"column":37}},"type":"binary-expr","locations":[{"start":{"line":87,"column":6},"end":{"line":87,"column":41}},{"start":{"line":88,"column":9},"end":{"line":88,"column":37}}]},"17":{"loc":{"start":{"line":99,"column":4},"end":{"line":116,"column":null}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":116,"column":null}},{"start":{"line":105,"column":9},"end":{"line":116,"column":null}}]},"18":{"loc":{"start":{"line":100,"column":6},"end":{"line":101,"column":66}},"type":"binary-expr","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":24}},{"start":{"line":101,"column":10},"end":{"line":101,"column":45}},{"start":{"line":101,"column":49},"end":{"line":101,"column":66}}]},"19":{"loc":{"start":{"line":105,"column":9},"end":{"line":116,"column":null}},"type":"if","locations":[{"start":{"line":105,"column":9},"end":{"line":116,"column":null}},{"start":{"line":108,"column":9},"end":{"line":116,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":34,"8":34,"9":34,"10":34,"11":34,"12":34,"13":34,"14":34,"15":34,"16":34,"17":34,"18":34,"19":34,"20":34,"21":5,"22":29,"23":5,"24":24,"25":6,"26":18,"27":5,"28":13,"29":13,"30":3,"31":10,"32":3,"33":7,"34":3,"35":4,"36":3,"37":1,"38":17,"39":17,"40":17,"41":17,"42":2,"43":2,"44":1},"f":{"0":34,"1":1},"b":{"0":[14,20],"1":[34,30],"2":[20,20],"3":[29,5],"4":[31,3],"5":[29,5],"6":[33,1],"7":[5],"8":[34,5,3,2,1],"9":[5],"10":[29,5,3,2,1],"11":[6,18],"12":[5,13],"13":[3,10],"14":[13,3],"15":[3],"16":[10,8],"17":[3,4],"18":[7,5,1],"19":[3,1]}} +,"/Users/zane/playground/string-input/src/card-number.mjs": {"path":"/Users/zane/playground/string-input/src/card-number.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":8,"column":13},"end":{"line":8,"column":19}},"6":{"start":{"line":9,"column":26},"end":{"line":9,"column":61}},"7":{"start":{"line":10,"column":20},"end":{"line":10,"column":41}},"8":{"start":{"line":30,"column":16},"end":{"line":137,"column":1}},"9":{"start":{"line":30,"column":43},"end":{"line":30,"column":56}},"10":{"start":{"line":36,"column":6},"end":{"line":32,"column":8}},"11":{"start":{"line":36,"column":6},"end":{"line":33,"column":8}},"12":{"start":{"line":36,"column":6},"end":{"line":34,"column":11}},"13":{"start":{"line":34,"column":11},"end":{"line":34,"column":null}},"14":{"start":{"line":36,"column":6},"end":{"line":35,"column":10}},"15":{"start":{"line":38,"column":2},"end":{"line":38,"column":null}},"16":{"start":{"line":40,"column":2},"end":{"line":48,"column":null}},"17":{"start":{"line":41,"column":4},"end":{"line":47,"column":null}},"18":{"start":{"line":50,"column":23},"end":{"line":50,"column":56}},"19":{"start":{"line":51,"column":2},"end":{"line":59,"column":null}},"20":{"start":{"line":52,"column":4},"end":{"line":58,"column":null}},"21":{"start":{"line":61,"column":2},"end":{"line":116,"column":null}},"22":{"start":{"line":64,"column":6},"end":{"line":77,"column":7}},"23":{"start":{"line":65,"column":8},"end":{"line":74,"column":null}},"24":{"start":{"line":66,"column":10},"end":{"line":73,"column":null}},"25":{"start":{"line":76,"column":8},"end":{"line":76,"column":null}},"26":{"start":{"line":78,"column":20},"end":{"line":78,"column":41}},"27":{"start":{"line":79,"column":6},"end":{"line":107,"column":null}},"28":{"start":{"line":80,"column":8},"end":{"line":80,"column":null}},"29":{"start":{"line":82,"column":11},"end":{"line":107,"column":null}},"30":{"start":{"line":83,"column":28},"end":{"line":83,"column":43}},"31":{"start":{"line":84,"column":8},"end":{"line":92,"column":null}},"32":{"start":{"line":85,"column":10},"end":{"line":91,"column":null}},"33":{"start":{"line":93,"column":20},"end":{"line":93,"column":38}},"34":{"start":{"line":94,"column":20},"end":{"line":94,"column":38}},"35":{"start":{"line":95,"column":25},"end":{"line":95,"column":59}},"36":{"start":{"line":96,"column":28},"end":{"line":96,"column":46}},"37":{"start":{"line":98,"column":8},"end":{"line":98,"column":null}},"38":{"start":{"line":101,"column":8},"end":{"line":106,"column":null}},"39":{"start":{"line":110,"column":4},"end":{"line":115,"column":null}},"40":{"start":{"line":118,"column":28},"end":{"line":121,"column":3}},"41":{"start":{"line":122,"column":2},"end":{"line":122,"column":null}},"42":{"start":{"line":124,"column":2},"end":{"line":132,"column":null}},"43":{"start":{"line":125,"column":4},"end":{"line":131,"column":null}},"44":{"start":{"line":134,"column":2},"end":{"line":134,"column":null}},"45":{"start":{"line":136,"column":2},"end":{"line":136,"column":null}},"46":{"start":{"line":139,"column":0},"end":{"line":139,"column":null}},"47":{"start":{"line":140,"column":0},"end":{"line":140,"column":null}},"48":{"start":{"line":140,"column":22},"end":{"line":140,"column":null}}},"fnMap":{"0":{"name":"CardNumber","decl":{"start":{"line":30,"column":6},"end":{"line":30,"column":16}},"loc":{"start":{"line":30,"column":58},"end":{"line":137,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":26},"end":{"line":108,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":140,"column":22},"end":{"line":140,"column":28}},"loc":{"start":{"line":140,"column":22},"end":{"line":140,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":30,"column":43},"end":{"line":30,"column":56}},"type":"cond-expr","locations":[{"start":{"line":30,"column":43},"end":{"line":30,"column":46}},{"start":{"line":30,"column":46},"end":{"line":30,"column":56}}]},"1":{"loc":{"start":{"line":30,"column":43},"end":{"line":30,"column":46}},"type":"binary-expr","locations":[{"start":{"line":30,"column":43},"end":{"line":30,"column":46}},{"start":{"line":30,"column":43},"end":{"line":30,"column":46}}]},"2":{"loc":{"start":{"line":30,"column":46},"end":{"line":30,"column":56}},"type":"binary-expr","locations":[{"start":{"line":30,"column":46},"end":{"line":30,"column":50}},{"start":{"line":30,"column":54},"end":{"line":30,"column":56}}]},"3":{"loc":{"start":{"line":34,"column":11},"end":{"line":34,"column":null}},"type":"cond-expr","locations":[{"start":{"line":34,"column":14},"end":{"line":34,"column":46}},{"start":{"line":34,"column":46},"end":{"line":34,"column":null}}]},"4":{"loc":{"start":{"line":40,"column":2},"end":{"line":48,"column":null}},"type":"if","locations":[{"start":{"line":40,"column":2},"end":{"line":48,"column":null}}]},"5":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":null}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":null}}]},"6":{"loc":{"start":{"line":51,"column":6},"end":{"line":51,"column":69}},"type":"binary-expr","locations":[{"start":{"line":51,"column":6},"end":{"line":51,"column":27}},{"start":{"line":51,"column":31},"end":{"line":51,"column":69}}]},"7":{"loc":{"start":{"line":61,"column":2},"end":{"line":116,"column":null}},"type":"if","locations":[{"start":{"line":61,"column":2},"end":{"line":116,"column":null}}]},"8":{"loc":{"start":{"line":62,"column":4},"end":{"line":108,"column":15}},"type":"binary-expr","locations":[{"start":{"line":62,"column":4},"end":{"line":62,"column":22}},{"start":{"line":63,"column":7},"end":{"line":108,"column":15}}]},"9":{"loc":{"start":{"line":64,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":64,"column":6},"end":{"line":77,"column":7}}]},"10":{"loc":{"start":{"line":65,"column":8},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":65,"column":8},"end":{"line":74,"column":null}}]},"11":{"loc":{"start":{"line":79,"column":6},"end":{"line":107,"column":null}},"type":"if","locations":[{"start":{"line":79,"column":6},"end":{"line":107,"column":null}},{"start":{"line":82,"column":11},"end":{"line":107,"column":null}}]},"12":{"loc":{"start":{"line":82,"column":11},"end":{"line":107,"column":null}},"type":"if","locations":[{"start":{"line":82,"column":11},"end":{"line":107,"column":null}},{"start":{"line":100,"column":11},"end":{"line":107,"column":null}}]},"13":{"loc":{"start":{"line":84,"column":8},"end":{"line":92,"column":null}},"type":"if","locations":[{"start":{"line":84,"column":8},"end":{"line":92,"column":null}}]},"14":{"loc":{"start":{"line":98,"column":15},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":15},"end":{"line":98,"column":33}},{"start":{"line":98,"column":37},"end":{"line":98,"column":55}}]},"15":{"loc":{"start":{"line":124,"column":2},"end":{"line":132,"column":null}},"type":"if","locations":[{"start":{"line":124,"column":2},"end":{"line":132,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":46,"10":46,"11":46,"12":46,"13":46,"14":46,"15":46,"16":42,"17":2,"18":40,"19":40,"20":4,"21":36,"22":19,"23":5,"24":2,"25":3,"26":14,"27":14,"28":6,"29":8,"30":6,"31":6,"32":2,"33":4,"34":4,"35":4,"36":4,"37":4,"38":2,"39":8,"40":22,"41":22,"42":18,"43":2,"44":16,"45":12,"46":2,"47":2,"48":5},"f":{"0":46,"1":19,"2":5},"b":{"0":[24,22],"1":[46,29],"2":[22,5],"3":[46,0],"4":[2],"5":[4],"6":[40,40],"7":[8],"8":[36,19],"9":[5],"10":[2],"11":[6,8],"12":[6,2],"13":[2],"14":[4,2],"15":[2]}} +,"/Users/zane/playground/string-input/src/date-time.mjs": {"path":"/Users/zane/playground/string-input/src/date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":8,"column":0},"end":{"line":8,"column":null}},"7":{"start":{"line":9,"column":0},"end":{"line":9,"column":null}},"8":{"start":{"line":10,"column":0},"end":{"line":10,"column":null}},"9":{"start":{"line":11,"column":0},"end":{"line":11,"column":null}},"10":{"start":{"line":12,"column":0},"end":{"line":12,"column":null}},"11":{"start":{"line":59,"column":14},"end":{"line":200,"column":1}},"12":{"start":{"line":59,"column":41},"end":{"line":59,"column":54}},"13":{"start":{"line":62,"column":55},"end":{"line":62,"column":14}},"14":{"start":{"line":62,"column":55},"end":{"line":62,"column":29}},"15":{"start":{"line":62,"column":55},"end":{"line":62,"column":36}},"16":{"start":{"line":62,"column":55},"end":{"line":62,"column":44}},"17":{"start":{"line":62,"column":44},"end":{"line":62,"column":55}},"18":{"start":{"line":63,"column":21},"end":{"line":63,"column":11}},"19":{"start":{"line":63,"column":21},"end":{"line":63,"column":16}},"20":{"start":{"line":65,"column":2},"end":{"line":65,"column":null}},"21":{"start":{"line":69,"column":23},"end":{"line":69,"column":53}},"22":{"start":{"line":70,"column":2},"end":{"line":74,"column":null}},"23":{"start":{"line":71,"column":4},"end":{"line":73,"column":null}},"24":{"start":{"line":76,"column":23},"end":{"line":76,"column":49}},"25":{"start":{"line":77,"column":2},"end":{"line":81,"column":null}},"26":{"start":{"line":78,"column":4},"end":{"line":80,"column":null}},"27":{"start":{"line":83,"column":2},"end":{"line":85,"column":null}},"28":{"start":{"line":84,"column":4},"end":{"line":84,"column":null}},"29":{"start":{"line":87,"column":2},"end":{"line":94,"column":null}},"30":{"start":{"line":88,"column":4},"end":{"line":93,"column":null}},"31":{"start":{"line":96,"column":28},"end":{"line":99,"column":3}},"32":{"start":{"line":100,"column":2},"end":{"line":100,"column":null}},"33":{"start":{"line":105,"column":2},"end":{"line":148,"column":null}},"34":{"start":{"line":106,"column":4},"end":{"line":109,"column":null}},"35":{"start":{"line":111,"column":7},"end":{"line":148,"column":null}},"36":{"start":{"line":112,"column":20},"end":{"line":112,"column":33}},"37":{"start":{"line":113,"column":4},"end":{"line":124,"column":null}},"38":{"start":{"line":126,"column":7},"end":{"line":148,"column":null}},"39":{"start":{"line":127,"column":4},"end":{"line":138,"column":null}},"40":{"start":{"line":140,"column":7},"end":{"line":148,"column":null}},"41":{"start":{"line":141,"column":4},"end":{"line":147,"column":null}},"42":{"start":{"line":150,"column":2},"end":{"line":194,"column":null}},"43":{"start":{"line":151,"column":4},"end":{"line":154,"column":null}},"44":{"start":{"line":156,"column":7},"end":{"line":194,"column":null}},"45":{"start":{"line":157,"column":20},"end":{"line":157,"column":33}},"46":{"start":{"line":158,"column":4},"end":{"line":169,"column":null}},"47":{"start":{"line":171,"column":7},"end":{"line":194,"column":null}},"48":{"start":{"line":172,"column":4},"end":{"line":183,"column":null}},"49":{"start":{"line":185,"column":7},"end":{"line":194,"column":null}},"50":{"start":{"line":187,"column":4},"end":{"line":193,"column":null}},"51":{"start":{"line":195,"column":2},"end":{"line":195,"column":null}},"52":{"start":{"line":197,"column":2},"end":{"line":197,"column":null}},"53":{"start":{"line":199,"column":2},"end":{"line":199,"column":null}},"54":{"start":{"line":202,"column":0},"end":{"line":202,"column":null}},"55":{"start":{"line":203,"column":0},"end":{"line":203,"column":null}},"56":{"start":{"line":203,"column":20},"end":{"line":203,"column":null}},"57":{"start":{"line":205,"column":20},"end":{"line":258,"column":1}},"58":{"start":{"line":215,"column":6},"end":{"line":215,"column":null}},"59":{"start":{"line":206,"column":6},"end":{"line":206,"column":null}},"60":{"start":{"line":207,"column":7},"end":{"line":207,"column":null}},"61":{"start":{"line":208,"column":5},"end":{"line":208,"column":null}},"62":{"start":{"line":209,"column":7},"end":{"line":209,"column":null}},"63":{"start":{"line":210,"column":7},"end":{"line":210,"column":null}},"64":{"start":{"line":211,"column":9},"end":{"line":211,"column":null}},"65":{"start":{"line":212,"column":9},"end":{"line":212,"column":null}},"66":{"start":{"line":213,"column":13},"end":{"line":213,"column":null}},"67":{"start":{"line":214,"column":16},"end":{"line":214,"column":null}},"68":{"start":{"line":216,"column":13},"end":{"line":216,"column":58}},"69":{"start":{"line":217,"column":21},"end":{"line":226,"column":4}},"70":{"start":{"line":227,"column":15},"end":{"line":227,"column":35}},"71":{"start":{"line":229,"column":2},"end":{"line":257,"column":null}},"72":{"start":{"line":230,"column":20},"end":{"line":230,"column":null}},"73":{"start":{"line":231,"column":11},"end":{"line":231,"column":null}},"74":{"start":{"line":232,"column":12},"end":{"line":232,"column":null}},"75":{"start":{"line":233,"column":17},"end":{"line":233,"column":null}},"76":{"start":{"line":234,"column":9},"end":{"line":234,"column":null}},"77":{"start":{"line":235,"column":12},"end":{"line":235,"column":null}},"78":{"start":{"line":236,"column":14},"end":{"line":236,"column":null}},"79":{"start":{"line":237,"column":14},"end":{"line":237,"column":null}},"80":{"start":{"line":238,"column":24},"end":{"line":238,"column":null}},"81":{"start":{"line":239,"column":19},"end":{"line":239,"column":null}},"82":{"start":{"line":240,"column":21},"end":{"line":240,"column":null}},"83":{"start":{"line":241,"column":11},"end":{"line":241,"column":null}},"84":{"start":{"line":245,"column":11},"end":{"line":245,"column":null}},"85":{"start":{"line":246,"column":12},"end":{"line":256,"column":null}}},"fnMap":{"0":{"name":"DateTime","decl":{"start":{"line":59,"column":6},"end":{"line":59,"column":14}},"loc":{"start":{"line":59,"column":56},"end":{"line":200,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":203,"column":20},"end":{"line":203,"column":26}},"loc":{"start":{"line":203,"column":20},"end":{"line":203,"column":null}}},"2":{"name":"createValue","decl":{"start":{"line":205,"column":6},"end":{"line":205,"column":17}},"loc":{"start":{"line":215,"column":6},"end":{"line":258,"column":1}}},"3":{"name":"isDateTimeObject","decl":{"start":{"line":230,"column":4},"end":{"line":230,"column":20}},"loc":{"start":{"line":230,"column":20},"end":{"line":230,"column":null}}},"4":{"name":"getYear","decl":{"start":{"line":231,"column":4},"end":{"line":231,"column":11}},"loc":{"start":{"line":231,"column":11},"end":{"line":231,"column":null}}},"5":{"name":"getMonth","decl":{"start":{"line":232,"column":4},"end":{"line":232,"column":12}},"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":null}}},"6":{"name":"getDayOfMonth","decl":{"start":{"line":233,"column":4},"end":{"line":233,"column":17}},"loc":{"start":{"line":233,"column":17},"end":{"line":233,"column":null}}},"7":{"name":"isEod","decl":{"start":{"line":234,"column":4},"end":{"line":234,"column":9}},"loc":{"start":{"line":234,"column":9},"end":{"line":234,"column":null}}},"8":{"name":"getHours","decl":{"start":{"line":235,"column":4},"end":{"line":235,"column":12}},"loc":{"start":{"line":235,"column":12},"end":{"line":235,"column":null}}},"9":{"name":"getMinutes","decl":{"start":{"line":236,"column":4},"end":{"line":236,"column":14}},"loc":{"start":{"line":236,"column":14},"end":{"line":236,"column":null}}},"10":{"name":"getSeconds","decl":{"start":{"line":237,"column":4},"end":{"line":237,"column":14}},"loc":{"start":{"line":237,"column":14},"end":{"line":237,"column":null}}},"11":{"name":"getFractionalSeconds","decl":{"start":{"line":238,"column":4},"end":{"line":238,"column":24}},"loc":{"start":{"line":238,"column":24},"end":{"line":238,"column":null}}},"12":{"name":"getMilliseconds","decl":{"start":{"line":239,"column":4},"end":{"line":239,"column":19}},"loc":{"start":{"line":239,"column":19},"end":{"line":239,"column":null}}},"13":{"name":"getTimezoneOffset","decl":{"start":{"line":240,"column":4},"end":{"line":240,"column":21}},"loc":{"start":{"line":240,"column":21},"end":{"line":240,"column":null}}},"14":{"name":"getDate","decl":{"start":{"line":241,"column":4},"end":{"line":241,"column":11}},"loc":{"start":{"line":241,"column":11},"end":{"line":241,"column":null}}},"15":{"name":"valueOf","decl":{"start":{"line":245,"column":4},"end":{"line":245,"column":11}},"loc":{"start":{"line":245,"column":11},"end":{"line":245,"column":null}}},"16":{"name":"toString","decl":{"start":{"line":246,"column":4},"end":{"line":246,"column":12}},"loc":{"start":{"line":246,"column":12},"end":{"line":256,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":59,"column":41},"end":{"line":59,"column":54}},"type":"cond-expr","locations":[{"start":{"line":59,"column":41},"end":{"line":59,"column":44}},{"start":{"line":59,"column":44},"end":{"line":59,"column":54}}]},"1":{"loc":{"start":{"line":59,"column":41},"end":{"line":59,"column":44}},"type":"binary-expr","locations":[{"start":{"line":59,"column":41},"end":{"line":59,"column":44}},{"start":{"line":59,"column":41},"end":{"line":59,"column":44}}]},"2":{"loc":{"start":{"line":59,"column":44},"end":{"line":59,"column":54}},"type":"binary-expr","locations":[{"start":{"line":59,"column":44},"end":{"line":59,"column":48}},{"start":{"line":59,"column":52},"end":{"line":59,"column":54}}]},"3":{"loc":{"start":{"line":62,"column":44},"end":{"line":62,"column":55}},"type":"cond-expr","locations":[{"start":{"line":62,"column":47},"end":{"line":62,"column":50}},{"start":{"line":62,"column":50},"end":{"line":62,"column":55}}]},"4":{"loc":{"start":{"line":70,"column":2},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":2},"end":{"line":74,"column":null}}]},"5":{"loc":{"start":{"line":77,"column":2},"end":{"line":81,"column":null}},"type":"if","locations":[{"start":{"line":77,"column":2},"end":{"line":81,"column":null}}]},"6":{"loc":{"start":{"line":83,"column":2},"end":{"line":85,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":2},"end":{"line":85,"column":null}}]},"7":{"loc":{"start":{"line":87,"column":2},"end":{"line":94,"column":null}},"type":"if","locations":[{"start":{"line":87,"column":2},"end":{"line":94,"column":null}}]},"8":{"loc":{"start":{"line":87,"column":6},"end":{"line":87,"column":46}},"type":"binary-expr","locations":[{"start":{"line":87,"column":6},"end":{"line":87,"column":20}},{"start":{"line":87,"column":24},"end":{"line":87,"column":46}}]},"9":{"loc":{"start":{"line":105,"column":2},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":148,"column":null}},{"start":{"line":111,"column":7},"end":{"line":148,"column":null}}]},"10":{"loc":{"start":{"line":111,"column":7},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":111,"column":7},"end":{"line":148,"column":null}},{"start":{"line":126,"column":7},"end":{"line":148,"column":null}}]},"11":{"loc":{"start":{"line":126,"column":7},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":126,"column":7},"end":{"line":148,"column":null}},{"start":{"line":140,"column":7},"end":{"line":148,"column":null}}]},"12":{"loc":{"start":{"line":140,"column":7},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":140,"column":7},"end":{"line":148,"column":null}}]},"13":{"loc":{"start":{"line":140,"column":11},"end":{"line":140,"column":65}},"type":"binary-expr","locations":[{"start":{"line":140,"column":11},"end":{"line":140,"column":28}},{"start":{"line":140,"column":32},"end":{"line":140,"column":65}}]},"14":{"loc":{"start":{"line":140,"column":32},"end":{"line":140,"column":56}},"type":"cond-expr","locations":[{"start":{"line":140,"column":52},"end":{"line":140,"column":55}},{"start":{"line":140,"column":32},"end":{"line":140,"column":56}}]},"15":{"loc":{"start":{"line":140,"column":32},"end":{"line":140,"column":55}},"type":"binary-expr","locations":[{"start":{"line":140,"column":32},"end":{"line":140,"column":55}},{"start":{"line":140,"column":52},"end":{"line":140,"column":55}}]},"16":{"loc":{"start":{"line":150,"column":2},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":150,"column":2},"end":{"line":194,"column":null}},{"start":{"line":156,"column":7},"end":{"line":194,"column":null}}]},"17":{"loc":{"start":{"line":156,"column":7},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":156,"column":7},"end":{"line":194,"column":null}},{"start":{"line":171,"column":7},"end":{"line":194,"column":null}}]},"18":{"loc":{"start":{"line":171,"column":7},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":171,"column":7},"end":{"line":194,"column":null}},{"start":{"line":185,"column":7},"end":{"line":194,"column":null}}]},"19":{"loc":{"start":{"line":185,"column":7},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":185,"column":7},"end":{"line":194,"column":null}}]},"20":{"loc":{"start":{"line":185,"column":11},"end":{"line":185,"column":65}},"type":"binary-expr","locations":[{"start":{"line":185,"column":11},"end":{"line":185,"column":28}},{"start":{"line":185,"column":32},"end":{"line":185,"column":65}}]},"21":{"loc":{"start":{"line":185,"column":32},"end":{"line":185,"column":56}},"type":"cond-expr","locations":[{"start":{"line":185,"column":52},"end":{"line":185,"column":55}},{"start":{"line":185,"column":32},"end":{"line":185,"column":56}}]},"22":{"loc":{"start":{"line":185,"column":32},"end":{"line":185,"column":55}},"type":"binary-expr","locations":[{"start":{"line":185,"column":32},"end":{"line":185,"column":55}},{"start":{"line":185,"column":52},"end":{"line":185,"column":55}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":87,"13":87,"14":87,"15":87,"16":87,"17":87,"18":87,"19":87,"20":87,"21":81,"22":81,"23":1,"24":81,"25":81,"26":1,"27":81,"28":79,"29":70,"30":2,"31":68,"32":68,"33":66,"34":6,"35":60,"36":1,"37":1,"38":59,"39":3,"40":56,"41":2,"42":62,"43":8,"44":54,"45":1,"46":1,"47":53,"48":3,"49":50,"50":2,"51":58,"52":44,"53":42,"54":2,"55":2,"56":3,"57":2,"58":70,"59":70,"60":70,"61":70,"62":70,"63":70,"64":70,"65":70,"66":70,"67":70,"68":70,"69":70,"70":70,"71":70,"72":6,"73":21,"74":18,"75":18,"76":20,"77":18,"78":18,"79":18,"80":18,"81":18,"82":6,"83":3,"84":48,"85":28},"f":{"0":87,"1":3,"2":70,"3":6,"4":21,"5":18,"6":18,"7":20,"8":18,"9":18,"10":18,"11":18,"12":18,"13":6,"14":3,"15":48,"16":28},"b":{"0":[49,38],"1":[87,54],"2":[38,17],"3":[73,14],"4":[1],"5":[1],"6":[79],"7":[2],"8":[70,2],"9":[6,60],"10":[1,59],"11":[3,56],"12":[2],"13":[56,5],"14":[2,3],"15":[5,5],"16":[8,54],"17":[1,53],"18":[3,50],"19":[2],"20":[50,5],"21":[2,3],"22":[5,5]}} +,"/Users/zane/playground/string-input/src/day.mjs": {"path":"/Users/zane/playground/string-input/src/day.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":8,"column":0},"end":{"line":8,"column":null}},"7":{"start":{"line":39,"column":9},"end":{"line":120,"column":1}},"8":{"start":{"line":39,"column":36},"end":{"line":39,"column":49}},"9":{"start":{"line":40,"column":27},"end":{"line":40,"column":14}},"10":{"start":{"line":40,"column":27},"end":{"line":40,"column":22}},"11":{"start":{"line":41,"column":21},"end":{"line":41,"column":11}},"12":{"start":{"line":41,"column":21},"end":{"line":41,"column":16}},"13":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"14":{"start":{"line":45,"column":20},"end":{"line":45,"column":43}},"15":{"start":{"line":46,"column":18},"end":{"line":46,"column":39}},"16":{"start":{"line":47,"column":23},"end":{"line":47,"column":73}},"17":{"start":{"line":50,"column":4},"end":{"line":52,"column":37}},"18":{"start":{"line":54,"column":2},"end":{"line":70,"column":null}},"19":{"start":{"line":55,"column":4},"end":{"line":60,"column":null}},"20":{"start":{"line":62,"column":7},"end":{"line":70,"column":null}},"21":{"start":{"line":63,"column":4},"end":{"line":69,"column":null}},"22":{"start":{"line":72,"column":28},"end":{"line":75,"column":3}},"23":{"start":{"line":76,"column":2},"end":{"line":76,"column":null}},"24":{"start":{"line":78,"column":22},"end":{"line":78,"column":58}},"25":{"start":{"line":79,"column":15},"end":{"line":81,"column":3}},"26":{"start":{"line":83,"column":2},"end":{"line":88,"column":null}},"27":{"start":{"line":84,"column":4},"end":{"line":84,"column":null}},"28":{"start":{"line":87,"column":4},"end":{"line":87,"column":null}},"29":{"start":{"line":89,"column":14},"end":{"line":89,"column":75}},"30":{"start":{"line":93,"column":15},"end":{"line":93,"column":45}},"31":{"start":{"line":95,"column":2},"end":{"line":97,"column":null}},"32":{"start":{"line":96,"column":4},"end":{"line":96,"column":null}},"33":{"start":{"line":98,"column":2},"end":{"line":100,"column":null}},"34":{"start":{"line":99,"column":4},"end":{"line":99,"column":null}},"35":{"start":{"line":102,"column":2},"end":{"line":102,"column":null}},"36":{"start":{"line":105,"column":2},"end":{"line":113,"column":null}},"37":{"start":{"line":106,"column":4},"end":{"line":112,"column":null}},"38":{"start":{"line":115,"column":16},"end":{"line":115,"column":55}},"39":{"start":{"line":117,"column":2},"end":{"line":117,"column":null}},"40":{"start":{"line":119,"column":2},"end":{"line":119,"column":null}},"41":{"start":{"line":122,"column":0},"end":{"line":122,"column":null}},"42":{"start":{"line":123,"column":0},"end":{"line":123,"column":null}},"43":{"start":{"line":123,"column":15},"end":{"line":123,"column":null}},"44":{"start":{"line":125,"column":21},"end":{"line":151,"column":1}},"45":{"start":{"line":126,"column":2},"end":{"line":148,"column":3}},"46":{"start":{"line":127,"column":4},"end":{"line":127,"column":null}},"47":{"start":{"line":129,"column":7},"end":{"line":148,"column":3}},"48":{"start":{"line":130,"column":17},"end":{"line":130,"column":32}},"49":{"start":{"line":132,"column":4},"end":{"line":134,"column":null}},"50":{"start":{"line":136,"column":7},"end":{"line":148,"column":3}},"51":{"start":{"line":137,"column":4},"end":{"line":139,"column":null}},"52":{"start":{"line":141,"column":7},"end":{"line":148,"column":3}},"53":{"start":{"line":142,"column":4},"end":{"line":147,"column":null}},"54":{"start":{"line":150,"column":2},"end":{"line":150,"column":null}},"55":{"start":{"line":153,"column":20},"end":{"line":162,"column":2}},"56":{"start":{"line":153,"column":26},"end":{"line":153,"column":25}},"57":{"start":{"line":153,"column":33},"end":{"line":153,"column":32}},"58":{"start":{"line":153,"column":39},"end":{"line":153,"column":38}},"59":{"start":{"line":153,"column":45},"end":{"line":153,"column":44}},"60":{"start":{"line":153,"column":45},"end":{"line":162,"column":2}},"61":{"start":{"line":154,"column":13},"end":{"line":154,"column":null}},"62":{"start":{"line":155,"column":15},"end":{"line":155,"column":null}},"63":{"start":{"line":156,"column":10},"end":{"line":156,"column":null}},"64":{"start":{"line":157,"column":9},"end":{"line":157,"column":null}},"65":{"start":{"line":158,"column":9},"end":{"line":158,"column":null}},"66":{"start":{"line":159,"column":9},"end":{"line":159,"column":null}},"67":{"start":{"line":160,"column":10},"end":{"line":161,"column":null}}},"fnMap":{"0":{"name":"Day","decl":{"start":{"line":39,"column":6},"end":{"line":39,"column":9}},"loc":{"start":{"line":39,"column":51},"end":{"line":120,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":123,"column":15},"end":{"line":123,"column":21}},"loc":{"start":{"line":123,"column":15},"end":{"line":123,"column":null}}},"2":{"name":"convertToDay","decl":{"start":{"line":125,"column":6},"end":{"line":125,"column":18}},"loc":{"start":{"line":125,"column":58},"end":{"line":151,"column":1}}},"3":{"name":"createValue","decl":{"start":{"line":153,"column":6},"end":{"line":153,"column":17}},"loc":{"start":{"line":153,"column":17},"end":{"line":162,"column":2}}},"4":{"name":"isDayObject","decl":{"start":{"line":154,"column":2},"end":{"line":154,"column":13}},"loc":{"start":{"line":154,"column":13},"end":{"line":154,"column":null}}},"5":{"name":"getDayOfMonth","decl":{"start":{"line":155,"column":2},"end":{"line":155,"column":15}},"loc":{"start":{"line":155,"column":15},"end":{"line":155,"column":null}}},"6":{"name":"getMonth","decl":{"start":{"line":156,"column":2},"end":{"line":156,"column":10}},"loc":{"start":{"line":156,"column":10},"end":{"line":156,"column":null}}},"7":{"name":"getYear","decl":{"start":{"line":157,"column":2},"end":{"line":157,"column":9}},"loc":{"start":{"line":157,"column":9},"end":{"line":157,"column":null}}},"8":{"name":"getDate","decl":{"start":{"line":158,"column":2},"end":{"line":158,"column":9}},"loc":{"start":{"line":158,"column":9},"end":{"line":158,"column":null}}},"9":{"name":"valueOf","decl":{"start":{"line":159,"column":2},"end":{"line":159,"column":9}},"loc":{"start":{"line":159,"column":9},"end":{"line":159,"column":null}}},"10":{"name":"toString","decl":{"start":{"line":160,"column":2},"end":{"line":160,"column":10}},"loc":{"start":{"line":160,"column":10},"end":{"line":161,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":39,"column":36},"end":{"line":39,"column":49}},"type":"cond-expr","locations":[{"start":{"line":39,"column":36},"end":{"line":39,"column":39}},{"start":{"line":39,"column":39},"end":{"line":39,"column":49}}]},"1":{"loc":{"start":{"line":39,"column":36},"end":{"line":39,"column":39}},"type":"binary-expr","locations":[{"start":{"line":39,"column":36},"end":{"line":39,"column":39}},{"start":{"line":39,"column":36},"end":{"line":39,"column":39}}]},"2":{"loc":{"start":{"line":39,"column":39},"end":{"line":39,"column":49}},"type":"binary-expr","locations":[{"start":{"line":39,"column":39},"end":{"line":39,"column":43}},{"start":{"line":39,"column":47},"end":{"line":39,"column":49}}]},"3":{"loc":{"start":{"line":50,"column":5},"end":{"line":50,"column":31}},"type":"cond-expr","locations":[{"start":{"line":50,"column":26},"end":{"line":50,"column":27}},{"start":{"line":50,"column":30},"end":{"line":50,"column":31}}]},"4":{"loc":{"start":{"line":51,"column":7},"end":{"line":51,"column":31}},"type":"cond-expr","locations":[{"start":{"line":51,"column":26},"end":{"line":51,"column":27}},{"start":{"line":51,"column":30},"end":{"line":51,"column":31}}]},"5":{"loc":{"start":{"line":52,"column":7},"end":{"line":52,"column":36}},"type":"cond-expr","locations":[{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},{"start":{"line":52,"column":35},"end":{"line":52,"column":36}}]},"6":{"loc":{"start":{"line":54,"column":2},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":54,"column":2},"end":{"line":70,"column":null}},{"start":{"line":62,"column":7},"end":{"line":70,"column":null}}]},"7":{"loc":{"start":{"line":62,"column":7},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":62,"column":7},"end":{"line":70,"column":null}}]},"8":{"loc":{"start":{"line":78,"column":22},"end":{"line":78,"column":58}},"type":"binary-expr","locations":[{"start":{"line":78,"column":22},"end":{"line":78,"column":36}},{"start":{"line":78,"column":40},"end":{"line":78,"column":52}},{"start":{"line":78,"column":56},"end":{"line":78,"column":58}}]},"9":{"loc":{"start":{"line":78,"column":22},"end":{"line":78,"column":36}},"type":"cond-expr","locations":[{"start":{"line":78,"column":31},"end":{"line":78,"column":34}},{"start":{"line":78,"column":22},"end":{"line":78,"column":36}}]},"10":{"loc":{"start":{"line":78,"column":22},"end":{"line":78,"column":34}},"type":"binary-expr","locations":[{"start":{"line":78,"column":22},"end":{"line":78,"column":34}},{"start":{"line":78,"column":22},"end":{"line":78,"column":34}}]},"11":{"loc":{"start":{"line":78,"column":40},"end":{"line":78,"column":52}},"type":"cond-expr","locations":[{"start":{"line":78,"column":47},"end":{"line":78,"column":50}},{"start":{"line":78,"column":40},"end":{"line":78,"column":52}}]},"12":{"loc":{"start":{"line":78,"column":40},"end":{"line":78,"column":50}},"type":"binary-expr","locations":[{"start":{"line":78,"column":40},"end":{"line":78,"column":50}},{"start":{"line":78,"column":40},"end":{"line":78,"column":50}}]},"13":{"loc":{"start":{"line":80,"column":19},"end":{"line":80,"column":null}},"type":"binary-expr","locations":[{"start":{"line":80,"column":19},"end":{"line":80,"column":33}},{"start":{"line":80,"column":37},"end":{"line":80,"column":49}},{"start":{"line":80,"column":53},"end":{"line":80,"column":70}}]},"14":{"loc":{"start":{"line":80,"column":19},"end":{"line":80,"column":33}},"type":"cond-expr","locations":[{"start":{"line":80,"column":28},"end":{"line":80,"column":31}},{"start":{"line":80,"column":19},"end":{"line":80,"column":33}}]},"15":{"loc":{"start":{"line":80,"column":19},"end":{"line":80,"column":31}},"type":"binary-expr","locations":[{"start":{"line":80,"column":19},"end":{"line":80,"column":31}},{"start":{"line":80,"column":19},"end":{"line":80,"column":31}}]},"16":{"loc":{"start":{"line":80,"column":37},"end":{"line":80,"column":49}},"type":"cond-expr","locations":[{"start":{"line":80,"column":44},"end":{"line":80,"column":47}},{"start":{"line":80,"column":37},"end":{"line":80,"column":49}}]},"17":{"loc":{"start":{"line":80,"column":37},"end":{"line":80,"column":47}},"type":"binary-expr","locations":[{"start":{"line":80,"column":37},"end":{"line":80,"column":47}},{"start":{"line":80,"column":37},"end":{"line":80,"column":47}}]},"18":{"loc":{"start":{"line":80,"column":53},"end":{"line":80,"column":70}},"type":"cond-expr","locations":[{"start":{"line":80,"column":65},"end":{"line":80,"column":68}},{"start":{"line":80,"column":53},"end":{"line":80,"column":70}}]},"19":{"loc":{"start":{"line":80,"column":53},"end":{"line":80,"column":68}},"type":"binary-expr","locations":[{"start":{"line":80,"column":53},"end":{"line":80,"column":68}},{"start":{"line":80,"column":53},"end":{"line":80,"column":68}}]},"20":{"loc":{"start":{"line":83,"column":2},"end":{"line":88,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":2},"end":{"line":88,"column":null}},{"start":{"line":86,"column":7},"end":{"line":88,"column":null}}]},"21":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":52}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},{"start":{"line":87,"column":39},"end":{"line":87,"column":51}}]},"22":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},"type":"cond-expr","locations":[{"start":{"line":87,"column":30},"end":{"line":87,"column":33}},{"start":{"line":87,"column":21},"end":{"line":87,"column":35}}]},"23":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":33}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":33}},{"start":{"line":87,"column":21},"end":{"line":87,"column":33}}]},"24":{"loc":{"start":{"line":87,"column":39},"end":{"line":87,"column":51}},"type":"cond-expr","locations":[{"start":{"line":87,"column":46},"end":{"line":87,"column":49}},{"start":{"line":87,"column":39},"end":{"line":87,"column":51}}]},"25":{"loc":{"start":{"line":87,"column":39},"end":{"line":87,"column":49}},"type":"binary-expr","locations":[{"start":{"line":87,"column":39},"end":{"line":87,"column":49}},{"start":{"line":87,"column":39},"end":{"line":87,"column":49}}]},"26":{"loc":{"start":{"line":89,"column":23},"end":{"line":89,"column":75}},"type":"binary-expr","locations":[{"start":{"line":89,"column":23},"end":{"line":89,"column":37}},{"start":{"line":89,"column":41},"end":{"line":89,"column":53}},{"start":{"line":89,"column":57},"end":{"line":89,"column":74}}]},"27":{"loc":{"start":{"line":89,"column":23},"end":{"line":89,"column":37}},"type":"cond-expr","locations":[{"start":{"line":89,"column":32},"end":{"line":89,"column":35}},{"start":{"line":89,"column":23},"end":{"line":89,"column":37}}]},"28":{"loc":{"start":{"line":89,"column":23},"end":{"line":89,"column":35}},"type":"binary-expr","locations":[{"start":{"line":89,"column":23},"end":{"line":89,"column":35}},{"start":{"line":89,"column":23},"end":{"line":89,"column":35}}]},"29":{"loc":{"start":{"line":89,"column":41},"end":{"line":89,"column":53}},"type":"cond-expr","locations":[{"start":{"line":89,"column":48},"end":{"line":89,"column":51}},{"start":{"line":89,"column":41},"end":{"line":89,"column":53}}]},"30":{"loc":{"start":{"line":89,"column":41},"end":{"line":89,"column":51}},"type":"binary-expr","locations":[{"start":{"line":89,"column":41},"end":{"line":89,"column":51}},{"start":{"line":89,"column":41},"end":{"line":89,"column":51}}]},"31":{"loc":{"start":{"line":89,"column":57},"end":{"line":89,"column":74}},"type":"cond-expr","locations":[{"start":{"line":89,"column":69},"end":{"line":89,"column":72}},{"start":{"line":89,"column":57},"end":{"line":89,"column":74}}]},"32":{"loc":{"start":{"line":89,"column":57},"end":{"line":89,"column":72}},"type":"binary-expr","locations":[{"start":{"line":89,"column":57},"end":{"line":89,"column":72}},{"start":{"line":89,"column":57},"end":{"line":89,"column":72}}]},"33":{"loc":{"start":{"line":95,"column":2},"end":{"line":97,"column":null}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":97,"column":null}}]},"34":{"loc":{"start":{"line":98,"column":2},"end":{"line":100,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":100,"column":null}}]},"35":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":null}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":null}}]},"36":{"loc":{"start":{"line":126,"column":2},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":126,"column":2},"end":{"line":148,"column":3}},{"start":{"line":129,"column":7},"end":{"line":148,"column":3}}]},"37":{"loc":{"start":{"line":129,"column":7},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":129,"column":7},"end":{"line":148,"column":3}},{"start":{"line":136,"column":7},"end":{"line":148,"column":3}}]},"38":{"loc":{"start":{"line":136,"column":7},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":136,"column":7},"end":{"line":148,"column":3}},{"start":{"line":141,"column":7},"end":{"line":148,"column":3}}]},"39":{"loc":{"start":{"line":141,"column":7},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":141,"column":7},"end":{"line":148,"column":3}}]},"40":{"loc":{"start":{"line":141,"column":11},"end":{"line":141,"column":33}},"type":"binary-expr","locations":[{"start":{"line":141,"column":11},"end":{"line":141,"column":32}},{"start":{"line":141,"column":29},"end":{"line":141,"column":32}},{"start":{"line":141,"column":12},"end":{"line":141,"column":33}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":90,"9":90,"10":90,"11":90,"12":90,"13":90,"14":83,"15":83,"16":83,"17":83,"18":83,"19":2,"20":81,"21":6,"22":75,"23":75,"24":73,"25":73,"26":73,"27":51,"28":22,"29":73,"30":73,"31":73,"32":17,"33":69,"34":17,"35":65,"36":49,"37":2,"38":47,"39":47,"40":45,"41":2,"42":2,"43":3,"44":2,"45":34,"46":12,"47":22,"48":6,"49":6,"50":16,"51":6,"52":10,"53":4,"54":6,"55":2,"56":47,"57":47,"58":47,"59":47,"60":47,"61":6,"62":19,"63":19,"64":22,"65":1,"66":27,"67":32},"f":{"0":90,"1":3,"2":34,"3":47,"4":6,"5":19,"6":19,"7":22,"8":1,"9":27,"10":32},"b":{"0":[45,45],"1":[90,52],"2":[45,25],"3":[19,64],"4":[7,76],"5":[53,30],"6":[2,81],"7":[6],"8":[73,72,71],"9":[56,17],"10":[73,17],"11":[67,5],"12":[72,5],"13":[73,56,51],"14":[56,17],"15":[73,17],"16":[51,5],"17":[56,5],"18":[0,51],"19":[51,51],"20":[51,22],"21":[22,5],"22":[5,17],"23":[22,17],"24":[0,5],"25":[5,5],"26":[73,56,51],"27":[56,17],"28":[73,17],"29":[51,5],"30":[56,5],"31":[0,51],"32":[51,51],"33":[17],"34":[17],"35":[2],"36":[12,22],"37":[6,16],"38":[6,10],"39":[4],"40":[10,10,6]}} +,"/Users/zane/playground/string-input/src/ein.mjs": {"path":"/Users/zane/playground/string-input/src/ein.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":21,"column":9},"end":{"line":46,"column":1}},"6":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"7":{"start":{"line":22,"column":27},"end":{"line":22,"column":14}},"8":{"start":{"line":22,"column":27},"end":{"line":22,"column":22}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":null}},"10":{"start":{"line":26,"column":19},"end":{"line":26,"column":37}},"11":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"12":{"start":{"line":28,"column":4},"end":{"line":33,"column":null}},"13":{"start":{"line":35,"column":28},"end":{"line":38,"column":3}},"14":{"start":{"line":39,"column":2},"end":{"line":39,"column":null}},"15":{"start":{"line":41,"column":16},"end":{"line":41,"column":57}},"16":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"17":{"start":{"line":45,"column":2},"end":{"line":45,"column":null}},"18":{"start":{"line":48,"column":0},"end":{"line":48,"column":null}},"19":{"start":{"line":49,"column":0},"end":{"line":49,"column":null}},"20":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}},"fnMap":{"0":{"name":"EIN","decl":{"start":{"line":21,"column":6},"end":{"line":21,"column":9}},"loc":{"start":{"line":21,"column":51},"end":{"line":46,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":49,"column":15},"end":{"line":49,"column":21}},"loc":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"type":"cond-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":39},"end":{"line":21,"column":49}}]},"1":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},"type":"binary-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":36},"end":{"line":21,"column":39}}]},"2":{"loc":{"start":{"line":21,"column":39},"end":{"line":21,"column":49}},"type":"binary-expr","locations":[{"start":{"line":21,"column":39},"end":{"line":21,"column":43}},{"start":{"line":21,"column":47},"end":{"line":21,"column":49}}]},"3":{"loc":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":34,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":18,"7":18,"8":18,"9":18,"10":18,"11":18,"12":6,"13":12,"14":12,"15":8,"16":8,"17":4,"18":2,"19":2,"20":5},"f":{"0":18,"1":5},"b":{"0":[9,9],"1":[18,11],"2":[9,2],"3":[6]}} +,"/Users/zane/playground/string-input/src/email.mjs": {"path":"/Users/zane/playground/string-input/src/email.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":106,"column":11},"end":{"line":134,"column":1}},"4":{"start":{"line":106,"column":38},"end":{"line":106,"column":51}},"5":{"start":{"line":107,"column":27},"end":{"line":107,"column":14}},"6":{"start":{"line":107,"column":27},"end":{"line":107,"column":22}},"7":{"start":{"line":109,"column":2},"end":{"line":109,"column":null}},"8":{"start":{"line":111,"column":2},"end":{"line":113,"column":null}},"9":{"start":{"line":112,"column":4},"end":{"line":112,"column":null}},"10":{"start":{"line":115,"column":17},"end":{"line":115,"column":46}},"11":{"start":{"line":116,"column":30},"end":{"line":116,"column":16}},"12":{"start":{"line":116,"column":30},"end":{"line":116,"column":25}},"13":{"start":{"line":117,"column":2},"end":{"line":117,"column":null}},"14":{"start":{"line":118,"column":2},"end":{"line":118,"column":null}},"15":{"start":{"line":120,"column":2},"end":{"line":131,"column":null}},"16":{"start":{"line":121,"column":4},"end":{"line":124,"column":null}},"17":{"start":{"line":123,"column":6},"end":{"line":123,"column":null}},"18":{"start":{"line":125,"column":4},"end":{"line":130,"column":null}},"19":{"start":{"line":133,"column":2},"end":{"line":133,"column":null}},"20":{"start":{"line":136,"column":0},"end":{"line":136,"column":null}},"21":{"start":{"line":137,"column":0},"end":{"line":137,"column":null}},"22":{"start":{"line":137,"column":17},"end":{"line":137,"column":null}}},"fnMap":{"0":{"name":"Email","decl":{"start":{"line":106,"column":6},"end":{"line":106,"column":11}},"loc":{"start":{"line":106,"column":53},"end":{"line":134,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":137,"column":17},"end":{"line":137,"column":23}},"loc":{"start":{"line":137,"column":17},"end":{"line":137,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":106,"column":38},"end":{"line":106,"column":51}},"type":"cond-expr","locations":[{"start":{"line":106,"column":38},"end":{"line":106,"column":41}},{"start":{"line":106,"column":41},"end":{"line":106,"column":51}}]},"1":{"loc":{"start":{"line":106,"column":38},"end":{"line":106,"column":41}},"type":"binary-expr","locations":[{"start":{"line":106,"column":38},"end":{"line":106,"column":41}},{"start":{"line":106,"column":38},"end":{"line":106,"column":41}}]},"2":{"loc":{"start":{"line":106,"column":41},"end":{"line":106,"column":51}},"type":"binary-expr","locations":[{"start":{"line":106,"column":41},"end":{"line":106,"column":45}},{"start":{"line":106,"column":49},"end":{"line":106,"column":51}}]},"3":{"loc":{"start":{"line":111,"column":2},"end":{"line":113,"column":null}},"type":"if","locations":[{"start":{"line":111,"column":2},"end":{"line":113,"column":null}}]},"4":{"loc":{"start":{"line":120,"column":2},"end":{"line":131,"column":null}},"type":"if","locations":[{"start":{"line":120,"column":2},"end":{"line":131,"column":null}}]},"5":{"loc":{"start":{"line":121,"column":4},"end":{"line":124,"column":null}},"type":"if","locations":[{"start":{"line":121,"column":4},"end":{"line":124,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":46,"5":46,"6":46,"7":46,"8":46,"9":9,"10":46,"11":46,"12":46,"13":46,"14":46,"15":46,"16":36,"17":0,"18":36,"19":10,"20":2,"21":2,"22":1},"f":{"0":46,"1":1},"b":{"0":[25,21],"1":[46,28],"2":[21,3],"3":[9],"4":[36],"5":[0]}} +,"/Users/zane/playground/string-input/src/integer.mjs": {"path":"/Users/zane/playground/string-input/src/integer.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":9,"column":20},"end":{"line":9,"column":29}},"7":{"start":{"line":29,"column":13},"end":{"line":73,"column":1}},"8":{"start":{"line":29,"column":40},"end":{"line":29,"column":53}},"9":{"start":{"line":30,"column":69},"end":{"line":30,"column":14}},"10":{"start":{"line":30,"column":69},"end":{"line":30,"column":33}},"11":{"start":{"line":30,"column":69},"end":{"line":30,"column":46}},"12":{"start":{"line":30,"column":69},"end":{"line":30,"column":51}},"13":{"start":{"line":30,"column":69},"end":{"line":30,"column":56}},"14":{"start":{"line":30,"column":69},"end":{"line":30,"column":64}},"15":{"start":{"line":32,"column":2},"end":{"line":32,"column":null}},"16":{"start":{"line":34,"column":2},"end":{"line":53,"column":null}},"17":{"start":{"line":35,"column":16},"end":{"line":35,"column":50}},"18":{"start":{"line":36,"column":4},"end":{"line":38,"column":null}},"19":{"start":{"line":37,"column":6},"end":{"line":37,"column":null}},"20":{"start":{"line":39,"column":4},"end":{"line":44,"column":null}},"21":{"start":{"line":46,"column":7},"end":{"line":53,"column":null}},"22":{"start":{"line":47,"column":4},"end":{"line":52,"column":null}},"23":{"start":{"line":55,"column":28},"end":{"line":58,"column":3}},"24":{"start":{"line":59,"column":2},"end":{"line":59,"column":null}},"25":{"start":{"line":60,"column":16},"end":{"line":60,"column":31}},"26":{"start":{"line":61,"column":2},"end":{"line":61,"column":null}},"27":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"28":{"start":{"line":63,"column":4},"end":{"line":68,"column":null}},"29":{"start":{"line":70,"column":2},"end":{"line":70,"column":null}},"30":{"start":{"line":72,"column":2},"end":{"line":72,"column":null}},"31":{"start":{"line":75,"column":0},"end":{"line":75,"column":null}},"32":{"start":{"line":76,"column":0},"end":{"line":76,"column":null}},"33":{"start":{"line":76,"column":19},"end":{"line":76,"column":null}}},"fnMap":{"0":{"name":"Integer","decl":{"start":{"line":29,"column":6},"end":{"line":29,"column":13}},"loc":{"start":{"line":29,"column":55},"end":{"line":73,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":76,"column":19},"end":{"line":76,"column":25}},"loc":{"start":{"line":76,"column":19},"end":{"line":76,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":40},"end":{"line":29,"column":53}},"type":"cond-expr","locations":[{"start":{"line":29,"column":40},"end":{"line":29,"column":43}},{"start":{"line":29,"column":43},"end":{"line":29,"column":53}}]},"1":{"loc":{"start":{"line":29,"column":40},"end":{"line":29,"column":43}},"type":"binary-expr","locations":[{"start":{"line":29,"column":40},"end":{"line":29,"column":43}},{"start":{"line":29,"column":40},"end":{"line":29,"column":43}}]},"2":{"loc":{"start":{"line":29,"column":43},"end":{"line":29,"column":53}},"type":"binary-expr","locations":[{"start":{"line":29,"column":43},"end":{"line":29,"column":47}},{"start":{"line":29,"column":51},"end":{"line":29,"column":53}}]},"3":{"loc":{"start":{"line":34,"column":2},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":34,"column":2},"end":{"line":53,"column":null}},{"start":{"line":46,"column":7},"end":{"line":53,"column":null}}]},"4":{"loc":{"start":{"line":34,"column":6},"end":{"line":34,"column":67}},"type":"binary-expr","locations":[{"start":{"line":34,"column":6},"end":{"line":34,"column":32}},{"start":{"line":34,"column":36},"end":{"line":34,"column":67}}]},"5":{"loc":{"start":{"line":36,"column":4},"end":{"line":38,"column":null}},"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":38,"column":null}}]},"6":{"loc":{"start":{"line":46,"column":7},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":46,"column":7},"end":{"line":53,"column":null}}]},"7":{"loc":{"start":{"line":46,"column":11},"end":{"line":46,"column":74}},"type":"binary-expr","locations":[{"start":{"line":46,"column":11},"end":{"line":46,"column":37}},{"start":{"line":46,"column":41},"end":{"line":46,"column":74}}]},"8":{"loc":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":69,"column":null}}]},"9":{"loc":{"start":{"line":62,"column":6},"end":{"line":62,"column":60}},"type":"binary-expr","locations":[{"start":{"line":62,"column":6},"end":{"line":62,"column":31}},{"start":{"line":62,"column":35},"end":{"line":62,"column":60}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":33,"9":33,"10":33,"11":33,"12":33,"13":33,"14":33,"15":33,"16":27,"17":6,"18":6,"19":2,"20":6,"21":21,"22":2,"23":19,"24":19,"25":17,"26":17,"27":13,"28":2,"29":11,"30":9,"31":2,"32":2,"33":3},"f":{"0":33,"1":3},"b":{"0":[19,14],"1":[33,21],"2":[14,2],"3":[6,21],"4":[27,23],"5":[2],"6":[2],"7":[21,4],"8":[2],"9":[13,3]}} +,"/Users/zane/playground/string-input/src/numeric.mjs": {"path":"/Users/zane/playground/string-input/src/numeric.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":8,"column":22},"end":{"line":8,"column":34}},"6":{"start":{"line":28,"column":13},"end":{"line":71,"column":1}},"7":{"start":{"line":28,"column":40},"end":{"line":28,"column":53}},"8":{"start":{"line":29,"column":69},"end":{"line":29,"column":14}},"9":{"start":{"line":29,"column":69},"end":{"line":29,"column":33}},"10":{"start":{"line":29,"column":69},"end":{"line":29,"column":46}},"11":{"start":{"line":29,"column":69},"end":{"line":29,"column":51}},"12":{"start":{"line":29,"column":69},"end":{"line":29,"column":56}},"13":{"start":{"line":29,"column":69},"end":{"line":29,"column":64}},"14":{"start":{"line":31,"column":2},"end":{"line":31,"column":null}},"15":{"start":{"line":33,"column":2},"end":{"line":48,"column":null}},"16":{"start":{"line":34,"column":4},"end":{"line":39,"column":null}},"17":{"start":{"line":41,"column":7},"end":{"line":48,"column":null}},"18":{"start":{"line":42,"column":4},"end":{"line":47,"column":null}},"19":{"start":{"line":50,"column":28},"end":{"line":53,"column":3}},"20":{"start":{"line":54,"column":2},"end":{"line":54,"column":null}},"21":{"start":{"line":56,"column":16},"end":{"line":56,"column":29}},"22":{"start":{"line":58,"column":2},"end":{"line":58,"column":null}},"23":{"start":{"line":59,"column":2},"end":{"line":66,"column":null}},"24":{"start":{"line":60,"column":4},"end":{"line":65,"column":null}},"25":{"start":{"line":68,"column":2},"end":{"line":68,"column":null}},"26":{"start":{"line":70,"column":2},"end":{"line":70,"column":null}},"27":{"start":{"line":73,"column":0},"end":{"line":73,"column":null}},"28":{"start":{"line":74,"column":0},"end":{"line":74,"column":null}},"29":{"start":{"line":74,"column":19},"end":{"line":74,"column":null}}},"fnMap":{"0":{"name":"Numeric","decl":{"start":{"line":28,"column":6},"end":{"line":28,"column":13}},"loc":{"start":{"line":28,"column":55},"end":{"line":71,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":74,"column":19},"end":{"line":74,"column":25}},"loc":{"start":{"line":74,"column":19},"end":{"line":74,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":40},"end":{"line":28,"column":53}},"type":"cond-expr","locations":[{"start":{"line":28,"column":40},"end":{"line":28,"column":43}},{"start":{"line":28,"column":43},"end":{"line":28,"column":53}}]},"1":{"loc":{"start":{"line":28,"column":40},"end":{"line":28,"column":43}},"type":"binary-expr","locations":[{"start":{"line":28,"column":40},"end":{"line":28,"column":43}},{"start":{"line":28,"column":40},"end":{"line":28,"column":43}}]},"2":{"loc":{"start":{"line":28,"column":43},"end":{"line":28,"column":53}},"type":"binary-expr","locations":[{"start":{"line":28,"column":43},"end":{"line":28,"column":47}},{"start":{"line":28,"column":51},"end":{"line":28,"column":53}}]},"3":{"loc":{"start":{"line":33,"column":2},"end":{"line":48,"column":null}},"type":"if","locations":[{"start":{"line":33,"column":2},"end":{"line":48,"column":null}},{"start":{"line":41,"column":7},"end":{"line":48,"column":null}}]},"4":{"loc":{"start":{"line":33,"column":6},"end":{"line":33,"column":70}},"type":"binary-expr","locations":[{"start":{"line":33,"column":6},"end":{"line":33,"column":32}},{"start":{"line":33,"column":36},"end":{"line":33,"column":70}}]},"5":{"loc":{"start":{"line":41,"column":7},"end":{"line":48,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":7},"end":{"line":48,"column":null}}]},"6":{"loc":{"start":{"line":59,"column":2},"end":{"line":66,"column":null}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":66,"column":null}}]},"7":{"loc":{"start":{"line":59,"column":6},"end":{"line":59,"column":60}},"type":"binary-expr","locations":[{"start":{"line":59,"column":6},"end":{"line":59,"column":31}},{"start":{"line":59,"column":35},"end":{"line":59,"column":60}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":27,"8":27,"9":27,"10":27,"11":27,"12":27,"13":27,"14":27,"15":27,"16":2,"17":25,"18":4,"19":21,"20":21,"21":21,"22":21,"23":17,"24":2,"25":15,"26":15,"27":2,"28":2,"29":1},"f":{"0":27,"1":1},"b":{"0":[14,13],"1":[27,21],"2":[13,7],"3":[2,25],"4":[27,26],"5":[4],"6":[2],"7":[17,3]}} +,"/Users/zane/playground/string-input/src/ssn.mjs": {"path":"/Users/zane/playground/string-input/src/ssn.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":21,"column":9},"end":{"line":46,"column":1}},"6":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"7":{"start":{"line":22,"column":27},"end":{"line":22,"column":14}},"8":{"start":{"line":22,"column":27},"end":{"line":22,"column":22}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":null}},"10":{"start":{"line":26,"column":19},"end":{"line":26,"column":37}},"11":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"12":{"start":{"line":28,"column":4},"end":{"line":33,"column":null}},"13":{"start":{"line":35,"column":28},"end":{"line":38,"column":3}},"14":{"start":{"line":39,"column":2},"end":{"line":39,"column":null}},"15":{"start":{"line":41,"column":13},"end":{"line":41,"column":62}},"16":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"17":{"start":{"line":45,"column":2},"end":{"line":45,"column":null}},"18":{"start":{"line":48,"column":0},"end":{"line":48,"column":null}},"19":{"start":{"line":49,"column":0},"end":{"line":49,"column":null}},"20":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}},"fnMap":{"0":{"name":"SSN","decl":{"start":{"line":21,"column":6},"end":{"line":21,"column":9}},"loc":{"start":{"line":21,"column":51},"end":{"line":46,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":49,"column":15},"end":{"line":49,"column":21}},"loc":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"type":"cond-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":39},"end":{"line":21,"column":49}}]},"1":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},"type":"binary-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":36},"end":{"line":21,"column":39}}]},"2":{"loc":{"start":{"line":21,"column":39},"end":{"line":21,"column":49}},"type":"binary-expr","locations":[{"start":{"line":21,"column":39},"end":{"line":21,"column":43}},{"start":{"line":21,"column":47},"end":{"line":21,"column":49}}]},"3":{"loc":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":34,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":18,"7":18,"8":18,"9":18,"10":18,"11":18,"12":10,"13":8,"14":8,"15":6,"16":6,"17":4,"18":2,"19":2,"20":3},"f":{"0":18,"1":3},"b":{"0":[9,9],"1":[18,11],"2":[9,2],"3":[10]}} +,"/Users/zane/playground/string-input/src/time-of-day.mjs": {"path":"/Users/zane/playground/string-input/src/time-of-day.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":40,"column":15},"end":{"line":97,"column":1}},"7":{"start":{"line":40,"column":42},"end":{"line":40,"column":55}},"8":{"start":{"line":41,"column":34},"end":{"line":41,"column":14}},"9":{"start":{"line":41,"column":34},"end":{"line":41,"column":21}},"10":{"start":{"line":41,"column":34},"end":{"line":41,"column":29}},"11":{"start":{"line":42,"column":21},"end":{"line":42,"column":11}},"12":{"start":{"line":42,"column":21},"end":{"line":42,"column":16}},"13":{"start":{"line":44,"column":2},"end":{"line":44,"column":null}},"14":{"start":{"line":46,"column":28},"end":{"line":46,"column":55}},"15":{"start":{"line":47,"column":20},"end":{"line":47,"column":39}},"16":{"start":{"line":48,"column":34},"end":{"line":48,"column":67}},"17":{"start":{"line":50,"column":2},"end":{"line":60,"column":null}},"18":{"start":{"line":55,"column":4},"end":{"line":59,"column":null}},"19":{"start":{"line":63,"column":4},"end":{"line":64,"column":49}},"20":{"start":{"line":65,"column":2},"end":{"line":70,"column":null}},"21":{"start":{"line":66,"column":4},"end":{"line":69,"column":null}},"22":{"start":{"line":72,"column":28},"end":{"line":75,"column":3}},"23":{"start":{"line":76,"column":2},"end":{"line":76,"column":null}},"24":{"start":{"line":78,"column":16},"end":{"line":83,"column":4}},"25":{"start":{"line":85,"column":2},"end":{"line":87,"column":null}},"26":{"start":{"line":86,"column":4},"end":{"line":86,"column":null}},"27":{"start":{"line":89,"column":2},"end":{"line":91,"column":null}},"28":{"start":{"line":90,"column":4},"end":{"line":90,"column":null}},"29":{"start":{"line":92,"column":2},"end":{"line":92,"column":null}},"30":{"start":{"line":94,"column":2},"end":{"line":94,"column":null}},"31":{"start":{"line":96,"column":2},"end":{"line":96,"column":null}},"32":{"start":{"line":99,"column":17},"end":{"line":151,"column":1}},"33":{"start":{"line":100,"column":7},"end":{"line":100,"column":6}},"34":{"start":{"line":101,"column":19},"end":{"line":101,"column":18}},"35":{"start":{"line":102,"column":11},"end":{"line":102,"column":10}},"36":{"start":{"line":103,"column":25},"end":{"line":103,"column":24}},"37":{"start":{"line":106,"column":2},"end":{"line":130,"column":null}},"38":{"start":{"line":107,"column":4},"end":{"line":107,"column":null}},"39":{"start":{"line":108,"column":4},"end":{"line":108,"column":null}},"40":{"start":{"line":109,"column":4},"end":{"line":109,"column":null}},"41":{"start":{"line":110,"column":4},"end":{"line":110,"column":null}},"42":{"start":{"line":113,"column":4},"end":{"line":122,"column":null}},"43":{"start":{"line":114,"column":6},"end":{"line":115,"column":null}},"44":{"start":{"line":116,"column":6},"end":{"line":118,"column":null}},"45":{"start":{"line":117,"column":8},"end":{"line":117,"column":null}},"46":{"start":{"line":121,"column":6},"end":{"line":121,"column":null}},"47":{"start":{"line":123,"column":4},"end":{"line":125,"column":null}},"48":{"start":{"line":126,"column":4},"end":{"line":126,"column":null}},"49":{"start":{"line":128,"column":6},"end":{"line":128,"column":59}},"50":{"start":{"line":129,"column":4},"end":{"line":129,"column":null}},"51":{"start":{"line":132,"column":2},"end":{"line":150,"column":null}},"52":{"start":{"line":133,"column":9},"end":{"line":133,"column":null}},"53":{"start":{"line":134,"column":12},"end":{"line":134,"column":null}},"54":{"start":{"line":135,"column":14},"end":{"line":135,"column":null}},"55":{"start":{"line":136,"column":14},"end":{"line":136,"column":null}},"56":{"start":{"line":137,"column":24},"end":{"line":137,"column":null}},"57":{"start":{"line":138,"column":11},"end":{"line":138,"column":null}},"58":{"start":{"line":140,"column":14},"end":{"line":140,"column":96}},"59":{"start":{"line":141,"column":6},"end":{"line":146,"column":null}},"60":{"start":{"line":142,"column":8},"end":{"line":142,"column":null}},"61":{"start":{"line":143,"column":8},"end":{"line":145,"column":null}},"62":{"start":{"line":144,"column":10},"end":{"line":144,"column":46}},"63":{"start":{"line":148,"column":6},"end":{"line":148,"column":null}},"64":{"start":{"line":153,"column":0},"end":{"line":153,"column":null}},"65":{"start":{"line":154,"column":0},"end":{"line":154,"column":null}},"66":{"start":{"line":154,"column":21},"end":{"line":154,"column":null}}},"fnMap":{"0":{"name":"TimeOfDay","decl":{"start":{"line":40,"column":6},"end":{"line":40,"column":15}},"loc":{"start":{"line":40,"column":57},"end":{"line":97,"column":1}}},"1":{"name":"getValue","decl":{"start":{"line":99,"column":6},"end":{"line":99,"column":14}},"loc":{"start":{"line":104,"column":6},"end":{"line":151,"column":1}}},"2":{"name":"isEod","decl":{"start":{"line":133,"column":4},"end":{"line":133,"column":9}},"loc":{"start":{"line":133,"column":9},"end":{"line":133,"column":null}}},"3":{"name":"getHours","decl":{"start":{"line":134,"column":4},"end":{"line":134,"column":12}},"loc":{"start":{"line":134,"column":12},"end":{"line":134,"column":null}}},"4":{"name":"getMinutes","decl":{"start":{"line":135,"column":4},"end":{"line":135,"column":14}},"loc":{"start":{"line":135,"column":14},"end":{"line":135,"column":null}}},"5":{"name":"getSeconds","decl":{"start":{"line":136,"column":4},"end":{"line":136,"column":14}},"loc":{"start":{"line":136,"column":14},"end":{"line":136,"column":null}}},"6":{"name":"getFractionalSeconds","decl":{"start":{"line":137,"column":4},"end":{"line":137,"column":24}},"loc":{"start":{"line":137,"column":24},"end":{"line":137,"column":null}}},"7":{"name":"valueOf","decl":{"start":{"line":138,"column":4},"end":{"line":138,"column":11}},"loc":{"start":{"line":138,"column":11},"end":{"line":138,"column":null}}},"8":{"name":"toString","decl":{"start":{"line":139,"column":4},"end":{"line":139,"column":12}},"loc":{"start":{"line":139,"column":33},"end":{"line":149,"column":null}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":154,"column":21},"end":{"line":154,"column":27}},"loc":{"start":{"line":154,"column":21},"end":{"line":154,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":42},"end":{"line":40,"column":55}},"type":"cond-expr","locations":[{"start":{"line":40,"column":42},"end":{"line":40,"column":45}},{"start":{"line":40,"column":45},"end":{"line":40,"column":55}}]},"1":{"loc":{"start":{"line":40,"column":42},"end":{"line":40,"column":45}},"type":"binary-expr","locations":[{"start":{"line":40,"column":42},"end":{"line":40,"column":45}},{"start":{"line":40,"column":42},"end":{"line":40,"column":45}}]},"2":{"loc":{"start":{"line":40,"column":45},"end":{"line":40,"column":55}},"type":"binary-expr","locations":[{"start":{"line":40,"column":45},"end":{"line":40,"column":49}},{"start":{"line":40,"column":53},"end":{"line":40,"column":55}}]},"3":{"loc":{"start":{"line":50,"column":2},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":50,"column":2},"end":{"line":60,"column":null}}]},"4":{"loc":{"start":{"line":51,"column":4},"end":{"line":53,"column":39}},"type":"binary-expr","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":30}},{"start":{"line":52,"column":7},"end":{"line":52,"column":25}},{"start":{"line":53,"column":7},"end":{"line":53,"column":39}}]},"5":{"loc":{"start":{"line":63,"column":4},"end":{"line":64,"column":49}},"type":"binary-expr","locations":[{"start":{"line":63,"column":4},"end":{"line":63,"column":40}},{"start":{"line":64,"column":7},"end":{"line":64,"column":49}}]},"6":{"loc":{"start":{"line":63,"column":4},"end":{"line":63,"column":26}},"type":"cond-expr","locations":[{"start":{"line":63,"column":21},"end":{"line":63,"column":24}},{"start":{"line":63,"column":4},"end":{"line":63,"column":26}}]},"7":{"loc":{"start":{"line":63,"column":4},"end":{"line":63,"column":24}},"type":"binary-expr","locations":[{"start":{"line":63,"column":4},"end":{"line":63,"column":24}},{"start":{"line":63,"column":4},"end":{"line":63,"column":24}}]},"8":{"loc":{"start":{"line":64,"column":7},"end":{"line":64,"column":35}},"type":"cond-expr","locations":[{"start":{"line":64,"column":30},"end":{"line":64,"column":33}},{"start":{"line":64,"column":7},"end":{"line":64,"column":35}}]},"9":{"loc":{"start":{"line":64,"column":7},"end":{"line":64,"column":33}},"type":"binary-expr","locations":[{"start":{"line":64,"column":7},"end":{"line":64,"column":33}},{"start":{"line":64,"column":7},"end":{"line":64,"column":33}}]},"10":{"loc":{"start":{"line":65,"column":2},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":70,"column":null}}]},"11":{"loc":{"start":{"line":85,"column":2},"end":{"line":87,"column":null}},"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":87,"column":null}}]},"12":{"loc":{"start":{"line":89,"column":2},"end":{"line":91,"column":null}},"type":"if","locations":[{"start":{"line":89,"column":2},"end":{"line":91,"column":null}}]},"13":{"loc":{"start":{"line":106,"column":2},"end":{"line":130,"column":null}},"type":"if","locations":[{"start":{"line":106,"column":2},"end":{"line":130,"column":null}},{"start":{"line":112,"column":7},"end":{"line":130,"column":null}}]},"14":{"loc":{"start":{"line":113,"column":4},"end":{"line":122,"column":null}},"type":"if","locations":[{"start":{"line":113,"column":4},"end":{"line":122,"column":null}},{"start":{"line":120,"column":9},"end":{"line":122,"column":null}}]},"15":{"loc":{"start":{"line":115,"column":34},"end":{"line":115,"column":78}},"type":"cond-expr","locations":[{"start":{"line":115,"column":72},"end":{"line":115,"column":74}},{"start":{"line":115,"column":77},"end":{"line":115,"column":78}}]},"16":{"loc":{"start":{"line":116,"column":6},"end":{"line":118,"column":null}},"type":"if","locations":[{"start":{"line":116,"column":6},"end":{"line":118,"column":null}}]},"17":{"loc":{"start":{"line":121,"column":23},"end":{"line":121,"column":78}},"type":"binary-expr","locations":[{"start":{"line":121,"column":23},"end":{"line":121,"column":45}},{"start":{"line":121,"column":49},"end":{"line":121,"column":77}}]},"18":{"loc":{"start":{"line":121,"column":23},"end":{"line":121,"column":45}},"type":"cond-expr","locations":[{"start":{"line":121,"column":40},"end":{"line":121,"column":43}},{"start":{"line":121,"column":23},"end":{"line":121,"column":45}}]},"19":{"loc":{"start":{"line":121,"column":23},"end":{"line":121,"column":43}},"type":"binary-expr","locations":[{"start":{"line":121,"column":23},"end":{"line":121,"column":43}},{"start":{"line":121,"column":23},"end":{"line":121,"column":43}}]},"20":{"loc":{"start":{"line":121,"column":49},"end":{"line":121,"column":77}},"type":"cond-expr","locations":[{"start":{"line":121,"column":72},"end":{"line":121,"column":75}},{"start":{"line":121,"column":49},"end":{"line":121,"column":77}}]},"21":{"loc":{"start":{"line":121,"column":49},"end":{"line":121,"column":75}},"type":"binary-expr","locations":[{"start":{"line":121,"column":49},"end":{"line":121,"column":75}},{"start":{"line":121,"column":49},"end":{"line":121,"column":75}}]},"22":{"loc":{"start":{"line":124,"column":6},"end":{"line":124,"column":null}},"type":"binary-expr","locations":[{"start":{"line":124,"column":6},"end":{"line":124,"column":20}},{"start":{"line":124,"column":24},"end":{"line":124,"column":46}},{"start":{"line":124,"column":50},"end":{"line":124,"column":78}}]},"23":{"loc":{"start":{"line":124,"column":6},"end":{"line":124,"column":20}},"type":"cond-expr","locations":[{"start":{"line":124,"column":15},"end":{"line":124,"column":18}},{"start":{"line":124,"column":6},"end":{"line":124,"column":20}}]},"24":{"loc":{"start":{"line":124,"column":6},"end":{"line":124,"column":18}},"type":"binary-expr","locations":[{"start":{"line":124,"column":6},"end":{"line":124,"column":18}},{"start":{"line":124,"column":6},"end":{"line":124,"column":18}}]},"25":{"loc":{"start":{"line":124,"column":24},"end":{"line":124,"column":46}},"type":"cond-expr","locations":[{"start":{"line":124,"column":41},"end":{"line":124,"column":44}},{"start":{"line":124,"column":24},"end":{"line":124,"column":46}}]},"26":{"loc":{"start":{"line":124,"column":24},"end":{"line":124,"column":44}},"type":"binary-expr","locations":[{"start":{"line":124,"column":24},"end":{"line":124,"column":44}},{"start":{"line":124,"column":24},"end":{"line":124,"column":44}}]},"27":{"loc":{"start":{"line":124,"column":50},"end":{"line":124,"column":78}},"type":"cond-expr","locations":[{"start":{"line":124,"column":73},"end":{"line":124,"column":76}},{"start":{"line":124,"column":50},"end":{"line":124,"column":78}}]},"28":{"loc":{"start":{"line":124,"column":50},"end":{"line":124,"column":76}},"type":"binary-expr","locations":[{"start":{"line":124,"column":50},"end":{"line":124,"column":76}},{"start":{"line":124,"column":50},"end":{"line":124,"column":76}}]},"29":{"loc":{"start":{"line":126,"column":23},"end":{"line":126,"column":76}},"type":"binary-expr","locations":[{"start":{"line":126,"column":23},"end":{"line":126,"column":37}},{"start":{"line":126,"column":41},"end":{"line":126,"column":69}},{"start":{"line":126,"column":73},"end":{"line":126,"column":76}}]},"30":{"loc":{"start":{"line":126,"column":23},"end":{"line":126,"column":37}},"type":"cond-expr","locations":[{"start":{"line":126,"column":32},"end":{"line":126,"column":35}},{"start":{"line":126,"column":23},"end":{"line":126,"column":37}}]},"31":{"loc":{"start":{"line":126,"column":23},"end":{"line":126,"column":35}},"type":"binary-expr","locations":[{"start":{"line":126,"column":23},"end":{"line":126,"column":35}},{"start":{"line":126,"column":23},"end":{"line":126,"column":35}}]},"32":{"loc":{"start":{"line":126,"column":41},"end":{"line":126,"column":69}},"type":"cond-expr","locations":[{"start":{"line":126,"column":64},"end":{"line":126,"column":67}},{"start":{"line":126,"column":41},"end":{"line":126,"column":69}}]},"33":{"loc":{"start":{"line":126,"column":41},"end":{"line":126,"column":67}},"type":"binary-expr","locations":[{"start":{"line":126,"column":41},"end":{"line":126,"column":67}},{"start":{"line":126,"column":41},"end":{"line":126,"column":67}}]},"34":{"loc":{"start":{"line":128,"column":6},"end":{"line":128,"column":59}},"type":"binary-expr","locations":[{"start":{"line":128,"column":6},"end":{"line":128,"column":20}},{"start":{"line":128,"column":24},"end":{"line":128,"column":52}},{"start":{"line":128,"column":56},"end":{"line":128,"column":59}}]},"35":{"loc":{"start":{"line":128,"column":6},"end":{"line":128,"column":20}},"type":"cond-expr","locations":[{"start":{"line":128,"column":15},"end":{"line":128,"column":18}},{"start":{"line":128,"column":6},"end":{"line":128,"column":20}}]},"36":{"loc":{"start":{"line":128,"column":6},"end":{"line":128,"column":18}},"type":"binary-expr","locations":[{"start":{"line":128,"column":6},"end":{"line":128,"column":18}},{"start":{"line":128,"column":6},"end":{"line":128,"column":18}}]},"37":{"loc":{"start":{"line":128,"column":24},"end":{"line":128,"column":52}},"type":"cond-expr","locations":[{"start":{"line":128,"column":47},"end":{"line":128,"column":50}},{"start":{"line":128,"column":24},"end":{"line":128,"column":52}}]},"38":{"loc":{"start":{"line":128,"column":24},"end":{"line":128,"column":50}},"type":"binary-expr","locations":[{"start":{"line":128,"column":24},"end":{"line":128,"column":50}},{"start":{"line":128,"column":24},"end":{"line":128,"column":50}}]},"39":{"loc":{"start":{"line":140,"column":60},"end":{"line":140,"column":75}},"type":"binary-expr","locations":[{"start":{"line":140,"column":60},"end":{"line":140,"column":67}},{"start":{"line":140,"column":71},"end":{"line":140,"column":75}}]},"40":{"loc":{"start":{"line":141,"column":6},"end":{"line":146,"column":null}},"type":"if","locations":[{"start":{"line":141,"column":6},"end":{"line":146,"column":null}}]},"41":{"loc":{"start":{"line":141,"column":10},"end":{"line":141,"column":40}},"type":"binary-expr","locations":[{"start":{"line":141,"column":10},"end":{"line":141,"column":21}},{"start":{"line":141,"column":25},"end":{"line":141,"column":40}}]},"42":{"loc":{"start":{"line":142,"column":24},"end":{"line":142,"column":39}},"type":"binary-expr","locations":[{"start":{"line":142,"column":24},"end":{"line":142,"column":31}},{"start":{"line":142,"column":35},"end":{"line":142,"column":39}}]},"43":{"loc":{"start":{"line":143,"column":8},"end":{"line":145,"column":null}},"type":"if","locations":[{"start":{"line":143,"column":8},"end":{"line":145,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":43,"8":43,"9":43,"10":43,"11":43,"12":43,"13":43,"14":39,"15":39,"16":39,"17":39,"18":3,"19":36,"20":36,"21":1,"22":35,"23":35,"24":34,"25":34,"26":5,"27":33,"28":5,"29":32,"30":28,"31":27,"32":2,"33":34,"34":34,"35":34,"36":34,"37":34,"38":3,"39":3,"40":3,"41":3,"42":31,"43":5,"44":5,"45":1,"46":26,"47":31,"48":31,"49":31,"50":31,"51":34,"52":19,"53":16,"54":16,"55":18,"56":16,"57":16,"58":8,"59":8,"60":4,"61":4,"62":4,"63":8,"64":2,"65":2,"66":1},"f":{"0":43,"1":34,"2":19,"3":16,"4":16,"5":18,"6":16,"7":16,"8":8,"9":1},"b":{"0":[30,13],"1":[43,40],"2":[13,13],"3":[3],"4":[39,35,30],"5":[36,34],"6":[32,4],"7":[36,4],"8":[7,27],"9":[34,27],"10":[1],"11":[5],"12":[5],"13":[3,31],"14":[5,26],"15":[4,1],"16":[1],"17":[26,25],"18":[25,1],"19":[26,1],"20":[0,25],"21":[25,25],"22":[31,26,25],"23":[26,5],"24":[31,5],"25":[25,1],"26":[26,1],"27":[0,25],"28":[25,25],"29":[31,29,23],"30":[26,5],"31":[31,5],"32":[4,25],"33":[29,25],"34":[31,30,25],"35":[26,5],"36":[31,5],"37":[5,25],"38":[30,25],"39":[8,4],"40":[4],"41":[8,4],"42":[4,0],"43":[4]}} +,"/Users/zane/playground/string-input/src/validated-string.mjs": {"path":"/Users/zane/playground/string-input/src/validated-string.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":29,"column":21},"end":{"line":128,"column":1}},"5":{"start":{"line":29,"column":48},"end":{"line":29,"column":61}},"6":{"start":{"line":40,"column":6},"end":{"line":31,"column":9}},"7":{"start":{"line":40,"column":6},"end":{"line":32,"column":10}},"8":{"start":{"line":40,"column":6},"end":{"line":33,"column":12}},"9":{"start":{"line":40,"column":6},"end":{"line":34,"column":13}},"10":{"start":{"line":40,"column":6},"end":{"line":35,"column":13}},"11":{"start":{"line":40,"column":6},"end":{"line":36,"column":8}},"12":{"start":{"line":40,"column":6},"end":{"line":37,"column":9}},"13":{"start":{"line":40,"column":6},"end":{"line":38,"column":14}},"14":{"start":{"line":40,"column":6},"end":{"line":39,"column":10}},"15":{"start":{"line":41,"column":20},"end":{"line":41,"column":15}},"16":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"17":{"start":{"line":45,"column":2},"end":{"line":52,"column":null}},"18":{"start":{"line":46,"column":4},"end":{"line":51,"column":null}},"19":{"start":{"line":53,"column":2},"end":{"line":60,"column":null}},"20":{"start":{"line":54,"column":4},"end":{"line":59,"column":null}},"21":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"22":{"start":{"line":63,"column":4},"end":{"line":68,"column":null}},"23":{"start":{"line":70,"column":2},"end":{"line":77,"column":null}},"24":{"start":{"line":71,"column":4},"end":{"line":76,"column":null}},"25":{"start":{"line":79,"column":2},"end":{"line":91,"column":null}},"26":{"start":{"line":80,"column":4},"end":{"line":82,"column":null}},"27":{"start":{"line":81,"column":6},"end":{"line":81,"column":null}},"28":{"start":{"line":83,"column":4},"end":{"line":90,"column":null}},"29":{"start":{"line":84,"column":6},"end":{"line":89,"column":null}},"30":{"start":{"line":93,"column":2},"end":{"line":100,"column":null}},"31":{"start":{"line":94,"column":4},"end":{"line":99,"column":null}},"32":{"start":{"line":101,"column":2},"end":{"line":108,"column":null}},"33":{"start":{"line":102,"column":4},"end":{"line":107,"column":null}},"34":{"start":{"line":110,"column":2},"end":{"line":118,"column":null}},"35":{"start":{"line":111,"column":18},"end":{"line":111,"column":104}},"36":{"start":{"line":112,"column":4},"end":{"line":117,"column":null}},"37":{"start":{"line":120,"column":28},"end":{"line":123,"column":3}},"38":{"start":{"line":124,"column":2},"end":{"line":124,"column":null}},"39":{"start":{"line":125,"column":2},"end":{"line":125,"column":null}},"40":{"start":{"line":127,"column":2},"end":{"line":127,"column":null}},"41":{"start":{"line":130,"column":0},"end":{"line":130,"column":null}},"42":{"start":{"line":131,"column":0},"end":{"line":131,"column":null}},"43":{"start":{"line":131,"column":27},"end":{"line":131,"column":null}}},"fnMap":{"0":{"name":"ValidatedString","decl":{"start":{"line":29,"column":6},"end":{"line":29,"column":21}},"loc":{"start":{"line":29,"column":63},"end":{"line":128,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":131,"column":27},"end":{"line":131,"column":33}},"loc":{"start":{"line":131,"column":27},"end":{"line":131,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":48},"end":{"line":29,"column":61}},"type":"cond-expr","locations":[{"start":{"line":29,"column":48},"end":{"line":29,"column":51}},{"start":{"line":29,"column":51},"end":{"line":29,"column":61}}]},"1":{"loc":{"start":{"line":29,"column":48},"end":{"line":29,"column":51}},"type":"binary-expr","locations":[{"start":{"line":29,"column":48},"end":{"line":29,"column":51}},{"start":{"line":29,"column":48},"end":{"line":29,"column":51}}]},"2":{"loc":{"start":{"line":29,"column":51},"end":{"line":29,"column":61}},"type":"binary-expr","locations":[{"start":{"line":29,"column":51},"end":{"line":29,"column":55}},{"start":{"line":29,"column":59},"end":{"line":29,"column":61}}]},"3":{"loc":{"start":{"line":45,"column":2},"end":{"line":52,"column":null}},"type":"if","locations":[{"start":{"line":45,"column":2},"end":{"line":52,"column":null}}]},"4":{"loc":{"start":{"line":45,"column":6},"end":{"line":45,"column":63}},"type":"binary-expr","locations":[{"start":{"line":45,"column":6},"end":{"line":45,"column":25}},{"start":{"line":45,"column":29},"end":{"line":45,"column":63}}]},"5":{"loc":{"start":{"line":53,"column":2},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":60,"column":null}}]},"6":{"loc":{"start":{"line":53,"column":6},"end":{"line":53,"column":66}},"type":"binary-expr","locations":[{"start":{"line":53,"column":6},"end":{"line":53,"column":26}},{"start":{"line":53,"column":30},"end":{"line":53,"column":66}}]},"7":{"loc":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":69,"column":null}}]},"8":{"loc":{"start":{"line":62,"column":6},"end":{"line":62,"column":57}},"type":"binary-expr","locations":[{"start":{"line":62,"column":6},"end":{"line":62,"column":28}},{"start":{"line":62,"column":32},"end":{"line":62,"column":57}}]},"9":{"loc":{"start":{"line":70,"column":2},"end":{"line":77,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":2},"end":{"line":77,"column":null}}]},"10":{"loc":{"start":{"line":70,"column":6},"end":{"line":70,"column":63}},"type":"binary-expr","locations":[{"start":{"line":70,"column":6},"end":{"line":70,"column":30}},{"start":{"line":70,"column":34},"end":{"line":70,"column":63}}]},"11":{"loc":{"start":{"line":79,"column":2},"end":{"line":91,"column":null}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":91,"column":null}}]},"12":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":null}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":null}}]},"13":{"loc":{"start":{"line":83,"column":4},"end":{"line":90,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":4},"end":{"line":90,"column":null}}]},"14":{"loc":{"start":{"line":93,"column":2},"end":{"line":100,"column":null}},"type":"if","locations":[{"start":{"line":93,"column":2},"end":{"line":100,"column":null}}]},"15":{"loc":{"start":{"line":93,"column":6},"end":{"line":93,"column":57}},"type":"binary-expr","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":29}},{"start":{"line":93,"column":33},"end":{"line":93,"column":57}}]},"16":{"loc":{"start":{"line":101,"column":2},"end":{"line":108,"column":null}},"type":"if","locations":[{"start":{"line":101,"column":2},"end":{"line":108,"column":null}}]},"17":{"loc":{"start":{"line":101,"column":6},"end":{"line":101,"column":57}},"type":"binary-expr","locations":[{"start":{"line":101,"column":6},"end":{"line":101,"column":29}},{"start":{"line":101,"column":33},"end":{"line":101,"column":57}}]},"18":{"loc":{"start":{"line":110,"column":2},"end":{"line":118,"column":null}},"type":"if","locations":[{"start":{"line":110,"column":2},"end":{"line":118,"column":null}}]},"19":{"loc":{"start":{"line":110,"column":6},"end":{"line":110,"column":51}},"type":"binary-expr","locations":[{"start":{"line":110,"column":6},"end":{"line":110,"column":25}},{"start":{"line":110,"column":29},"end":{"line":110,"column":51}}]},"20":{"loc":{"start":{"line":111,"column":32},"end":{"line":111,"column":103}},"type":"cond-expr","locations":[{"start":{"line":111,"column":50},"end":{"line":111,"column":82}},{"start":{"line":111,"column":65},"end":{"line":111,"column":103}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":36,"6":36,"7":36,"8":36,"9":36,"10":36,"11":36,"12":36,"13":36,"14":36,"15":36,"16":36,"17":36,"18":2,"19":34,"20":2,"21":32,"22":2,"23":30,"24":2,"25":28,"26":4,"27":3,"28":4,"29":2,"30":26,"31":2,"32":24,"33":2,"34":22,"35":4,"36":4,"37":18,"38":18,"39":16,"40":14,"41":2,"42":2,"43":3},"f":{"0":36,"1":3},"b":{"0":[24,12],"1":[36,25],"2":[12,1],"3":[2],"4":[36,3],"5":[2],"6":[34,3],"7":[2],"8":[32,3],"9":[2],"10":[30,3],"11":[4],"12":[3],"13":[2],"14":[2],"15":[26,4],"16":[2],"17":[24,4],"18":[4],"19":[22,5],"20":[2,2]}} +,"/Users/zane/playground/string-input/src/lib/check-max-min.mjs": {"path":"/Users/zane/playground/string-input/src/lib/check-max-min.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":17},"end":{"line":22,"column":1}},"2":{"start":{"line":3,"column":26},"end":{"line":3,"column":25}},"3":{"start":{"line":3,"column":31},"end":{"line":3,"column":30}},"4":{"start":{"line":3,"column":37},"end":{"line":3,"column":36}},"5":{"start":{"line":3,"column":45},"end":{"line":3,"column":44}},"6":{"start":{"line":3,"column":52},"end":{"line":3,"column":51}},"7":{"start":{"line":4,"column":2},"end":{"line":12,"column":null}},"8":{"start":{"line":5,"column":4},"end":{"line":11,"column":null}},"9":{"start":{"line":13,"column":2},"end":{"line":21,"column":null}},"10":{"start":{"line":14,"column":4},"end":{"line":20,"column":null}}},"fnMap":{"0":{"name":"checkMaxMin","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":17}},"loc":{"start":{"line":3,"column":59},"end":{"line":22,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":2},"end":{"line":12,"column":null}},"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":12,"column":null}}]},"1":{"loc":{"start":{"line":4,"column":6},"end":{"line":4,"column":38}},"type":"binary-expr","locations":[{"start":{"line":4,"column":6},"end":{"line":4,"column":23}},{"start":{"line":4,"column":27},"end":{"line":4,"column":38}}]},"2":{"loc":{"start":{"line":13,"column":2},"end":{"line":21,"column":null}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":21,"column":null}}]},"3":{"loc":{"start":{"line":13,"column":6},"end":{"line":13,"column":38}},"type":"binary-expr","locations":[{"start":{"line":13,"column":6},"end":{"line":13,"column":23}},{"start":{"line":13,"column":27},"end":{"line":13,"column":38}}]}},"s":{"0":6,"1":6,"2":193,"3":193,"4":193,"5":193,"6":193,"7":193,"8":20,"9":173,"10":22},"f":{"0":193},"b":{"0":[20],"1":[193,35],"2":[22],"3":[173,37]}} +,"/Users/zane/playground/string-input/src/lib/check-validate-input.mjs": {"path":"/Users/zane/playground/string-input/src/lib/check-validate-input.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":24},"end":{"line":9,"column":1}},"2":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"3":{"start":{"line":4,"column":2},"end":{"line":8,"column":null}}},"fnMap":{"0":{"name":"checkValidateInput","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":24}},"loc":{"start":{"line":3,"column":52},"end":{"line":9,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"type":"cond-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":45},"end":{"line":3,"column":47}}]},"1":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},"type":"binary-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":42},"end":{"line":3,"column":45}}]}},"s":{"0":11,"1":11,"2":295,"3":295},"f":{"0":295},"b":{"0":[295,0],"1":[295,295]}} +,"/Users/zane/playground/string-input/src/lib/check-validate-value.mjs": {"path":"/Users/zane/playground/string-input/src/lib/check-validate-value.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":24},"end":{"line":9,"column":1}},"2":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"3":{"start":{"line":4,"column":2},"end":{"line":8,"column":null}}},"fnMap":{"0":{"name":"checkValidateValue","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":24}},"loc":{"start":{"line":3,"column":52},"end":{"line":9,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"type":"cond-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":45},"end":{"line":3,"column":47}}]},"1":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},"type":"binary-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":42},"end":{"line":3,"column":45}}]}},"s":{"0":11,"1":11,"2":208,"3":208},"f":{"0":208},"b":{"0":[208,0],"1":[208,208]}} +,"/Users/zane/playground/string-input/src/lib/possible-boolean-values.mjs": {"path":"/Users/zane/playground/string-input/src/lib/possible-boolean-values.mjs","statementMap":{"0":{"start":{"line":1,"column":27},"end":{"line":26,"column":1}},"1":{"start":{"line":2,"column":17},"end":{"line":2,"column":16}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":10}},"3":{"start":{"line":4,"column":9},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":28},"end":{"line":5,"column":27}},"5":{"start":{"line":7,"column":17},"end":{"line":7,"column":29}},"6":{"start":{"line":8,"column":2},"end":{"line":10,"column":null}},"7":{"start":{"line":9,"column":4},"end":{"line":9,"column":null}},"8":{"start":{"line":11,"column":2},"end":{"line":16,"column":null}},"9":{"start":{"line":12,"column":4},"end":{"line":12,"column":null}},"10":{"start":{"line":13,"column":4},"end":{"line":15,"column":null}},"11":{"start":{"line":14,"column":6},"end":{"line":14,"column":null}},"12":{"start":{"line":17,"column":2},"end":{"line":23,"column":null}},"13":{"start":{"line":18,"column":4},"end":{"line":18,"column":null}},"14":{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},"15":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"16":{"start":{"line":22,"column":4},"end":{"line":22,"column":null}},"17":{"start":{"line":25,"column":2},"end":{"line":25,"column":null}}},"fnMap":{"0":{"name":"possibleBooleanValues","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":27}},"loc":{"start":{"line":6,"column":6},"end":{"line":26,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":2},"end":{"line":10,"column":null}},"type":"if","locations":[{"start":{"line":8,"column":2},"end":{"line":10,"column":null}}]},"1":{"loc":{"start":{"line":11,"column":2},"end":{"line":16,"column":null}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":16,"column":null}}]},"2":{"loc":{"start":{"line":13,"column":4},"end":{"line":15,"column":null}},"type":"if","locations":[{"start":{"line":13,"column":4},"end":{"line":15,"column":null}}]},"3":{"loc":{"start":{"line":17,"column":2},"end":{"line":23,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":23,"column":null}}]},"4":{"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":21,"column":null}}]}},"s":{"0":3,"1":22,"2":22,"3":22,"4":22,"5":22,"6":22,"7":16,"8":22,"9":16,"10":16,"11":10,"12":22,"13":18,"14":18,"15":1,"16":18,"17":22},"f":{"0":22},"b":{"0":[16],"1":[16],"2":[10],"3":[18],"4":[1]}} +,"/Users/zane/playground/string-input/src/lib/type-checks.mjs": {"path":"/Users/zane/playground/string-input/src/lib/type-checks.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":16},"end":{"line":19,"column":1}},"2":{"start":{"line":3,"column":27},"end":{"line":3,"column":26}},"3":{"start":{"line":3,"column":33},"end":{"line":3,"column":32}},"4":{"start":{"line":3,"column":41},"end":{"line":3,"column":40}},"5":{"start":{"line":4,"column":2},"end":{"line":10,"column":null}},"6":{"start":{"line":5,"column":4},"end":{"line":9,"column":null}},"7":{"start":{"line":11,"column":2},"end":{"line":18,"column":null}},"8":{"start":{"line":12,"column":4},"end":{"line":17,"column":null}}},"fnMap":{"0":{"name":"typeChecks","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":16}},"loc":{"start":{"line":3,"column":48},"end":{"line":19,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":2},"end":{"line":10,"column":null}},"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":10,"column":null}}]},"1":{"loc":{"start":{"line":4,"column":6},"end":{"line":4,"column":43}},"type":"binary-expr","locations":[{"start":{"line":4,"column":6},"end":{"line":4,"column":25}},{"start":{"line":4,"column":29},"end":{"line":4,"column":43}}]},"2":{"loc":{"start":{"line":11,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":18,"column":null}}]}},"s":{"0":12,"1":12,"2":478,"3":478,"4":478,"5":478,"6":20,"7":458,"8":7},"f":{"0":478},"b":{"0":[20],"1":[478,467],"2":[7]}} +,"/Users/zane/playground/string-input/src/lib/validate-helper.mjs": {"path":"/Users/zane/playground/string-input/src/lib/validate-helper.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":20},"end":{"line":26,"column":1}},"2":{"start":{"line":3,"column":40},"end":{"line":3,"column":39}},"3":{"start":{"line":3,"column":56},"end":{"line":3,"column":55}},"4":{"start":{"line":3,"column":72},"end":{"line":3,"column":71}},"5":{"start":{"line":4,"column":2},"end":{"line":4,"column":null}},"6":{"start":{"line":4,"column":36},"end":{"line":4,"column":null}},"7":{"start":{"line":6,"column":17},"end":{"line":6,"column":50}},"8":{"start":{"line":7,"column":40},"end":{"line":7,"column":57}},"9":{"start":{"line":7,"column":15},"end":{"line":7,"column":14}},"10":{"start":{"line":7,"column":21},"end":{"line":7,"column":20}},"11":{"start":{"line":7,"column":29},"end":{"line":7,"column":28}},"12":{"start":{"line":7,"column":35},"end":{"line":7,"column":34}},"13":{"start":{"line":8,"column":2},"end":{"line":25,"column":null}},"14":{"start":{"line":9,"column":4},"end":{"line":15,"column":null}},"15":{"start":{"line":17,"column":7},"end":{"line":25,"column":null}},"16":{"start":{"line":18,"column":4},"end":{"line":24,"column":null}}},"fnMap":{"0":{"name":"validateHelper","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":20}},"loc":{"start":{"line":3,"column":79},"end":{"line":26,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":2},"end":{"line":4,"column":null}},"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":4,"column":null}}]},"1":{"loc":{"start":{"line":8,"column":2},"end":{"line":25,"column":null}},"type":"if","locations":[{"start":{"line":8,"column":2},"end":{"line":25,"column":null}},{"start":{"line":17,"column":7},"end":{"line":25,"column":null}}]},"2":{"loc":{"start":{"line":17,"column":7},"end":{"line":25,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":7},"end":{"line":25,"column":null}}]}},"s":{"0":11,"1":11,"2":503,"3":503,"4":503,"5":503,"6":447,"7":56,"8":56,"9":56,"10":56,"11":56,"12":56,"13":56,"14":8,"15":48,"16":30},"f":{"0":503},"b":{"0":[447],"1":[8,48],"2":[30]}} +,"/Users/zane/playground/string-input/src/lib/date-time/convert-month-name.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/convert-month-name.mjs","statementMap":{"0":{"start":{"line":1,"column":22},"end":{"line":28,"column":1}},"1":{"start":{"line":2,"column":2},"end":{"line":27,"column":null}},"2":{"start":{"line":4,"column":6},"end":{"line":4,"column":null}},"3":{"start":{"line":6,"column":6},"end":{"line":6,"column":null}},"4":{"start":{"line":8,"column":6},"end":{"line":8,"column":null}},"5":{"start":{"line":10,"column":6},"end":{"line":10,"column":null}},"6":{"start":{"line":12,"column":6},"end":{"line":12,"column":null}},"7":{"start":{"line":14,"column":6},"end":{"line":14,"column":null}},"8":{"start":{"line":16,"column":6},"end":{"line":16,"column":null}},"9":{"start":{"line":18,"column":6},"end":{"line":18,"column":null}},"10":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"11":{"start":{"line":22,"column":6},"end":{"line":22,"column":null}},"12":{"start":{"line":24,"column":6},"end":{"line":24,"column":null}},"13":{"start":{"line":26,"column":6},"end":{"line":26,"column":null}}},"fnMap":{"0":{"name":"convertMonthName","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":22}},"loc":{"start":{"line":1,"column":40},"end":{"line":28,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":2},"end":{"line":27,"column":null}},"type":"switch","locations":[{"start":{"line":3,"column":4},"end":{"line":4,"column":null}},{"start":{"line":5,"column":4},"end":{"line":6,"column":null}},{"start":{"line":7,"column":4},"end":{"line":8,"column":null}},{"start":{"line":9,"column":4},"end":{"line":10,"column":null}},{"start":{"line":11,"column":4},"end":{"line":12,"column":null}},{"start":{"line":13,"column":4},"end":{"line":14,"column":null}},{"start":{"line":15,"column":4},"end":{"line":16,"column":null}},{"start":{"line":17,"column":4},"end":{"line":18,"column":null}},{"start":{"line":19,"column":4},"end":{"line":20,"column":null}},{"start":{"line":21,"column":4},"end":{"line":22,"column":null}},{"start":{"line":23,"column":4},"end":{"line":24,"column":null}},{"start":{"line":25,"column":4},"end":{"line":26,"column":null}}]}},"s":{"0":6,"1":77,"2":66,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1},"f":{"0":77},"b":{"0":[66,1,1,1,1,1,1,1,1,1,1,1]}} +,"/Users/zane/playground/string-input/src/lib/date-time/convert-timezone-offset-to-string.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/convert-timezone-offset-to-string.mjs","statementMap":{"0":{"start":{"line":1,"column":35},"end":{"line":13,"column":1}},"1":{"start":{"line":2,"column":16},"end":{"line":2,"column":39}},"2":{"start":{"line":3,"column":17},"end":{"line":3,"column":28}},"3":{"start":{"line":8,"column":4},"end":{"line":10,"column":46}},"4":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}}},"fnMap":{"0":{"name":"convertTimezoneOffsetToString","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":35}},"loc":{"start":{"line":1,"column":50},"end":{"line":13,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":5},"end":{"line":8,"column":28}},"type":"cond-expr","locations":[{"start":{"line":8,"column":19},"end":{"line":8,"column":22}},{"start":{"line":8,"column":25},"end":{"line":8,"column":28}}]}},"s":{"0":3,"1":72,"2":72,"3":72,"4":72},"f":{"0":72},"b":{"0":[30,42]}} +,"/Users/zane/playground/string-input/src/lib/date-time/get-timezone-offset.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/get-timezone-offset.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":5,"column":23},"end":{"line":62,"column":1}},"3":{"start":{"line":6,"column":8},"end":{"line":6,"column":7}},"4":{"start":{"line":6,"column":16},"end":{"line":6,"column":15}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":null}},"6":{"start":{"line":7,"column":7},"end":{"line":7,"column":9}},"7":{"start":{"line":7,"column":14},"end":{"line":7,"column":16}},"8":{"start":{"line":7,"column":19},"end":{"line":7,"column":21}},"9":{"start":{"line":7,"column":26},"end":{"line":7,"column":28}},"10":{"start":{"line":7,"column":35},"end":{"line":7,"column":37}},"11":{"start":{"line":7,"column":44},"end":{"line":7,"column":46}},"12":{"start":{"line":7,"column":57},"end":{"line":7,"column":59}},"13":{"start":{"line":7,"column":67},"end":{"line":7,"column":null}},"14":{"start":{"line":9,"column":2},"end":{"line":61,"column":null}},"15":{"start":{"line":12,"column":4},"end":{"line":22,"column":null}},"16":{"start":{"line":24,"column":7},"end":{"line":61,"column":null}},"17":{"start":{"line":25,"column":4},"end":{"line":25,"column":null}},"18":{"start":{"line":28,"column":27},"end":{"line":28,"column":72}},"19":{"start":{"line":29,"column":4},"end":{"line":60,"column":null}},"20":{"start":{"line":30,"column":30},"end":{"line":30,"column":64}},"21":{"start":{"line":31,"column":26},"end":{"line":31,"column":58}},"22":{"start":{"line":32,"column":28},"end":{"line":32,"column":55}},"23":{"start":{"line":34,"column":6},"end":{"line":34,"column":null}},"24":{"start":{"line":38,"column":26},"end":{"line":46,"column":8}},"25":{"start":{"line":47,"column":21},"end":{"line":47,"column":59}},"26":{"start":{"line":48,"column":6},"end":{"line":56,"column":null}},"27":{"start":{"line":50,"column":8},"end":{"line":55,"column":null}},"28":{"start":{"line":57,"column":22},"end":{"line":57,"column":50}},"29":{"start":{"line":59,"column":6},"end":{"line":59,"column":null}}},"fnMap":{"0":{"name":"getTimezoneOffset","decl":{"start":{"line":5,"column":6},"end":{"line":5,"column":23}},"loc":{"start":{"line":8,"column":5},"end":{"line":62,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":61,"column":null}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":61,"column":null}},{"start":{"line":24,"column":7},"end":{"line":61,"column":null}}]},"1":{"loc":{"start":{"line":24,"column":7},"end":{"line":61,"column":null}},"type":"if","locations":[{"start":{"line":24,"column":7},"end":{"line":61,"column":null}},{"start":{"line":27,"column":7},"end":{"line":61,"column":null}}]},"2":{"loc":{"start":{"line":24,"column":11},"end":{"line":24,"column":47}},"type":"binary-expr","locations":[{"start":{"line":24,"column":11},"end":{"line":24,"column":27}},{"start":{"line":24,"column":31},"end":{"line":24,"column":47}}]},"3":{"loc":{"start":{"line":29,"column":4},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":60,"column":null}},{"start":{"line":36,"column":9},"end":{"line":60,"column":null}}]},"4":{"loc":{"start":{"line":30,"column":30},"end":{"line":30,"column":64}},"type":"cond-expr","locations":[{"start":{"line":30,"column":58},"end":{"line":30,"column":60}},{"start":{"line":30,"column":63},"end":{"line":30,"column":64}}]},"5":{"loc":{"start":{"line":48,"column":6},"end":{"line":56,"column":null}},"type":"if","locations":[{"start":{"line":48,"column":6},"end":{"line":56,"column":null}}]}},"s":{"0":6,"1":6,"2":6,"3":113,"4":113,"5":113,"6":113,"7":113,"8":113,"9":113,"10":113,"11":113,"12":113,"13":113,"14":113,"15":41,"16":72,"17":43,"18":29,"19":29,"20":25,"21":25,"22":25,"23":25,"24":4,"25":4,"26":4,"27":1,"28":3,"29":3},"f":{"0":113},"b":{"0":[41,72],"1":[43,29],"2":[72,72],"3":[25,4],"4":[9,16],"5":[1]}} +,"/Users/zane/playground/string-input/src/lib/date-time/make-date-time-string.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/make-date-time-string.mjs","statementMap":{"0":{"start":{"line":1,"column":24},"end":{"line":21,"column":1}},"1":{"start":{"line":10,"column":6},"end":{"line":10,"column":null}},"2":{"start":{"line":2,"column":6},"end":{"line":2,"column":null}},"3":{"start":{"line":3,"column":7},"end":{"line":3,"column":null}},"4":{"start":{"line":4,"column":5},"end":{"line":4,"column":null}},"5":{"start":{"line":5,"column":7},"end":{"line":5,"column":null}},"6":{"start":{"line":6,"column":9},"end":{"line":6,"column":null}},"7":{"start":{"line":7,"column":9},"end":{"line":7,"column":null}},"8":{"start":{"line":8,"column":13},"end":{"line":8,"column":null}},"9":{"start":{"line":9,"column":10},"end":{"line":9,"column":null}},"10":{"start":{"line":12,"column":4},"end":{"line":14,"column":58}},"11":{"start":{"line":16,"column":2},"end":{"line":18,"column":null}},"12":{"start":{"line":17,"column":4},"end":{"line":17,"column":null}},"13":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}}},"fnMap":{"0":{"name":"makeDateTimeString","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":24}},"loc":{"start":{"line":10,"column":6},"end":{"line":21,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":7},"end":{"line":14,"column":57}},"type":"cond-expr","locations":[{"start":{"line":14,"column":25},"end":{"line":14,"column":52}},{"start":{"line":14,"column":55},"end":{"line":14,"column":57}}]},"1":{"loc":{"start":{"line":16,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":16,"column":2},"end":{"line":18,"column":null}}]}},"s":{"0":6,"1":151,"2":151,"3":151,"4":151,"5":151,"6":151,"7":151,"8":151,"9":151,"10":151,"11":151,"12":106,"13":151},"f":{"0":151},"b":{"0":[11,140],"1":[106]}} +,"/Users/zane/playground/string-input/src/lib/date-time/process-idiomatic-date-time.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/process-idiomatic-date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":null}},"2":{"start":{"line":12,"column":0},"end":{"line":12,"column":null}},"3":{"start":{"line":13,"column":0},"end":{"line":13,"column":null}},"4":{"start":{"line":15,"column":30},"end":{"line":150,"column":1}},"5":{"start":{"line":16,"column":27},"end":{"line":16,"column":14}},"6":{"start":{"line":16,"column":27},"end":{"line":16,"column":22}},"7":{"start":{"line":19,"column":20},"end":{"line":21,"column":3}},"8":{"start":{"line":22,"column":23},"end":{"line":22,"column":45}},"9":{"start":{"line":23,"column":17},"end":{"line":23,"column":77}},"10":{"start":{"line":24,"column":20},"end":{"line":24,"column":39}},"11":{"start":{"line":25,"column":31},"end":{"line":27,"column":3}},"12":{"start":{"line":28,"column":34},"end":{"line":28,"column":67}},"13":{"start":{"line":31,"column":4},"end":{"line":33,"column":48}},"14":{"start":{"line":35,"column":2},"end":{"line":42,"column":null}},"15":{"start":{"line":36,"column":4},"end":{"line":41,"column":null}},"16":{"start":{"line":45,"column":23},"end":{"line":45,"column":53}},"17":{"start":{"line":46,"column":26},"end":{"line":46,"column":51}},"18":{"start":{"line":47,"column":19},"end":{"line":47,"column":61}},"19":{"start":{"line":48,"column":22},"end":{"line":48,"column":43}},"20":{"start":{"line":50,"column":21},"end":{"line":50,"column":69}},"21":{"start":{"line":51,"column":24},"end":{"line":51,"column":47}},"22":{"start":{"line":54,"column":4},"end":{"line":56,"column":38}},"23":{"start":{"line":58,"column":2},"end":{"line":74,"column":null}},"24":{"start":{"line":59,"column":4},"end":{"line":64,"column":null}},"25":{"start":{"line":66,"column":7},"end":{"line":74,"column":null}},"26":{"start":{"line":67,"column":4},"end":{"line":73,"column":null}},"27":{"start":{"line":76,"column":22},"end":{"line":76,"column":66}},"28":{"start":{"line":77,"column":15},"end":{"line":80,"column":3}},"29":{"start":{"line":82,"column":2},"end":{"line":88,"column":null}},"30":{"start":{"line":83,"column":22},"end":{"line":83,"column":40}},"31":{"start":{"line":84,"column":4},"end":{"line":84,"column":null}},"32":{"start":{"line":87,"column":4},"end":{"line":87,"column":null}},"33":{"start":{"line":89,"column":14},"end":{"line":91,"column":3}},"34":{"start":{"line":94,"column":4},"end":{"line":96,"column":12}},"35":{"start":{"line":98,"column":2},"end":{"line":121,"column":null}},"36":{"start":{"line":99,"column":4},"end":{"line":99,"column":null}},"37":{"start":{"line":100,"column":4},"end":{"line":100,"column":null}},"38":{"start":{"line":101,"column":4},"end":{"line":101,"column":null}},"39":{"start":{"line":102,"column":4},"end":{"line":102,"column":null}},"40":{"start":{"line":105,"column":4},"end":{"line":107,"column":null}},"41":{"start":{"line":108,"column":4},"end":{"line":113,"column":null}},"42":{"start":{"line":109,"column":6},"end":{"line":109,"column":null}},"43":{"start":{"line":110,"column":6},"end":{"line":112,"column":null}},"44":{"start":{"line":111,"column":8},"end":{"line":111,"column":null}},"45":{"start":{"line":114,"column":4},"end":{"line":116,"column":null}},"46":{"start":{"line":117,"column":4},"end":{"line":117,"column":null}},"47":{"start":{"line":118,"column":4},"end":{"line":120,"column":null}},"48":{"start":{"line":124,"column":4},"end":{"line":127,"column":20}},"49":{"start":{"line":128,"column":25},"end":{"line":137,"column":4}},"50":{"start":{"line":139,"column":2},"end":{"line":149,"column":null}}},"fnMap":{"0":{"name":"processIdiomaticDateTime","decl":{"start":{"line":15,"column":6},"end":{"line":15,"column":30}},"loc":{"start":{"line":15,"column":68},"end":{"line":150,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":5},"end":{"line":31,"column":34}},"type":"cond-expr","locations":[{"start":{"line":31,"column":29},"end":{"line":31,"column":30}},{"start":{"line":31,"column":33},"end":{"line":31,"column":34}}]},"1":{"loc":{"start":{"line":32,"column":7},"end":{"line":32,"column":33}},"type":"cond-expr","locations":[{"start":{"line":32,"column":28},"end":{"line":32,"column":29}},{"start":{"line":32,"column":32},"end":{"line":32,"column":33}}]},"2":{"loc":{"start":{"line":33,"column":7},"end":{"line":33,"column":47}},"type":"cond-expr","locations":[{"start":{"line":33,"column":42},"end":{"line":33,"column":43}},{"start":{"line":33,"column":46},"end":{"line":33,"column":47}}]},"3":{"loc":{"start":{"line":35,"column":2},"end":{"line":42,"column":null}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":42,"column":null}}]},"4":{"loc":{"start":{"line":54,"column":5},"end":{"line":54,"column":37}},"type":"cond-expr","locations":[{"start":{"line":54,"column":32},"end":{"line":54,"column":33}},{"start":{"line":54,"column":36},"end":{"line":54,"column":37}}]},"5":{"loc":{"start":{"line":55,"column":7},"end":{"line":55,"column":35}},"type":"cond-expr","locations":[{"start":{"line":55,"column":30},"end":{"line":55,"column":31}},{"start":{"line":55,"column":34},"end":{"line":55,"column":35}}]},"6":{"loc":{"start":{"line":56,"column":7},"end":{"line":56,"column":37}},"type":"cond-expr","locations":[{"start":{"line":56,"column":32},"end":{"line":56,"column":33}},{"start":{"line":56,"column":36},"end":{"line":56,"column":37}}]},"7":{"loc":{"start":{"line":58,"column":2},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":58,"column":2},"end":{"line":74,"column":null}},{"start":{"line":66,"column":7},"end":{"line":74,"column":null}}]},"8":{"loc":{"start":{"line":66,"column":7},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":66,"column":7},"end":{"line":74,"column":null}}]},"9":{"loc":{"start":{"line":76,"column":22},"end":{"line":76,"column":66}},"type":"binary-expr","locations":[{"start":{"line":76,"column":22},"end":{"line":76,"column":38}},{"start":{"line":76,"column":42},"end":{"line":76,"column":60}},{"start":{"line":76,"column":64},"end":{"line":76,"column":66}}]},"10":{"loc":{"start":{"line":76,"column":22},"end":{"line":76,"column":38}},"type":"cond-expr","locations":[{"start":{"line":76,"column":33},"end":{"line":76,"column":36}},{"start":{"line":76,"column":22},"end":{"line":76,"column":38}}]},"11":{"loc":{"start":{"line":76,"column":22},"end":{"line":76,"column":36}},"type":"binary-expr","locations":[{"start":{"line":76,"column":22},"end":{"line":76,"column":36}},{"start":{"line":76,"column":22},"end":{"line":76,"column":36}}]},"12":{"loc":{"start":{"line":76,"column":42},"end":{"line":76,"column":60}},"type":"cond-expr","locations":[{"start":{"line":76,"column":55},"end":{"line":76,"column":58}},{"start":{"line":76,"column":42},"end":{"line":76,"column":60}}]},"13":{"loc":{"start":{"line":76,"column":42},"end":{"line":76,"column":58}},"type":"binary-expr","locations":[{"start":{"line":76,"column":42},"end":{"line":76,"column":58}},{"start":{"line":76,"column":42},"end":{"line":76,"column":58}}]},"14":{"loc":{"start":{"line":79,"column":9},"end":{"line":79,"column":null}},"type":"binary-expr","locations":[{"start":{"line":79,"column":9},"end":{"line":79,"column":29}},{"start":{"line":79,"column":33},"end":{"line":79,"column":49}},{"start":{"line":79,"column":53},"end":{"line":79,"column":71}}]},"15":{"loc":{"start":{"line":79,"column":9},"end":{"line":79,"column":29}},"type":"cond-expr","locations":[{"start":{"line":79,"column":24},"end":{"line":79,"column":27}},{"start":{"line":79,"column":9},"end":{"line":79,"column":29}}]},"16":{"loc":{"start":{"line":79,"column":9},"end":{"line":79,"column":27}},"type":"binary-expr","locations":[{"start":{"line":79,"column":9},"end":{"line":79,"column":27}},{"start":{"line":79,"column":9},"end":{"line":79,"column":27}}]},"17":{"loc":{"start":{"line":79,"column":33},"end":{"line":79,"column":49}},"type":"cond-expr","locations":[{"start":{"line":79,"column":44},"end":{"line":79,"column":47}},{"start":{"line":79,"column":33},"end":{"line":79,"column":49}}]},"18":{"loc":{"start":{"line":79,"column":33},"end":{"line":79,"column":47}},"type":"binary-expr","locations":[{"start":{"line":79,"column":33},"end":{"line":79,"column":47}},{"start":{"line":79,"column":33},"end":{"line":79,"column":47}}]},"19":{"loc":{"start":{"line":79,"column":53},"end":{"line":79,"column":71}},"type":"cond-expr","locations":[{"start":{"line":79,"column":66},"end":{"line":79,"column":69}},{"start":{"line":79,"column":53},"end":{"line":79,"column":71}}]},"20":{"loc":{"start":{"line":79,"column":53},"end":{"line":79,"column":69}},"type":"binary-expr","locations":[{"start":{"line":79,"column":53},"end":{"line":79,"column":69}},{"start":{"line":79,"column":53},"end":{"line":79,"column":69}}]},"21":{"loc":{"start":{"line":82,"column":2},"end":{"line":88,"column":null}},"type":"if","locations":[{"start":{"line":82,"column":2},"end":{"line":88,"column":null}},{"start":{"line":86,"column":7},"end":{"line":88,"column":null}}]},"22":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":60}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":37}},{"start":{"line":87,"column":41},"end":{"line":87,"column":59}}]},"23":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":37}},"type":"cond-expr","locations":[{"start":{"line":87,"column":32},"end":{"line":87,"column":35}},{"start":{"line":87,"column":21},"end":{"line":87,"column":37}}]},"24":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},{"start":{"line":87,"column":21},"end":{"line":87,"column":35}}]},"25":{"loc":{"start":{"line":87,"column":41},"end":{"line":87,"column":59}},"type":"cond-expr","locations":[{"start":{"line":87,"column":54},"end":{"line":87,"column":57}},{"start":{"line":87,"column":41},"end":{"line":87,"column":59}}]},"26":{"loc":{"start":{"line":87,"column":41},"end":{"line":87,"column":57}},"type":"binary-expr","locations":[{"start":{"line":87,"column":41},"end":{"line":87,"column":57}},{"start":{"line":87,"column":41},"end":{"line":87,"column":57}}]},"27":{"loc":{"start":{"line":90,"column":4},"end":{"line":90,"column":null}},"type":"binary-expr","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":24}},{"start":{"line":90,"column":28},"end":{"line":90,"column":44}},{"start":{"line":90,"column":48},"end":{"line":90,"column":66}}]},"28":{"loc":{"start":{"line":90,"column":4},"end":{"line":90,"column":24}},"type":"cond-expr","locations":[{"start":{"line":90,"column":19},"end":{"line":90,"column":22}},{"start":{"line":90,"column":4},"end":{"line":90,"column":24}}]},"29":{"loc":{"start":{"line":90,"column":4},"end":{"line":90,"column":22}},"type":"binary-expr","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":22}},{"start":{"line":90,"column":4},"end":{"line":90,"column":22}}]},"30":{"loc":{"start":{"line":90,"column":28},"end":{"line":90,"column":44}},"type":"cond-expr","locations":[{"start":{"line":90,"column":39},"end":{"line":90,"column":42}},{"start":{"line":90,"column":28},"end":{"line":90,"column":44}}]},"31":{"loc":{"start":{"line":90,"column":28},"end":{"line":90,"column":42}},"type":"binary-expr","locations":[{"start":{"line":90,"column":28},"end":{"line":90,"column":42}},{"start":{"line":90,"column":28},"end":{"line":90,"column":42}}]},"32":{"loc":{"start":{"line":90,"column":48},"end":{"line":90,"column":66}},"type":"cond-expr","locations":[{"start":{"line":90,"column":61},"end":{"line":90,"column":64}},{"start":{"line":90,"column":48},"end":{"line":90,"column":66}}]},"33":{"loc":{"start":{"line":90,"column":48},"end":{"line":90,"column":64}},"type":"binary-expr","locations":[{"start":{"line":90,"column":48},"end":{"line":90,"column":64}},{"start":{"line":90,"column":48},"end":{"line":90,"column":64}}]},"34":{"loc":{"start":{"line":94,"column":4},"end":{"line":96,"column":12}},"type":"binary-expr","locations":[{"start":{"line":94,"column":4},"end":{"line":94,"column":35}},{"start":{"line":95,"column":7},"end":{"line":95,"column":49}},{"start":{"line":96,"column":7},"end":{"line":96,"column":12}}]},"35":{"loc":{"start":{"line":94,"column":4},"end":{"line":94,"column":21}},"type":"cond-expr","locations":[{"start":{"line":94,"column":16},"end":{"line":94,"column":19}},{"start":{"line":94,"column":4},"end":{"line":94,"column":21}}]},"36":{"loc":{"start":{"line":94,"column":4},"end":{"line":94,"column":19}},"type":"binary-expr","locations":[{"start":{"line":94,"column":4},"end":{"line":94,"column":19}},{"start":{"line":94,"column":4},"end":{"line":94,"column":19}}]},"37":{"loc":{"start":{"line":95,"column":7},"end":{"line":95,"column":35}},"type":"cond-expr","locations":[{"start":{"line":95,"column":30},"end":{"line":95,"column":33}},{"start":{"line":95,"column":7},"end":{"line":95,"column":35}}]},"38":{"loc":{"start":{"line":95,"column":7},"end":{"line":95,"column":33}},"type":"binary-expr","locations":[{"start":{"line":95,"column":7},"end":{"line":95,"column":33}},{"start":{"line":95,"column":7},"end":{"line":95,"column":33}}]},"39":{"loc":{"start":{"line":98,"column":2},"end":{"line":121,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":121,"column":null}},{"start":{"line":104,"column":7},"end":{"line":121,"column":null}}]},"40":{"loc":{"start":{"line":106,"column":6},"end":{"line":106,"column":null}},"type":"binary-expr","locations":[{"start":{"line":106,"column":6},"end":{"line":106,"column":23}},{"start":{"line":106,"column":27},"end":{"line":106,"column":41}},{"start":{"line":106,"column":45},"end":{"line":106,"column":73}}]},"41":{"loc":{"start":{"line":106,"column":6},"end":{"line":106,"column":23}},"type":"cond-expr","locations":[{"start":{"line":106,"column":18},"end":{"line":106,"column":21}},{"start":{"line":106,"column":6},"end":{"line":106,"column":23}}]},"42":{"loc":{"start":{"line":106,"column":6},"end":{"line":106,"column":21}},"type":"binary-expr","locations":[{"start":{"line":106,"column":6},"end":{"line":106,"column":21}},{"start":{"line":106,"column":6},"end":{"line":106,"column":21}}]},"43":{"loc":{"start":{"line":106,"column":27},"end":{"line":106,"column":41}},"type":"cond-expr","locations":[{"start":{"line":106,"column":36},"end":{"line":106,"column":39}},{"start":{"line":106,"column":27},"end":{"line":106,"column":41}}]},"44":{"loc":{"start":{"line":106,"column":27},"end":{"line":106,"column":39}},"type":"binary-expr","locations":[{"start":{"line":106,"column":27},"end":{"line":106,"column":39}},{"start":{"line":106,"column":27},"end":{"line":106,"column":39}}]},"45":{"loc":{"start":{"line":106,"column":45},"end":{"line":106,"column":73}},"type":"cond-expr","locations":[{"start":{"line":106,"column":68},"end":{"line":106,"column":71}},{"start":{"line":106,"column":45},"end":{"line":106,"column":73}}]},"46":{"loc":{"start":{"line":106,"column":45},"end":{"line":106,"column":71}},"type":"binary-expr","locations":[{"start":{"line":106,"column":45},"end":{"line":106,"column":71}},{"start":{"line":106,"column":45},"end":{"line":106,"column":71}}]},"47":{"loc":{"start":{"line":108,"column":4},"end":{"line":113,"column":null}},"type":"if","locations":[{"start":{"line":108,"column":4},"end":{"line":113,"column":null}}]},"48":{"loc":{"start":{"line":109,"column":15},"end":{"line":109,"column":59}},"type":"cond-expr","locations":[{"start":{"line":109,"column":53},"end":{"line":109,"column":54}},{"start":{"line":109,"column":57},"end":{"line":109,"column":59}}]},"49":{"loc":{"start":{"line":110,"column":6},"end":{"line":112,"column":null}},"type":"if","locations":[{"start":{"line":110,"column":6},"end":{"line":112,"column":null}}]},"50":{"loc":{"start":{"line":115,"column":6},"end":{"line":115,"column":null}},"type":"binary-expr","locations":[{"start":{"line":115,"column":6},"end":{"line":115,"column":23}},{"start":{"line":115,"column":27},"end":{"line":115,"column":41}},{"start":{"line":115,"column":45},"end":{"line":115,"column":73}}]},"51":{"loc":{"start":{"line":115,"column":6},"end":{"line":115,"column":23}},"type":"cond-expr","locations":[{"start":{"line":115,"column":18},"end":{"line":115,"column":21}},{"start":{"line":115,"column":6},"end":{"line":115,"column":23}}]},"52":{"loc":{"start":{"line":115,"column":6},"end":{"line":115,"column":21}},"type":"binary-expr","locations":[{"start":{"line":115,"column":6},"end":{"line":115,"column":21}},{"start":{"line":115,"column":6},"end":{"line":115,"column":21}}]},"53":{"loc":{"start":{"line":115,"column":27},"end":{"line":115,"column":41}},"type":"cond-expr","locations":[{"start":{"line":115,"column":36},"end":{"line":115,"column":39}},{"start":{"line":115,"column":27},"end":{"line":115,"column":41}}]},"54":{"loc":{"start":{"line":115,"column":27},"end":{"line":115,"column":39}},"type":"binary-expr","locations":[{"start":{"line":115,"column":27},"end":{"line":115,"column":39}},{"start":{"line":115,"column":27},"end":{"line":115,"column":39}}]},"55":{"loc":{"start":{"line":115,"column":45},"end":{"line":115,"column":73}},"type":"cond-expr","locations":[{"start":{"line":115,"column":68},"end":{"line":115,"column":71}},{"start":{"line":115,"column":45},"end":{"line":115,"column":73}}]},"56":{"loc":{"start":{"line":115,"column":45},"end":{"line":115,"column":71}},"type":"binary-expr","locations":[{"start":{"line":115,"column":45},"end":{"line":115,"column":71}},{"start":{"line":115,"column":45},"end":{"line":115,"column":71}}]},"57":{"loc":{"start":{"line":117,"column":23},"end":{"line":117,"column":76}},"type":"binary-expr","locations":[{"start":{"line":117,"column":23},"end":{"line":117,"column":37}},{"start":{"line":117,"column":41},"end":{"line":117,"column":69}},{"start":{"line":117,"column":73},"end":{"line":117,"column":76}}]},"58":{"loc":{"start":{"line":117,"column":23},"end":{"line":117,"column":37}},"type":"cond-expr","locations":[{"start":{"line":117,"column":32},"end":{"line":117,"column":35}},{"start":{"line":117,"column":23},"end":{"line":117,"column":37}}]},"59":{"loc":{"start":{"line":117,"column":23},"end":{"line":117,"column":35}},"type":"binary-expr","locations":[{"start":{"line":117,"column":23},"end":{"line":117,"column":35}},{"start":{"line":117,"column":23},"end":{"line":117,"column":35}}]},"60":{"loc":{"start":{"line":117,"column":41},"end":{"line":117,"column":69}},"type":"cond-expr","locations":[{"start":{"line":117,"column":64},"end":{"line":117,"column":67}},{"start":{"line":117,"column":41},"end":{"line":117,"column":69}}]},"61":{"loc":{"start":{"line":117,"column":41},"end":{"line":117,"column":67}},"type":"binary-expr","locations":[{"start":{"line":117,"column":41},"end":{"line":117,"column":67}},{"start":{"line":117,"column":41},"end":{"line":117,"column":67}}]},"62":{"loc":{"start":{"line":119,"column":14},"end":{"line":119,"column":67}},"type":"binary-expr","locations":[{"start":{"line":119,"column":14},"end":{"line":119,"column":28}},{"start":{"line":119,"column":32},"end":{"line":119,"column":60}},{"start":{"line":119,"column":64},"end":{"line":119,"column":67}}]},"63":{"loc":{"start":{"line":119,"column":14},"end":{"line":119,"column":28}},"type":"cond-expr","locations":[{"start":{"line":119,"column":23},"end":{"line":119,"column":26}},{"start":{"line":119,"column":14},"end":{"line":119,"column":28}}]},"64":{"loc":{"start":{"line":119,"column":14},"end":{"line":119,"column":26}},"type":"binary-expr","locations":[{"start":{"line":119,"column":14},"end":{"line":119,"column":26}},{"start":{"line":119,"column":14},"end":{"line":119,"column":26}}]},"65":{"loc":{"start":{"line":119,"column":32},"end":{"line":119,"column":60}},"type":"cond-expr","locations":[{"start":{"line":119,"column":55},"end":{"line":119,"column":58}},{"start":{"line":119,"column":32},"end":{"line":119,"column":60}}]},"66":{"loc":{"start":{"line":119,"column":32},"end":{"line":119,"column":58}},"type":"binary-expr","locations":[{"start":{"line":119,"column":32},"end":{"line":119,"column":58}},{"start":{"line":119,"column":32},"end":{"line":119,"column":58}}]},"67":{"loc":{"start":{"line":124,"column":4},"end":{"line":127,"column":20}},"type":"binary-expr","locations":[{"start":{"line":124,"column":4},"end":{"line":124,"column":21}},{"start":{"line":125,"column":7},"end":{"line":125,"column":21}},{"start":{"line":126,"column":7},"end":{"line":126,"column":35}},{"start":{"line":127,"column":7},"end":{"line":127,"column":20}}]},"68":{"loc":{"start":{"line":124,"column":4},"end":{"line":124,"column":21}},"type":"cond-expr","locations":[{"start":{"line":124,"column":16},"end":{"line":124,"column":19}},{"start":{"line":124,"column":4},"end":{"line":124,"column":21}}]},"69":{"loc":{"start":{"line":124,"column":4},"end":{"line":124,"column":19}},"type":"binary-expr","locations":[{"start":{"line":124,"column":4},"end":{"line":124,"column":19}},{"start":{"line":124,"column":4},"end":{"line":124,"column":19}}]},"70":{"loc":{"start":{"line":125,"column":7},"end":{"line":125,"column":21}},"type":"cond-expr","locations":[{"start":{"line":125,"column":16},"end":{"line":125,"column":19}},{"start":{"line":125,"column":7},"end":{"line":125,"column":21}}]},"71":{"loc":{"start":{"line":125,"column":7},"end":{"line":125,"column":19}},"type":"binary-expr","locations":[{"start":{"line":125,"column":7},"end":{"line":125,"column":19}},{"start":{"line":125,"column":7},"end":{"line":125,"column":19}}]},"72":{"loc":{"start":{"line":126,"column":7},"end":{"line":126,"column":35}},"type":"cond-expr","locations":[{"start":{"line":126,"column":30},"end":{"line":126,"column":33}},{"start":{"line":126,"column":7},"end":{"line":126,"column":35}}]},"73":{"loc":{"start":{"line":126,"column":7},"end":{"line":126,"column":33}},"type":"binary-expr","locations":[{"start":{"line":126,"column":7},"end":{"line":126,"column":33}},{"start":{"line":126,"column":7},"end":{"line":126,"column":33}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":96,"6":96,"7":96,"8":96,"9":96,"10":96,"11":96,"12":96,"13":96,"14":96,"15":10,"16":86,"17":86,"18":86,"19":86,"20":86,"21":86,"22":86,"23":86,"24":3,"25":83,"26":1,"27":82,"28":82,"29":82,"30":8,"31":8,"32":74,"33":82,"34":82,"35":82,"36":4,"37":4,"38":4,"39":4,"40":78,"41":78,"42":2,"43":2,"44":1,"45":78,"46":78,"47":78,"48":82,"49":82,"50":82},"f":{"0":96},"b":{"0":[6,90],"1":[4,92],"2":[80,16],"3":[10],"4":[8,78],"5":[61,25],"6":[15,71],"7":[3,83],"8":[1],"9":[82,80,78],"10":[22,60],"11":[82,60],"12":[66,14],"13":[80,14],"14":[82,74,14],"15":[74,8],"16":[82,8],"17":[14,60],"18":[74,60],"19":[0,14],"20":[14,14],"21":[8,74],"22":[74,14],"23":[14,60],"24":[74,60],"25":[0,14],"26":[14,14],"27":[82,74,14],"28":[74,8],"29":[82,8],"30":[14,60],"31":[74,60],"32":[0,14],"33":[14,14],"34":[82,81,78],"35":[78,4],"36":[82,4],"37":[3,78],"38":[81,78],"39":[4,78],"40":[78,75,73],"41":[75,3],"42":[78,3],"43":[73,2],"44":[75,2],"45":[0,73],"46":[73,73],"47":[2],"48":[1,1],"49":[1],"50":[78,75,73],"51":[75,3],"52":[78,3],"53":[73,2],"54":[75,2],"55":[0,73],"56":[73,73],"57":[78,78,63],"58":[76,2],"59":[78,2],"60":[3,75],"61":[78,75],"62":[78,78,71],"63":[76,2],"64":[78,2],"65":[3,75],"66":[78,75],"67":[82,82,82,52],"68":[78,4],"69":[82,4],"70":[80,2],"71":[82,2],"72":[4,78],"73":[82,78]}} +,"/Users/zane/playground/string-input/src/lib/date-time/process-iso-8601-date-time.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/process-iso-8601-date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":5,"column":29},"end":{"line":5,"column":35}},"3":{"start":{"line":7,"column":28},"end":{"line":95,"column":1}},"4":{"start":{"line":8,"column":27},"end":{"line":8,"column":14}},"5":{"start":{"line":8,"column":27},"end":{"line":8,"column":22}},"6":{"start":{"line":10,"column":2},"end":{"line":23,"column":null}},"7":{"start":{"line":11,"column":4},"end":{"line":15,"column":null}},"8":{"start":{"line":17,"column":7},"end":{"line":23,"column":null}},"9":{"start":{"line":18,"column":4},"end":{"line":22,"column":null}},"10":{"start":{"line":25,"column":15},"end":{"line":25,"column":40}},"11":{"start":{"line":26,"column":16},"end":{"line":26,"column":46}},"12":{"start":{"line":27,"column":14},"end":{"line":27,"column":44}},"13":{"start":{"line":28,"column":16},"end":{"line":28,"column":45}},"14":{"start":{"line":29,"column":16},"end":{"line":29,"column":64}},"15":{"start":{"line":32,"column":2},"end":{"line":70,"column":null}},"16":{"start":{"line":37,"column":4},"end":{"line":37,"column":null}},"17":{"start":{"line":38,"column":4},"end":{"line":38,"column":null}},"18":{"start":{"line":39,"column":4},"end":{"line":39,"column":null}},"19":{"start":{"line":41,"column":7},"end":{"line":70,"column":null}},"20":{"start":{"line":43,"column":22},"end":{"line":43,"column":53}},"21":{"start":{"line":44,"column":24},"end":{"line":44,"column":38}},"22":{"start":{"line":45,"column":4},"end":{"line":45,"column":null}},"23":{"start":{"line":46,"column":24},"end":{"line":46,"column":39}},"24":{"start":{"line":47,"column":24},"end":{"line":47,"column":40}},"25":{"start":{"line":48,"column":4},"end":{"line":48,"column":null}},"26":{"start":{"line":50,"column":4},"end":{"line":50,"column":null}},"27":{"start":{"line":53,"column":4},"end":{"line":53,"column":null}},"28":{"start":{"line":54,"column":4},"end":{"line":69,"column":null}},"29":{"start":{"line":55,"column":6},"end":{"line":55,"column":null}},"30":{"start":{"line":56,"column":6},"end":{"line":56,"column":null}},"31":{"start":{"line":58,"column":9},"end":{"line":69,"column":null}},"32":{"start":{"line":59,"column":26},"end":{"line":59,"column":57}},"33":{"start":{"line":60,"column":26},"end":{"line":60,"column":42}},"34":{"start":{"line":61,"column":6},"end":{"line":61,"column":null}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":null}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":null}},"37":{"start":{"line":67,"column":6},"end":{"line":68,"column":null}},"38":{"start":{"line":72,"column":19},"end":{"line":72,"column":52}},"39":{"start":{"line":73,"column":25},"end":{"line":82,"column":4}},"40":{"start":{"line":84,"column":2},"end":{"line":94,"column":null}},"41":{"start":{"line":97,"column":25},"end":{"line":98,"column":null}},"42":{"start":{"line":97,"column":37},"end":{"line":98,"column":null}}},"fnMap":{"0":{"name":"processISO8601DateTime","decl":{"start":{"line":7,"column":6},"end":{"line":7,"column":28}},"loc":{"start":{"line":7,"column":73},"end":{"line":95,"column":1}}},"1":{"name":"roundFracSeconds","decl":{"start":{"line":97,"column":6},"end":{"line":97,"column":22}},"loc":{"start":{"line":97,"column":37},"end":{"line":98,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":2},"end":{"line":23,"column":null}},"type":"if","locations":[{"start":{"line":10,"column":2},"end":{"line":23,"column":null}},{"start":{"line":17,"column":7},"end":{"line":23,"column":null}}]},"1":{"loc":{"start":{"line":17,"column":7},"end":{"line":23,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":7},"end":{"line":23,"column":null}}]},"2":{"loc":{"start":{"line":26,"column":16},"end":{"line":26,"column":46}},"type":"binary-expr","locations":[{"start":{"line":26,"column":16},"end":{"line":26,"column":41}},{"start":{"line":26,"column":45},"end":{"line":26,"column":46}}]},"3":{"loc":{"start":{"line":27,"column":14},"end":{"line":27,"column":44}},"type":"binary-expr","locations":[{"start":{"line":27,"column":14},"end":{"line":27,"column":39}},{"start":{"line":27,"column":43},"end":{"line":27,"column":44}}]},"4":{"loc":{"start":{"line":29,"column":16},"end":{"line":29,"column":64}},"type":"cond-expr","locations":[{"start":{"line":29,"column":33},"end":{"line":29,"column":35}},{"start":{"line":29,"column":38},"end":{"line":29,"column":64}}]},"5":{"loc":{"start":{"line":32,"column":2},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":32,"column":2},"end":{"line":70,"column":null}},{"start":{"line":41,"column":7},"end":{"line":70,"column":null}}]},"6":{"loc":{"start":{"line":33,"column":4},"end":{"line":35,"column":37}},"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":34}},{"start":{"line":34,"column":7},"end":{"line":34,"column":37}},{"start":{"line":35,"column":7},"end":{"line":35,"column":37}}]},"7":{"loc":{"start":{"line":41,"column":7},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":7},"end":{"line":70,"column":null}},{"start":{"line":52,"column":7},"end":{"line":70,"column":null}}]},"8":{"loc":{"start":{"line":54,"column":4},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":54,"column":4},"end":{"line":69,"column":null}},{"start":{"line":58,"column":9},"end":{"line":69,"column":null}}]},"9":{"loc":{"start":{"line":54,"column":8},"end":{"line":54,"column":72}},"type":"binary-expr","locations":[{"start":{"line":54,"column":8},"end":{"line":54,"column":38}},{"start":{"line":54,"column":42},"end":{"line":54,"column":72}}]},"10":{"loc":{"start":{"line":58,"column":9},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":58,"column":9},"end":{"line":69,"column":null}},{"start":{"line":65,"column":9},"end":{"line":69,"column":null}}]},"11":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":76}},"type":"cond-expr","locations":[{"start":{"line":68,"column":41},"end":{"line":68,"column":42}},{"start":{"line":68,"column":45},"end":{"line":68,"column":76}}]},"12":{"loc":{"start":{"line":72,"column":19},"end":{"line":72,"column":52}},"type":"binary-expr","locations":[{"start":{"line":72,"column":19},"end":{"line":72,"column":35}},{"start":{"line":72,"column":39},"end":{"line":72,"column":52}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":19,"5":19,"6":19,"7":1,"8":18,"9":1,"10":17,"11":17,"12":17,"13":17,"14":17,"15":17,"16":4,"17":4,"18":4,"19":13,"20":3,"21":3,"22":3,"23":3,"24":3,"25":3,"26":3,"27":10,"28":10,"29":1,"30":1,"31":9,"32":2,"33":2,"34":2,"35":2,"36":7,"37":7,"38":17,"39":17,"40":17,"41":3,"42":5},"f":{"0":19,"1":5},"b":{"0":[1,18],"1":[1],"2":[17,1],"3":[17,2],"4":[1,16],"5":[4,13],"6":[17,14,4],"7":[3,10],"8":[1,9],"9":[10,8],"10":[2,7],"11":[1,6],"12":[17,2]}} +,"/Users/zane/playground/string-input/src/lib/date-time/process-rfc-2822-date-time.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/process-rfc-2822-date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":28},"end":{"line":36,"column":1}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":40}},"4":{"start":{"line":6,"column":20},"end":{"line":6,"column":35}},"5":{"start":{"line":7,"column":16},"end":{"line":7,"column":43}},"6":{"start":{"line":8,"column":14},"end":{"line":8,"column":39}},"7":{"start":{"line":9,"column":16},"end":{"line":9,"column":41}},"8":{"start":{"line":10,"column":18},"end":{"line":10,"column":43}},"9":{"start":{"line":11,"column":18},"end":{"line":11,"column":43}},"10":{"start":{"line":12,"column":19},"end":{"line":12,"column":51}},"11":{"start":{"line":14,"column":25},"end":{"line":23,"column":4}},"12":{"start":{"line":25,"column":2},"end":{"line":35,"column":null}}},"fnMap":{"0":{"name":"processRFC2822DateTime","decl":{"start":{"line":4,"column":6},"end":{"line":4,"column":28}},"loc":{"start":{"line":4,"column":73},"end":{"line":36,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":19},"end":{"line":12,"column":51}},"type":"binary-expr","locations":[{"start":{"line":12,"column":19},"end":{"line":12,"column":34}},{"start":{"line":12,"column":38},"end":{"line":12,"column":51}}]}},"s":{"0":3,"1":3,"2":3,"3":6,"4":6,"5":6,"6":6,"7":6,"8":6,"9":6,"10":6,"11":6,"12":6},"f":{"0":6},"b":{"0":[6,2]}} +} diff --git a/qa/coverage/favicon.png b/qa/coverage/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c1525b811a167671e9de1fa78aab9f5c0b61cef7 GIT binary patch literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 99.86% + Statements + 720/721 +
+ + +
+ 97.49% + Branches + 583/598 +
+ + +
+ 100% + Functions + 69/69 +
+ + +
+ 99.83% + Lines + 623/624 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
src +
+
99.79%487/48897.78%353/361100%55/5599.76%420/421
src/lib +
+
100%63/6392.59%25/27100%6/6100%45/45
src/lib/date-time +
+
100%170/17097.61%205/210100%8/8100%158/158
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/prettify.css b/qa/coverage/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/qa/coverage/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/qa/coverage/prettify.js b/qa/coverage/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/qa/coverage/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/qa/coverage/sort-arrow-sprite.png b/qa/coverage/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed68316eb3f65dec9063332d2f69bf3093bbfab GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc literal 0 HcmV?d00001 diff --git a/qa/coverage/sorter.js b/qa/coverage/sorter.js new file mode 100644 index 0000000..2bb296a --- /dev/null +++ b/qa/coverage/sorter.js @@ -0,0 +1,196 @@ +/* eslint-disable */ +var addSorting = (function() { + 'use strict'; + var cols, + currentSort = { + index: 0, + desc: false + }; + + // returns the summary table element + function getTable() { + return document.querySelector('.coverage-summary'); + } + // returns the thead element of the summary table + function getTableHeader() { + return getTable().querySelector('thead tr'); + } + // returns the tbody element of the summary table + function getTableBody() { + return getTable().querySelector('tbody'); + } + // returns the th element for nth column + function getNthColumn(n) { + return getTableHeader().querySelectorAll('th')[n]; + } + + function onFilterInput() { + const searchValue = document.getElementById('fileSearch').value; + const rows = document.getElementsByTagName('tbody')[0].children; + for (let i = 0; i < rows.length; i++) { + const row = rows[i]; + if ( + row.textContent + .toLowerCase() + .includes(searchValue.toLowerCase()) + ) { + row.style.display = ''; + } else { + row.style.display = 'none'; + } + } + } + + // loads the search box + function addSearchBox() { + var template = document.getElementById('filterTemplate'); + var templateClone = template.content.cloneNode(true); + templateClone.getElementById('fileSearch').oninput = onFilterInput; + template.parentElement.appendChild(templateClone); + } + + // loads all columns + function loadColumns() { + var colNodes = getTableHeader().querySelectorAll('th'), + colNode, + cols = [], + col, + i; + + for (i = 0; i < colNodes.length; i += 1) { + colNode = colNodes[i]; + col = { + key: colNode.getAttribute('data-col'), + sortable: !colNode.getAttribute('data-nosort'), + type: colNode.getAttribute('data-type') || 'string' + }; + cols.push(col); + if (col.sortable) { + col.defaultDescSort = col.type === 'number'; + colNode.innerHTML = + colNode.innerHTML + ''; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSearchBox(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/qa/coverage/src/boolean-string.mjs.html b/qa/coverage/src/boolean-string.mjs.html new file mode 100644 index 0000000..ed4f9a7 --- /dev/null +++ b/qa/coverage/src/boolean-string.mjs.html @@ -0,0 +1,481 @@ + + + + + + Code coverage report for src/boolean-string.mjs + + + + + + + + + +
+
+

All files / src boolean-string.mjs

+
+ +
+ 100% + Statements + 45/45 +
+ + +
+ 100% + Branches + 44/44 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 38/38 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +1332x +2x +  +2x +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +34x +  +  +34x +34x +34x +  +34x +34x +  +34x +  +34x +  +34x +  +  +  +5x +  +  +  +  +  +  +  +  +29x +  +  +  +5x +  +  +  +  +  +  +  +  +  +24x +6x +  +18x +5x +  +  +13x +13x +3x +  +  +  +  +  +  +  +10x +  +  +  +  +3x +  +  +  +  +  +  +  +7x +  +  +  +3x +  +4x +3x +  +  +1x +  +  +  +  +  +  +  +  +  +17x +  +  +  +17x +17x +  +17x +  +  +2x +2x +  +  + 
import { ArgumentInvalidError } from 'standard-error-set'
+import { floatRe } from 'regex-repo'
+ 
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { possibleBooleanValues } from './lib/possible-boolean-values'
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Parses and validates an input string as a boolean. By default recognizes true/t/yes/y/any positive number as `true`
+ * and false/f/no/n/0 as `false` (case insensitive).
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {boolean} options.noAbbreviations = Disallow t/f/y/n responses.
+ * @param {boolean} options.noNumeric - Disallow numeric answers.
+ * @param {boolean} options.noYesNo - Disallow yes/no/y/n responses.
+ * @param {boolean} options.treatNegativeValuesAsFalse - When true, inputs that parse as a negative numeric value will
+ *   be treated as `false` instead of raising an exception.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {boolean} A primitive boolean.
+ */
+const BooleanString = function (input, options = this || {}) {
+  const {
+    name,
+    noAbbreviations = false,
+    noNumeric = false,
+    noYesNo = false,
+    status,
+    treatNegativeValuesAsFalse = false,
+  } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  input = input.toLowerCase()
+ 
+  if (
+    noAbbreviations === true
+    && (input === 't' || input === 'f' || input === 'y' || input === 'n')
+  ) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'is disallowed abbreviated value',
+      hint          : `Use ${possibleBooleanValues(options)}.`,
+      status,
+    })
+  }
+ 
+  if (
+    noYesNo === true
+    && (input === 'yes' || input === 'y' || input === 'no' || input === 'n')
+  ) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'is disallowed yes/no value',
+      hint          : `Use ${possibleBooleanValues(options)}.`,
+      status,
+    })
+  }
+ 
+  let value
+  if (['true', 't', 'yes', 'y'].includes(input)) {
+    value = true
+  }
+  else if (['false', 'f', 'no', 'n'].includes(input)) {
+    value = false
+  }
+  else {
+    const numericValue = Number.parseFloat(input)
+    if (noNumeric === true && Number.isNaN(numericValue) === false) {
+      throw new ArgumentInvalidError({
+        argumentName  : name,
+        argumentValue : input,
+        issue         : 'is disallowed numeric value',
+        hint          : `Use ${possibleBooleanValues(options)}.`,
+        status,
+      })
+    }
+    else if (
+      Number.isNaN(numericValue) === true
+      || floatRe.test(input) !== true
+    ) {
+      // parseFloat allows invalid input like '1.0' or '234abcd'
+      throw new ArgumentInvalidError({
+        argumentName  : name,
+        argumentValue : input,
+        issue         : 'could not be parsed as a boolean value',
+        hint          : `Use ${possibleBooleanValues(options)}.`,
+        status,
+      })
+    }
+    if (
+      numericValue === 0
+      || (treatNegativeValuesAsFalse === true && numericValue < 0)
+    ) {
+      value = false
+    }
+    else if (numericValue > 0) {
+      value = true
+    }
+    else {
+      throw new ArgumentInvalidError({
+        argumentName  : name,
+        argumentValue : input,
+        issue         : 'is ambiguous negative numeric value',
+        hint          : `Use ${possibleBooleanValues(options)}.`,
+        status,
+      })
+    }
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<boolean>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+BooleanString.description = 'Boolean string'
+BooleanString.toString = () => BooleanString.description
+ 
+export { BooleanString }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/card-number.mjs.html b/qa/coverage/src/card-number.mjs.html new file mode 100644 index 0000000..41f4ce2 --- /dev/null +++ b/qa/coverage/src/card-number.mjs.html @@ -0,0 +1,559 @@ + + + + + + Code coverage report for src/card-number.mjs + + + + + + + + + +
+
+

All files / src card-number.mjs

+
+ +
+ 100% + Statements + 49/49 +
+ + +
+ 96% + Branches + 24/25 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 44/44 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +1592x +2x +  +2x +2x +2x +  +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +46x +  +  +  +46x +  +46x +  +46x +  +42x +2x +  +  +  +  +  +  +  +  +40x +40x +4x +  +  +  +  +  +  +  +  +36x +  +  +19x +5x +2x +  +  +  +  +  +  +  +  +  +3x +  +14x +14x +6x +  +8x +6x +6x +2x +  +  +  +  +  +  +  +4x +4x +4x +4x +  +4x +  +  +2x +  +  +  +  +  +  +  +  +8x +  +  +  +  +  +  +  +22x +  +  +  +22x +  +18x +2x +  +  +  +  +  +  +  +  +16x +  +12x +  +  +2x +5x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { ArgumentInvalidError } from 'standard-error-set'
+import luhn from 'luhn'
+ 
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { typeChecks } from './lib/type-checks'
+ 
+const seps = '[ -]'
+const formattedNumberRe = new RegExp(`^(?:\\d${seps}?)+\\d$`)
+const rawNumberRe = new RegExp(seps, 'g')
+ 
+/**
+ * Validates an input string as a syntactically valid card number.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {string[]} options.iins - A list of acceptable Industry Identifier Numbers, or initial card numbers. E.g.,
+ *   iins : ['123']` would only accept cards with an account number starting with '123'. If left undefined, then all
+ *   otherwise valid card numbers are treated as valid.
+ * @param {number[]} options.length - An array of integers defining acceptable card lengths. The default value is any
+ *   length between 12 and 19, inclusive.`
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {string} A number-string with no delimiters. Note, there are valid card numbers beginning with 0.
+ */
+const CardNumber = function (input, options = this || {}) {
+  const {
+    name,
+    iins,
+    lengths = [12, 13, 14, 15, 16, 17, 18, 19],
+    status,
+  } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  if (formattedNumberRe.test(input) === false) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'does not appear to be a card number',
+      hint          : "Expects a number with optional dashes ('-') or spaces (' ').",
+      status,
+    })
+  }
+ 
+  const numberString = input.replaceAll(rawNumberRe, '')
+  if (lengths !== undefined && !lengths.includes(numberString.length)) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'is an invalid length',
+      hint          : `Card number must be ${lengths.join(', ')} digits long.`,
+      status,
+    })
+  }
+ 
+  if (
+    iins !== undefined
+    && iins.some((iin) => {
+      if (iin.test !== undefined) {
+        if (!iin.toString().startsWith('/^')) {
+          throw new ArgumentInvalidError({
+            argumentName  : `${name}' constraint 'iins`,
+            argumentValue : iin,
+            issue :
+              'is invalid; regular expression must be pinned to the start of string',
+            hint   : "Start regular expression with '^'.",
+            status : 500,
+          })
+        }
+ 
+        return iin.test(numberString)
+      } // else
+      const range = ('' + iin).split('-')
+      if (range.length === 1) {
+        return numberString.startsWith(range[0])
+      }
+      else if (range.length === 2) {
+        const matchLength = range[0].length
+        if (range[1].length !== matchLength) {
+          throw new ArgumentInvalidError({
+            argumentName  : `${name}' constraint 'iins`,
+            argumentValue : iin,
+            issue :
+              'contains an invalid range; both the min and max must specify the same number of digits',
+            status : 500,
+          })
+        }
+        const min = parseInt(range[0])
+        const max = parseInt(range[1])
+        const matchBit = numberString.slice(0, matchLength)
+        const matchNumber = parseInt(matchBit)
+ 
+        return matchNumber >= min && matchNumber <= max
+      }
+      else {
+        throw new ArgumentInvalidError({
+          argumentName  : `${name}' constraint 'iins`,
+          argumentValue : iin,
+          issue         : 'contains an invalid range',
+          status        : 500,
+        })
+      }
+    }) !== true
+  ) {
+    throw new ArgumentInvalidError({
+      argumentName  : `${name}' constraint 'iins`,
+      argumentValue : iins,
+      issue         : 'contains a non-accepted Issuer Identifier Number (IIN)',
+      status        : 500,
+    })
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<card number>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+ 
+  if (luhn.validate(numberString) !== true) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'failed the check-digit validation',
+      hint          : 'Check input for typos.',
+      status,
+    })
+  }
+ 
+  checkValidateValue(numberString, validationOptions)
+ 
+  return numberString
+}
+ 
+CardNumber.description = 'Card number'
+CardNumber.toString = () => CardNumber.description
+ 
+export { CardNumber }
+ 
+/*
+At one point, we tried to incorporate issuer identification number (IIN) / bank identification number (BIN)
+information into the logic. This provide unworkable as there are too many holes and exceptions in the data. Even
+with fairly standard groups there are issue. E.g., while almost all '34' cards are American Express, IIN 345678 is a
+RuPay IIN. So, if you want to limit the match to certain IINs, can provide the `iins` parameter.
+ 
+For reference, if you want to mess with IIN/BIN validation:
+- Mastercard provides a [BIN lookup service](https://developer.mastercard.com/bin-lookup/documentation/)
+- [BinList.io](https://binlist.io/) and the corresponding
+  [GitHub project][https://github.com/iannuttall/binlist-data] seem to be defunct.
+- As of 2024-07-19, it's successor [BIN Lookup](https://binlookup.io/) seems to be operational and you can find
+  their data on [this github project](https://github.com/venelinkochev/bin-list-data). However, despite being
+  updated 8 4 months ago, they don't have *any* 8 digit BINs so their data is clearly incomplete.
+- Other commercial services: [BinDB](https://www.bindb.com/bin-database), [BIN Codes](https://www.bincodes.com/)
+*/
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/date-time.mjs.html b/qa/coverage/src/date-time.mjs.html new file mode 100644 index 0000000..6e40980 --- /dev/null +++ b/qa/coverage/src/date-time.mjs.html @@ -0,0 +1,865 @@ + + + + + + Code coverage report for src/date-time.mjs + + + + + + + + + +
+
+

All files / src date-time.mjs

+
+ +
+ 100% + Statements + 86/86 +
+ + +
+ 100% + Branches + 40/40 +
+ + +
+ 100% + Functions + 17/17 +
+ + +
+ 100% + Lines + 79/79 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +2612x +2x +  +2x +2x +2x +2x +2x +2x +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +87x +  +  +87x +87x +  +87x +  +  +  +81x +81x +1x +  +  +  +  +81x +81x +1x +  +  +  +  +81x +79x +  +  +70x +2x +  +  +  +  +  +  +  +68x +  +  +  +68x +  +  +  +  +66x +6x +  +  +  +  +60x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +59x +3x +  +  +  +  +  +  +  +  +  +  +  +  +56x +2x +  +  +  +  +  +  +  +  +62x +8x +  +  +  +  +54x +1x +1x +  +  +  +  +  +  +  +  +  +  +  +  +53x +3x +  +  +  +  +  +  +  +  +  +  +  +  +50x +  +2x +  +  +  +  +  +  +  +58x +  +44x +  +42x +  +  +2x +3x +  +2x +70x +70x +70x +70x +70x +70x +70x +70x +70x +70x +70x +70x +  +  +  +  +  +  +  +  +  +70x +  +70x +6x +21x +18x +18x +20x +18x +18x +18x +18x +18x +6x +3x +  +  +  +48x +28x +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { ArgumentInvalidError, ArgumentTypeError } from 'standard-error-set'
+import { iso8601DateTimeRe, rfc2822DateRe } from 'regex-repo'
+ 
+import { checkMaxMin } from './lib/check-max-min'
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { convertTimezoneOffsetToString } from './lib/date-time/convert-timezone-offset-to-string'
+import { makeDateTimeString } from './lib/date-time/make-date-time-string'
+import { processIdiomaticDateTime } from './lib/date-time/process-idiomatic-date-time'
+import { processISO8601DateTime } from './lib/date-time/process-iso-8601-date-time'
+import { processRFC2822DateTime } from './lib/date-time/process-rfc-2822-date-time'
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Date-time components.
+ * @typedef {object} DateTimeData
+ * @property {function(): boolean} isDateTimeObject() - Used for duck-typing. Always returns true.
+ * @property {function(): number} getYear() - The year component of the date-time (integer).
+ * @property {function(): number} getMonth() - The month of the year (1-indexed; integer).
+ * @property {function(): number} getDayOfMonth() - The numerical day of the month (integer).
+ * @property {function(): boolean} isEod() - Whether or not the time is the special 'end of day' time.
+ * @property {function(): number} getHours() - The hours component of the date-time (integer).
+ * @property {function(): number} getMinutes() - The minutes component of the date-time (integer).
+ * @property {function(): number} getSeconds() - The seconds component of the date-time (integer).
+ * @property {function(): number} getFractionalSeconds() - The fractional seconds component of the date-time.
+ * @property {function(): number} getMilliseconds() - The fractional seconds component of the date-time expressed as
+ *   milliseconds (integer).
+ * @property {function(): number} getTimezoneOffset() - The timezone offset of the original input string in minutes.
+ *   May be positive, or negative (integer).
+ * @property {function(): Date} getDate() - A `Date` object corresponding to the original input string.
+ * @property {function(): number} valueOf() - The milliseconds since the epoch (UTC) represented by the original
+ *   input string (integer).
+ */
+ 
+/**
+ * Parses and validates a wide range of date-time formats. Accepts RFC 8601 style date times (e.g.:
+ * `2024-01-01T12:30:00Z`) as well RFC-2822 style dates (e.g., '1 Jan 2024'), year-first, and US style dates combined
+ * with standard (AP/PM), twenty-four hour, and military time designations in either '[date] [time]' or '[time] [date]'
+ * order.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {string} options.localTimezone - For otherwise valid date time input with no time zone component, then the
+ *   `localTimeZone` must be specified as an option. This value is only used if the timezone is not specified in the
+ *   input string and any timezone specified in the input string will override this value.
+ * @param {string|number|Date} options.min - The earliest valid time, inclusive. This may be specified as any string
+ *   parseable by this function, milliseconds since the epoch (UTC), or a Date object.
+ * @param {string|number|Date} options.max - The latest valid time, inclusive. This may be specified as any string
+ *   parseable by this function, milliseconds since the epoch (UTC), or a Date object.
+ * @param {boolean} options.noEod - Disallows the special times '24:00:00', which represents the last moment of the day.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {DateTimeData} The date-time data.
+ */
+const DateTime = function (input, options = this || {}) {
+  // we deconstruct options here instead of in the function call because we use the options later to create the
+  // 'validationOptions'
+  const { name, localTimezone, noEod, status = 400 } = options
+  let { min, max } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  let value
+ 
+  const iso8601Match = input.match(iso8601DateTimeRe)
+  if (iso8601Match !== null) {
+    value = createValue(
+      processISO8601DateTime(options, iso8601Match, localTimezone)
+    )
+  }
+ 
+  const rfc2822Match = input.match(rfc2822DateRe)
+  if (rfc2822Match !== null) {
+    value = createValue(
+      processRFC2822DateTime(options, rfc2822Match, localTimezone)
+    )
+  }
+ 
+  if (value === undefined) {
+    value = createValue(processIdiomaticDateTime(options, input, localTimezone))
+  }
+ 
+  if (noEod === true && value.isEod() === true) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : "uses disallowed special EOD time '24:00'",
+      status,
+    })
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<date-time>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+ 
+  // We compare DateTime objects so we can preserve the timezone. The problem is that when things are converted to
+  // `Date`, the original TZ is lost and `Date.getTimezoneOffset()` always shows the local offset, not the offset of
+  // the original date input itself.
+  if (typeof max === 'string') {
+    max = DateTime(max, {
+      name   : `${name}' constraint 'max`,
+      status : 500,
+    })
+  }
+  else if (typeof max === 'number') {
+    const maxDate = new Date(max)
+    max = DateTime(
+      makeDateTimeString([
+        maxDate.getUTCFullYear(),
+        maxDate.getUTCMonth() + 1,
+        maxDate.getUTCDate(),
+        maxDate.getUTCHours(),
+        maxDate.getUTCMinutes(),
+        maxDate.getUTCSeconds(),
+        maxDate.getUTCMilliseconds() / 1000,
+        'Z',
+      ])
+    )
+  }
+  else if (max instanceof Date) {
+    max = DateTime(
+      makeDateTimeString([
+        max.getUTCFullYear(),
+        max.getUTCMonth() + 1,
+        max.getUTCDate(),
+        max.getUTCHours(),
+        max.getUTCMinutes(),
+        max.getUTCSeconds(),
+        max.getUTCMilliseconds() / 1000,
+        'Z',
+      ])
+    )
+  }
+  else if (max !== undefined && max.isDateTimeObject?.() !== true) {
+    throw new ArgumentTypeError({
+      argumentName  : `${name}' constraint 'max`,
+      argumentValue : max,
+      issue         : 'is nonconvertible type',
+      hint          : "Use 'string', 'number', Date', or 'DateTime'.",
+      status        : 500,
+    })
+  }
+ 
+  if (typeof min === 'string') {
+    min = DateTime(min, {
+      name   : `${name}' constraint 'min`,
+      status : 500,
+    })
+  }
+  else if (typeof min === 'number') {
+    const minDate = new Date(min)
+    min = DateTime(
+      makeDateTimeString([
+        minDate.getUTCFullYear(),
+        minDate.getUTCMonth() + 1,
+        minDate.getUTCDate(),
+        minDate.getUTCHours(),
+        minDate.getUTCMinutes(),
+        minDate.getUTCSeconds(),
+        minDate.getUTCMilliseconds() / 1000,
+        'Z',
+      ])
+    )
+  }
+  else if (min instanceof Date) {
+    min = DateTime(
+      makeDateTimeString([
+        min.getUTCFullYear(),
+        min.getUTCMonth() + 1,
+        min.getUTCDate(),
+        min.getUTCHours(),
+        min.getUTCMinutes(),
+        min.getUTCSeconds(),
+        min.getUTCMilliseconds() / 1000,
+        'Z',
+      ])
+    )
+  }
+  else if (min !== undefined && min.isDateTimeObject?.() !== true) {
+    // this is an argument error, yes
+    throw new ArgumentTypeError({
+      argumentName  : `${name}' constraint 'min`,
+      argumentValue : min,
+      issue         : 'is nonconvertible type',
+      hint          : "Use 'string', 'number', Date', or 'DateTime'.",
+      status        : 500,
+    })
+  }
+  checkMaxMin({ input, max, min, name, status, value })
+ 
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+DateTime.description = 'Date-time'
+DateTime.toString = () => DateTime.description
+ 
+const createValue = ([
+  year,
+  month,
+  day,
+  isEod,
+  hours,
+  minutes,
+  seconds,
+  fracSeconds,
+  timezoneOffset,
+]) => {
+  const tz = convertTimezoneOffsetToString(timezoneOffset)
+  const dateString = makeDateTimeString([
+    year,
+    month,
+    day,
+    hours,
+    minutes,
+    seconds,
+    fracSeconds,
+    tz,
+  ])
+  const date = new Date(dateString)
+ 
+  return {
+    isDateTimeObject     : () => true,
+    getYear              : () => year,
+    getMonth             : () => month,
+    getDayOfMonth        : () => day,
+    isEod                : () => isEod,
+    getHours             : () => hours,
+    getMinutes           : () => minutes,
+    getSeconds           : () => seconds,
+    getFractionalSeconds : () => fracSeconds,
+    getMilliseconds      : () => Math.round(fracSeconds * 1000),
+    getTimezoneOffset    : () => timezoneOffset,
+    getDate              : () => date,
+    // we return epoch seconds rather than date so that '<' and similar work; the problem is they don't call 'valueOf()'
+    // recursively, so if we returned a date, it would compare dates directly (which doesn't work) rather than
+    // 'date.valueOf()'
+    valueOf              : () => date.getTime(),
+    toString             : () =>
+      makeDateTimeString([
+        year,
+        month,
+        day,
+        hours,
+        minutes,
+        seconds,
+        fracSeconds,
+        tz,
+      ]),
+  }
+}
+ 
+export { DateTime }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/day.mjs.html b/qa/coverage/src/day.mjs.html new file mode 100644 index 0000000..b5b4b96 --- /dev/null +++ b/qa/coverage/src/day.mjs.html @@ -0,0 +1,577 @@ + + + + + + Code coverage report for src/day.mjs + + + + + + + + + +
+
+

All files / src day.mjs

+
+ +
+ 100% + Statements + 68/68 +
+ + +
+ 96.29% + Branches + 78/81 +
+ + +
+ 100% + Functions + 11/11 +
+ + +
+ 100% + Lines + 59/59 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +1652x +2x +  +2x +2x +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +90x +90x +90x +  +90x +  +83x +83x +83x +  +  +83x +  +  +  +83x +2x +  +  +  +  +  +  +81x +6x +  +  +  +  +  +  +  +  +75x +  +  +  +75x +  +73x +73x +  +  +  +73x +51x +  +  +22x +  +73x +  +  +  +73x +  +73x +17x +  +69x +17x +  +  +65x +  +  +49x +2x +  +  +  +  +  +  +  +  +47x +  +47x +  +45x +  +  +2x +3x +  +2x +34x +12x +  +22x +6x +  +6x +  +  +  +16x +6x +  +  +  +10x +4x +  +  +  +  +  +  +  +6x +  +  +47x +6x +19x +19x +22x +1x +27x +32x +  +  +  +  + 
import { ArgumentInvalidError, ArgumentTypeError } from 'standard-error-set'
+import { intlDateRe, rfc2822DayReString, usDateRe } from 'regex-repo'
+ 
+import { checkMaxMin } from './lib/check-max-min'
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { convertMonthName } from './lib/date-time/convert-month-name'
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Represents the components of specific day.
+ * @typedef DayData
+ * @property {function(): boolean} isDateTimeObject() - Used for duck-typing. Always returns true.
+ * @property {function(): number} getYear() - The year component of the date-time (integer).
+ * @property {function(): number} getMonth() - The month of the year (1-indexed) (integer).
+ * @property {function(): number} getDayOfMonth() - The numerical day of the month (integer).
+ * @property {function(): Date} getDate() - A `Date` object corresponding to the original input string. The time
+ *   components of the `Date` will all be set to 0 and the timezone is always UTC.
+ * @property {function(): number} valueOf() - The seconds since the epoch (UTC) represented by the original input
+ *   string (at the start of the UTC day).
+ */
+ 
+/**
+ * Parses and validates input string as a specific day (date). Can handle year first and US format, with or without
+ * delimiters, along with RFC 2822 style dates like '1 Jan 2024'.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {string|number|Date} options.max - The latest day to be considered valid.
+ * @param {string|number|Date} options.min - The earliest day to be considered valid.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {DayData} The day/date data.
+ */
+const Day = function (input, options = this || {}) {
+  const { name, status } = options
+  let { max, min } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  const intlMatch = input.match(intlDateRe)
+  const usMatch = input.match(usDateRe)
+  const rfc2822Match = input.match(new RegExp(`^${rfc2822DayReString}$`))
+ 
+  const matchCount =
+    (intlMatch !== null ? 1 : 0)
+    + (usMatch !== null ? 1 : 0)
+    + (rfc2822Match !== null ? 1 : 0)
+ 
+  if (matchCount > 1) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'is ambiguous',
+      hint          : 'Try specifying four digit year (with leading zeros if necessary) to disambiguate US (MM/DD/YYYY) vs international (YYYY/MM/DD) formats.',
+    })
+  }
+  else if (matchCount === 0) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue :
+        'is not recognized as either US, international, or a RFC 2822 style date',
+      hint : "Try something like '1/15/2024', '2024-1-15', or '15 Jan 2024'.",
+    })
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<day>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+ 
+  const ceIndicator = intlMatch?.[1] || usMatch?.[3] || ''
+  const year = parseInt(
+    ceIndicator + (intlMatch?.[2] || usMatch?.[4] || rfc2822Match?.[4])
+  )
+  let month
+  if (rfc2822Match !== null) {
+    month = convertMonthName(rfc2822Match[3])
+  }
+  else {
+    month = parseInt(intlMatch?.[3] || usMatch?.[1])
+  }
+  const day = parseInt(intlMatch?.[4] || usMatch?.[2] || rfc2822Match?.[2])
+ 
+  // we set the date explicitly like this because Date parses things inconsistently. E.g. (as of Node 21.5.0),
+  // '-2024-01-02' parses as '2024-01-02T06:00:00.000Z', while '01/02/-2024' is just invalid.
+  const date = new Date(year, month - 1, day)
+ 
+  if (max !== undefined) {
+    max = convertToDay(max, name, 'max', status)
+  }
+  if (min !== undefined) {
+    min = convertToDay(min, name, 'min', status)
+  }
+ 
+  checkMaxMin({ input, max, min, name, status, value : date })
+ 
+  // The month can't overflow because we only accept valid months, so we just need to check the day of the month
+  if (day !== date.getDate()) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue :
+        'looks syntactically valid, but specifies an invalid day for the given month/year.',
+      status,
+    })
+  }
+ 
+  const value = createValue({ day, month, year, date })
+ 
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+Day.description = 'Day'
+Day.toString = () => Day.description
+ 
+const convertToDay = (value, name, constraint, status) => {
+  if (typeof value === 'string') {
+    return Day(value, { name : `${name}' constraint '${constraint}` })
+  }
+  else if (typeof value === 'number') {
+    const date = new Date(value)
+ 
+    return Day(
+      `${date.getUTCFullYear()}-${date.getUTCMonth() + 1}-${date.getUTCDate()}`
+    )
+  }
+  else if (value instanceof Date) {
+    return Day(
+      `${value.getUTCFullYear()}-${value.getUTCMonth() + 1}-${value.getUTCDate()}`
+    )
+  }
+  else if (!value.isDayObject?.()) {
+    throw new ArgumentTypeError({
+      argumentName : `${name}' constraint '${constraint}`,
+      arguemntType : "string'/'number'/'Date",
+      issue        : 'has nonconvertible type',
+      status,
+    })
+  } // else
+ 
+  return value
+}
+ 
+const createValue = ({ day, month, year, date }) => ({
+  isDayObject   : () => true,
+  getDayOfMonth : () => day,
+  getMonth      : () => month,
+  getYear       : () => year,
+  getDate       : () => date,
+  valueOf       : () => date.getTime(),
+  toString      : () =>
+    `${('' + year).padStart(2, '0')}-${('' + month).padStart(2, '0')}-${('' + day).padStart(2, '0')}`,
+})
+ 
+export { Day }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/ein.mjs.html b/qa/coverage/src/ein.mjs.html new file mode 100644 index 0000000..f9f8ad6 --- /dev/null +++ b/qa/coverage/src/ein.mjs.html @@ -0,0 +1,238 @@ + + + + + + Code coverage report for src/ein.mjs + + + + + + + + + +
+
+

All files / src ein.mjs

+
+ +
+ 100% + Statements + 21/21 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +522x +2x +  +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +18x +18x +  +18x +  +18x +18x +6x +  +  +  +  +  +  +12x +  +  +  +12x +  +8x +  +8x +  +4x +  +  +2x +5x +  +  + 
import { einRe } from 'regex-repo'
+import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Validates the input as a valid EIN.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {string} A canonically formatted EIN 'XX-XXXXXXX'.
+ */
+const EIN = function (input, options = this || {}) {
+  const { name, status } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  const einMatch = input.match(einRe)
+  if (einMatch === null) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'is not a valid EIN',
+      status,
+    })
+  }
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<EIN>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+ 
+  const value = input.slice(0, 2) + '-' + input.slice(-7)
+ 
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+EIN.description = 'EIN'
+EIN.toString = () => EIN.description
+ 
+export { EIN }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/email.mjs.html b/qa/coverage/src/email.mjs.html new file mode 100644 index 0000000..d173e6d --- /dev/null +++ b/qa/coverage/src/email.mjs.html @@ -0,0 +1,544 @@ + + + + + + Code coverage report for src/email.mjs + + + + + + + + + +
+
+

All files / src email.mjs

+
+ +
+ 95.65% + Statements + 22/23 +
+ + +
+ 88.88% + Branches + 8/9 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 94.73% + Lines + 18/19 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +1542x +2x +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +46x +46x +  +46x +  +46x +9x +  +  +46x +46x +46x +46x +  +46x +36x +  +  +  +36x +  +  +  +  +  +  +  +10x +  +  +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { getLatestTLDs, validateEmail } from 'true-email-validator'
+import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Email address and components.
+ * @typedef EmailData
+ * @property {string} address - The normalized email address. The domain portion, if any, will always be in lowercase (
+ *   the `domain` property will preserve the original case).
+ * @property {string} username - The username or local part of the email address.
+ * @property {string|undefined} domain - The domain value, if present. Exactly one of `domain` and `domainLiteral` will
+ *   always be defined for a syntactically valid email address. The original case of the domain is preserved.
+ * @property {string|undefined} domainLiteral - The domain literal value, if present. Exactly one of `domain` and
+ *   `domainLiteral` will always be defined for a syntactically valid email address.
+ * @property {string|undefined} commentLocalPartPrefix - The embedded comment, if any, immediately before the address
+ *   username (local part).
+ * @property {string|undefined} commentLocalPartSuffix - The embedded comment, if any, immediately following the
+ *   address username (local part).
+ * @property {string|undefined} commentDomainPrefix - The embedded comment, if any, immediately before the domain or
+ *   domain literal.
+ * @property {string|undefined} commentDomainSuffix - The embedded comment, if any, immediately after the domain or
+ *   domain literal.
+ */
+ 
+// TODO: ESLint is complaining about 'object<string, true>'; it wants us to use 'object shorthand or index signatures',
+// whic would make the spec '{[key: string]: true}', but the JSDoc parser chokes on it (even though lint passes it).
+/* eslint-disable jsdoc/check-types */
+/**
+ * Parses and validates an input string as a valid email address according to RFC 5322 (email messaging), RFC 6531/6532
+ * (internationalized email), and RFC 5890 (internationalized domain names). Validation happens in two general steps.
+ * First, the input is parsed according to the relevant RFC specifications. If this is successful, then the result will
+ * always contain a `username`,`address`, and either `domain` or `domainLiteral` fields. If these are present, you know
+ * that the email was successfully parsed. The second stage validates the parsed email components against the provided
+ * options or option defaults. Therefore, you can have a situation where an email address is valid according to the
+ * specs and can be parsed without an issue, but is still _invalid_ according to the effective options (or defaults).
+ *
+ * By default, the validation restricts possible features in the email address—such as comments and domain
+ * literals—which are not normally wanted in basic email address. In particular, the default options:
+ * - disallow embedded comments,
+ * - disallow domain literal (IP addressing),
+ * - disallow the 'localhost' domain,
+ * - restricts possible TLDs to known good TLDs,
+ * - restricts domain names to valid subdomain and TLDs based on DNS and ICANN rules beyond the email address
+ * specification, and
+ * - performs extra validation for known provider domains google.com and hotmail.com.
+ *
+ * Options can be explicitly defined to allow for a more liberal or restrictive validation.
+ *
+ * This type uses [true-email-validator](https://github.com/liquid-labs/true-email-validator/) under the hood.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {boolean} options.allowComments - If true, allows embedded comments in the address like '(comment)
+ *   john@foo.com', which are disallowed by default. Note, the comments, if present, will be extracted regardless of
+ *   this setting, the result `valid` field will just be set false and an issue will be reported.
+ * @param {boolean}options.allowAnyDomain - If true, then overrides all default restrictions and format checks of the
+ *   domain value and allows any syntactically valid domain value except a localhost name or address (unless
+ *   `allowLocalHost` is also set true). Note that impossible sub-domain labels (e.g., a label more than 63 characters
+ *   long or a single digit) or TLDs (e.g. '123') will still trigger an invalid result. Otherwise, the domain value is
+ *   verified as recognizable as a domain name (as opposed to an IP address, for instance).
+ * @param {boolean} options.allowAnyDomainLiteral - If true, then overrides default restrictions and format checks of
+ *   domain literal values and allows any syntactically valid domain literal value that is not a localhost address (
+ *   unless `allowLocalhost` is also true). In general, domain literal values point to IPV4/6 addresses and the
+ *   validation will (when `allowIP4` and/or`allowIPV6` are true), allow valid IP address values but would reject other
+ *   domain literal values, unless this value is set true. Note, if this value is true then allowIPV4` and `allowIPV6`
+ *   are essentially ignored.
+ * @param {boolean} options.allowIPV4 - Allows IPV4 domain literal values. Note that any loopback address will still
+ *   cause a validation error unless `allowLocalHost` is also set true. See `allowAnyDomainLiteral`, `allowIPV6`, and
+ *  `allowLocahost`.`
+ * @param {boolean} options.allowIPV6 - Allows IPV6 domain literal values. Note that the localhost address will still
+ *   cause a validation error unless `allowLocaHost` is also set true. See `allowAnyDomainLiteral`, `allowIPV4`, and
+ *  `allowLocahost`.`
+ * @param {boolean} options.allowLocalhost - Allows `localhost` domain value or (when `allowIPV6` and/or `allowIPV4`
+ *   also set true) loopback IP addresses.
+ * @param {object<string,true>} options.allowedTLDs - By default, the TLD portion of a domain name will be validated
+ *   against known good TLDs. To limit this list or use an updated list, set this value to an array of acceptable TLDs
+ *   or a map with valid TLD keys (the value is not used). You can use the `getLatestTLDs`, also exported by this
+ *   package, to get an object defining the most current TLDs as registered with ICANN. See `arbitraryTLDs`.
+ * @param {boolean} options.allowQuotedLocalPart - Overrides default restriction and allows quoted username/local parts.
+ * @param {boolean} options.arbitraryTLDs - Skips the 'known TLD' check and allows any validly formatted TLD name. This
+ *   is still restricted by the TLD name restrictions which are tighter than standard domain labels.
+ * @param {boolean} options.excludeChars - Either a string or array of excluded characters. In the array form, it will
+ *   match the whole string, so you can also use this to exclude specific character sequences.
+ * @param {boolean} options.excludeDomains - An array of domains to exclude. Excluding a domain also excludes all
+ *   subdomains so eclxuding 'foo.com' would exclude 'john@foo.com' and 'john@bar.foo.com'. Initial periods are ignored
+ *   so `excludeDomains: ['com']', and `excludeDomains: ['.com']` are equivalent.
+ * @param {boolean} options.noDomainSpecificValidation - Setting this to true will skip domain specific validations. By
+ *   default, the validation includes domain specific checks for 'google.com' and 'hotmail.com' domains. These domains
+ *   are known to have more restrictive policies regarding what is and is not a valid email address.
+ * @param {boolean} options.noLengthCheck - If true, then skips username (local part) and total email address length
+ *   restrictions. Note that domain name label lengths are still enforced.
+ * @param {boolean} options.noPlusEmails - If true, then '+' is not allowed in the username/local part. This is
+ *   equivalent to setting `excludeChars = '+'.`
+ * @param {boolean} options.noTLDOnly - If true, then disallows TLD only domains in an address like 'john@com'.
+ * @param {boolean} options.noNonASCIILocalPart - If true, then disallows non-ASCII/international characters in the
+ *   username/local part of the address.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {EmailData} Email data object.
+ */
+const Email = function (input, options = this || {}) {
+  const { name, status } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  if (options.validateValue !== undefined) {
+    options.validateResult = options.validateValue
+  }
+ 
+  const result = validateEmail(input, options)
+  const { issues, isValid } = result
+  delete result.issues
+  delete result.isValid
+ 
+  if (isValid === false) {
+    Iif (issues.length === 0) {
+      // shouldn't happen, but just in case
+      issues.push('has unspecified issues')
+    }
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : issues.join(', '),
+      status,
+    })
+  }
+ 
+  return result
+}
+ 
+Email.description = 'Email'
+Email.toString = () => Email.description
+ 
+export {
+  Email,
+  /**
+   * Dynamically retrieves the latest list of valid TLDs from the Internet Assigned Numbers Authority (IANA).
+   * International domains are decoded and both the decoded (international domain) and encoded ('xn--`) domain will be
+   * present in the results object as both represent valid domains from a user's point of view. The resolved result can
+   * be passed to the `Email` ``
+   * @function
+   * @returns {Promise<object>} A Promise resolving to an object whose keys are valid domains; the value of each entry
+   *   is `true`. ASCII characters are always lowercased, but the international domains are not transformed after
+   *   decoding and may contain uppercase non-ASCII unicode characters per [RFC 4343](https://www.rfc-editor.org/rfc/
+   *   rfc4343).
+   */
+  getLatestTLDs
+}
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/index.html b/qa/coverage/src/index.html new file mode 100644 index 0000000..33ed697 --- /dev/null +++ b/qa/coverage/src/index.html @@ -0,0 +1,266 @@ + + + + + + Code coverage report for src + + + + + + + + + +
+
+

All files src

+
+ +
+ 99.79% + Statements + 487/488 +
+ + +
+ 97.78% + Branches + 353/361 +
+ + +
+ 100% + Functions + 55/55 +
+ + +
+ 99.76% + Lines + 420/421 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
boolean-string.mjs +
+
100%45/45100%44/44100%2/2100%38/38
card-number.mjs +
+
100%49/4996%24/25100%3/3100%44/44
date-time.mjs +
+
100%86/86100%40/40100%17/17100%79/79
day.mjs +
+
100%68/6896.29%78/81100%11/11100%59/59
ein.mjs +
+
100%21/21100%7/7100%2/2100%18/18
email.mjs +
+
95.65%22/2388.88%8/9100%2/294.73%18/19
integer.mjs +
+
100%34/34100%17/17100%2/2100%27/27
numeric.mjs +
+
100%30/30100%14/14100%2/2100%23/23
ssn.mjs +
+
100%21/21100%7/7100%2/2100%18/18
time-of-day.mjs +
+
100%67/6796.47%82/85100%10/10100%62/62
validated-string.mjs +
+
100%44/44100%32/32100%2/2100%34/34
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/integer.mjs.html b/qa/coverage/src/integer.mjs.html new file mode 100644 index 0000000..22d55a5 --- /dev/null +++ b/qa/coverage/src/integer.mjs.html @@ -0,0 +1,319 @@ + + + + + + Code coverage report for src/integer.mjs + + + + + + + + + +
+
+

All files / src integer.mjs

+
+ +
+ 100% + Statements + 34/34 +
+ + +
+ 100% + Branches + 17/17 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 27/27 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +792x +2x +  +2x +2x +2x +2x +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +33x +33x +  +33x +  +27x +6x +6x +2x +  +6x +  +  +  +  +  +  +21x +2x +  +  +  +  +  +  +  +19x +  +  +  +19x +17x +17x +13x +2x +  +  +  +  +  +  +11x +  +9x +  +  +2x +3x +  +  + 
import { integerRe } from 'regex-repo'
+import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { checkMaxMin } from './lib/check-max-min'
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { typeChecks } from './lib/type-checks'
+ 
+const anyDigitsRe = /^-?\d+$/
+ 
+/**
+ * Parses and validates an input string as an integer.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {boolean} options.allowLeadingZeros - Overrides default behavior which rejects strings with leading zeros.
+ * @param {number} options.divisibleBy - Requires the resulting integer value be divisible by the indicated number (
+ *   which need not itself be an integer).
+ * @param {number} options.max - The largest value considered valid.
+ * @param {number} options.min - The smallest value considered valid.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {number} A primitive integer.
+ */
+const Integer = function (input, options = this || {}) {
+  const { name, allowLeadingZeros, divisibleBy, max, min, status } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  if (allowLeadingZeros !== true && input.match(integerRe) === null) {
+    let issue = 'does not appear to be an integer'
+    if (input.match(anyDigitsRe)) {
+      issue += '; leading zeroes are not allowed.'
+    }
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue,
+      status,
+    })
+  }
+  else if (allowLeadingZeros === true && input.match(anyDigitsRe) === null) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'does not appear to be an integer (leading zeros allowed)',
+      status,
+    })
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<integer>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+  const value = parseInt(input)
+  checkMaxMin({ input, max, min, name, status, value })
+  if (divisibleBy !== undefined && value % divisibleBy !== 0) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `must be divisible by '${divisibleBy}'`,
+      status,
+    })
+  }
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+Integer.description = 'Integer'
+Integer.toString = () => Integer.description
+ 
+export { Integer }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/check-max-min.mjs.html b/qa/coverage/src/lib/check-max-min.mjs.html new file mode 100644 index 0000000..12f3a97 --- /dev/null +++ b/qa/coverage/src/lib/check-max-min.mjs.html @@ -0,0 +1,157 @@ + + + + + + Code coverage report for src/lib/check-max-min.mjs + + + + + + + + + +
+
+

All files / src/lib check-max-min.mjs

+
+ +
+ 100% + Statements + 11/11 +
+ + +
+ 100% + Branches + 6/6 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 6/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +256x +  +193x +193x +20x +  +  +  +  +  +  +  +173x +22x +  +  +  +  +  +  +  +  +  +  + 
import { ArgumentOutOfRangeError } from 'standard-error-set'
+ 
+const checkMaxMin = ({ max, min, name, status, value }) => {
+  if (max !== undefined && value > max) {
+    throw new ArgumentOutOfRangeError({
+      argumentName  : `${name}' constraint 'max`,
+      argumentValue : max,
+      max,
+      min,
+      status,
+    })
+  }
+  if (min !== undefined && value < min) {
+    throw new ArgumentOutOfRangeError({
+      argumentName  : `${name}' constraint 'min`,
+      argumentValue : min,
+      max,
+      min,
+      status,
+    })
+  }
+}
+ 
+export { checkMaxMin }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/check-validate-input.mjs.html b/qa/coverage/src/lib/check-validate-input.mjs.html new file mode 100644 index 0000000..6f71716 --- /dev/null +++ b/qa/coverage/src/lib/check-validate-input.mjs.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for src/lib/check-validate-input.mjs + + + + + + + + + +
+
+

All files / src/lib check-validate-input.mjs

+
+ +
+ 100% + Statements + 4/4 +
+ + +
+ 75% + Branches + 3/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +1211x +  +295x +295x +  +  +  +  +  +  +  + 
import { validateHelper } from './validate-helper'
+ 
+const checkValidateInput = (input, options = {}) => {
+  validateHelper({
+    validationType : 'input',
+    validationFunc : options.validateInput,
+    validationArgs : [input, options],
+  })
+}
+ 
+export { checkValidateInput }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/check-validate-value.mjs.html b/qa/coverage/src/lib/check-validate-value.mjs.html new file mode 100644 index 0000000..841906f --- /dev/null +++ b/qa/coverage/src/lib/check-validate-value.mjs.html @@ -0,0 +1,118 @@ + + + + + + Code coverage report for src/lib/check-validate-value.mjs + + + + + + + + + +
+
+

All files / src/lib check-validate-value.mjs

+
+ +
+ 100% + Statements + 4/4 +
+ + +
+ 75% + Branches + 3/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 3/3 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +1211x +  +208x +208x +  +  +  +  +  +  +  + 
import { validateHelper } from './validate-helper'
+ 
+const checkValidateValue = (value, options = {}) => {
+  validateHelper({
+    validationType : 'value',
+    validationFunc : options.validateValue,
+    validationArgs : [value, options],
+  })
+}
+ 
+export { checkValidateValue }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/convert-month-name.mjs.html b/qa/coverage/src/lib/date-time/convert-month-name.mjs.html new file mode 100644 index 0000000..13bfed8 --- /dev/null +++ b/qa/coverage/src/lib/date-time/convert-month-name.mjs.html @@ -0,0 +1,175 @@ + + + + + + Code coverage report for src/lib/date-time/convert-month-name.mjs + + + + + + + + + +
+
+

All files / src/lib/date-time convert-month-name.mjs

+
+ +
+ 100% + Statements + 14/14 +
+ + +
+ 100% + Branches + 12/12 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 14/14 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +316x +77x +  +66x +  +1x +  +1x +  +1x +  +1x +  +1x +  +1x +  +1x +  +1x +  +1x +  +1x +  +1x +  +  +  +  + 
const convertMonthName = (monthName) => {
+  switch (monthName) {
+    case 'Jan':
+      return 1
+    case 'Feb':
+      return 2
+    case 'Mar':
+      return 3
+    case 'Apr':
+      return 4
+    case 'May':
+      return 5
+    case 'Jun':
+      return 6
+    case 'Jul':
+      return 7
+    case 'Aug':
+      return 8
+    case 'Sep':
+      return 9
+    case 'Oct':
+      return 10
+    case 'Nov':
+      return 11
+    case 'Dec':
+      return 12
+  }
+}
+ 
+export { convertMonthName }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html b/qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html new file mode 100644 index 0000000..c358e88 --- /dev/null +++ b/qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html @@ -0,0 +1,130 @@ + + + + + + Code coverage report for src/lib/date-time/convert-timezone-offset-to-string.mjs + + + + + + + + + +
+
+

All files / src/lib/date-time convert-timezone-offset-to-string.mjs

+
+ +
+ 100% + Statements + 5/5 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 5/5 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +163x +72x +72x +  +  +  +  +72x +  +  +  +72x +  +  +  + 
const convertTimezoneOffsetToString = (offset) => {
+  const tzHrs = Math.trunc(offset / 60)
+  const tzMins = offset % 60
+  // Note, the offset is reversed from the string. Eg, a positive offset of 300 would translate to -0500. The offset
+  // shows the difference between UTC and local, so if you're behind, then that's positive. But the TZ string does the
+  // opposite.
+  const tz =
+    (offset <= 0 ? '+' : '-')
+    + ('' + Math.abs(tzHrs)).padStart(2, '0')
+    + ('' + Math.abs(tzMins)).padStart(2, '0')
+ 
+  return tz
+}
+ 
+export { convertTimezoneOffsetToString }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html b/qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html new file mode 100644 index 0000000..bb3d1a5 --- /dev/null +++ b/qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html @@ -0,0 +1,277 @@ + + + + + + Code coverage report for src/lib/date-time/get-timezone-offset.mjs + + + + + + + + + +
+
+

All files / src/lib/date-time get-timezone-offset.mjs

+
+ +
+ 100% + Statements + 30/30 +
+ + +
+ 100% + Branches + 11/11 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 21/21 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +656x +  +6x +  +6x +113x +113x +  +113x +  +  +41x +  +  +  +  +  +  +  +  +  +  +  +72x +43x +  +  +29x +29x +25x +25x +25x +  +25x +  +  +  +4x +  +  +  +  +  +  +  +  +4x +4x +  +1x +  +  +  +  +  +  +3x +  +3x +  +  +  +  +  + 
import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { makeDateTimeString } from './make-date-time-string'
+ 
+const getTimezoneOffset = (
+  { name, status },
+  [year, month, day, hours, minutes, seconds, fracSeconds, timezone]
+) => {
+  if (timezone === undefined) {
+    // it's important to test against the date/time itself in case it's in a different daylight savings period than the
+    // current
+    return new Date(
+      makeDateTimeString([
+        year,
+        month,
+        day,
+        hours,
+        minutes,
+        seconds,
+        fracSeconds,
+      ])
+    ).getTimezoneOffset()
+  }
+  else if (timezone === 'z' || timezone === 'Z') {
+    return 0
+  }
+  else {
+    const numericTZMatch = timezone.match(/([+-])(\d{2})(?::?(\d{2}))?/)
+    if (numericTZMatch !== null) {
+      const offsetDirection = numericTZMatch[1] === '-' ? -1 : 1
+      const offsetHours = 60 * parseInt(numericTZMatch[2])
+      const offsetMinutes = parseInt(numericTZMatch[3])
+ 
+      return offsetDirection * (offsetHours + offsetMinutes)
+    }
+    else {
+      // it's a named TZ
+      const partialSpec = makeDateTimeString([
+        year,
+        month,
+        day,
+        hours,
+        minutes,
+        seconds,
+        fracSeconds,
+      ])
+      const tzDate = new Date(`${partialSpec} ${timezone}`)
+      if (isNaN(tzDate.getDate())) {
+        // we assume everything but the TZ is good
+        throw new ArgumentInvalidError({
+          argumentName : name,
+          issue        : 'timezone designation not recognized as valid timezone',
+          hint         : "The recognized timezones are limited to basic US timezone like CST and PDT; otherwise it's best to designate the offset like '+1030' or '-0100'.",
+          status,
+        })
+      }
+      const utcDate = new Date(`${partialSpec} Z`)
+ 
+      return Math.trunc((utcDate - tzDate) / (1000 * 60))
+    }
+  }
+}
+ 
+export { getTimezoneOffset }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/index.html b/qa/coverage/src/lib/date-time/index.html new file mode 100644 index 0000000..5445609 --- /dev/null +++ b/qa/coverage/src/lib/date-time/index.html @@ -0,0 +1,206 @@ + + + + + + Code coverage report for src/lib/date-time + + + + + + + + + +
+
+

All files src/lib/date-time

+
+ +
+ 100% + Statements + 170/170 +
+ + +
+ 97.61% + Branches + 205/210 +
+ + +
+ 100% + Functions + 8/8 +
+ + +
+ 100% + Lines + 158/158 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
convert-month-name.mjs +
+
100%14/14100%12/12100%1/1100%14/14
convert-timezone-offset-to-string.mjs +
+
100%5/5100%2/2100%1/1100%5/5
get-timezone-offset.mjs +
+
100%30/30100%11/11100%1/1100%21/21
make-date-time-string.mjs +
+
100%14/14100%3/3100%1/1100%14/14
process-idiomatic-date-time.mjs +
+
100%51/5196.75%149/154100%1/1100%50/50
process-iso-8601-date-time.mjs +
+
100%43/43100%26/26100%2/2100%41/41
process-rfc-2822-date-time.mjs +
+
100%13/13100%2/2100%1/1100%13/13
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/make-date-time-string.mjs.html b/qa/coverage/src/lib/date-time/make-date-time-string.mjs.html new file mode 100644 index 0000000..8bc4989 --- /dev/null +++ b/qa/coverage/src/lib/date-time/make-date-time-string.mjs.html @@ -0,0 +1,154 @@ + + + + + + Code coverage report for src/lib/date-time/make-date-time-string.mjs + + + + + + + + + +
+
+

All files / src/lib/date-time make-date-time-string.mjs

+
+ +
+ 100% + Statements + 14/14 +
+ + +
+ 100% + Branches + 3/3 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 14/14 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +246x +151x +151x +151x +151x +151x +151x +151x +151x +151x +  +151x +  +  +  +151x +106x +  +  +151x +  +  +  + 
const makeDateTimeString = ([
+  year,
+  month,
+  day,
+  hours,
+  minutes,
+  seconds,
+  fracSeconds,
+  timezone,
+]) => {
+  let dtString =
+    `${year}-${('' + month).padStart(2, '0')}-${('' + day).padStart(2, '0')} `
+    + `${('' + hours).padStart(2, '0')}:${('' + minutes).padStart(2, '0')}:${('' + seconds).padStart(2, '0')}`
+    + (fracSeconds > 0 ? ('' + fracSeconds).slice(1) : '')
+ 
+  if (timezone !== undefined) {
+    dtString += ' ' + timezone
+  }
+ 
+  return dtString
+}
+ 
+export { makeDateTimeString }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html b/qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html new file mode 100644 index 0000000..914fdba --- /dev/null +++ b/qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html @@ -0,0 +1,541 @@ + + + + + + Code coverage report for src/lib/date-time/process-idiomatic-date-time.mjs + + + + + + + + + +
+
+

All files / src/lib/date-time process-idiomatic-date-time.mjs

+
+ +
+ 100% + Statements + 51/51 +
+ + +
+ 96.75% + Branches + 149/154 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 50/50 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +1533x +  +  +  +  +  +  +  +  +3x +  +3x +3x +  +3x +96x +  +  +96x +  +  +96x +96x +96x +96x +  +  +96x +  +  +96x +  +  +  +96x +10x +  +  +  +  +  +  +  +  +86x +86x +86x +86x +  +86x +86x +  +  +86x +  +  +  +86x +3x +  +  +  +  +  +  +83x +1x +  +  +  +  +  +  +  +  +82x +82x +  +  +  +  +82x +8x +8x +  +  +74x +  +82x +  +  +  +  +82x +  +  +  +82x +4x +4x +4x +4x +  +  +78x +  +  +78x +2x +2x +1x +  +  +78x +  +  +78x +78x +  +  +  +  +  +82x +  +  +  +82x +  +  +  +  +  +  +  +  +  +  +82x +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import {
+  intlDateReString,
+  militaryTimeReString,
+  rfc2822DayReString,
+  timeReString,
+  timezoneReString,
+  twentyFourHourTimeReString,
+  usDateReString
+} from 'regex-repo'
+import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { convertMonthName } from './convert-month-name'
+import { getTimezoneOffset } from './get-timezone-offset'
+ 
+const processIdiomaticDateTime = (options, input, localTimezone) => {
+  const { name, status } = options
+ 
+  // mil time can easily be confused for the year, so we have to exclude matches to the year
+  const milTimeRe = new RegExp(
+    `(?<![a-zA-Z]{3}\\s+|[./+-])${militaryTimeReString}(?![./-])(?:\\s*${timezoneReString}\\b)?`
+  )
+  const milTimeMatch = input.match(milTimeRe)
+  const timeRe = new RegExp(`${timeReString}(?:\\s*${timezoneReString}\\b)?`)
+  const timeMatch = input.match(timeRe)
+  const twentyFourHourTimeRe = new RegExp(
+    `${twentyFourHourTimeReString}(?:\\s*${timezoneReString}\\b)?`
+  )
+  const twentyFourHourTimeMatch = input.match(twentyFourHourTimeRe)
+ 
+  const timeMatches =
+    (milTimeMatch !== null ? 1 : 0)
+    + (timeMatch !== null ? 1 : 0)
+    + (twentyFourHourTimeMatch !== null ? 1 : 0)
+ 
+  if (timeMatches === 0) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'does not contain a recognizable time component',
+      status,
+    })
+  }
+  // I don't believe multiple matches is actually possible.
+ 
+  const rfc2822DayRe = new RegExp(rfc2822DayReString)
+  const rfc2822DayMatch = input.match(rfc2822DayRe)
+  const usDateRe = new RegExp('\\b' + usDateReString + '\\b')
+  const usDateMatch = input.match(usDateRe)
+  // can't use '\b' at start because it would match '-' in '-2024/01/01'
+  const intlDateRe = new RegExp('(?:^| )' + intlDateReString + '\\b')
+  const intlDateMatch = input.match(intlDateRe)
+ 
+  const dayMatches =
+    (rfc2822DayMatch !== null ? 1 : 0)
+    + (usDateMatch !== null ? 1 : 0)
+    + (intlDateMatch !== null ? 1 : 0)
+ 
+  if (dayMatches === 0) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'does not contain a recognizable date component',
+      status,
+    })
+  }
+  else if (dayMatches > 1) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'date component is ambiguous',
+      hint          : "Try specifying a 4+ digit year (pad with '0' where necessary).",
+      status,
+    })
+  }
+ 
+  const ceIndicator = usDateMatch?.[3] || intlDateMatch?.[1] || ''
+  const year = parseInt(
+    ceIndicator
+      + (rfc2822DayMatch?.[4] || usDateMatch?.[4] || intlDateMatch?.[2])
+  )
+  let month
+  if (rfc2822DayMatch !== null) {
+    const monthName = rfc2822DayMatch[3]
+    month = convertMonthName(monthName)
+  }
+  else {
+    month = parseInt(usDateMatch?.[1] || intlDateMatch?.[3])
+  }
+  const day = parseInt(
+    rfc2822DayMatch?.[2] || usDateMatch?.[2] || intlDateMatch?.[4]
+  )
+ 
+  const isEod =
+    milTimeMatch?.[1] !== undefined
+    || twentyFourHourTimeMatch?.[1] !== undefined
+    || false
+  let hours, minutes, seconds, fractionalSeconds
+  if (isEod === true) {
+    hours = 24
+    minutes = 0
+    seconds = 0
+    fractionalSeconds = 0
+  }
+  else {
+    hours = parseInt(
+      milTimeMatch?.[2] || timeMatch?.[1] || twentyFourHourTimeMatch?.[2]
+    )
+    if (timeMatch !== null) {
+      hours += timeMatch[5].toLowerCase() === 'am' ? 0 : 12
+      if (hours === 24) {
+        hours = 0
+      }
+    }
+    minutes = parseInt(
+      milTimeMatch?.[3] || timeMatch?.[2] || twentyFourHourTimeMatch?.[3]
+    )
+    seconds = parseInt(timeMatch?.[3] || twentyFourHourTimeMatch?.[4] || '0')
+    fractionalSeconds = Number(
+      '0.' + (timeMatch?.[4] || twentyFourHourTimeMatch?.[5] || '0')
+    )
+  }
+ 
+  const timezone =
+    milTimeMatch?.[4]
+    || timeMatch?.[6]
+    || twentyFourHourTimeMatch?.[6]
+    || localTimezone
+  const timezoneOffset = getTimezoneOffset(options, [
+    year,
+    month,
+    day,
+    hours,
+    minutes,
+    seconds,
+    fractionalSeconds,
+    timezone,
+  ])
+ 
+  return [
+    year,
+    month,
+    day,
+    isEod,
+    hours,
+    minutes,
+    seconds,
+    fractionalSeconds,
+    timezoneOffset,
+  ]
+}
+ 
+export { processIdiomaticDateTime }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html b/qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html new file mode 100644 index 0000000..dd4d387 --- /dev/null +++ b/qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html @@ -0,0 +1,385 @@ + + + + + + Code coverage report for src/lib/date-time/process-iso-8601-date-time.mjs + + + + + + + + + +
+
+

All files / src/lib/date-time process-iso-8601-date-time.mjs

+
+ +
+ 100% + Statements + 43/43 +
+ + +
+ 100% + Branches + 26/26 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 41/41 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +1013x +  +3x +  +3x +  +3x +19x +  +19x +1x +  +  +  +  +  +18x +1x +  +  +  +  +  +  +17x +17x +17x +17x +17x +  +  +17x +  +  +  +  +4x +4x +4x +  +13x +  +3x +3x +3x +3x +3x +3x +  +3x +  +  +10x +10x +1x +1x +  +9x +2x +2x +2x +  +2x +  +  +7x +7x +  +  +  +  +17x +17x +  +  +  +  +  +  +  +  +  +  +17x +  +  +  +  +  +  +  +  +  +  +  +  +5x +  +  +  + 
import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { getTimezoneOffset } from './get-timezone-offset'
+ 
+const fracSecondsPrecision = 100000
+ 
+const processISO8601DateTime = (options, iso8601Match, localTimezone) => {
+  const { name, status } = options
+ 
+  if (iso8601Match[5] !== undefined) {
+    throw new ArgumentInvalidError({
+      argumentName : name,
+      issue        : 'does not support week of year style dates',
+      status,
+    })
+  }
+  else if (iso8601Match[7] !== undefined) {
+    throw new ArgumentInvalidError({
+      argumentName : name,
+      issue        : 'does not support day of year/ordinal/Julian style dates',
+      status,
+    })
+  }
+ 
+  const year = parseInt(iso8601Match[1])
+  const month = parseInt(iso8601Match[3]) || 1
+  const day = parseInt(iso8601Match[4]) || 1
+  const isEod = iso8601Match[8] !== undefined
+  const hours = isEod === true ? 24 : parseInt(iso8601Match[10])
+  let minutes, seconds, fracSeconds
+ 
+  if (
+    iso8601Match[11] === undefined
+    && iso8601Match[13] === undefined
+    && iso8601Match[15] === undefined
+  ) {
+    minutes = 0
+    seconds = 0
+    fracSeconds = 0
+  }
+  else if (iso8601Match[11] !== undefined) {
+    // fractional hours
+    const fracHours = Number('0.' + iso8601Match[11])
+    const realMinutes = 60 * fracHours
+    minutes = Math.trunc(realMinutes)
+    const fracMinutes = realMinutes % 1
+    const realSeconds = 60 * fracMinutes
+    seconds = Math.trunc(realSeconds)
+    // we can easily get floating point math errors here, so we limit the precision
+    fracSeconds = roundFracSeconds(realSeconds)
+  }
+  else {
+    minutes = parseInt(iso8601Match[13])
+    if (iso8601Match[14] === undefined && iso8601Match[15] === undefined) {
+      seconds = 0
+      fracSeconds = 0
+    }
+    else if (iso8601Match[14] !== undefined) {
+      const fracMinutes = Number('0.' + iso8601Match[14])
+      const realSeconds = 60 * fracMinutes
+      seconds = Math.trunc(realSeconds)
+      // we can easily get floating point math errors here, so we limit the precision
+      fracSeconds = roundFracSeconds(realSeconds)
+    }
+    else {
+      seconds = parseInt(iso8601Match[15])
+      fracSeconds =
+        iso8601Match[16] === undefined ? 0 : Number('0.' + iso8601Match[16])
+    }
+  }
+ 
+  const timezone = iso8601Match[17] || localTimezone
+  const timezoneOffset = getTimezoneOffset(options, [
+    year,
+    month,
+    day,
+    hours,
+    minutes,
+    seconds,
+    fracSeconds,
+    timezone,
+  ])
+ 
+  return [
+    year,
+    month,
+    day,
+    isEod,
+    hours,
+    minutes,
+    seconds,
+    fracSeconds,
+    timezoneOffset,
+  ]
+}
+ 
+const roundFracSeconds = (realSeconds) =>
+  Math.round((realSeconds % 1) * fracSecondsPrecision) / fracSecondsPrecision
+ 
+export { processISO8601DateTime }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html b/qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html new file mode 100644 index 0000000..ede356f --- /dev/null +++ b/qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html @@ -0,0 +1,199 @@ + + + + + + Code coverage report for src/lib/date-time/process-rfc-2822-date-time.mjs + + + + + + + + + +
+
+

All files / src/lib/date-time process-rfc-2822-date-time.mjs

+
+ +
+ 100% + Statements + 13/13 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 13/13 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +393x +3x +  +3x +6x +6x +6x +6x +6x +6x +6x +6x +  +6x +  +  +  +  +  +  +  +  +  +  +6x +  +  +  +  +  +  +  +  +  +  +  +  +  + 
import { convertMonthName } from './convert-month-name'
+import { getTimezoneOffset } from './get-timezone-offset'
+ 
+const processRFC2822DateTime = (options, rfc2822Match, localTimezone) => {
+  const year = parseInt(rfc2822Match[4])
+  const monthName = rfc2822Match[3]
+  const month = convertMonthName(monthName)
+  const day = parseInt(rfc2822Match[2])
+  const hours = parseInt(rfc2822Match[5])
+  const minutes = parseInt(rfc2822Match[6])
+  const seconds = parseInt(rfc2822Match[7])
+  const timezone = rfc2822Match[8] || localTimezone
+ 
+  const timezoneOffset = getTimezoneOffset(options, [
+    year,
+    month,
+    day,
+    hours,
+    minutes,
+    seconds,
+    0,
+    timezone,
+  ])
+ 
+  return [
+    year,
+    month,
+    day,
+    /* isEod */ false,
+    hours,
+    minutes,
+    seconds,
+    0,
+    timezoneOffset,
+  ]
+}
+ 
+export { processRFC2822DateTime }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/index.html b/qa/coverage/src/lib/index.html new file mode 100644 index 0000000..c0bceb0 --- /dev/null +++ b/qa/coverage/src/lib/index.html @@ -0,0 +1,191 @@ + + + + + + Code coverage report for src/lib + + + + + + + + + +
+
+

All files src/lib

+
+ +
+ 100% + Statements + 63/63 +
+ + +
+ 92.59% + Branches + 25/27 +
+ + +
+ 100% + Functions + 6/6 +
+ + +
+ 100% + Lines + 45/45 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
check-max-min.mjs +
+
100%11/11100%6/6100%1/1100%6/6
check-validate-input.mjs +
+
100%4/475%3/4100%1/1100%3/3
check-validate-value.mjs +
+
100%4/475%3/4100%1/1100%3/3
possible-boolean-values.mjs +
+
100%18/18100%5/5100%1/1100%18/18
type-checks.mjs +
+
100%9/9100%4/4100%1/1100%6/6
validate-helper.mjs +
+
100%17/17100%4/4100%1/1100%9/9
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/possible-boolean-values.mjs.html b/qa/coverage/src/lib/possible-boolean-values.mjs.html new file mode 100644 index 0000000..efacfde --- /dev/null +++ b/qa/coverage/src/lib/possible-boolean-values.mjs.html @@ -0,0 +1,169 @@ + + + + + + Code coverage report for src/lib/possible-boolean-values.mjs + + + + + + + + + +
+
+

All files / src/lib possible-boolean-values.mjs

+
+ +
+ 100% + Statements + 18/18 +
+ + +
+ 100% + Branches + 5/5 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +293x +22x +22x +22x +22x +  +22x +22x +16x +  +22x +16x +16x +10x +  +  +22x +18x +18x +1x +  +18x +  +  +22x +  +  +  + 
const possibleBooleanValues = ({
+  noAbbreviations,
+  noNumeric,
+  noYesNo,
+  treatNegativeValuesAsFalse,
+}) => {
+  let response = 'true/false'
+  if (noAbbreviations !== true) {
+    response += ', t/f'
+  }
+  if (noYesNo !== true) {
+    response += ', yes/no'
+    if (noAbbreviations !== true) {
+      response += ', y/n'
+    }
+  }
+  if (noNumeric !== true) {
+    response += ', '
+    if (treatNegativeValuesAsFalse === true) {
+      response += 'negative number-'
+    }
+    response += '0/positive number'
+  }
+ 
+  return response.replace(/(.+),([^,]+)+$/, '$1, or$2')
+}
+ 
+export { possibleBooleanValues }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/type-checks.mjs.html b/qa/coverage/src/lib/type-checks.mjs.html new file mode 100644 index 0000000..251b56d --- /dev/null +++ b/qa/coverage/src/lib/type-checks.mjs.html @@ -0,0 +1,148 @@ + + + + + + Code coverage report for src/lib/type-checks.mjs + + + + + + + + + +
+
+

All files / src/lib type-checks.mjs

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 6/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +2212x +  +478x +478x +20x +  +  +  +  +  +458x +7x +  +  +  +  +  +  +  +  +  + 
import { ArgumentMissingError, ArgumentTypeError } from 'standard-error-set'
+ 
+const typeChecks = ({ input, name, status }) => {
+  if (input === undefined || input === null) {
+    throw new ArgumentMissingError({
+      argumentName  : name,
+      argumentValue : input,
+      status,
+    })
+  }
+  if (typeof input !== 'string') {
+    throw new ArgumentTypeError({
+      argumentName : name,
+      argumentType : 'string',
+      receivedType : typeof input,
+      status,
+    })
+  }
+}
+ 
+export { typeChecks }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/lib/validate-helper.mjs.html b/qa/coverage/src/lib/validate-helper.mjs.html new file mode 100644 index 0000000..c65a569 --- /dev/null +++ b/qa/coverage/src/lib/validate-helper.mjs.html @@ -0,0 +1,169 @@ + + + + + + Code coverage report for src/lib/validate-helper.mjs + + + + + + + + + +
+
+

All files / src/lib validate-helper.mjs

+
+ +
+ 100% + Statements + 17/17 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +2911x +  +503x +503x +  +56x +56x +56x +8x +  +  +  +  +  +  +  +48x +30x +  +  +  +  +  +  +  +  +  +  + 
import { ArgumentInvalidError } from 'standard-error-set'
+ 
+const validateHelper = ({ validationArgs, validationFunc, validationType }) => {
+  if (validationFunc === undefined) return
+ 
+  const result = validationFunc(...validationArgs)
+  const { input, name, status, type } = validationArgs[1]
+  if (typeof result === 'string') {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentType  : type,
+      argumentValue : input,
+      issue         : result,
+      status,
+    })
+  }
+  else if (result !== true) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentType  : type,
+      argumentValue : input,
+      issue         : `failed custom ${validationType} validation`,
+      status,
+    })
+  }
+}
+ 
+export { validateHelper }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/numeric.mjs.html b/qa/coverage/src/numeric.mjs.html new file mode 100644 index 0000000..b69726c --- /dev/null +++ b/qa/coverage/src/numeric.mjs.html @@ -0,0 +1,313 @@ + + + + + + Code coverage report for src/numeric.mjs + + + + + + + + + +
+
+

All files / src numeric.mjs

+
+ +
+ 100% + Statements + 30/30 +
+ + +
+ 100% + Branches + 14/14 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 23/23 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +772x +  +2x +2x +2x +2x +  +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +27x +27x +  +27x +  +27x +2x +  +  +  +  +  +  +25x +4x +  +  +  +  +  +  +  +21x +  +  +  +21x +  +21x +  +21x +17x +2x +  +  +  +  +  +  +  +15x +  +15x +  +  +2x +2x +  +  + 
import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { checkMaxMin } from './lib/check-max-min'
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { typeChecks } from './lib/type-checks'
+ 
+const leadingZeroRe = /^0(?!\.|$)/ // test for leading zeros, but allow '0', and '0.xx'
+ 
+/**
+ * Parses and validates an input string as a valid number (float).
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {boolean} options.allowLeadingZeros - Overrides default behavior which rejects strings with leading zeros.
+ * @param {number} options.divisibleBy - Requires the resulting integer value be divisible by the indicated number (
+ *   which need not be an integer).
+ * @param {number} options.max - The largest value considered valid.
+ * @param {number} options.min - The smallest value considered valid.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {number} A primitive number.
+ */
+const Numeric = function (input, options = this || {}) {
+  const { name, allowLeadingZeros, divisibleBy, max, min, status } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  if (allowLeadingZeros !== true && leadingZeroRe.test(input) === true) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'contains disallowed leading zeros',
+      status,
+    })
+  }
+  else if (input !== input.trim()) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'contains disallowed leading or trailing space',
+      status,
+    })
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<numeric>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+ 
+  const value = Number(input)
+  // TODO: wrap these two together in 'checkNumerics' and share with Integer
+  checkMaxMin({ input, max, min, name, status, value })
+  if (divisibleBy !== undefined && value % divisibleBy !== 0) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `must be divisible by '${divisibleBy}'`,
+      status,
+    })
+  }
+ 
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+Numeric.description = 'Numeric'
+Numeric.toString = () => Numeric.description
+ 
+export { Numeric }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/ssn.mjs.html b/qa/coverage/src/ssn.mjs.html new file mode 100644 index 0000000..b67aa48 --- /dev/null +++ b/qa/coverage/src/ssn.mjs.html @@ -0,0 +1,238 @@ + + + + + + Code coverage report for src/ssn.mjs + + + + + + + + + +
+
+

All files / src ssn.mjs

+
+ +
+ 100% + Statements + 21/21 +
+ + +
+ 100% + Branches + 7/7 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 18/18 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +522x +2x +  +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +18x +18x +  +18x +  +18x +18x +10x +  +  +  +  +  +  +8x +  +  +  +8x +  +6x +  +6x +  +4x +  +  +2x +3x +  +  + 
import { ssnRe } from 'regex-repo'
+import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Parses and validates a string as a valid Social Security Number, with our without dashes.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {string} A canonically formatted SSN like 'XX-XXX-XXXX'.
+ */
+const SSN = function (input, options = this || {}) {
+  const { name, status } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  const ssnMatch = input.match(ssnRe)
+  if (ssnMatch === null) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'is not a valid SSN',
+      status        : 'Ensure there are nine digits and a valid area code.',
+    })
+  }
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<SSN>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+ 
+  const value = `${ssnMatch[1]}-${ssnMatch[2]}-${ssnMatch[3]}`
+ 
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+SSN.description = 'SSN'
+SSN.toString = () => SSN.description
+ 
+export { SSN }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/time-of-day.mjs.html b/qa/coverage/src/time-of-day.mjs.html new file mode 100644 index 0000000..1958513 --- /dev/null +++ b/qa/coverage/src/time-of-day.mjs.html @@ -0,0 +1,553 @@ + + + + + + Code coverage report for src/time-of-day.mjs + + + + + + + + + +
+
+

All files / src time-of-day.mjs

+
+ +
+ 100% + Statements + 67/67 +
+ + +
+ 96.47% + Branches + 82/85 +
+ + +
+ 100% + Functions + 10/10 +
+ + +
+ 100% + Lines + 62/62 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +1572x +2x +  +2x +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +43x +43x +43x +  +43x +  +39x +39x +39x +  +39x +  +  +  +  +3x +  +  +  +  +  +  +  +36x +  +36x +1x +  +  +  +  +  +35x +  +  +  +35x +  +34x +  +  +  +  +  +  +34x +5x +  +  +33x +5x +  +32x +  +28x +  +27x +  +  +2x +34x +34x +34x +34x +  +  +34x +3x +3x +3x +3x +  +  +31x +5x +  +5x +1x +  +  +  +26x +  +31x +  +  +31x +  +31x +31x +  +  +34x +19x +16x +16x +18x +16x +16x +  +8x +8x +4x +4x +4x +  +  +  +8x +  +  +  +  +2x +2x +  +  + 
import { militaryTimeRe, timeRe, twentyFourHourTimeRe } from 'regex-repo'
+import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { checkMaxMin } from './lib/check-max-min'
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Represents the time components.
+ * @typedef TimeData
+ * @property {function(): boolean} isEod() - Whether or not the time is the special 'end of day' time.
+ * @property {function(): number} getHours() - The hours component of the date-time (integer).
+ * @property {function(): number} getMinutes() - The minutes component of the date-time (integer).
+ * @property {function(): number} getSeconds() - The seconds component of the date-time (integer).
+ * @property {function(): number} getFractionalSeconds() - The fractional seconds component of the date-time; this will
+ *   always be a float less than 1.
+ * @property {function(): number} getMilliseconds() - The fractional seconds component of the date-time expressed as
+ *   milliseconds (integer).
+ * @property {function(): number} valueOf() - Seconds (including fractional seconds) since 00:00:00.
+ */
+ 
+/**
+ * Parses and validates the input as a time-of-day. Because there is no date component and some timezones would be
+ * ambiguous, this type does not recognize nor accepts timezone specification.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {string} options.max - A string, parseable by this function, representing the latest valid time.
+ * @param {string} options.min - A string, parseable by this function, representing the earliest valid time.
+ * @param {boolean} options.noEod - Disallows the special times '24:00:00', which represents the last moment of the day.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {TimeData} The parsed time data.
+ */
+const TimeOfDay = function (input, options = this || {}) {
+  const { name, noEod, status } = options
+  let { min, max } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  const militaryTimeMatch = input.match(militaryTimeRe)
+  const timeMatch = input.match(timeRe)
+  const twentyFourHourTimeMatch = input.match(twentyFourHourTimeRe)
+ 
+  if (
+    militaryTimeMatch === null
+    && timeMatch === null
+    && twentyFourHourTimeMatch === null
+  ) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : 'not recognized as either military, standard, or 24-hour time',
+    })
+  }
+ 
+  const isEod =
+    militaryTimeMatch?.[1] !== undefined
+    || twentyFourHourTimeMatch?.[1] !== undefined
+  if (noEod === true) {
+    throw new ArgumentInvalidError({
+      argumentName : name,
+      issue        : "special 'end-of-day' time disallowed",
+    })
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string<time>' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+ 
+  const value = getValue({
+    isEod,
+    militaryTimeMatch,
+    timeMatch,
+    twentyFourHourTimeMatch,
+  })
+ 
+  if (max !== undefined) {
+    max = TimeOfDay(max, { name : `${name}' constraint 'max` })
+  }
+ 
+  if (min !== undefined) {
+    min = TimeOfDay(min, { name : `${name}' constraint 'min` })
+  }
+  checkMaxMin({ input, max, min, name, status, value })
+ 
+  checkValidateValue(value, validationOptions)
+ 
+  return value
+}
+ 
+const getValue = ({
+  isEod,
+  militaryTimeMatch,
+  timeMatch,
+  twentyFourHourTimeMatch,
+}) => {
+  let hours, minutes, seconds, fracSeconds
+  if (isEod === true) {
+    hours = 24
+    minutes = 0
+    seconds = 0
+    fracSeconds = 0
+  }
+  else {
+    if (timeMatch !== null) {
+      hours =
+        parseInt(timeMatch[1]) + (timeMatch[5].toLowerCase() === 'pm' ? 12 : 0)
+      if (hours === 24) {
+        hours = 0
+      }
+    }
+    else {
+      hours = parseInt(militaryTimeMatch?.[2] || twentyFourHourTimeMatch?.[2])
+    }
+    minutes = parseInt(
+      timeMatch?.[2] || militaryTimeMatch?.[3] || twentyFourHourTimeMatch?.[3]
+    )
+    seconds = parseInt(timeMatch?.[3] || twentyFourHourTimeMatch?.[4] || '0')
+    const fracSecondsString =
+      timeMatch?.[4] || twentyFourHourTimeMatch?.[5] || '0'
+    fracSeconds = Number('0.' + fracSecondsString)
+  }
+ 
+  return {
+    isEod                : () => isEod,
+    getHours             : () => hours,
+    getMinutes           : () => minutes,
+    getSeconds           : () => seconds,
+    getFractionalSeconds : () => fracSeconds,
+    valueOf              : () => hours * 60 * 60 + minutes * 60 + seconds + fracSeconds,
+    toString             : () => {
+      let time = `${('' + hours).padStart(2, '0')}:${('' + (minutes || '00')).padStart(2, '0')}`
+      if (seconds > 0 || fracSeconds > 0) {
+        time += (':' + (seconds || '00')).padStart(2, '0')
+        if (fracSeconds !== undefined) {
+          time += ('' + fracSeconds).slice(1) // cut off leading zero
+        }
+      }
+ 
+      return time
+    },
+  }
+}
+ 
+TimeOfDay.description = 'Time of day'
+TimeOfDay.toString = () => TimeOfDay.description
+ 
+export { TimeOfDay }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/coverage/src/validated-string.mjs.html b/qa/coverage/src/validated-string.mjs.html new file mode 100644 index 0000000..275494b --- /dev/null +++ b/qa/coverage/src/validated-string.mjs.html @@ -0,0 +1,484 @@ + + + + + + Code coverage report for src/validated-string.mjs + + + + + + + + + +
+
+

All files / src validated-string.mjs

+
+ +
+ 100% + Statements + 44/44 +
+ + +
+ 100% + Branches + 32/32 +
+ + +
+ 100% + Functions + 2/2 +
+ + +
+ 100% + Lines + 34/34 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+ +
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +1342x +  +2x +2x +2x +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +  +36x +  +  +  +  +  +  +  +  +  +  +36x +36x +  +36x +  +36x +2x +  +  +  +  +  +  +34x +2x +  +  +  +  +  +  +  +32x +2x +  +  +  +  +  +  +30x +2x +  +  +  +  +  +  +  +28x +4x +3x +  +4x +2x +  +  +  +  +  +  +  +  +26x +2x +  +  +  +  +  +  +24x +2x +  +  +  +  +  +  +  +22x +4x +4x +  +  +  +  +  +  +  +18x +  +  +  +18x +16x +  +14x +  +  +2x +3x +  +  + 
import { ArgumentInvalidError } from 'standard-error-set'
+ 
+import { checkValidateInput } from './lib/check-validate-input'
+import { checkValidateValue } from './lib/check-validate-value'
+import { typeChecks } from './lib/type-checks'
+ 
+/**
+ * Validates a string according to the provided options. This is useful when there's not a pre-built type like `Email`.
+ * @param {string} input - The input string.
+ * @param {object} options - The validation options.
+ * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
+ * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
+ *   This can be used to mark arguments specified by in code or configurations without user input.
+ * @param {string} options.after - The input must be or lexicographically sort after this string.
+ * @param {string} options.before - The input must be or lexicographically sort before this string.
+ * @param {string} options.endsWith - The input string must end with the indicated string.
+ * @param {number} options.maxLength - The longest valid input string in terms of characters.
+ * @param {string|RegExp} options.matchRe - The input string must match the provided regular expression. Specifying a
+ *   string which is an invalid regular expression will cause an exception to be thrown.
+ * @param {number} options.minLength - The shortest valid input string in terms of characters.
+ * @param {Array.<string>} options.oneOf - The input string must be exactly one of the members of this array.
+ * @param {string} options.startsWith - The input string must start with the indicated string.
+ * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
+ *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
+ *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
+ * @returns {string} Returns the input.
+ */
+const ValidatedString = function (input, options = this || {}) {
+  const {
+    after,
+    before,
+    endsWith,
+    maxLength,
+    minLength,
+    name,
+    oneOf,
+    startsWith,
+    status,
+  } = options
+  let { matchRe } = options
+ 
+  typeChecks({ input, name, status })
+ 
+  if (after !== undefined && [after, input].sort()[0] !== after) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `must be lexicographically after '${after}'`,
+      status,
+    })
+  }
+  if (before !== undefined && [input, before].sort()[1] !== before) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `must be lexicographically before '${before}'`,
+      status,
+    })
+  }
+ 
+  if (endsWith !== undefined && !input.endsWith(endsWith)) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `must end with '${endsWith}'`,
+      status,
+    })
+  }
+  if (startsWith !== undefined && !input.startsWith(startsWith)) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `must start with '${startsWith}'`,
+      status,
+    })
+  }
+ 
+  if (matchRe !== undefined) {
+    if (typeof matchRe === 'string') {
+      matchRe = new RegExp(matchRe)
+    }
+    if (matchRe.test(input) !== true) {
+      throw new ArgumentInvalidError({
+        argumentName  : name,
+        argumentValue : input,
+        issue         : `must match ${matchRe.toString()}`,
+        status,
+      })
+    }
+  }
+ 
+  if (maxLength !== undefined && input.length > maxLength) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `may be no more than ${maxLength} characters long`,
+      status,
+    })
+  }
+  if (minLength !== undefined && input.length < minLength) {
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue         : `must be at least ${minLength} characters long`,
+      status,
+    })
+  }
+ 
+  if (oneOf !== undefined && !oneOf.includes(input)) {
+    const issue = 'must be ' + (oneOf.length === 1 ? `'${oneOf[0]}'` : `one of '${oneOf.join("', '")}'`)
+    throw new ArgumentInvalidError({
+      argumentName  : name,
+      argumentValue : input,
+      issue,
+      status,
+    })
+  }
+ 
+  const validationOptions = Object.assign(
+    { input, name, type : 'string' },
+    options
+  )
+  checkValidateInput(input, validationOptions)
+  checkValidateValue(input, validationOptions)
+ 
+  return input
+}
+ 
+ValidatedString.description = 'Validated string'
+ValidatedString.toString = () => ValidatedString.description
+ 
+export { ValidatedString }
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/qa/lint.txt b/qa/lint.txt new file mode 100644 index 0000000..c3e21c9 --- /dev/null +++ b/qa/lint.txt @@ -0,0 +1 @@ +Test git rev: c48599433c3860432dab5c6061e52c892726991e diff --git a/qa/unit-test.txt b/qa/unit-test.txt new file mode 100644 index 0000000..78c0ba2 --- /dev/null +++ b/qa/unit-test.txt @@ -0,0 +1,60 @@ +Test git rev: c48599433c3860432dab5c6061e52c892726991e +PASS test/validate-string.test.js +(node:66664) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. +(Use `node --trace-deprecation ...` to show where the warning was created) +PASS test/type-names.test.js +PASS test/date-time.test.js +PASS test/day.test.js +PASS test/email.test.js +PASS test/time-of-day.test.js +PASS test/card-number.test.js +PASS test/integer.test.js +PASS test/boolean-string.test.js +PASS lib/date-time/test/process-idiomatic-date-time.test.js +PASS test/numeric.test.js +PASS test/ein.test.js +PASS test/ssn.test.js +PASS lib/date-time/test/process-iso-8601-date-time.test.js +PASS lib/date-time/test/get-timezone-offset.test.js +PASS lib/date-time/test/process-rfc-2822-date-time.test.js +PASS lib/test/possible-boolean-values.test.js +PASS lib/date-time/test/convert-month-name.test.js +PASS lib/date-time/test/convert-timezone-offset-to-string.test.js +----------------------------------------|---------|----------|---------|---------|------------------- +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s +----------------------------------------|---------|----------|---------|---------|------------------- +All files | 99.86 | 97.49 | 100 | 99.83 | + src | 99.79 | 97.78 | 100 | 99.76 | + boolean-string.mjs | 100 | 100 | 100 | 100 | + card-number.mjs | 100 | 96 | 100 | 100 | 34 + date-time.mjs | 100 | 100 | 100 | 100 | + day.mjs | 100 | 96.29 | 100 | 100 | 80,87-89 + ein.mjs | 100 | 100 | 100 | 100 | + email.mjs | 95.65 | 88.88 | 100 | 94.73 | 123 + integer.mjs | 100 | 100 | 100 | 100 | + numeric.mjs | 100 | 100 | 100 | 100 | + ssn.mjs | 100 | 100 | 100 | 100 | + time-of-day.mjs | 100 | 96.47 | 100 | 100 | 121-124,142 + validated-string.mjs | 100 | 100 | 100 | 100 | + src/lib | 100 | 92.59 | 100 | 100 | + check-max-min.mjs | 100 | 100 | 100 | 100 | + check-validate-input.mjs | 100 | 75 | 100 | 100 | 3 + check-validate-value.mjs | 100 | 75 | 100 | 100 | 3 + possible-boolean-values.mjs | 100 | 100 | 100 | 100 | + type-checks.mjs | 100 | 100 | 100 | 100 | + validate-helper.mjs | 100 | 100 | 100 | 100 | + src/lib/date-time | 100 | 97.61 | 100 | 100 | + convert-month-name.mjs | 100 | 100 | 100 | 100 | + convert-timezone-offset-to-string.mjs | 100 | 100 | 100 | 100 | + get-timezone-offset.mjs | 100 | 100 | 100 | 100 | + make-date-time-string.mjs | 100 | 100 | 100 | 100 | + process-idiomatic-date-time.mjs | 100 | 96.75 | 100 | 100 | 79,87-90,106,115 + process-iso-8601-date-time.mjs | 100 | 100 | 100 | 100 | + process-rfc-2822-date-time.mjs | 100 | 100 | 100 | 100 | +----------------------------------------|---------|----------|---------|---------|------------------- + +Test Suites: 19 passed, 19 total +Tests: 515 passed, 515 total +Snapshots: 0 total +Time: 0.734 s, estimated 1 s +Ran all test suites. From 8bda4677c5b6e2e12542d00b460829c13bead55e Mon Sep 17 00:00:00 2001 From: Zane Rockenbaugh Date: Sun, 1 Sep 2024 19:02:00 -0500 Subject: [PATCH 2/3] 1.0.0-alpha.9 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6402a46..6eac51f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "string-input", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "string-input", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "license": "Apache-2.0", "dependencies": { "luhn": "^2.4.1", diff --git a/package.json b/package.json index eaf9cc0..31cc67d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "string-input", - "version": "1.0.0-alpha.8", + "version": "1.0.0-alpha.9", "description": "A library to validate user input strings; compatible with command-line-args.", "main": "dist/specify-input.js", "scripts": { From 32fec7eac86b8f723974c2aabc28a9f1fb8419f4 Mon Sep 17 00:00:00 2001 From: Zane Rockenbaugh Date: Sun, 1 Sep 2024 19:02:00 -0500 Subject: [PATCH 3/3] removed QA files --- qa/coverage/base.css | 224 ----- qa/coverage/block-navigation.js | 87 -- qa/coverage/clover.xml | 711 -------------- qa/coverage/coverage-final.json | 25 - qa/coverage/favicon.png | Bin 445 -> 0 bytes qa/coverage/index.html | 146 --- qa/coverage/prettify.css | 1 - qa/coverage/prettify.js | 2 - qa/coverage/sort-arrow-sprite.png | Bin 138 -> 0 bytes qa/coverage/sorter.js | 196 ---- qa/coverage/src/boolean-string.mjs.html | 481 ---------- qa/coverage/src/card-number.mjs.html | 559 ----------- qa/coverage/src/date-time.mjs.html | 865 ------------------ qa/coverage/src/day.mjs.html | 577 ------------ qa/coverage/src/ein.mjs.html | 238 ----- qa/coverage/src/email.mjs.html | 544 ----------- qa/coverage/src/index.html | 266 ------ qa/coverage/src/integer.mjs.html | 319 ------- qa/coverage/src/lib/check-max-min.mjs.html | 157 ---- .../src/lib/check-validate-input.mjs.html | 118 --- .../src/lib/check-validate-value.mjs.html | 118 --- .../lib/date-time/convert-month-name.mjs.html | 175 ---- ...convert-timezone-offset-to-string.mjs.html | 130 --- .../date-time/get-timezone-offset.mjs.html | 277 ------ qa/coverage/src/lib/date-time/index.html | 206 ----- .../date-time/make-date-time-string.mjs.html | 154 ---- .../process-idiomatic-date-time.mjs.html | 541 ----------- .../process-iso-8601-date-time.mjs.html | 385 -------- .../process-rfc-2822-date-time.mjs.html | 199 ---- qa/coverage/src/lib/index.html | 191 ---- .../src/lib/possible-boolean-values.mjs.html | 169 ---- qa/coverage/src/lib/type-checks.mjs.html | 148 --- qa/coverage/src/lib/validate-helper.mjs.html | 169 ---- qa/coverage/src/numeric.mjs.html | 313 ------- qa/coverage/src/ssn.mjs.html | 238 ----- qa/coverage/src/time-of-day.mjs.html | 553 ----------- qa/coverage/src/validated-string.mjs.html | 484 ---------- qa/lint.txt | 1 - qa/unit-test.txt | 60 -- 39 files changed, 10027 deletions(-) delete mode 100644 qa/coverage/base.css delete mode 100644 qa/coverage/block-navigation.js delete mode 100644 qa/coverage/clover.xml delete mode 100644 qa/coverage/coverage-final.json delete mode 100644 qa/coverage/favicon.png delete mode 100644 qa/coverage/index.html delete mode 100644 qa/coverage/prettify.css delete mode 100644 qa/coverage/prettify.js delete mode 100644 qa/coverage/sort-arrow-sprite.png delete mode 100644 qa/coverage/sorter.js delete mode 100644 qa/coverage/src/boolean-string.mjs.html delete mode 100644 qa/coverage/src/card-number.mjs.html delete mode 100644 qa/coverage/src/date-time.mjs.html delete mode 100644 qa/coverage/src/day.mjs.html delete mode 100644 qa/coverage/src/ein.mjs.html delete mode 100644 qa/coverage/src/email.mjs.html delete mode 100644 qa/coverage/src/index.html delete mode 100644 qa/coverage/src/integer.mjs.html delete mode 100644 qa/coverage/src/lib/check-max-min.mjs.html delete mode 100644 qa/coverage/src/lib/check-validate-input.mjs.html delete mode 100644 qa/coverage/src/lib/check-validate-value.mjs.html delete mode 100644 qa/coverage/src/lib/date-time/convert-month-name.mjs.html delete mode 100644 qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html delete mode 100644 qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html delete mode 100644 qa/coverage/src/lib/date-time/index.html delete mode 100644 qa/coverage/src/lib/date-time/make-date-time-string.mjs.html delete mode 100644 qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html delete mode 100644 qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html delete mode 100644 qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html delete mode 100644 qa/coverage/src/lib/index.html delete mode 100644 qa/coverage/src/lib/possible-boolean-values.mjs.html delete mode 100644 qa/coverage/src/lib/type-checks.mjs.html delete mode 100644 qa/coverage/src/lib/validate-helper.mjs.html delete mode 100644 qa/coverage/src/numeric.mjs.html delete mode 100644 qa/coverage/src/ssn.mjs.html delete mode 100644 qa/coverage/src/time-of-day.mjs.html delete mode 100644 qa/coverage/src/validated-string.mjs.html delete mode 100644 qa/lint.txt delete mode 100644 qa/unit-test.txt diff --git a/qa/coverage/base.css b/qa/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/qa/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/qa/coverage/block-navigation.js b/qa/coverage/block-navigation.js deleted file mode 100644 index cc12130..0000000 --- a/qa/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selecter that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/qa/coverage/clover.xml b/qa/coverage/clover.xml deleted file mode 100644 index 5ccf953..0000000 --- a/qa/coverage/clover.xml +++ /dev/null @@ -1,711 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/qa/coverage/coverage-final.json b/qa/coverage/coverage-final.json deleted file mode 100644 index 37ef46b..0000000 --- a/qa/coverage/coverage-final.json +++ /dev/null @@ -1,25 +0,0 @@ -{"/Users/zane/playground/string-input/src/boolean-string.mjs": {"path":"/Users/zane/playground/string-input/src/boolean-string.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":28,"column":19},"end":{"line":127,"column":1}},"7":{"start":{"line":28,"column":46},"end":{"line":28,"column":59}},"8":{"start":{"line":36,"column":6},"end":{"line":30,"column":8}},"9":{"start":{"line":36,"column":6},"end":{"line":31,"column":19}},"10":{"start":{"line":31,"column":19},"end":{"line":31,"column":null}},"11":{"start":{"line":36,"column":6},"end":{"line":32,"column":13}},"12":{"start":{"line":32,"column":13},"end":{"line":32,"column":null}},"13":{"start":{"line":36,"column":6},"end":{"line":33,"column":11}},"14":{"start":{"line":33,"column":11},"end":{"line":33,"column":null}},"15":{"start":{"line":36,"column":6},"end":{"line":34,"column":10}},"16":{"start":{"line":36,"column":6},"end":{"line":35,"column":30}},"17":{"start":{"line":35,"column":30},"end":{"line":35,"column":null}},"18":{"start":{"line":38,"column":2},"end":{"line":38,"column":null}},"19":{"start":{"line":40,"column":2},"end":{"line":40,"column":null}},"20":{"start":{"line":42,"column":2},"end":{"line":53,"column":null}},"21":{"start":{"line":46,"column":4},"end":{"line":52,"column":null}},"22":{"start":{"line":55,"column":2},"end":{"line":66,"column":null}},"23":{"start":{"line":59,"column":4},"end":{"line":65,"column":null}},"24":{"start":{"line":69,"column":2},"end":{"line":117,"column":null}},"25":{"start":{"line":70,"column":4},"end":{"line":70,"column":null}},"26":{"start":{"line":72,"column":7},"end":{"line":117,"column":null}},"27":{"start":{"line":73,"column":4},"end":{"line":73,"column":null}},"28":{"start":{"line":76,"column":25},"end":{"line":76,"column":49}},"29":{"start":{"line":77,"column":4},"end":{"line":98,"column":null}},"30":{"start":{"line":78,"column":6},"end":{"line":84,"column":null}},"31":{"start":{"line":86,"column":9},"end":{"line":98,"column":null}},"32":{"start":{"line":91,"column":6},"end":{"line":97,"column":null}},"33":{"start":{"line":99,"column":4},"end":{"line":116,"column":null}},"34":{"start":{"line":103,"column":6},"end":{"line":103,"column":null}},"35":{"start":{"line":105,"column":9},"end":{"line":116,"column":null}},"36":{"start":{"line":106,"column":6},"end":{"line":106,"column":null}},"37":{"start":{"line":109,"column":6},"end":{"line":115,"column":null}},"38":{"start":{"line":119,"column":28},"end":{"line":122,"column":3}},"39":{"start":{"line":123,"column":2},"end":{"line":123,"column":null}},"40":{"start":{"line":124,"column":2},"end":{"line":124,"column":null}},"41":{"start":{"line":126,"column":2},"end":{"line":126,"column":null}},"42":{"start":{"line":129,"column":0},"end":{"line":129,"column":null}},"43":{"start":{"line":130,"column":0},"end":{"line":130,"column":null}},"44":{"start":{"line":130,"column":25},"end":{"line":130,"column":null}}},"fnMap":{"0":{"name":"BooleanString","decl":{"start":{"line":28,"column":6},"end":{"line":28,"column":19}},"loc":{"start":{"line":28,"column":61},"end":{"line":127,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":130,"column":25},"end":{"line":130,"column":31}},"loc":{"start":{"line":130,"column":25},"end":{"line":130,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":46},"end":{"line":28,"column":59}},"type":"cond-expr","locations":[{"start":{"line":28,"column":46},"end":{"line":28,"column":49}},{"start":{"line":28,"column":49},"end":{"line":28,"column":59}}]},"1":{"loc":{"start":{"line":28,"column":46},"end":{"line":28,"column":49}},"type":"binary-expr","locations":[{"start":{"line":28,"column":46},"end":{"line":28,"column":49}},{"start":{"line":28,"column":46},"end":{"line":28,"column":49}}]},"2":{"loc":{"start":{"line":28,"column":49},"end":{"line":28,"column":59}},"type":"binary-expr","locations":[{"start":{"line":28,"column":49},"end":{"line":28,"column":53}},{"start":{"line":28,"column":57},"end":{"line":28,"column":59}}]},"3":{"loc":{"start":{"line":31,"column":19},"end":{"line":31,"column":null}},"type":"cond-expr","locations":[{"start":{"line":31,"column":22},"end":{"line":31,"column":27}},{"start":{"line":31,"column":27},"end":{"line":31,"column":null}}]},"4":{"loc":{"start":{"line":32,"column":13},"end":{"line":32,"column":null}},"type":"cond-expr","locations":[{"start":{"line":32,"column":16},"end":{"line":32,"column":21}},{"start":{"line":32,"column":21},"end":{"line":32,"column":null}}]},"5":{"loc":{"start":{"line":33,"column":11},"end":{"line":33,"column":null}},"type":"cond-expr","locations":[{"start":{"line":33,"column":14},"end":{"line":33,"column":19}},{"start":{"line":33,"column":19},"end":{"line":33,"column":null}}]},"6":{"loc":{"start":{"line":35,"column":30},"end":{"line":35,"column":null}},"type":"cond-expr","locations":[{"start":{"line":35,"column":33},"end":{"line":35,"column":38}},{"start":{"line":35,"column":38},"end":{"line":35,"column":null}}]},"7":{"loc":{"start":{"line":42,"column":2},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":53,"column":null}}]},"8":{"loc":{"start":{"line":43,"column":4},"end":{"line":44,"column":73}},"type":"binary-expr","locations":[{"start":{"line":43,"column":4},"end":{"line":43,"column":28}},{"start":{"line":44,"column":8},"end":{"line":44,"column":21}},{"start":{"line":44,"column":25},"end":{"line":44,"column":38}},{"start":{"line":44,"column":42},"end":{"line":44,"column":55}},{"start":{"line":44,"column":59},"end":{"line":44,"column":72}}]},"9":{"loc":{"start":{"line":55,"column":2},"end":{"line":66,"column":null}},"type":"if","locations":[{"start":{"line":55,"column":2},"end":{"line":66,"column":null}}]},"10":{"loc":{"start":{"line":56,"column":4},"end":{"line":57,"column":76}},"type":"binary-expr","locations":[{"start":{"line":56,"column":4},"end":{"line":56,"column":20}},{"start":{"line":57,"column":8},"end":{"line":57,"column":23}},{"start":{"line":57,"column":27},"end":{"line":57,"column":40}},{"start":{"line":57,"column":44},"end":{"line":57,"column":58}},{"start":{"line":57,"column":62},"end":{"line":57,"column":75}}]},"11":{"loc":{"start":{"line":69,"column":2},"end":{"line":117,"column":null}},"type":"if","locations":[{"start":{"line":69,"column":2},"end":{"line":117,"column":null}},{"start":{"line":72,"column":7},"end":{"line":117,"column":null}}]},"12":{"loc":{"start":{"line":72,"column":7},"end":{"line":117,"column":null}},"type":"if","locations":[{"start":{"line":72,"column":7},"end":{"line":117,"column":null}},{"start":{"line":75,"column":7},"end":{"line":117,"column":null}}]},"13":{"loc":{"start":{"line":77,"column":4},"end":{"line":98,"column":null}},"type":"if","locations":[{"start":{"line":77,"column":4},"end":{"line":98,"column":null}},{"start":{"line":86,"column":9},"end":{"line":98,"column":null}}]},"14":{"loc":{"start":{"line":77,"column":8},"end":{"line":77,"column":66}},"type":"binary-expr","locations":[{"start":{"line":77,"column":8},"end":{"line":77,"column":26}},{"start":{"line":77,"column":30},"end":{"line":77,"column":66}}]},"15":{"loc":{"start":{"line":86,"column":9},"end":{"line":98,"column":null}},"type":"if","locations":[{"start":{"line":86,"column":9},"end":{"line":98,"column":null}}]},"16":{"loc":{"start":{"line":87,"column":6},"end":{"line":88,"column":37}},"type":"binary-expr","locations":[{"start":{"line":87,"column":6},"end":{"line":87,"column":41}},{"start":{"line":88,"column":9},"end":{"line":88,"column":37}}]},"17":{"loc":{"start":{"line":99,"column":4},"end":{"line":116,"column":null}},"type":"if","locations":[{"start":{"line":99,"column":4},"end":{"line":116,"column":null}},{"start":{"line":105,"column":9},"end":{"line":116,"column":null}}]},"18":{"loc":{"start":{"line":100,"column":6},"end":{"line":101,"column":66}},"type":"binary-expr","locations":[{"start":{"line":100,"column":6},"end":{"line":100,"column":24}},{"start":{"line":101,"column":10},"end":{"line":101,"column":45}},{"start":{"line":101,"column":49},"end":{"line":101,"column":66}}]},"19":{"loc":{"start":{"line":105,"column":9},"end":{"line":116,"column":null}},"type":"if","locations":[{"start":{"line":105,"column":9},"end":{"line":116,"column":null}},{"start":{"line":108,"column":9},"end":{"line":116,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":34,"8":34,"9":34,"10":34,"11":34,"12":34,"13":34,"14":34,"15":34,"16":34,"17":34,"18":34,"19":34,"20":34,"21":5,"22":29,"23":5,"24":24,"25":6,"26":18,"27":5,"28":13,"29":13,"30":3,"31":10,"32":3,"33":7,"34":3,"35":4,"36":3,"37":1,"38":17,"39":17,"40":17,"41":17,"42":2,"43":2,"44":1},"f":{"0":34,"1":1},"b":{"0":[14,20],"1":[34,30],"2":[20,20],"3":[29,5],"4":[31,3],"5":[29,5],"6":[33,1],"7":[5],"8":[34,5,3,2,1],"9":[5],"10":[29,5,3,2,1],"11":[6,18],"12":[5,13],"13":[3,10],"14":[13,3],"15":[3],"16":[10,8],"17":[3,4],"18":[7,5,1],"19":[3,1]}} -,"/Users/zane/playground/string-input/src/card-number.mjs": {"path":"/Users/zane/playground/string-input/src/card-number.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":8,"column":13},"end":{"line":8,"column":19}},"6":{"start":{"line":9,"column":26},"end":{"line":9,"column":61}},"7":{"start":{"line":10,"column":20},"end":{"line":10,"column":41}},"8":{"start":{"line":30,"column":16},"end":{"line":137,"column":1}},"9":{"start":{"line":30,"column":43},"end":{"line":30,"column":56}},"10":{"start":{"line":36,"column":6},"end":{"line":32,"column":8}},"11":{"start":{"line":36,"column":6},"end":{"line":33,"column":8}},"12":{"start":{"line":36,"column":6},"end":{"line":34,"column":11}},"13":{"start":{"line":34,"column":11},"end":{"line":34,"column":null}},"14":{"start":{"line":36,"column":6},"end":{"line":35,"column":10}},"15":{"start":{"line":38,"column":2},"end":{"line":38,"column":null}},"16":{"start":{"line":40,"column":2},"end":{"line":48,"column":null}},"17":{"start":{"line":41,"column":4},"end":{"line":47,"column":null}},"18":{"start":{"line":50,"column":23},"end":{"line":50,"column":56}},"19":{"start":{"line":51,"column":2},"end":{"line":59,"column":null}},"20":{"start":{"line":52,"column":4},"end":{"line":58,"column":null}},"21":{"start":{"line":61,"column":2},"end":{"line":116,"column":null}},"22":{"start":{"line":64,"column":6},"end":{"line":77,"column":7}},"23":{"start":{"line":65,"column":8},"end":{"line":74,"column":null}},"24":{"start":{"line":66,"column":10},"end":{"line":73,"column":null}},"25":{"start":{"line":76,"column":8},"end":{"line":76,"column":null}},"26":{"start":{"line":78,"column":20},"end":{"line":78,"column":41}},"27":{"start":{"line":79,"column":6},"end":{"line":107,"column":null}},"28":{"start":{"line":80,"column":8},"end":{"line":80,"column":null}},"29":{"start":{"line":82,"column":11},"end":{"line":107,"column":null}},"30":{"start":{"line":83,"column":28},"end":{"line":83,"column":43}},"31":{"start":{"line":84,"column":8},"end":{"line":92,"column":null}},"32":{"start":{"line":85,"column":10},"end":{"line":91,"column":null}},"33":{"start":{"line":93,"column":20},"end":{"line":93,"column":38}},"34":{"start":{"line":94,"column":20},"end":{"line":94,"column":38}},"35":{"start":{"line":95,"column":25},"end":{"line":95,"column":59}},"36":{"start":{"line":96,"column":28},"end":{"line":96,"column":46}},"37":{"start":{"line":98,"column":8},"end":{"line":98,"column":null}},"38":{"start":{"line":101,"column":8},"end":{"line":106,"column":null}},"39":{"start":{"line":110,"column":4},"end":{"line":115,"column":null}},"40":{"start":{"line":118,"column":28},"end":{"line":121,"column":3}},"41":{"start":{"line":122,"column":2},"end":{"line":122,"column":null}},"42":{"start":{"line":124,"column":2},"end":{"line":132,"column":null}},"43":{"start":{"line":125,"column":4},"end":{"line":131,"column":null}},"44":{"start":{"line":134,"column":2},"end":{"line":134,"column":null}},"45":{"start":{"line":136,"column":2},"end":{"line":136,"column":null}},"46":{"start":{"line":139,"column":0},"end":{"line":139,"column":null}},"47":{"start":{"line":140,"column":0},"end":{"line":140,"column":null}},"48":{"start":{"line":140,"column":22},"end":{"line":140,"column":null}}},"fnMap":{"0":{"name":"CardNumber","decl":{"start":{"line":30,"column":6},"end":{"line":30,"column":16}},"loc":{"start":{"line":30,"column":58},"end":{"line":137,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":63,"column":17},"end":{"line":63,"column":18}},"loc":{"start":{"line":63,"column":26},"end":{"line":108,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":140,"column":22},"end":{"line":140,"column":28}},"loc":{"start":{"line":140,"column":22},"end":{"line":140,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":30,"column":43},"end":{"line":30,"column":56}},"type":"cond-expr","locations":[{"start":{"line":30,"column":43},"end":{"line":30,"column":46}},{"start":{"line":30,"column":46},"end":{"line":30,"column":56}}]},"1":{"loc":{"start":{"line":30,"column":43},"end":{"line":30,"column":46}},"type":"binary-expr","locations":[{"start":{"line":30,"column":43},"end":{"line":30,"column":46}},{"start":{"line":30,"column":43},"end":{"line":30,"column":46}}]},"2":{"loc":{"start":{"line":30,"column":46},"end":{"line":30,"column":56}},"type":"binary-expr","locations":[{"start":{"line":30,"column":46},"end":{"line":30,"column":50}},{"start":{"line":30,"column":54},"end":{"line":30,"column":56}}]},"3":{"loc":{"start":{"line":34,"column":11},"end":{"line":34,"column":null}},"type":"cond-expr","locations":[{"start":{"line":34,"column":14},"end":{"line":34,"column":46}},{"start":{"line":34,"column":46},"end":{"line":34,"column":null}}]},"4":{"loc":{"start":{"line":40,"column":2},"end":{"line":48,"column":null}},"type":"if","locations":[{"start":{"line":40,"column":2},"end":{"line":48,"column":null}}]},"5":{"loc":{"start":{"line":51,"column":2},"end":{"line":59,"column":null}},"type":"if","locations":[{"start":{"line":51,"column":2},"end":{"line":59,"column":null}}]},"6":{"loc":{"start":{"line":51,"column":6},"end":{"line":51,"column":69}},"type":"binary-expr","locations":[{"start":{"line":51,"column":6},"end":{"line":51,"column":27}},{"start":{"line":51,"column":31},"end":{"line":51,"column":69}}]},"7":{"loc":{"start":{"line":61,"column":2},"end":{"line":116,"column":null}},"type":"if","locations":[{"start":{"line":61,"column":2},"end":{"line":116,"column":null}}]},"8":{"loc":{"start":{"line":62,"column":4},"end":{"line":108,"column":15}},"type":"binary-expr","locations":[{"start":{"line":62,"column":4},"end":{"line":62,"column":22}},{"start":{"line":63,"column":7},"end":{"line":108,"column":15}}]},"9":{"loc":{"start":{"line":64,"column":6},"end":{"line":77,"column":7}},"type":"if","locations":[{"start":{"line":64,"column":6},"end":{"line":77,"column":7}}]},"10":{"loc":{"start":{"line":65,"column":8},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":65,"column":8},"end":{"line":74,"column":null}}]},"11":{"loc":{"start":{"line":79,"column":6},"end":{"line":107,"column":null}},"type":"if","locations":[{"start":{"line":79,"column":6},"end":{"line":107,"column":null}},{"start":{"line":82,"column":11},"end":{"line":107,"column":null}}]},"12":{"loc":{"start":{"line":82,"column":11},"end":{"line":107,"column":null}},"type":"if","locations":[{"start":{"line":82,"column":11},"end":{"line":107,"column":null}},{"start":{"line":100,"column":11},"end":{"line":107,"column":null}}]},"13":{"loc":{"start":{"line":84,"column":8},"end":{"line":92,"column":null}},"type":"if","locations":[{"start":{"line":84,"column":8},"end":{"line":92,"column":null}}]},"14":{"loc":{"start":{"line":98,"column":15},"end":{"line":98,"column":55}},"type":"binary-expr","locations":[{"start":{"line":98,"column":15},"end":{"line":98,"column":33}},{"start":{"line":98,"column":37},"end":{"line":98,"column":55}}]},"15":{"loc":{"start":{"line":124,"column":2},"end":{"line":132,"column":null}},"type":"if","locations":[{"start":{"line":124,"column":2},"end":{"line":132,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":46,"10":46,"11":46,"12":46,"13":46,"14":46,"15":46,"16":42,"17":2,"18":40,"19":40,"20":4,"21":36,"22":19,"23":5,"24":2,"25":3,"26":14,"27":14,"28":6,"29":8,"30":6,"31":6,"32":2,"33":4,"34":4,"35":4,"36":4,"37":4,"38":2,"39":8,"40":22,"41":22,"42":18,"43":2,"44":16,"45":12,"46":2,"47":2,"48":5},"f":{"0":46,"1":19,"2":5},"b":{"0":[24,22],"1":[46,29],"2":[22,5],"3":[46,0],"4":[2],"5":[4],"6":[40,40],"7":[8],"8":[36,19],"9":[5],"10":[2],"11":[6,8],"12":[6,2],"13":[2],"14":[4,2],"15":[2]}} -,"/Users/zane/playground/string-input/src/date-time.mjs": {"path":"/Users/zane/playground/string-input/src/date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":8,"column":0},"end":{"line":8,"column":null}},"7":{"start":{"line":9,"column":0},"end":{"line":9,"column":null}},"8":{"start":{"line":10,"column":0},"end":{"line":10,"column":null}},"9":{"start":{"line":11,"column":0},"end":{"line":11,"column":null}},"10":{"start":{"line":12,"column":0},"end":{"line":12,"column":null}},"11":{"start":{"line":59,"column":14},"end":{"line":200,"column":1}},"12":{"start":{"line":59,"column":41},"end":{"line":59,"column":54}},"13":{"start":{"line":62,"column":55},"end":{"line":62,"column":14}},"14":{"start":{"line":62,"column":55},"end":{"line":62,"column":29}},"15":{"start":{"line":62,"column":55},"end":{"line":62,"column":36}},"16":{"start":{"line":62,"column":55},"end":{"line":62,"column":44}},"17":{"start":{"line":62,"column":44},"end":{"line":62,"column":55}},"18":{"start":{"line":63,"column":21},"end":{"line":63,"column":11}},"19":{"start":{"line":63,"column":21},"end":{"line":63,"column":16}},"20":{"start":{"line":65,"column":2},"end":{"line":65,"column":null}},"21":{"start":{"line":69,"column":23},"end":{"line":69,"column":53}},"22":{"start":{"line":70,"column":2},"end":{"line":74,"column":null}},"23":{"start":{"line":71,"column":4},"end":{"line":73,"column":null}},"24":{"start":{"line":76,"column":23},"end":{"line":76,"column":49}},"25":{"start":{"line":77,"column":2},"end":{"line":81,"column":null}},"26":{"start":{"line":78,"column":4},"end":{"line":80,"column":null}},"27":{"start":{"line":83,"column":2},"end":{"line":85,"column":null}},"28":{"start":{"line":84,"column":4},"end":{"line":84,"column":null}},"29":{"start":{"line":87,"column":2},"end":{"line":94,"column":null}},"30":{"start":{"line":88,"column":4},"end":{"line":93,"column":null}},"31":{"start":{"line":96,"column":28},"end":{"line":99,"column":3}},"32":{"start":{"line":100,"column":2},"end":{"line":100,"column":null}},"33":{"start":{"line":105,"column":2},"end":{"line":148,"column":null}},"34":{"start":{"line":106,"column":4},"end":{"line":109,"column":null}},"35":{"start":{"line":111,"column":7},"end":{"line":148,"column":null}},"36":{"start":{"line":112,"column":20},"end":{"line":112,"column":33}},"37":{"start":{"line":113,"column":4},"end":{"line":124,"column":null}},"38":{"start":{"line":126,"column":7},"end":{"line":148,"column":null}},"39":{"start":{"line":127,"column":4},"end":{"line":138,"column":null}},"40":{"start":{"line":140,"column":7},"end":{"line":148,"column":null}},"41":{"start":{"line":141,"column":4},"end":{"line":147,"column":null}},"42":{"start":{"line":150,"column":2},"end":{"line":194,"column":null}},"43":{"start":{"line":151,"column":4},"end":{"line":154,"column":null}},"44":{"start":{"line":156,"column":7},"end":{"line":194,"column":null}},"45":{"start":{"line":157,"column":20},"end":{"line":157,"column":33}},"46":{"start":{"line":158,"column":4},"end":{"line":169,"column":null}},"47":{"start":{"line":171,"column":7},"end":{"line":194,"column":null}},"48":{"start":{"line":172,"column":4},"end":{"line":183,"column":null}},"49":{"start":{"line":185,"column":7},"end":{"line":194,"column":null}},"50":{"start":{"line":187,"column":4},"end":{"line":193,"column":null}},"51":{"start":{"line":195,"column":2},"end":{"line":195,"column":null}},"52":{"start":{"line":197,"column":2},"end":{"line":197,"column":null}},"53":{"start":{"line":199,"column":2},"end":{"line":199,"column":null}},"54":{"start":{"line":202,"column":0},"end":{"line":202,"column":null}},"55":{"start":{"line":203,"column":0},"end":{"line":203,"column":null}},"56":{"start":{"line":203,"column":20},"end":{"line":203,"column":null}},"57":{"start":{"line":205,"column":20},"end":{"line":258,"column":1}},"58":{"start":{"line":215,"column":6},"end":{"line":215,"column":null}},"59":{"start":{"line":206,"column":6},"end":{"line":206,"column":null}},"60":{"start":{"line":207,"column":7},"end":{"line":207,"column":null}},"61":{"start":{"line":208,"column":5},"end":{"line":208,"column":null}},"62":{"start":{"line":209,"column":7},"end":{"line":209,"column":null}},"63":{"start":{"line":210,"column":7},"end":{"line":210,"column":null}},"64":{"start":{"line":211,"column":9},"end":{"line":211,"column":null}},"65":{"start":{"line":212,"column":9},"end":{"line":212,"column":null}},"66":{"start":{"line":213,"column":13},"end":{"line":213,"column":null}},"67":{"start":{"line":214,"column":16},"end":{"line":214,"column":null}},"68":{"start":{"line":216,"column":13},"end":{"line":216,"column":58}},"69":{"start":{"line":217,"column":21},"end":{"line":226,"column":4}},"70":{"start":{"line":227,"column":15},"end":{"line":227,"column":35}},"71":{"start":{"line":229,"column":2},"end":{"line":257,"column":null}},"72":{"start":{"line":230,"column":20},"end":{"line":230,"column":null}},"73":{"start":{"line":231,"column":11},"end":{"line":231,"column":null}},"74":{"start":{"line":232,"column":12},"end":{"line":232,"column":null}},"75":{"start":{"line":233,"column":17},"end":{"line":233,"column":null}},"76":{"start":{"line":234,"column":9},"end":{"line":234,"column":null}},"77":{"start":{"line":235,"column":12},"end":{"line":235,"column":null}},"78":{"start":{"line":236,"column":14},"end":{"line":236,"column":null}},"79":{"start":{"line":237,"column":14},"end":{"line":237,"column":null}},"80":{"start":{"line":238,"column":24},"end":{"line":238,"column":null}},"81":{"start":{"line":239,"column":19},"end":{"line":239,"column":null}},"82":{"start":{"line":240,"column":21},"end":{"line":240,"column":null}},"83":{"start":{"line":241,"column":11},"end":{"line":241,"column":null}},"84":{"start":{"line":245,"column":11},"end":{"line":245,"column":null}},"85":{"start":{"line":246,"column":12},"end":{"line":256,"column":null}}},"fnMap":{"0":{"name":"DateTime","decl":{"start":{"line":59,"column":6},"end":{"line":59,"column":14}},"loc":{"start":{"line":59,"column":56},"end":{"line":200,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":203,"column":20},"end":{"line":203,"column":26}},"loc":{"start":{"line":203,"column":20},"end":{"line":203,"column":null}}},"2":{"name":"createValue","decl":{"start":{"line":205,"column":6},"end":{"line":205,"column":17}},"loc":{"start":{"line":215,"column":6},"end":{"line":258,"column":1}}},"3":{"name":"isDateTimeObject","decl":{"start":{"line":230,"column":4},"end":{"line":230,"column":20}},"loc":{"start":{"line":230,"column":20},"end":{"line":230,"column":null}}},"4":{"name":"getYear","decl":{"start":{"line":231,"column":4},"end":{"line":231,"column":11}},"loc":{"start":{"line":231,"column":11},"end":{"line":231,"column":null}}},"5":{"name":"getMonth","decl":{"start":{"line":232,"column":4},"end":{"line":232,"column":12}},"loc":{"start":{"line":232,"column":12},"end":{"line":232,"column":null}}},"6":{"name":"getDayOfMonth","decl":{"start":{"line":233,"column":4},"end":{"line":233,"column":17}},"loc":{"start":{"line":233,"column":17},"end":{"line":233,"column":null}}},"7":{"name":"isEod","decl":{"start":{"line":234,"column":4},"end":{"line":234,"column":9}},"loc":{"start":{"line":234,"column":9},"end":{"line":234,"column":null}}},"8":{"name":"getHours","decl":{"start":{"line":235,"column":4},"end":{"line":235,"column":12}},"loc":{"start":{"line":235,"column":12},"end":{"line":235,"column":null}}},"9":{"name":"getMinutes","decl":{"start":{"line":236,"column":4},"end":{"line":236,"column":14}},"loc":{"start":{"line":236,"column":14},"end":{"line":236,"column":null}}},"10":{"name":"getSeconds","decl":{"start":{"line":237,"column":4},"end":{"line":237,"column":14}},"loc":{"start":{"line":237,"column":14},"end":{"line":237,"column":null}}},"11":{"name":"getFractionalSeconds","decl":{"start":{"line":238,"column":4},"end":{"line":238,"column":24}},"loc":{"start":{"line":238,"column":24},"end":{"line":238,"column":null}}},"12":{"name":"getMilliseconds","decl":{"start":{"line":239,"column":4},"end":{"line":239,"column":19}},"loc":{"start":{"line":239,"column":19},"end":{"line":239,"column":null}}},"13":{"name":"getTimezoneOffset","decl":{"start":{"line":240,"column":4},"end":{"line":240,"column":21}},"loc":{"start":{"line":240,"column":21},"end":{"line":240,"column":null}}},"14":{"name":"getDate","decl":{"start":{"line":241,"column":4},"end":{"line":241,"column":11}},"loc":{"start":{"line":241,"column":11},"end":{"line":241,"column":null}}},"15":{"name":"valueOf","decl":{"start":{"line":245,"column":4},"end":{"line":245,"column":11}},"loc":{"start":{"line":245,"column":11},"end":{"line":245,"column":null}}},"16":{"name":"toString","decl":{"start":{"line":246,"column":4},"end":{"line":246,"column":12}},"loc":{"start":{"line":246,"column":12},"end":{"line":256,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":59,"column":41},"end":{"line":59,"column":54}},"type":"cond-expr","locations":[{"start":{"line":59,"column":41},"end":{"line":59,"column":44}},{"start":{"line":59,"column":44},"end":{"line":59,"column":54}}]},"1":{"loc":{"start":{"line":59,"column":41},"end":{"line":59,"column":44}},"type":"binary-expr","locations":[{"start":{"line":59,"column":41},"end":{"line":59,"column":44}},{"start":{"line":59,"column":41},"end":{"line":59,"column":44}}]},"2":{"loc":{"start":{"line":59,"column":44},"end":{"line":59,"column":54}},"type":"binary-expr","locations":[{"start":{"line":59,"column":44},"end":{"line":59,"column":48}},{"start":{"line":59,"column":52},"end":{"line":59,"column":54}}]},"3":{"loc":{"start":{"line":62,"column":44},"end":{"line":62,"column":55}},"type":"cond-expr","locations":[{"start":{"line":62,"column":47},"end":{"line":62,"column":50}},{"start":{"line":62,"column":50},"end":{"line":62,"column":55}}]},"4":{"loc":{"start":{"line":70,"column":2},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":2},"end":{"line":74,"column":null}}]},"5":{"loc":{"start":{"line":77,"column":2},"end":{"line":81,"column":null}},"type":"if","locations":[{"start":{"line":77,"column":2},"end":{"line":81,"column":null}}]},"6":{"loc":{"start":{"line":83,"column":2},"end":{"line":85,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":2},"end":{"line":85,"column":null}}]},"7":{"loc":{"start":{"line":87,"column":2},"end":{"line":94,"column":null}},"type":"if","locations":[{"start":{"line":87,"column":2},"end":{"line":94,"column":null}}]},"8":{"loc":{"start":{"line":87,"column":6},"end":{"line":87,"column":46}},"type":"binary-expr","locations":[{"start":{"line":87,"column":6},"end":{"line":87,"column":20}},{"start":{"line":87,"column":24},"end":{"line":87,"column":46}}]},"9":{"loc":{"start":{"line":105,"column":2},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":148,"column":null}},{"start":{"line":111,"column":7},"end":{"line":148,"column":null}}]},"10":{"loc":{"start":{"line":111,"column":7},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":111,"column":7},"end":{"line":148,"column":null}},{"start":{"line":126,"column":7},"end":{"line":148,"column":null}}]},"11":{"loc":{"start":{"line":126,"column":7},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":126,"column":7},"end":{"line":148,"column":null}},{"start":{"line":140,"column":7},"end":{"line":148,"column":null}}]},"12":{"loc":{"start":{"line":140,"column":7},"end":{"line":148,"column":null}},"type":"if","locations":[{"start":{"line":140,"column":7},"end":{"line":148,"column":null}}]},"13":{"loc":{"start":{"line":140,"column":11},"end":{"line":140,"column":65}},"type":"binary-expr","locations":[{"start":{"line":140,"column":11},"end":{"line":140,"column":28}},{"start":{"line":140,"column":32},"end":{"line":140,"column":65}}]},"14":{"loc":{"start":{"line":140,"column":32},"end":{"line":140,"column":56}},"type":"cond-expr","locations":[{"start":{"line":140,"column":52},"end":{"line":140,"column":55}},{"start":{"line":140,"column":32},"end":{"line":140,"column":56}}]},"15":{"loc":{"start":{"line":140,"column":32},"end":{"line":140,"column":55}},"type":"binary-expr","locations":[{"start":{"line":140,"column":32},"end":{"line":140,"column":55}},{"start":{"line":140,"column":52},"end":{"line":140,"column":55}}]},"16":{"loc":{"start":{"line":150,"column":2},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":150,"column":2},"end":{"line":194,"column":null}},{"start":{"line":156,"column":7},"end":{"line":194,"column":null}}]},"17":{"loc":{"start":{"line":156,"column":7},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":156,"column":7},"end":{"line":194,"column":null}},{"start":{"line":171,"column":7},"end":{"line":194,"column":null}}]},"18":{"loc":{"start":{"line":171,"column":7},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":171,"column":7},"end":{"line":194,"column":null}},{"start":{"line":185,"column":7},"end":{"line":194,"column":null}}]},"19":{"loc":{"start":{"line":185,"column":7},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":185,"column":7},"end":{"line":194,"column":null}}]},"20":{"loc":{"start":{"line":185,"column":11},"end":{"line":185,"column":65}},"type":"binary-expr","locations":[{"start":{"line":185,"column":11},"end":{"line":185,"column":28}},{"start":{"line":185,"column":32},"end":{"line":185,"column":65}}]},"21":{"loc":{"start":{"line":185,"column":32},"end":{"line":185,"column":56}},"type":"cond-expr","locations":[{"start":{"line":185,"column":52},"end":{"line":185,"column":55}},{"start":{"line":185,"column":32},"end":{"line":185,"column":56}}]},"22":{"loc":{"start":{"line":185,"column":32},"end":{"line":185,"column":55}},"type":"binary-expr","locations":[{"start":{"line":185,"column":32},"end":{"line":185,"column":55}},{"start":{"line":185,"column":52},"end":{"line":185,"column":55}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":2,"11":2,"12":87,"13":87,"14":87,"15":87,"16":87,"17":87,"18":87,"19":87,"20":87,"21":81,"22":81,"23":1,"24":81,"25":81,"26":1,"27":81,"28":79,"29":70,"30":2,"31":68,"32":68,"33":66,"34":6,"35":60,"36":1,"37":1,"38":59,"39":3,"40":56,"41":2,"42":62,"43":8,"44":54,"45":1,"46":1,"47":53,"48":3,"49":50,"50":2,"51":58,"52":44,"53":42,"54":2,"55":2,"56":3,"57":2,"58":70,"59":70,"60":70,"61":70,"62":70,"63":70,"64":70,"65":70,"66":70,"67":70,"68":70,"69":70,"70":70,"71":70,"72":6,"73":21,"74":18,"75":18,"76":20,"77":18,"78":18,"79":18,"80":18,"81":18,"82":6,"83":3,"84":48,"85":28},"f":{"0":87,"1":3,"2":70,"3":6,"4":21,"5":18,"6":18,"7":20,"8":18,"9":18,"10":18,"11":18,"12":18,"13":6,"14":3,"15":48,"16":28},"b":{"0":[49,38],"1":[87,54],"2":[38,17],"3":[73,14],"4":[1],"5":[1],"6":[79],"7":[2],"8":[70,2],"9":[6,60],"10":[1,59],"11":[3,56],"12":[2],"13":[56,5],"14":[2,3],"15":[5,5],"16":[8,54],"17":[1,53],"18":[3,50],"19":[2],"20":[50,5],"21":[2,3],"22":[5,5]}} -,"/Users/zane/playground/string-input/src/day.mjs": {"path":"/Users/zane/playground/string-input/src/day.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":8,"column":0},"end":{"line":8,"column":null}},"7":{"start":{"line":39,"column":9},"end":{"line":120,"column":1}},"8":{"start":{"line":39,"column":36},"end":{"line":39,"column":49}},"9":{"start":{"line":40,"column":27},"end":{"line":40,"column":14}},"10":{"start":{"line":40,"column":27},"end":{"line":40,"column":22}},"11":{"start":{"line":41,"column":21},"end":{"line":41,"column":11}},"12":{"start":{"line":41,"column":21},"end":{"line":41,"column":16}},"13":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"14":{"start":{"line":45,"column":20},"end":{"line":45,"column":43}},"15":{"start":{"line":46,"column":18},"end":{"line":46,"column":39}},"16":{"start":{"line":47,"column":23},"end":{"line":47,"column":73}},"17":{"start":{"line":50,"column":4},"end":{"line":52,"column":37}},"18":{"start":{"line":54,"column":2},"end":{"line":70,"column":null}},"19":{"start":{"line":55,"column":4},"end":{"line":60,"column":null}},"20":{"start":{"line":62,"column":7},"end":{"line":70,"column":null}},"21":{"start":{"line":63,"column":4},"end":{"line":69,"column":null}},"22":{"start":{"line":72,"column":28},"end":{"line":75,"column":3}},"23":{"start":{"line":76,"column":2},"end":{"line":76,"column":null}},"24":{"start":{"line":78,"column":22},"end":{"line":78,"column":58}},"25":{"start":{"line":79,"column":15},"end":{"line":81,"column":3}},"26":{"start":{"line":83,"column":2},"end":{"line":88,"column":null}},"27":{"start":{"line":84,"column":4},"end":{"line":84,"column":null}},"28":{"start":{"line":87,"column":4},"end":{"line":87,"column":null}},"29":{"start":{"line":89,"column":14},"end":{"line":89,"column":75}},"30":{"start":{"line":93,"column":15},"end":{"line":93,"column":45}},"31":{"start":{"line":95,"column":2},"end":{"line":97,"column":null}},"32":{"start":{"line":96,"column":4},"end":{"line":96,"column":null}},"33":{"start":{"line":98,"column":2},"end":{"line":100,"column":null}},"34":{"start":{"line":99,"column":4},"end":{"line":99,"column":null}},"35":{"start":{"line":102,"column":2},"end":{"line":102,"column":null}},"36":{"start":{"line":105,"column":2},"end":{"line":113,"column":null}},"37":{"start":{"line":106,"column":4},"end":{"line":112,"column":null}},"38":{"start":{"line":115,"column":16},"end":{"line":115,"column":55}},"39":{"start":{"line":117,"column":2},"end":{"line":117,"column":null}},"40":{"start":{"line":119,"column":2},"end":{"line":119,"column":null}},"41":{"start":{"line":122,"column":0},"end":{"line":122,"column":null}},"42":{"start":{"line":123,"column":0},"end":{"line":123,"column":null}},"43":{"start":{"line":123,"column":15},"end":{"line":123,"column":null}},"44":{"start":{"line":125,"column":21},"end":{"line":151,"column":1}},"45":{"start":{"line":126,"column":2},"end":{"line":148,"column":3}},"46":{"start":{"line":127,"column":4},"end":{"line":127,"column":null}},"47":{"start":{"line":129,"column":7},"end":{"line":148,"column":3}},"48":{"start":{"line":130,"column":17},"end":{"line":130,"column":32}},"49":{"start":{"line":132,"column":4},"end":{"line":134,"column":null}},"50":{"start":{"line":136,"column":7},"end":{"line":148,"column":3}},"51":{"start":{"line":137,"column":4},"end":{"line":139,"column":null}},"52":{"start":{"line":141,"column":7},"end":{"line":148,"column":3}},"53":{"start":{"line":142,"column":4},"end":{"line":147,"column":null}},"54":{"start":{"line":150,"column":2},"end":{"line":150,"column":null}},"55":{"start":{"line":153,"column":20},"end":{"line":162,"column":2}},"56":{"start":{"line":153,"column":26},"end":{"line":153,"column":25}},"57":{"start":{"line":153,"column":33},"end":{"line":153,"column":32}},"58":{"start":{"line":153,"column":39},"end":{"line":153,"column":38}},"59":{"start":{"line":153,"column":45},"end":{"line":153,"column":44}},"60":{"start":{"line":153,"column":45},"end":{"line":162,"column":2}},"61":{"start":{"line":154,"column":13},"end":{"line":154,"column":null}},"62":{"start":{"line":155,"column":15},"end":{"line":155,"column":null}},"63":{"start":{"line":156,"column":10},"end":{"line":156,"column":null}},"64":{"start":{"line":157,"column":9},"end":{"line":157,"column":null}},"65":{"start":{"line":158,"column":9},"end":{"line":158,"column":null}},"66":{"start":{"line":159,"column":9},"end":{"line":159,"column":null}},"67":{"start":{"line":160,"column":10},"end":{"line":161,"column":null}}},"fnMap":{"0":{"name":"Day","decl":{"start":{"line":39,"column":6},"end":{"line":39,"column":9}},"loc":{"start":{"line":39,"column":51},"end":{"line":120,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":123,"column":15},"end":{"line":123,"column":21}},"loc":{"start":{"line":123,"column":15},"end":{"line":123,"column":null}}},"2":{"name":"convertToDay","decl":{"start":{"line":125,"column":6},"end":{"line":125,"column":18}},"loc":{"start":{"line":125,"column":58},"end":{"line":151,"column":1}}},"3":{"name":"createValue","decl":{"start":{"line":153,"column":6},"end":{"line":153,"column":17}},"loc":{"start":{"line":153,"column":17},"end":{"line":162,"column":2}}},"4":{"name":"isDayObject","decl":{"start":{"line":154,"column":2},"end":{"line":154,"column":13}},"loc":{"start":{"line":154,"column":13},"end":{"line":154,"column":null}}},"5":{"name":"getDayOfMonth","decl":{"start":{"line":155,"column":2},"end":{"line":155,"column":15}},"loc":{"start":{"line":155,"column":15},"end":{"line":155,"column":null}}},"6":{"name":"getMonth","decl":{"start":{"line":156,"column":2},"end":{"line":156,"column":10}},"loc":{"start":{"line":156,"column":10},"end":{"line":156,"column":null}}},"7":{"name":"getYear","decl":{"start":{"line":157,"column":2},"end":{"line":157,"column":9}},"loc":{"start":{"line":157,"column":9},"end":{"line":157,"column":null}}},"8":{"name":"getDate","decl":{"start":{"line":158,"column":2},"end":{"line":158,"column":9}},"loc":{"start":{"line":158,"column":9},"end":{"line":158,"column":null}}},"9":{"name":"valueOf","decl":{"start":{"line":159,"column":2},"end":{"line":159,"column":9}},"loc":{"start":{"line":159,"column":9},"end":{"line":159,"column":null}}},"10":{"name":"toString","decl":{"start":{"line":160,"column":2},"end":{"line":160,"column":10}},"loc":{"start":{"line":160,"column":10},"end":{"line":161,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":39,"column":36},"end":{"line":39,"column":49}},"type":"cond-expr","locations":[{"start":{"line":39,"column":36},"end":{"line":39,"column":39}},{"start":{"line":39,"column":39},"end":{"line":39,"column":49}}]},"1":{"loc":{"start":{"line":39,"column":36},"end":{"line":39,"column":39}},"type":"binary-expr","locations":[{"start":{"line":39,"column":36},"end":{"line":39,"column":39}},{"start":{"line":39,"column":36},"end":{"line":39,"column":39}}]},"2":{"loc":{"start":{"line":39,"column":39},"end":{"line":39,"column":49}},"type":"binary-expr","locations":[{"start":{"line":39,"column":39},"end":{"line":39,"column":43}},{"start":{"line":39,"column":47},"end":{"line":39,"column":49}}]},"3":{"loc":{"start":{"line":50,"column":5},"end":{"line":50,"column":31}},"type":"cond-expr","locations":[{"start":{"line":50,"column":26},"end":{"line":50,"column":27}},{"start":{"line":50,"column":30},"end":{"line":50,"column":31}}]},"4":{"loc":{"start":{"line":51,"column":7},"end":{"line":51,"column":31}},"type":"cond-expr","locations":[{"start":{"line":51,"column":26},"end":{"line":51,"column":27}},{"start":{"line":51,"column":30},"end":{"line":51,"column":31}}]},"5":{"loc":{"start":{"line":52,"column":7},"end":{"line":52,"column":36}},"type":"cond-expr","locations":[{"start":{"line":52,"column":31},"end":{"line":52,"column":32}},{"start":{"line":52,"column":35},"end":{"line":52,"column":36}}]},"6":{"loc":{"start":{"line":54,"column":2},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":54,"column":2},"end":{"line":70,"column":null}},{"start":{"line":62,"column":7},"end":{"line":70,"column":null}}]},"7":{"loc":{"start":{"line":62,"column":7},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":62,"column":7},"end":{"line":70,"column":null}}]},"8":{"loc":{"start":{"line":78,"column":22},"end":{"line":78,"column":58}},"type":"binary-expr","locations":[{"start":{"line":78,"column":22},"end":{"line":78,"column":36}},{"start":{"line":78,"column":40},"end":{"line":78,"column":52}},{"start":{"line":78,"column":56},"end":{"line":78,"column":58}}]},"9":{"loc":{"start":{"line":78,"column":22},"end":{"line":78,"column":36}},"type":"cond-expr","locations":[{"start":{"line":78,"column":31},"end":{"line":78,"column":34}},{"start":{"line":78,"column":22},"end":{"line":78,"column":36}}]},"10":{"loc":{"start":{"line":78,"column":22},"end":{"line":78,"column":34}},"type":"binary-expr","locations":[{"start":{"line":78,"column":22},"end":{"line":78,"column":34}},{"start":{"line":78,"column":22},"end":{"line":78,"column":34}}]},"11":{"loc":{"start":{"line":78,"column":40},"end":{"line":78,"column":52}},"type":"cond-expr","locations":[{"start":{"line":78,"column":47},"end":{"line":78,"column":50}},{"start":{"line":78,"column":40},"end":{"line":78,"column":52}}]},"12":{"loc":{"start":{"line":78,"column":40},"end":{"line":78,"column":50}},"type":"binary-expr","locations":[{"start":{"line":78,"column":40},"end":{"line":78,"column":50}},{"start":{"line":78,"column":40},"end":{"line":78,"column":50}}]},"13":{"loc":{"start":{"line":80,"column":19},"end":{"line":80,"column":null}},"type":"binary-expr","locations":[{"start":{"line":80,"column":19},"end":{"line":80,"column":33}},{"start":{"line":80,"column":37},"end":{"line":80,"column":49}},{"start":{"line":80,"column":53},"end":{"line":80,"column":70}}]},"14":{"loc":{"start":{"line":80,"column":19},"end":{"line":80,"column":33}},"type":"cond-expr","locations":[{"start":{"line":80,"column":28},"end":{"line":80,"column":31}},{"start":{"line":80,"column":19},"end":{"line":80,"column":33}}]},"15":{"loc":{"start":{"line":80,"column":19},"end":{"line":80,"column":31}},"type":"binary-expr","locations":[{"start":{"line":80,"column":19},"end":{"line":80,"column":31}},{"start":{"line":80,"column":19},"end":{"line":80,"column":31}}]},"16":{"loc":{"start":{"line":80,"column":37},"end":{"line":80,"column":49}},"type":"cond-expr","locations":[{"start":{"line":80,"column":44},"end":{"line":80,"column":47}},{"start":{"line":80,"column":37},"end":{"line":80,"column":49}}]},"17":{"loc":{"start":{"line":80,"column":37},"end":{"line":80,"column":47}},"type":"binary-expr","locations":[{"start":{"line":80,"column":37},"end":{"line":80,"column":47}},{"start":{"line":80,"column":37},"end":{"line":80,"column":47}}]},"18":{"loc":{"start":{"line":80,"column":53},"end":{"line":80,"column":70}},"type":"cond-expr","locations":[{"start":{"line":80,"column":65},"end":{"line":80,"column":68}},{"start":{"line":80,"column":53},"end":{"line":80,"column":70}}]},"19":{"loc":{"start":{"line":80,"column":53},"end":{"line":80,"column":68}},"type":"binary-expr","locations":[{"start":{"line":80,"column":53},"end":{"line":80,"column":68}},{"start":{"line":80,"column":53},"end":{"line":80,"column":68}}]},"20":{"loc":{"start":{"line":83,"column":2},"end":{"line":88,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":2},"end":{"line":88,"column":null}},{"start":{"line":86,"column":7},"end":{"line":88,"column":null}}]},"21":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":52}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},{"start":{"line":87,"column":39},"end":{"line":87,"column":51}}]},"22":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},"type":"cond-expr","locations":[{"start":{"line":87,"column":30},"end":{"line":87,"column":33}},{"start":{"line":87,"column":21},"end":{"line":87,"column":35}}]},"23":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":33}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":33}},{"start":{"line":87,"column":21},"end":{"line":87,"column":33}}]},"24":{"loc":{"start":{"line":87,"column":39},"end":{"line":87,"column":51}},"type":"cond-expr","locations":[{"start":{"line":87,"column":46},"end":{"line":87,"column":49}},{"start":{"line":87,"column":39},"end":{"line":87,"column":51}}]},"25":{"loc":{"start":{"line":87,"column":39},"end":{"line":87,"column":49}},"type":"binary-expr","locations":[{"start":{"line":87,"column":39},"end":{"line":87,"column":49}},{"start":{"line":87,"column":39},"end":{"line":87,"column":49}}]},"26":{"loc":{"start":{"line":89,"column":23},"end":{"line":89,"column":75}},"type":"binary-expr","locations":[{"start":{"line":89,"column":23},"end":{"line":89,"column":37}},{"start":{"line":89,"column":41},"end":{"line":89,"column":53}},{"start":{"line":89,"column":57},"end":{"line":89,"column":74}}]},"27":{"loc":{"start":{"line":89,"column":23},"end":{"line":89,"column":37}},"type":"cond-expr","locations":[{"start":{"line":89,"column":32},"end":{"line":89,"column":35}},{"start":{"line":89,"column":23},"end":{"line":89,"column":37}}]},"28":{"loc":{"start":{"line":89,"column":23},"end":{"line":89,"column":35}},"type":"binary-expr","locations":[{"start":{"line":89,"column":23},"end":{"line":89,"column":35}},{"start":{"line":89,"column":23},"end":{"line":89,"column":35}}]},"29":{"loc":{"start":{"line":89,"column":41},"end":{"line":89,"column":53}},"type":"cond-expr","locations":[{"start":{"line":89,"column":48},"end":{"line":89,"column":51}},{"start":{"line":89,"column":41},"end":{"line":89,"column":53}}]},"30":{"loc":{"start":{"line":89,"column":41},"end":{"line":89,"column":51}},"type":"binary-expr","locations":[{"start":{"line":89,"column":41},"end":{"line":89,"column":51}},{"start":{"line":89,"column":41},"end":{"line":89,"column":51}}]},"31":{"loc":{"start":{"line":89,"column":57},"end":{"line":89,"column":74}},"type":"cond-expr","locations":[{"start":{"line":89,"column":69},"end":{"line":89,"column":72}},{"start":{"line":89,"column":57},"end":{"line":89,"column":74}}]},"32":{"loc":{"start":{"line":89,"column":57},"end":{"line":89,"column":72}},"type":"binary-expr","locations":[{"start":{"line":89,"column":57},"end":{"line":89,"column":72}},{"start":{"line":89,"column":57},"end":{"line":89,"column":72}}]},"33":{"loc":{"start":{"line":95,"column":2},"end":{"line":97,"column":null}},"type":"if","locations":[{"start":{"line":95,"column":2},"end":{"line":97,"column":null}}]},"34":{"loc":{"start":{"line":98,"column":2},"end":{"line":100,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":100,"column":null}}]},"35":{"loc":{"start":{"line":105,"column":2},"end":{"line":113,"column":null}},"type":"if","locations":[{"start":{"line":105,"column":2},"end":{"line":113,"column":null}}]},"36":{"loc":{"start":{"line":126,"column":2},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":126,"column":2},"end":{"line":148,"column":3}},{"start":{"line":129,"column":7},"end":{"line":148,"column":3}}]},"37":{"loc":{"start":{"line":129,"column":7},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":129,"column":7},"end":{"line":148,"column":3}},{"start":{"line":136,"column":7},"end":{"line":148,"column":3}}]},"38":{"loc":{"start":{"line":136,"column":7},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":136,"column":7},"end":{"line":148,"column":3}},{"start":{"line":141,"column":7},"end":{"line":148,"column":3}}]},"39":{"loc":{"start":{"line":141,"column":7},"end":{"line":148,"column":3}},"type":"if","locations":[{"start":{"line":141,"column":7},"end":{"line":148,"column":3}}]},"40":{"loc":{"start":{"line":141,"column":11},"end":{"line":141,"column":33}},"type":"binary-expr","locations":[{"start":{"line":141,"column":11},"end":{"line":141,"column":32}},{"start":{"line":141,"column":29},"end":{"line":141,"column":32}},{"start":{"line":141,"column":12},"end":{"line":141,"column":33}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":90,"9":90,"10":90,"11":90,"12":90,"13":90,"14":83,"15":83,"16":83,"17":83,"18":83,"19":2,"20":81,"21":6,"22":75,"23":75,"24":73,"25":73,"26":73,"27":51,"28":22,"29":73,"30":73,"31":73,"32":17,"33":69,"34":17,"35":65,"36":49,"37":2,"38":47,"39":47,"40":45,"41":2,"42":2,"43":3,"44":2,"45":34,"46":12,"47":22,"48":6,"49":6,"50":16,"51":6,"52":10,"53":4,"54":6,"55":2,"56":47,"57":47,"58":47,"59":47,"60":47,"61":6,"62":19,"63":19,"64":22,"65":1,"66":27,"67":32},"f":{"0":90,"1":3,"2":34,"3":47,"4":6,"5":19,"6":19,"7":22,"8":1,"9":27,"10":32},"b":{"0":[45,45],"1":[90,52],"2":[45,25],"3":[19,64],"4":[7,76],"5":[53,30],"6":[2,81],"7":[6],"8":[73,72,71],"9":[56,17],"10":[73,17],"11":[67,5],"12":[72,5],"13":[73,56,51],"14":[56,17],"15":[73,17],"16":[51,5],"17":[56,5],"18":[0,51],"19":[51,51],"20":[51,22],"21":[22,5],"22":[5,17],"23":[22,17],"24":[0,5],"25":[5,5],"26":[73,56,51],"27":[56,17],"28":[73,17],"29":[51,5],"30":[56,5],"31":[0,51],"32":[51,51],"33":[17],"34":[17],"35":[2],"36":[12,22],"37":[6,16],"38":[6,10],"39":[4],"40":[10,10,6]}} -,"/Users/zane/playground/string-input/src/ein.mjs": {"path":"/Users/zane/playground/string-input/src/ein.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":21,"column":9},"end":{"line":46,"column":1}},"6":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"7":{"start":{"line":22,"column":27},"end":{"line":22,"column":14}},"8":{"start":{"line":22,"column":27},"end":{"line":22,"column":22}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":null}},"10":{"start":{"line":26,"column":19},"end":{"line":26,"column":37}},"11":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"12":{"start":{"line":28,"column":4},"end":{"line":33,"column":null}},"13":{"start":{"line":35,"column":28},"end":{"line":38,"column":3}},"14":{"start":{"line":39,"column":2},"end":{"line":39,"column":null}},"15":{"start":{"line":41,"column":16},"end":{"line":41,"column":57}},"16":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"17":{"start":{"line":45,"column":2},"end":{"line":45,"column":null}},"18":{"start":{"line":48,"column":0},"end":{"line":48,"column":null}},"19":{"start":{"line":49,"column":0},"end":{"line":49,"column":null}},"20":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}},"fnMap":{"0":{"name":"EIN","decl":{"start":{"line":21,"column":6},"end":{"line":21,"column":9}},"loc":{"start":{"line":21,"column":51},"end":{"line":46,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":49,"column":15},"end":{"line":49,"column":21}},"loc":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"type":"cond-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":39},"end":{"line":21,"column":49}}]},"1":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},"type":"binary-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":36},"end":{"line":21,"column":39}}]},"2":{"loc":{"start":{"line":21,"column":39},"end":{"line":21,"column":49}},"type":"binary-expr","locations":[{"start":{"line":21,"column":39},"end":{"line":21,"column":43}},{"start":{"line":21,"column":47},"end":{"line":21,"column":49}}]},"3":{"loc":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":34,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":18,"7":18,"8":18,"9":18,"10":18,"11":18,"12":6,"13":12,"14":12,"15":8,"16":8,"17":4,"18":2,"19":2,"20":5},"f":{"0":18,"1":5},"b":{"0":[9,9],"1":[18,11],"2":[9,2],"3":[6]}} -,"/Users/zane/playground/string-input/src/email.mjs": {"path":"/Users/zane/playground/string-input/src/email.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":106,"column":11},"end":{"line":134,"column":1}},"4":{"start":{"line":106,"column":38},"end":{"line":106,"column":51}},"5":{"start":{"line":107,"column":27},"end":{"line":107,"column":14}},"6":{"start":{"line":107,"column":27},"end":{"line":107,"column":22}},"7":{"start":{"line":109,"column":2},"end":{"line":109,"column":null}},"8":{"start":{"line":111,"column":2},"end":{"line":113,"column":null}},"9":{"start":{"line":112,"column":4},"end":{"line":112,"column":null}},"10":{"start":{"line":115,"column":17},"end":{"line":115,"column":46}},"11":{"start":{"line":116,"column":30},"end":{"line":116,"column":16}},"12":{"start":{"line":116,"column":30},"end":{"line":116,"column":25}},"13":{"start":{"line":117,"column":2},"end":{"line":117,"column":null}},"14":{"start":{"line":118,"column":2},"end":{"line":118,"column":null}},"15":{"start":{"line":120,"column":2},"end":{"line":131,"column":null}},"16":{"start":{"line":121,"column":4},"end":{"line":124,"column":null}},"17":{"start":{"line":123,"column":6},"end":{"line":123,"column":null}},"18":{"start":{"line":125,"column":4},"end":{"line":130,"column":null}},"19":{"start":{"line":133,"column":2},"end":{"line":133,"column":null}},"20":{"start":{"line":136,"column":0},"end":{"line":136,"column":null}},"21":{"start":{"line":137,"column":0},"end":{"line":137,"column":null}},"22":{"start":{"line":137,"column":17},"end":{"line":137,"column":null}}},"fnMap":{"0":{"name":"Email","decl":{"start":{"line":106,"column":6},"end":{"line":106,"column":11}},"loc":{"start":{"line":106,"column":53},"end":{"line":134,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":137,"column":17},"end":{"line":137,"column":23}},"loc":{"start":{"line":137,"column":17},"end":{"line":137,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":106,"column":38},"end":{"line":106,"column":51}},"type":"cond-expr","locations":[{"start":{"line":106,"column":38},"end":{"line":106,"column":41}},{"start":{"line":106,"column":41},"end":{"line":106,"column":51}}]},"1":{"loc":{"start":{"line":106,"column":38},"end":{"line":106,"column":41}},"type":"binary-expr","locations":[{"start":{"line":106,"column":38},"end":{"line":106,"column":41}},{"start":{"line":106,"column":38},"end":{"line":106,"column":41}}]},"2":{"loc":{"start":{"line":106,"column":41},"end":{"line":106,"column":51}},"type":"binary-expr","locations":[{"start":{"line":106,"column":41},"end":{"line":106,"column":45}},{"start":{"line":106,"column":49},"end":{"line":106,"column":51}}]},"3":{"loc":{"start":{"line":111,"column":2},"end":{"line":113,"column":null}},"type":"if","locations":[{"start":{"line":111,"column":2},"end":{"line":113,"column":null}}]},"4":{"loc":{"start":{"line":120,"column":2},"end":{"line":131,"column":null}},"type":"if","locations":[{"start":{"line":120,"column":2},"end":{"line":131,"column":null}}]},"5":{"loc":{"start":{"line":121,"column":4},"end":{"line":124,"column":null}},"type":"if","locations":[{"start":{"line":121,"column":4},"end":{"line":124,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":46,"5":46,"6":46,"7":46,"8":46,"9":9,"10":46,"11":46,"12":46,"13":46,"14":46,"15":46,"16":36,"17":0,"18":36,"19":10,"20":2,"21":2,"22":1},"f":{"0":46,"1":1},"b":{"0":[25,21],"1":[46,28],"2":[21,3],"3":[9],"4":[36],"5":[0]}} -,"/Users/zane/playground/string-input/src/integer.mjs": {"path":"/Users/zane/playground/string-input/src/integer.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":9,"column":20},"end":{"line":9,"column":29}},"7":{"start":{"line":29,"column":13},"end":{"line":73,"column":1}},"8":{"start":{"line":29,"column":40},"end":{"line":29,"column":53}},"9":{"start":{"line":30,"column":69},"end":{"line":30,"column":14}},"10":{"start":{"line":30,"column":69},"end":{"line":30,"column":33}},"11":{"start":{"line":30,"column":69},"end":{"line":30,"column":46}},"12":{"start":{"line":30,"column":69},"end":{"line":30,"column":51}},"13":{"start":{"line":30,"column":69},"end":{"line":30,"column":56}},"14":{"start":{"line":30,"column":69},"end":{"line":30,"column":64}},"15":{"start":{"line":32,"column":2},"end":{"line":32,"column":null}},"16":{"start":{"line":34,"column":2},"end":{"line":53,"column":null}},"17":{"start":{"line":35,"column":16},"end":{"line":35,"column":50}},"18":{"start":{"line":36,"column":4},"end":{"line":38,"column":null}},"19":{"start":{"line":37,"column":6},"end":{"line":37,"column":null}},"20":{"start":{"line":39,"column":4},"end":{"line":44,"column":null}},"21":{"start":{"line":46,"column":7},"end":{"line":53,"column":null}},"22":{"start":{"line":47,"column":4},"end":{"line":52,"column":null}},"23":{"start":{"line":55,"column":28},"end":{"line":58,"column":3}},"24":{"start":{"line":59,"column":2},"end":{"line":59,"column":null}},"25":{"start":{"line":60,"column":16},"end":{"line":60,"column":31}},"26":{"start":{"line":61,"column":2},"end":{"line":61,"column":null}},"27":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"28":{"start":{"line":63,"column":4},"end":{"line":68,"column":null}},"29":{"start":{"line":70,"column":2},"end":{"line":70,"column":null}},"30":{"start":{"line":72,"column":2},"end":{"line":72,"column":null}},"31":{"start":{"line":75,"column":0},"end":{"line":75,"column":null}},"32":{"start":{"line":76,"column":0},"end":{"line":76,"column":null}},"33":{"start":{"line":76,"column":19},"end":{"line":76,"column":null}}},"fnMap":{"0":{"name":"Integer","decl":{"start":{"line":29,"column":6},"end":{"line":29,"column":13}},"loc":{"start":{"line":29,"column":55},"end":{"line":73,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":76,"column":19},"end":{"line":76,"column":25}},"loc":{"start":{"line":76,"column":19},"end":{"line":76,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":40},"end":{"line":29,"column":53}},"type":"cond-expr","locations":[{"start":{"line":29,"column":40},"end":{"line":29,"column":43}},{"start":{"line":29,"column":43},"end":{"line":29,"column":53}}]},"1":{"loc":{"start":{"line":29,"column":40},"end":{"line":29,"column":43}},"type":"binary-expr","locations":[{"start":{"line":29,"column":40},"end":{"line":29,"column":43}},{"start":{"line":29,"column":40},"end":{"line":29,"column":43}}]},"2":{"loc":{"start":{"line":29,"column":43},"end":{"line":29,"column":53}},"type":"binary-expr","locations":[{"start":{"line":29,"column":43},"end":{"line":29,"column":47}},{"start":{"line":29,"column":51},"end":{"line":29,"column":53}}]},"3":{"loc":{"start":{"line":34,"column":2},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":34,"column":2},"end":{"line":53,"column":null}},{"start":{"line":46,"column":7},"end":{"line":53,"column":null}}]},"4":{"loc":{"start":{"line":34,"column":6},"end":{"line":34,"column":67}},"type":"binary-expr","locations":[{"start":{"line":34,"column":6},"end":{"line":34,"column":32}},{"start":{"line":34,"column":36},"end":{"line":34,"column":67}}]},"5":{"loc":{"start":{"line":36,"column":4},"end":{"line":38,"column":null}},"type":"if","locations":[{"start":{"line":36,"column":4},"end":{"line":38,"column":null}}]},"6":{"loc":{"start":{"line":46,"column":7},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":46,"column":7},"end":{"line":53,"column":null}}]},"7":{"loc":{"start":{"line":46,"column":11},"end":{"line":46,"column":74}},"type":"binary-expr","locations":[{"start":{"line":46,"column":11},"end":{"line":46,"column":37}},{"start":{"line":46,"column":41},"end":{"line":46,"column":74}}]},"8":{"loc":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":69,"column":null}}]},"9":{"loc":{"start":{"line":62,"column":6},"end":{"line":62,"column":60}},"type":"binary-expr","locations":[{"start":{"line":62,"column":6},"end":{"line":62,"column":31}},{"start":{"line":62,"column":35},"end":{"line":62,"column":60}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":33,"9":33,"10":33,"11":33,"12":33,"13":33,"14":33,"15":33,"16":27,"17":6,"18":6,"19":2,"20":6,"21":21,"22":2,"23":19,"24":19,"25":17,"26":17,"27":13,"28":2,"29":11,"30":9,"31":2,"32":2,"33":3},"f":{"0":33,"1":3},"b":{"0":[19,14],"1":[33,21],"2":[14,2],"3":[6,21],"4":[27,23],"5":[2],"6":[2],"7":[21,4],"8":[2],"9":[13,3]}} -,"/Users/zane/playground/string-input/src/numeric.mjs": {"path":"/Users/zane/playground/string-input/src/numeric.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":8,"column":22},"end":{"line":8,"column":34}},"6":{"start":{"line":28,"column":13},"end":{"line":71,"column":1}},"7":{"start":{"line":28,"column":40},"end":{"line":28,"column":53}},"8":{"start":{"line":29,"column":69},"end":{"line":29,"column":14}},"9":{"start":{"line":29,"column":69},"end":{"line":29,"column":33}},"10":{"start":{"line":29,"column":69},"end":{"line":29,"column":46}},"11":{"start":{"line":29,"column":69},"end":{"line":29,"column":51}},"12":{"start":{"line":29,"column":69},"end":{"line":29,"column":56}},"13":{"start":{"line":29,"column":69},"end":{"line":29,"column":64}},"14":{"start":{"line":31,"column":2},"end":{"line":31,"column":null}},"15":{"start":{"line":33,"column":2},"end":{"line":48,"column":null}},"16":{"start":{"line":34,"column":4},"end":{"line":39,"column":null}},"17":{"start":{"line":41,"column":7},"end":{"line":48,"column":null}},"18":{"start":{"line":42,"column":4},"end":{"line":47,"column":null}},"19":{"start":{"line":50,"column":28},"end":{"line":53,"column":3}},"20":{"start":{"line":54,"column":2},"end":{"line":54,"column":null}},"21":{"start":{"line":56,"column":16},"end":{"line":56,"column":29}},"22":{"start":{"line":58,"column":2},"end":{"line":58,"column":null}},"23":{"start":{"line":59,"column":2},"end":{"line":66,"column":null}},"24":{"start":{"line":60,"column":4},"end":{"line":65,"column":null}},"25":{"start":{"line":68,"column":2},"end":{"line":68,"column":null}},"26":{"start":{"line":70,"column":2},"end":{"line":70,"column":null}},"27":{"start":{"line":73,"column":0},"end":{"line":73,"column":null}},"28":{"start":{"line":74,"column":0},"end":{"line":74,"column":null}},"29":{"start":{"line":74,"column":19},"end":{"line":74,"column":null}}},"fnMap":{"0":{"name":"Numeric","decl":{"start":{"line":28,"column":6},"end":{"line":28,"column":13}},"loc":{"start":{"line":28,"column":55},"end":{"line":71,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":74,"column":19},"end":{"line":74,"column":25}},"loc":{"start":{"line":74,"column":19},"end":{"line":74,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":28,"column":40},"end":{"line":28,"column":53}},"type":"cond-expr","locations":[{"start":{"line":28,"column":40},"end":{"line":28,"column":43}},{"start":{"line":28,"column":43},"end":{"line":28,"column":53}}]},"1":{"loc":{"start":{"line":28,"column":40},"end":{"line":28,"column":43}},"type":"binary-expr","locations":[{"start":{"line":28,"column":40},"end":{"line":28,"column":43}},{"start":{"line":28,"column":40},"end":{"line":28,"column":43}}]},"2":{"loc":{"start":{"line":28,"column":43},"end":{"line":28,"column":53}},"type":"binary-expr","locations":[{"start":{"line":28,"column":43},"end":{"line":28,"column":47}},{"start":{"line":28,"column":51},"end":{"line":28,"column":53}}]},"3":{"loc":{"start":{"line":33,"column":2},"end":{"line":48,"column":null}},"type":"if","locations":[{"start":{"line":33,"column":2},"end":{"line":48,"column":null}},{"start":{"line":41,"column":7},"end":{"line":48,"column":null}}]},"4":{"loc":{"start":{"line":33,"column":6},"end":{"line":33,"column":70}},"type":"binary-expr","locations":[{"start":{"line":33,"column":6},"end":{"line":33,"column":32}},{"start":{"line":33,"column":36},"end":{"line":33,"column":70}}]},"5":{"loc":{"start":{"line":41,"column":7},"end":{"line":48,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":7},"end":{"line":48,"column":null}}]},"6":{"loc":{"start":{"line":59,"column":2},"end":{"line":66,"column":null}},"type":"if","locations":[{"start":{"line":59,"column":2},"end":{"line":66,"column":null}}]},"7":{"loc":{"start":{"line":59,"column":6},"end":{"line":59,"column":60}},"type":"binary-expr","locations":[{"start":{"line":59,"column":6},"end":{"line":59,"column":31}},{"start":{"line":59,"column":35},"end":{"line":59,"column":60}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":27,"8":27,"9":27,"10":27,"11":27,"12":27,"13":27,"14":27,"15":27,"16":2,"17":25,"18":4,"19":21,"20":21,"21":21,"22":21,"23":17,"24":2,"25":15,"26":15,"27":2,"28":2,"29":1},"f":{"0":27,"1":1},"b":{"0":[14,13],"1":[27,21],"2":[13,7],"3":[2,25],"4":[27,26],"5":[4],"6":[2],"7":[17,3]}} -,"/Users/zane/playground/string-input/src/ssn.mjs": {"path":"/Users/zane/playground/string-input/src/ssn.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":21,"column":9},"end":{"line":46,"column":1}},"6":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"7":{"start":{"line":22,"column":27},"end":{"line":22,"column":14}},"8":{"start":{"line":22,"column":27},"end":{"line":22,"column":22}},"9":{"start":{"line":24,"column":2},"end":{"line":24,"column":null}},"10":{"start":{"line":26,"column":19},"end":{"line":26,"column":37}},"11":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"12":{"start":{"line":28,"column":4},"end":{"line":33,"column":null}},"13":{"start":{"line":35,"column":28},"end":{"line":38,"column":3}},"14":{"start":{"line":39,"column":2},"end":{"line":39,"column":null}},"15":{"start":{"line":41,"column":13},"end":{"line":41,"column":62}},"16":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"17":{"start":{"line":45,"column":2},"end":{"line":45,"column":null}},"18":{"start":{"line":48,"column":0},"end":{"line":48,"column":null}},"19":{"start":{"line":49,"column":0},"end":{"line":49,"column":null}},"20":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}},"fnMap":{"0":{"name":"SSN","decl":{"start":{"line":21,"column":6},"end":{"line":21,"column":9}},"loc":{"start":{"line":21,"column":51},"end":{"line":46,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":49,"column":15},"end":{"line":49,"column":21}},"loc":{"start":{"line":49,"column":15},"end":{"line":49,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":49}},"type":"cond-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":39},"end":{"line":21,"column":49}}]},"1":{"loc":{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},"type":"binary-expr","locations":[{"start":{"line":21,"column":36},"end":{"line":21,"column":39}},{"start":{"line":21,"column":36},"end":{"line":21,"column":39}}]},"2":{"loc":{"start":{"line":21,"column":39},"end":{"line":21,"column":49}},"type":"binary-expr","locations":[{"start":{"line":21,"column":39},"end":{"line":21,"column":43}},{"start":{"line":21,"column":47},"end":{"line":21,"column":49}}]},"3":{"loc":{"start":{"line":27,"column":2},"end":{"line":34,"column":null}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":34,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":18,"7":18,"8":18,"9":18,"10":18,"11":18,"12":10,"13":8,"14":8,"15":6,"16":6,"17":4,"18":2,"19":2,"20":3},"f":{"0":18,"1":3},"b":{"0":[9,9],"1":[18,11],"2":[9,2],"3":[10]}} -,"/Users/zane/playground/string-input/src/time-of-day.mjs": {"path":"/Users/zane/playground/string-input/src/time-of-day.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":null}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":null}},"6":{"start":{"line":40,"column":15},"end":{"line":97,"column":1}},"7":{"start":{"line":40,"column":42},"end":{"line":40,"column":55}},"8":{"start":{"line":41,"column":34},"end":{"line":41,"column":14}},"9":{"start":{"line":41,"column":34},"end":{"line":41,"column":21}},"10":{"start":{"line":41,"column":34},"end":{"line":41,"column":29}},"11":{"start":{"line":42,"column":21},"end":{"line":42,"column":11}},"12":{"start":{"line":42,"column":21},"end":{"line":42,"column":16}},"13":{"start":{"line":44,"column":2},"end":{"line":44,"column":null}},"14":{"start":{"line":46,"column":28},"end":{"line":46,"column":55}},"15":{"start":{"line":47,"column":20},"end":{"line":47,"column":39}},"16":{"start":{"line":48,"column":34},"end":{"line":48,"column":67}},"17":{"start":{"line":50,"column":2},"end":{"line":60,"column":null}},"18":{"start":{"line":55,"column":4},"end":{"line":59,"column":null}},"19":{"start":{"line":63,"column":4},"end":{"line":64,"column":49}},"20":{"start":{"line":65,"column":2},"end":{"line":70,"column":null}},"21":{"start":{"line":66,"column":4},"end":{"line":69,"column":null}},"22":{"start":{"line":72,"column":28},"end":{"line":75,"column":3}},"23":{"start":{"line":76,"column":2},"end":{"line":76,"column":null}},"24":{"start":{"line":78,"column":16},"end":{"line":83,"column":4}},"25":{"start":{"line":85,"column":2},"end":{"line":87,"column":null}},"26":{"start":{"line":86,"column":4},"end":{"line":86,"column":null}},"27":{"start":{"line":89,"column":2},"end":{"line":91,"column":null}},"28":{"start":{"line":90,"column":4},"end":{"line":90,"column":null}},"29":{"start":{"line":92,"column":2},"end":{"line":92,"column":null}},"30":{"start":{"line":94,"column":2},"end":{"line":94,"column":null}},"31":{"start":{"line":96,"column":2},"end":{"line":96,"column":null}},"32":{"start":{"line":99,"column":17},"end":{"line":151,"column":1}},"33":{"start":{"line":100,"column":7},"end":{"line":100,"column":6}},"34":{"start":{"line":101,"column":19},"end":{"line":101,"column":18}},"35":{"start":{"line":102,"column":11},"end":{"line":102,"column":10}},"36":{"start":{"line":103,"column":25},"end":{"line":103,"column":24}},"37":{"start":{"line":106,"column":2},"end":{"line":130,"column":null}},"38":{"start":{"line":107,"column":4},"end":{"line":107,"column":null}},"39":{"start":{"line":108,"column":4},"end":{"line":108,"column":null}},"40":{"start":{"line":109,"column":4},"end":{"line":109,"column":null}},"41":{"start":{"line":110,"column":4},"end":{"line":110,"column":null}},"42":{"start":{"line":113,"column":4},"end":{"line":122,"column":null}},"43":{"start":{"line":114,"column":6},"end":{"line":115,"column":null}},"44":{"start":{"line":116,"column":6},"end":{"line":118,"column":null}},"45":{"start":{"line":117,"column":8},"end":{"line":117,"column":null}},"46":{"start":{"line":121,"column":6},"end":{"line":121,"column":null}},"47":{"start":{"line":123,"column":4},"end":{"line":125,"column":null}},"48":{"start":{"line":126,"column":4},"end":{"line":126,"column":null}},"49":{"start":{"line":128,"column":6},"end":{"line":128,"column":59}},"50":{"start":{"line":129,"column":4},"end":{"line":129,"column":null}},"51":{"start":{"line":132,"column":2},"end":{"line":150,"column":null}},"52":{"start":{"line":133,"column":9},"end":{"line":133,"column":null}},"53":{"start":{"line":134,"column":12},"end":{"line":134,"column":null}},"54":{"start":{"line":135,"column":14},"end":{"line":135,"column":null}},"55":{"start":{"line":136,"column":14},"end":{"line":136,"column":null}},"56":{"start":{"line":137,"column":24},"end":{"line":137,"column":null}},"57":{"start":{"line":138,"column":11},"end":{"line":138,"column":null}},"58":{"start":{"line":140,"column":14},"end":{"line":140,"column":96}},"59":{"start":{"line":141,"column":6},"end":{"line":146,"column":null}},"60":{"start":{"line":142,"column":8},"end":{"line":142,"column":null}},"61":{"start":{"line":143,"column":8},"end":{"line":145,"column":null}},"62":{"start":{"line":144,"column":10},"end":{"line":144,"column":46}},"63":{"start":{"line":148,"column":6},"end":{"line":148,"column":null}},"64":{"start":{"line":153,"column":0},"end":{"line":153,"column":null}},"65":{"start":{"line":154,"column":0},"end":{"line":154,"column":null}},"66":{"start":{"line":154,"column":21},"end":{"line":154,"column":null}}},"fnMap":{"0":{"name":"TimeOfDay","decl":{"start":{"line":40,"column":6},"end":{"line":40,"column":15}},"loc":{"start":{"line":40,"column":57},"end":{"line":97,"column":1}}},"1":{"name":"getValue","decl":{"start":{"line":99,"column":6},"end":{"line":99,"column":14}},"loc":{"start":{"line":104,"column":6},"end":{"line":151,"column":1}}},"2":{"name":"isEod","decl":{"start":{"line":133,"column":4},"end":{"line":133,"column":9}},"loc":{"start":{"line":133,"column":9},"end":{"line":133,"column":null}}},"3":{"name":"getHours","decl":{"start":{"line":134,"column":4},"end":{"line":134,"column":12}},"loc":{"start":{"line":134,"column":12},"end":{"line":134,"column":null}}},"4":{"name":"getMinutes","decl":{"start":{"line":135,"column":4},"end":{"line":135,"column":14}},"loc":{"start":{"line":135,"column":14},"end":{"line":135,"column":null}}},"5":{"name":"getSeconds","decl":{"start":{"line":136,"column":4},"end":{"line":136,"column":14}},"loc":{"start":{"line":136,"column":14},"end":{"line":136,"column":null}}},"6":{"name":"getFractionalSeconds","decl":{"start":{"line":137,"column":4},"end":{"line":137,"column":24}},"loc":{"start":{"line":137,"column":24},"end":{"line":137,"column":null}}},"7":{"name":"valueOf","decl":{"start":{"line":138,"column":4},"end":{"line":138,"column":11}},"loc":{"start":{"line":138,"column":11},"end":{"line":138,"column":null}}},"8":{"name":"toString","decl":{"start":{"line":139,"column":4},"end":{"line":139,"column":12}},"loc":{"start":{"line":139,"column":33},"end":{"line":149,"column":null}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":154,"column":21},"end":{"line":154,"column":27}},"loc":{"start":{"line":154,"column":21},"end":{"line":154,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":42},"end":{"line":40,"column":55}},"type":"cond-expr","locations":[{"start":{"line":40,"column":42},"end":{"line":40,"column":45}},{"start":{"line":40,"column":45},"end":{"line":40,"column":55}}]},"1":{"loc":{"start":{"line":40,"column":42},"end":{"line":40,"column":45}},"type":"binary-expr","locations":[{"start":{"line":40,"column":42},"end":{"line":40,"column":45}},{"start":{"line":40,"column":42},"end":{"line":40,"column":45}}]},"2":{"loc":{"start":{"line":40,"column":45},"end":{"line":40,"column":55}},"type":"binary-expr","locations":[{"start":{"line":40,"column":45},"end":{"line":40,"column":49}},{"start":{"line":40,"column":53},"end":{"line":40,"column":55}}]},"3":{"loc":{"start":{"line":50,"column":2},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":50,"column":2},"end":{"line":60,"column":null}}]},"4":{"loc":{"start":{"line":51,"column":4},"end":{"line":53,"column":39}},"type":"binary-expr","locations":[{"start":{"line":51,"column":4},"end":{"line":51,"column":30}},{"start":{"line":52,"column":7},"end":{"line":52,"column":25}},{"start":{"line":53,"column":7},"end":{"line":53,"column":39}}]},"5":{"loc":{"start":{"line":63,"column":4},"end":{"line":64,"column":49}},"type":"binary-expr","locations":[{"start":{"line":63,"column":4},"end":{"line":63,"column":40}},{"start":{"line":64,"column":7},"end":{"line":64,"column":49}}]},"6":{"loc":{"start":{"line":63,"column":4},"end":{"line":63,"column":26}},"type":"cond-expr","locations":[{"start":{"line":63,"column":21},"end":{"line":63,"column":24}},{"start":{"line":63,"column":4},"end":{"line":63,"column":26}}]},"7":{"loc":{"start":{"line":63,"column":4},"end":{"line":63,"column":24}},"type":"binary-expr","locations":[{"start":{"line":63,"column":4},"end":{"line":63,"column":24}},{"start":{"line":63,"column":4},"end":{"line":63,"column":24}}]},"8":{"loc":{"start":{"line":64,"column":7},"end":{"line":64,"column":35}},"type":"cond-expr","locations":[{"start":{"line":64,"column":30},"end":{"line":64,"column":33}},{"start":{"line":64,"column":7},"end":{"line":64,"column":35}}]},"9":{"loc":{"start":{"line":64,"column":7},"end":{"line":64,"column":33}},"type":"binary-expr","locations":[{"start":{"line":64,"column":7},"end":{"line":64,"column":33}},{"start":{"line":64,"column":7},"end":{"line":64,"column":33}}]},"10":{"loc":{"start":{"line":65,"column":2},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":65,"column":2},"end":{"line":70,"column":null}}]},"11":{"loc":{"start":{"line":85,"column":2},"end":{"line":87,"column":null}},"type":"if","locations":[{"start":{"line":85,"column":2},"end":{"line":87,"column":null}}]},"12":{"loc":{"start":{"line":89,"column":2},"end":{"line":91,"column":null}},"type":"if","locations":[{"start":{"line":89,"column":2},"end":{"line":91,"column":null}}]},"13":{"loc":{"start":{"line":106,"column":2},"end":{"line":130,"column":null}},"type":"if","locations":[{"start":{"line":106,"column":2},"end":{"line":130,"column":null}},{"start":{"line":112,"column":7},"end":{"line":130,"column":null}}]},"14":{"loc":{"start":{"line":113,"column":4},"end":{"line":122,"column":null}},"type":"if","locations":[{"start":{"line":113,"column":4},"end":{"line":122,"column":null}},{"start":{"line":120,"column":9},"end":{"line":122,"column":null}}]},"15":{"loc":{"start":{"line":115,"column":34},"end":{"line":115,"column":78}},"type":"cond-expr","locations":[{"start":{"line":115,"column":72},"end":{"line":115,"column":74}},{"start":{"line":115,"column":77},"end":{"line":115,"column":78}}]},"16":{"loc":{"start":{"line":116,"column":6},"end":{"line":118,"column":null}},"type":"if","locations":[{"start":{"line":116,"column":6},"end":{"line":118,"column":null}}]},"17":{"loc":{"start":{"line":121,"column":23},"end":{"line":121,"column":78}},"type":"binary-expr","locations":[{"start":{"line":121,"column":23},"end":{"line":121,"column":45}},{"start":{"line":121,"column":49},"end":{"line":121,"column":77}}]},"18":{"loc":{"start":{"line":121,"column":23},"end":{"line":121,"column":45}},"type":"cond-expr","locations":[{"start":{"line":121,"column":40},"end":{"line":121,"column":43}},{"start":{"line":121,"column":23},"end":{"line":121,"column":45}}]},"19":{"loc":{"start":{"line":121,"column":23},"end":{"line":121,"column":43}},"type":"binary-expr","locations":[{"start":{"line":121,"column":23},"end":{"line":121,"column":43}},{"start":{"line":121,"column":23},"end":{"line":121,"column":43}}]},"20":{"loc":{"start":{"line":121,"column":49},"end":{"line":121,"column":77}},"type":"cond-expr","locations":[{"start":{"line":121,"column":72},"end":{"line":121,"column":75}},{"start":{"line":121,"column":49},"end":{"line":121,"column":77}}]},"21":{"loc":{"start":{"line":121,"column":49},"end":{"line":121,"column":75}},"type":"binary-expr","locations":[{"start":{"line":121,"column":49},"end":{"line":121,"column":75}},{"start":{"line":121,"column":49},"end":{"line":121,"column":75}}]},"22":{"loc":{"start":{"line":124,"column":6},"end":{"line":124,"column":null}},"type":"binary-expr","locations":[{"start":{"line":124,"column":6},"end":{"line":124,"column":20}},{"start":{"line":124,"column":24},"end":{"line":124,"column":46}},{"start":{"line":124,"column":50},"end":{"line":124,"column":78}}]},"23":{"loc":{"start":{"line":124,"column":6},"end":{"line":124,"column":20}},"type":"cond-expr","locations":[{"start":{"line":124,"column":15},"end":{"line":124,"column":18}},{"start":{"line":124,"column":6},"end":{"line":124,"column":20}}]},"24":{"loc":{"start":{"line":124,"column":6},"end":{"line":124,"column":18}},"type":"binary-expr","locations":[{"start":{"line":124,"column":6},"end":{"line":124,"column":18}},{"start":{"line":124,"column":6},"end":{"line":124,"column":18}}]},"25":{"loc":{"start":{"line":124,"column":24},"end":{"line":124,"column":46}},"type":"cond-expr","locations":[{"start":{"line":124,"column":41},"end":{"line":124,"column":44}},{"start":{"line":124,"column":24},"end":{"line":124,"column":46}}]},"26":{"loc":{"start":{"line":124,"column":24},"end":{"line":124,"column":44}},"type":"binary-expr","locations":[{"start":{"line":124,"column":24},"end":{"line":124,"column":44}},{"start":{"line":124,"column":24},"end":{"line":124,"column":44}}]},"27":{"loc":{"start":{"line":124,"column":50},"end":{"line":124,"column":78}},"type":"cond-expr","locations":[{"start":{"line":124,"column":73},"end":{"line":124,"column":76}},{"start":{"line":124,"column":50},"end":{"line":124,"column":78}}]},"28":{"loc":{"start":{"line":124,"column":50},"end":{"line":124,"column":76}},"type":"binary-expr","locations":[{"start":{"line":124,"column":50},"end":{"line":124,"column":76}},{"start":{"line":124,"column":50},"end":{"line":124,"column":76}}]},"29":{"loc":{"start":{"line":126,"column":23},"end":{"line":126,"column":76}},"type":"binary-expr","locations":[{"start":{"line":126,"column":23},"end":{"line":126,"column":37}},{"start":{"line":126,"column":41},"end":{"line":126,"column":69}},{"start":{"line":126,"column":73},"end":{"line":126,"column":76}}]},"30":{"loc":{"start":{"line":126,"column":23},"end":{"line":126,"column":37}},"type":"cond-expr","locations":[{"start":{"line":126,"column":32},"end":{"line":126,"column":35}},{"start":{"line":126,"column":23},"end":{"line":126,"column":37}}]},"31":{"loc":{"start":{"line":126,"column":23},"end":{"line":126,"column":35}},"type":"binary-expr","locations":[{"start":{"line":126,"column":23},"end":{"line":126,"column":35}},{"start":{"line":126,"column":23},"end":{"line":126,"column":35}}]},"32":{"loc":{"start":{"line":126,"column":41},"end":{"line":126,"column":69}},"type":"cond-expr","locations":[{"start":{"line":126,"column":64},"end":{"line":126,"column":67}},{"start":{"line":126,"column":41},"end":{"line":126,"column":69}}]},"33":{"loc":{"start":{"line":126,"column":41},"end":{"line":126,"column":67}},"type":"binary-expr","locations":[{"start":{"line":126,"column":41},"end":{"line":126,"column":67}},{"start":{"line":126,"column":41},"end":{"line":126,"column":67}}]},"34":{"loc":{"start":{"line":128,"column":6},"end":{"line":128,"column":59}},"type":"binary-expr","locations":[{"start":{"line":128,"column":6},"end":{"line":128,"column":20}},{"start":{"line":128,"column":24},"end":{"line":128,"column":52}},{"start":{"line":128,"column":56},"end":{"line":128,"column":59}}]},"35":{"loc":{"start":{"line":128,"column":6},"end":{"line":128,"column":20}},"type":"cond-expr","locations":[{"start":{"line":128,"column":15},"end":{"line":128,"column":18}},{"start":{"line":128,"column":6},"end":{"line":128,"column":20}}]},"36":{"loc":{"start":{"line":128,"column":6},"end":{"line":128,"column":18}},"type":"binary-expr","locations":[{"start":{"line":128,"column":6},"end":{"line":128,"column":18}},{"start":{"line":128,"column":6},"end":{"line":128,"column":18}}]},"37":{"loc":{"start":{"line":128,"column":24},"end":{"line":128,"column":52}},"type":"cond-expr","locations":[{"start":{"line":128,"column":47},"end":{"line":128,"column":50}},{"start":{"line":128,"column":24},"end":{"line":128,"column":52}}]},"38":{"loc":{"start":{"line":128,"column":24},"end":{"line":128,"column":50}},"type":"binary-expr","locations":[{"start":{"line":128,"column":24},"end":{"line":128,"column":50}},{"start":{"line":128,"column":24},"end":{"line":128,"column":50}}]},"39":{"loc":{"start":{"line":140,"column":60},"end":{"line":140,"column":75}},"type":"binary-expr","locations":[{"start":{"line":140,"column":60},"end":{"line":140,"column":67}},{"start":{"line":140,"column":71},"end":{"line":140,"column":75}}]},"40":{"loc":{"start":{"line":141,"column":6},"end":{"line":146,"column":null}},"type":"if","locations":[{"start":{"line":141,"column":6},"end":{"line":146,"column":null}}]},"41":{"loc":{"start":{"line":141,"column":10},"end":{"line":141,"column":40}},"type":"binary-expr","locations":[{"start":{"line":141,"column":10},"end":{"line":141,"column":21}},{"start":{"line":141,"column":25},"end":{"line":141,"column":40}}]},"42":{"loc":{"start":{"line":142,"column":24},"end":{"line":142,"column":39}},"type":"binary-expr","locations":[{"start":{"line":142,"column":24},"end":{"line":142,"column":31}},{"start":{"line":142,"column":35},"end":{"line":142,"column":39}}]},"43":{"loc":{"start":{"line":143,"column":8},"end":{"line":145,"column":null}},"type":"if","locations":[{"start":{"line":143,"column":8},"end":{"line":145,"column":null}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":2,"7":43,"8":43,"9":43,"10":43,"11":43,"12":43,"13":43,"14":39,"15":39,"16":39,"17":39,"18":3,"19":36,"20":36,"21":1,"22":35,"23":35,"24":34,"25":34,"26":5,"27":33,"28":5,"29":32,"30":28,"31":27,"32":2,"33":34,"34":34,"35":34,"36":34,"37":34,"38":3,"39":3,"40":3,"41":3,"42":31,"43":5,"44":5,"45":1,"46":26,"47":31,"48":31,"49":31,"50":31,"51":34,"52":19,"53":16,"54":16,"55":18,"56":16,"57":16,"58":8,"59":8,"60":4,"61":4,"62":4,"63":8,"64":2,"65":2,"66":1},"f":{"0":43,"1":34,"2":19,"3":16,"4":16,"5":18,"6":16,"7":16,"8":8,"9":1},"b":{"0":[30,13],"1":[43,40],"2":[13,13],"3":[3],"4":[39,35,30],"5":[36,34],"6":[32,4],"7":[36,4],"8":[7,27],"9":[34,27],"10":[1],"11":[5],"12":[5],"13":[3,31],"14":[5,26],"15":[4,1],"16":[1],"17":[26,25],"18":[25,1],"19":[26,1],"20":[0,25],"21":[25,25],"22":[31,26,25],"23":[26,5],"24":[31,5],"25":[25,1],"26":[26,1],"27":[0,25],"28":[25,25],"29":[31,29,23],"30":[26,5],"31":[31,5],"32":[4,25],"33":[29,25],"34":[31,30,25],"35":[26,5],"36":[31,5],"37":[5,25],"38":[30,25],"39":[8,4],"40":[4],"41":[8,4],"42":[4,0],"43":[4]}} -,"/Users/zane/playground/string-input/src/validated-string.mjs": {"path":"/Users/zane/playground/string-input/src/validated-string.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":null}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":null}},"4":{"start":{"line":29,"column":21},"end":{"line":128,"column":1}},"5":{"start":{"line":29,"column":48},"end":{"line":29,"column":61}},"6":{"start":{"line":40,"column":6},"end":{"line":31,"column":9}},"7":{"start":{"line":40,"column":6},"end":{"line":32,"column":10}},"8":{"start":{"line":40,"column":6},"end":{"line":33,"column":12}},"9":{"start":{"line":40,"column":6},"end":{"line":34,"column":13}},"10":{"start":{"line":40,"column":6},"end":{"line":35,"column":13}},"11":{"start":{"line":40,"column":6},"end":{"line":36,"column":8}},"12":{"start":{"line":40,"column":6},"end":{"line":37,"column":9}},"13":{"start":{"line":40,"column":6},"end":{"line":38,"column":14}},"14":{"start":{"line":40,"column":6},"end":{"line":39,"column":10}},"15":{"start":{"line":41,"column":20},"end":{"line":41,"column":15}},"16":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"17":{"start":{"line":45,"column":2},"end":{"line":52,"column":null}},"18":{"start":{"line":46,"column":4},"end":{"line":51,"column":null}},"19":{"start":{"line":53,"column":2},"end":{"line":60,"column":null}},"20":{"start":{"line":54,"column":4},"end":{"line":59,"column":null}},"21":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"22":{"start":{"line":63,"column":4},"end":{"line":68,"column":null}},"23":{"start":{"line":70,"column":2},"end":{"line":77,"column":null}},"24":{"start":{"line":71,"column":4},"end":{"line":76,"column":null}},"25":{"start":{"line":79,"column":2},"end":{"line":91,"column":null}},"26":{"start":{"line":80,"column":4},"end":{"line":82,"column":null}},"27":{"start":{"line":81,"column":6},"end":{"line":81,"column":null}},"28":{"start":{"line":83,"column":4},"end":{"line":90,"column":null}},"29":{"start":{"line":84,"column":6},"end":{"line":89,"column":null}},"30":{"start":{"line":93,"column":2},"end":{"line":100,"column":null}},"31":{"start":{"line":94,"column":4},"end":{"line":99,"column":null}},"32":{"start":{"line":101,"column":2},"end":{"line":108,"column":null}},"33":{"start":{"line":102,"column":4},"end":{"line":107,"column":null}},"34":{"start":{"line":110,"column":2},"end":{"line":118,"column":null}},"35":{"start":{"line":111,"column":18},"end":{"line":111,"column":104}},"36":{"start":{"line":112,"column":4},"end":{"line":117,"column":null}},"37":{"start":{"line":120,"column":28},"end":{"line":123,"column":3}},"38":{"start":{"line":124,"column":2},"end":{"line":124,"column":null}},"39":{"start":{"line":125,"column":2},"end":{"line":125,"column":null}},"40":{"start":{"line":127,"column":2},"end":{"line":127,"column":null}},"41":{"start":{"line":130,"column":0},"end":{"line":130,"column":null}},"42":{"start":{"line":131,"column":0},"end":{"line":131,"column":null}},"43":{"start":{"line":131,"column":27},"end":{"line":131,"column":null}}},"fnMap":{"0":{"name":"ValidatedString","decl":{"start":{"line":29,"column":6},"end":{"line":29,"column":21}},"loc":{"start":{"line":29,"column":63},"end":{"line":128,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":131,"column":27},"end":{"line":131,"column":33}},"loc":{"start":{"line":131,"column":27},"end":{"line":131,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":48},"end":{"line":29,"column":61}},"type":"cond-expr","locations":[{"start":{"line":29,"column":48},"end":{"line":29,"column":51}},{"start":{"line":29,"column":51},"end":{"line":29,"column":61}}]},"1":{"loc":{"start":{"line":29,"column":48},"end":{"line":29,"column":51}},"type":"binary-expr","locations":[{"start":{"line":29,"column":48},"end":{"line":29,"column":51}},{"start":{"line":29,"column":48},"end":{"line":29,"column":51}}]},"2":{"loc":{"start":{"line":29,"column":51},"end":{"line":29,"column":61}},"type":"binary-expr","locations":[{"start":{"line":29,"column":51},"end":{"line":29,"column":55}},{"start":{"line":29,"column":59},"end":{"line":29,"column":61}}]},"3":{"loc":{"start":{"line":45,"column":2},"end":{"line":52,"column":null}},"type":"if","locations":[{"start":{"line":45,"column":2},"end":{"line":52,"column":null}}]},"4":{"loc":{"start":{"line":45,"column":6},"end":{"line":45,"column":63}},"type":"binary-expr","locations":[{"start":{"line":45,"column":6},"end":{"line":45,"column":25}},{"start":{"line":45,"column":29},"end":{"line":45,"column":63}}]},"5":{"loc":{"start":{"line":53,"column":2},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":53,"column":2},"end":{"line":60,"column":null}}]},"6":{"loc":{"start":{"line":53,"column":6},"end":{"line":53,"column":66}},"type":"binary-expr","locations":[{"start":{"line":53,"column":6},"end":{"line":53,"column":26}},{"start":{"line":53,"column":30},"end":{"line":53,"column":66}}]},"7":{"loc":{"start":{"line":62,"column":2},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":62,"column":2},"end":{"line":69,"column":null}}]},"8":{"loc":{"start":{"line":62,"column":6},"end":{"line":62,"column":57}},"type":"binary-expr","locations":[{"start":{"line":62,"column":6},"end":{"line":62,"column":28}},{"start":{"line":62,"column":32},"end":{"line":62,"column":57}}]},"9":{"loc":{"start":{"line":70,"column":2},"end":{"line":77,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":2},"end":{"line":77,"column":null}}]},"10":{"loc":{"start":{"line":70,"column":6},"end":{"line":70,"column":63}},"type":"binary-expr","locations":[{"start":{"line":70,"column":6},"end":{"line":70,"column":30}},{"start":{"line":70,"column":34},"end":{"line":70,"column":63}}]},"11":{"loc":{"start":{"line":79,"column":2},"end":{"line":91,"column":null}},"type":"if","locations":[{"start":{"line":79,"column":2},"end":{"line":91,"column":null}}]},"12":{"loc":{"start":{"line":80,"column":4},"end":{"line":82,"column":null}},"type":"if","locations":[{"start":{"line":80,"column":4},"end":{"line":82,"column":null}}]},"13":{"loc":{"start":{"line":83,"column":4},"end":{"line":90,"column":null}},"type":"if","locations":[{"start":{"line":83,"column":4},"end":{"line":90,"column":null}}]},"14":{"loc":{"start":{"line":93,"column":2},"end":{"line":100,"column":null}},"type":"if","locations":[{"start":{"line":93,"column":2},"end":{"line":100,"column":null}}]},"15":{"loc":{"start":{"line":93,"column":6},"end":{"line":93,"column":57}},"type":"binary-expr","locations":[{"start":{"line":93,"column":6},"end":{"line":93,"column":29}},{"start":{"line":93,"column":33},"end":{"line":93,"column":57}}]},"16":{"loc":{"start":{"line":101,"column":2},"end":{"line":108,"column":null}},"type":"if","locations":[{"start":{"line":101,"column":2},"end":{"line":108,"column":null}}]},"17":{"loc":{"start":{"line":101,"column":6},"end":{"line":101,"column":57}},"type":"binary-expr","locations":[{"start":{"line":101,"column":6},"end":{"line":101,"column":29}},{"start":{"line":101,"column":33},"end":{"line":101,"column":57}}]},"18":{"loc":{"start":{"line":110,"column":2},"end":{"line":118,"column":null}},"type":"if","locations":[{"start":{"line":110,"column":2},"end":{"line":118,"column":null}}]},"19":{"loc":{"start":{"line":110,"column":6},"end":{"line":110,"column":51}},"type":"binary-expr","locations":[{"start":{"line":110,"column":6},"end":{"line":110,"column":25}},{"start":{"line":110,"column":29},"end":{"line":110,"column":51}}]},"20":{"loc":{"start":{"line":111,"column":32},"end":{"line":111,"column":103}},"type":"cond-expr","locations":[{"start":{"line":111,"column":50},"end":{"line":111,"column":82}},{"start":{"line":111,"column":65},"end":{"line":111,"column":103}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":36,"6":36,"7":36,"8":36,"9":36,"10":36,"11":36,"12":36,"13":36,"14":36,"15":36,"16":36,"17":36,"18":2,"19":34,"20":2,"21":32,"22":2,"23":30,"24":2,"25":28,"26":4,"27":3,"28":4,"29":2,"30":26,"31":2,"32":24,"33":2,"34":22,"35":4,"36":4,"37":18,"38":18,"39":16,"40":14,"41":2,"42":2,"43":3},"f":{"0":36,"1":3},"b":{"0":[24,12],"1":[36,25],"2":[12,1],"3":[2],"4":[36,3],"5":[2],"6":[34,3],"7":[2],"8":[32,3],"9":[2],"10":[30,3],"11":[4],"12":[3],"13":[2],"14":[2],"15":[26,4],"16":[2],"17":[24,4],"18":[4],"19":[22,5],"20":[2,2]}} -,"/Users/zane/playground/string-input/src/lib/check-max-min.mjs": {"path":"/Users/zane/playground/string-input/src/lib/check-max-min.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":17},"end":{"line":22,"column":1}},"2":{"start":{"line":3,"column":26},"end":{"line":3,"column":25}},"3":{"start":{"line":3,"column":31},"end":{"line":3,"column":30}},"4":{"start":{"line":3,"column":37},"end":{"line":3,"column":36}},"5":{"start":{"line":3,"column":45},"end":{"line":3,"column":44}},"6":{"start":{"line":3,"column":52},"end":{"line":3,"column":51}},"7":{"start":{"line":4,"column":2},"end":{"line":12,"column":null}},"8":{"start":{"line":5,"column":4},"end":{"line":11,"column":null}},"9":{"start":{"line":13,"column":2},"end":{"line":21,"column":null}},"10":{"start":{"line":14,"column":4},"end":{"line":20,"column":null}}},"fnMap":{"0":{"name":"checkMaxMin","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":17}},"loc":{"start":{"line":3,"column":59},"end":{"line":22,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":2},"end":{"line":12,"column":null}},"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":12,"column":null}}]},"1":{"loc":{"start":{"line":4,"column":6},"end":{"line":4,"column":38}},"type":"binary-expr","locations":[{"start":{"line":4,"column":6},"end":{"line":4,"column":23}},{"start":{"line":4,"column":27},"end":{"line":4,"column":38}}]},"2":{"loc":{"start":{"line":13,"column":2},"end":{"line":21,"column":null}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":21,"column":null}}]},"3":{"loc":{"start":{"line":13,"column":6},"end":{"line":13,"column":38}},"type":"binary-expr","locations":[{"start":{"line":13,"column":6},"end":{"line":13,"column":23}},{"start":{"line":13,"column":27},"end":{"line":13,"column":38}}]}},"s":{"0":6,"1":6,"2":193,"3":193,"4":193,"5":193,"6":193,"7":193,"8":20,"9":173,"10":22},"f":{"0":193},"b":{"0":[20],"1":[193,35],"2":[22],"3":[173,37]}} -,"/Users/zane/playground/string-input/src/lib/check-validate-input.mjs": {"path":"/Users/zane/playground/string-input/src/lib/check-validate-input.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":24},"end":{"line":9,"column":1}},"2":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"3":{"start":{"line":4,"column":2},"end":{"line":8,"column":null}}},"fnMap":{"0":{"name":"checkValidateInput","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":24}},"loc":{"start":{"line":3,"column":52},"end":{"line":9,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"type":"cond-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":45},"end":{"line":3,"column":47}}]},"1":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},"type":"binary-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":42},"end":{"line":3,"column":45}}]}},"s":{"0":11,"1":11,"2":295,"3":295},"f":{"0":295},"b":{"0":[295,0],"1":[295,295]}} -,"/Users/zane/playground/string-input/src/lib/check-validate-value.mjs": {"path":"/Users/zane/playground/string-input/src/lib/check-validate-value.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":24},"end":{"line":9,"column":1}},"2":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"3":{"start":{"line":4,"column":2},"end":{"line":8,"column":null}}},"fnMap":{"0":{"name":"checkValidateValue","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":24}},"loc":{"start":{"line":3,"column":52},"end":{"line":9,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":47}},"type":"cond-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":45},"end":{"line":3,"column":47}}]},"1":{"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},"type":"binary-expr","locations":[{"start":{"line":3,"column":42},"end":{"line":3,"column":45}},{"start":{"line":3,"column":42},"end":{"line":3,"column":45}}]}},"s":{"0":11,"1":11,"2":208,"3":208},"f":{"0":208},"b":{"0":[208,0],"1":[208,208]}} -,"/Users/zane/playground/string-input/src/lib/possible-boolean-values.mjs": {"path":"/Users/zane/playground/string-input/src/lib/possible-boolean-values.mjs","statementMap":{"0":{"start":{"line":1,"column":27},"end":{"line":26,"column":1}},"1":{"start":{"line":2,"column":17},"end":{"line":2,"column":16}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":10}},"3":{"start":{"line":4,"column":9},"end":{"line":4,"column":8}},"4":{"start":{"line":5,"column":28},"end":{"line":5,"column":27}},"5":{"start":{"line":7,"column":17},"end":{"line":7,"column":29}},"6":{"start":{"line":8,"column":2},"end":{"line":10,"column":null}},"7":{"start":{"line":9,"column":4},"end":{"line":9,"column":null}},"8":{"start":{"line":11,"column":2},"end":{"line":16,"column":null}},"9":{"start":{"line":12,"column":4},"end":{"line":12,"column":null}},"10":{"start":{"line":13,"column":4},"end":{"line":15,"column":null}},"11":{"start":{"line":14,"column":6},"end":{"line":14,"column":null}},"12":{"start":{"line":17,"column":2},"end":{"line":23,"column":null}},"13":{"start":{"line":18,"column":4},"end":{"line":18,"column":null}},"14":{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},"15":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"16":{"start":{"line":22,"column":4},"end":{"line":22,"column":null}},"17":{"start":{"line":25,"column":2},"end":{"line":25,"column":null}}},"fnMap":{"0":{"name":"possibleBooleanValues","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":27}},"loc":{"start":{"line":6,"column":6},"end":{"line":26,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":2},"end":{"line":10,"column":null}},"type":"if","locations":[{"start":{"line":8,"column":2},"end":{"line":10,"column":null}}]},"1":{"loc":{"start":{"line":11,"column":2},"end":{"line":16,"column":null}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":16,"column":null}}]},"2":{"loc":{"start":{"line":13,"column":4},"end":{"line":15,"column":null}},"type":"if","locations":[{"start":{"line":13,"column":4},"end":{"line":15,"column":null}}]},"3":{"loc":{"start":{"line":17,"column":2},"end":{"line":23,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":2},"end":{"line":23,"column":null}}]},"4":{"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":21,"column":null}}]}},"s":{"0":3,"1":22,"2":22,"3":22,"4":22,"5":22,"6":22,"7":16,"8":22,"9":16,"10":16,"11":10,"12":22,"13":18,"14":18,"15":1,"16":18,"17":22},"f":{"0":22},"b":{"0":[16],"1":[16],"2":[10],"3":[18],"4":[1]}} -,"/Users/zane/playground/string-input/src/lib/type-checks.mjs": {"path":"/Users/zane/playground/string-input/src/lib/type-checks.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":16},"end":{"line":19,"column":1}},"2":{"start":{"line":3,"column":27},"end":{"line":3,"column":26}},"3":{"start":{"line":3,"column":33},"end":{"line":3,"column":32}},"4":{"start":{"line":3,"column":41},"end":{"line":3,"column":40}},"5":{"start":{"line":4,"column":2},"end":{"line":10,"column":null}},"6":{"start":{"line":5,"column":4},"end":{"line":9,"column":null}},"7":{"start":{"line":11,"column":2},"end":{"line":18,"column":null}},"8":{"start":{"line":12,"column":4},"end":{"line":17,"column":null}}},"fnMap":{"0":{"name":"typeChecks","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":16}},"loc":{"start":{"line":3,"column":48},"end":{"line":19,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":2},"end":{"line":10,"column":null}},"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":10,"column":null}}]},"1":{"loc":{"start":{"line":4,"column":6},"end":{"line":4,"column":43}},"type":"binary-expr","locations":[{"start":{"line":4,"column":6},"end":{"line":4,"column":25}},{"start":{"line":4,"column":29},"end":{"line":4,"column":43}}]},"2":{"loc":{"start":{"line":11,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":18,"column":null}}]}},"s":{"0":12,"1":12,"2":478,"3":478,"4":478,"5":478,"6":20,"7":458,"8":7},"f":{"0":478},"b":{"0":[20],"1":[478,467],"2":[7]}} -,"/Users/zane/playground/string-input/src/lib/validate-helper.mjs": {"path":"/Users/zane/playground/string-input/src/lib/validate-helper.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":20},"end":{"line":26,"column":1}},"2":{"start":{"line":3,"column":40},"end":{"line":3,"column":39}},"3":{"start":{"line":3,"column":56},"end":{"line":3,"column":55}},"4":{"start":{"line":3,"column":72},"end":{"line":3,"column":71}},"5":{"start":{"line":4,"column":2},"end":{"line":4,"column":null}},"6":{"start":{"line":4,"column":36},"end":{"line":4,"column":null}},"7":{"start":{"line":6,"column":17},"end":{"line":6,"column":50}},"8":{"start":{"line":7,"column":40},"end":{"line":7,"column":57}},"9":{"start":{"line":7,"column":15},"end":{"line":7,"column":14}},"10":{"start":{"line":7,"column":21},"end":{"line":7,"column":20}},"11":{"start":{"line":7,"column":29},"end":{"line":7,"column":28}},"12":{"start":{"line":7,"column":35},"end":{"line":7,"column":34}},"13":{"start":{"line":8,"column":2},"end":{"line":25,"column":null}},"14":{"start":{"line":9,"column":4},"end":{"line":15,"column":null}},"15":{"start":{"line":17,"column":7},"end":{"line":25,"column":null}},"16":{"start":{"line":18,"column":4},"end":{"line":24,"column":null}}},"fnMap":{"0":{"name":"validateHelper","decl":{"start":{"line":3,"column":6},"end":{"line":3,"column":20}},"loc":{"start":{"line":3,"column":79},"end":{"line":26,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":2},"end":{"line":4,"column":null}},"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":4,"column":null}}]},"1":{"loc":{"start":{"line":8,"column":2},"end":{"line":25,"column":null}},"type":"if","locations":[{"start":{"line":8,"column":2},"end":{"line":25,"column":null}},{"start":{"line":17,"column":7},"end":{"line":25,"column":null}}]},"2":{"loc":{"start":{"line":17,"column":7},"end":{"line":25,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":7},"end":{"line":25,"column":null}}]}},"s":{"0":11,"1":11,"2":503,"3":503,"4":503,"5":503,"6":447,"7":56,"8":56,"9":56,"10":56,"11":56,"12":56,"13":56,"14":8,"15":48,"16":30},"f":{"0":503},"b":{"0":[447],"1":[8,48],"2":[30]}} -,"/Users/zane/playground/string-input/src/lib/date-time/convert-month-name.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/convert-month-name.mjs","statementMap":{"0":{"start":{"line":1,"column":22},"end":{"line":28,"column":1}},"1":{"start":{"line":2,"column":2},"end":{"line":27,"column":null}},"2":{"start":{"line":4,"column":6},"end":{"line":4,"column":null}},"3":{"start":{"line":6,"column":6},"end":{"line":6,"column":null}},"4":{"start":{"line":8,"column":6},"end":{"line":8,"column":null}},"5":{"start":{"line":10,"column":6},"end":{"line":10,"column":null}},"6":{"start":{"line":12,"column":6},"end":{"line":12,"column":null}},"7":{"start":{"line":14,"column":6},"end":{"line":14,"column":null}},"8":{"start":{"line":16,"column":6},"end":{"line":16,"column":null}},"9":{"start":{"line":18,"column":6},"end":{"line":18,"column":null}},"10":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"11":{"start":{"line":22,"column":6},"end":{"line":22,"column":null}},"12":{"start":{"line":24,"column":6},"end":{"line":24,"column":null}},"13":{"start":{"line":26,"column":6},"end":{"line":26,"column":null}}},"fnMap":{"0":{"name":"convertMonthName","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":22}},"loc":{"start":{"line":1,"column":40},"end":{"line":28,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":2},"end":{"line":27,"column":null}},"type":"switch","locations":[{"start":{"line":3,"column":4},"end":{"line":4,"column":null}},{"start":{"line":5,"column":4},"end":{"line":6,"column":null}},{"start":{"line":7,"column":4},"end":{"line":8,"column":null}},{"start":{"line":9,"column":4},"end":{"line":10,"column":null}},{"start":{"line":11,"column":4},"end":{"line":12,"column":null}},{"start":{"line":13,"column":4},"end":{"line":14,"column":null}},{"start":{"line":15,"column":4},"end":{"line":16,"column":null}},{"start":{"line":17,"column":4},"end":{"line":18,"column":null}},{"start":{"line":19,"column":4},"end":{"line":20,"column":null}},{"start":{"line":21,"column":4},"end":{"line":22,"column":null}},{"start":{"line":23,"column":4},"end":{"line":24,"column":null}},{"start":{"line":25,"column":4},"end":{"line":26,"column":null}}]}},"s":{"0":6,"1":77,"2":66,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1},"f":{"0":77},"b":{"0":[66,1,1,1,1,1,1,1,1,1,1,1]}} -,"/Users/zane/playground/string-input/src/lib/date-time/convert-timezone-offset-to-string.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/convert-timezone-offset-to-string.mjs","statementMap":{"0":{"start":{"line":1,"column":35},"end":{"line":13,"column":1}},"1":{"start":{"line":2,"column":16},"end":{"line":2,"column":39}},"2":{"start":{"line":3,"column":17},"end":{"line":3,"column":28}},"3":{"start":{"line":8,"column":4},"end":{"line":10,"column":46}},"4":{"start":{"line":12,"column":2},"end":{"line":12,"column":null}}},"fnMap":{"0":{"name":"convertTimezoneOffsetToString","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":35}},"loc":{"start":{"line":1,"column":50},"end":{"line":13,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":5},"end":{"line":8,"column":28}},"type":"cond-expr","locations":[{"start":{"line":8,"column":19},"end":{"line":8,"column":22}},{"start":{"line":8,"column":25},"end":{"line":8,"column":28}}]}},"s":{"0":3,"1":72,"2":72,"3":72,"4":72},"f":{"0":72},"b":{"0":[30,42]}} -,"/Users/zane/playground/string-input/src/lib/date-time/get-timezone-offset.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/get-timezone-offset.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":5,"column":23},"end":{"line":62,"column":1}},"3":{"start":{"line":6,"column":8},"end":{"line":6,"column":7}},"4":{"start":{"line":6,"column":16},"end":{"line":6,"column":15}},"5":{"start":{"line":6,"column":16},"end":{"line":6,"column":null}},"6":{"start":{"line":7,"column":7},"end":{"line":7,"column":9}},"7":{"start":{"line":7,"column":14},"end":{"line":7,"column":16}},"8":{"start":{"line":7,"column":19},"end":{"line":7,"column":21}},"9":{"start":{"line":7,"column":26},"end":{"line":7,"column":28}},"10":{"start":{"line":7,"column":35},"end":{"line":7,"column":37}},"11":{"start":{"line":7,"column":44},"end":{"line":7,"column":46}},"12":{"start":{"line":7,"column":57},"end":{"line":7,"column":59}},"13":{"start":{"line":7,"column":67},"end":{"line":7,"column":null}},"14":{"start":{"line":9,"column":2},"end":{"line":61,"column":null}},"15":{"start":{"line":12,"column":4},"end":{"line":22,"column":null}},"16":{"start":{"line":24,"column":7},"end":{"line":61,"column":null}},"17":{"start":{"line":25,"column":4},"end":{"line":25,"column":null}},"18":{"start":{"line":28,"column":27},"end":{"line":28,"column":72}},"19":{"start":{"line":29,"column":4},"end":{"line":60,"column":null}},"20":{"start":{"line":30,"column":30},"end":{"line":30,"column":64}},"21":{"start":{"line":31,"column":26},"end":{"line":31,"column":58}},"22":{"start":{"line":32,"column":28},"end":{"line":32,"column":55}},"23":{"start":{"line":34,"column":6},"end":{"line":34,"column":null}},"24":{"start":{"line":38,"column":26},"end":{"line":46,"column":8}},"25":{"start":{"line":47,"column":21},"end":{"line":47,"column":59}},"26":{"start":{"line":48,"column":6},"end":{"line":56,"column":null}},"27":{"start":{"line":50,"column":8},"end":{"line":55,"column":null}},"28":{"start":{"line":57,"column":22},"end":{"line":57,"column":50}},"29":{"start":{"line":59,"column":6},"end":{"line":59,"column":null}}},"fnMap":{"0":{"name":"getTimezoneOffset","decl":{"start":{"line":5,"column":6},"end":{"line":5,"column":23}},"loc":{"start":{"line":8,"column":5},"end":{"line":62,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":2},"end":{"line":61,"column":null}},"type":"if","locations":[{"start":{"line":9,"column":2},"end":{"line":61,"column":null}},{"start":{"line":24,"column":7},"end":{"line":61,"column":null}}]},"1":{"loc":{"start":{"line":24,"column":7},"end":{"line":61,"column":null}},"type":"if","locations":[{"start":{"line":24,"column":7},"end":{"line":61,"column":null}},{"start":{"line":27,"column":7},"end":{"line":61,"column":null}}]},"2":{"loc":{"start":{"line":24,"column":11},"end":{"line":24,"column":47}},"type":"binary-expr","locations":[{"start":{"line":24,"column":11},"end":{"line":24,"column":27}},{"start":{"line":24,"column":31},"end":{"line":24,"column":47}}]},"3":{"loc":{"start":{"line":29,"column":4},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":29,"column":4},"end":{"line":60,"column":null}},{"start":{"line":36,"column":9},"end":{"line":60,"column":null}}]},"4":{"loc":{"start":{"line":30,"column":30},"end":{"line":30,"column":64}},"type":"cond-expr","locations":[{"start":{"line":30,"column":58},"end":{"line":30,"column":60}},{"start":{"line":30,"column":63},"end":{"line":30,"column":64}}]},"5":{"loc":{"start":{"line":48,"column":6},"end":{"line":56,"column":null}},"type":"if","locations":[{"start":{"line":48,"column":6},"end":{"line":56,"column":null}}]}},"s":{"0":6,"1":6,"2":6,"3":113,"4":113,"5":113,"6":113,"7":113,"8":113,"9":113,"10":113,"11":113,"12":113,"13":113,"14":113,"15":41,"16":72,"17":43,"18":29,"19":29,"20":25,"21":25,"22":25,"23":25,"24":4,"25":4,"26":4,"27":1,"28":3,"29":3},"f":{"0":113},"b":{"0":[41,72],"1":[43,29],"2":[72,72],"3":[25,4],"4":[9,16],"5":[1]}} -,"/Users/zane/playground/string-input/src/lib/date-time/make-date-time-string.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/make-date-time-string.mjs","statementMap":{"0":{"start":{"line":1,"column":24},"end":{"line":21,"column":1}},"1":{"start":{"line":10,"column":6},"end":{"line":10,"column":null}},"2":{"start":{"line":2,"column":6},"end":{"line":2,"column":null}},"3":{"start":{"line":3,"column":7},"end":{"line":3,"column":null}},"4":{"start":{"line":4,"column":5},"end":{"line":4,"column":null}},"5":{"start":{"line":5,"column":7},"end":{"line":5,"column":null}},"6":{"start":{"line":6,"column":9},"end":{"line":6,"column":null}},"7":{"start":{"line":7,"column":9},"end":{"line":7,"column":null}},"8":{"start":{"line":8,"column":13},"end":{"line":8,"column":null}},"9":{"start":{"line":9,"column":10},"end":{"line":9,"column":null}},"10":{"start":{"line":12,"column":4},"end":{"line":14,"column":58}},"11":{"start":{"line":16,"column":2},"end":{"line":18,"column":null}},"12":{"start":{"line":17,"column":4},"end":{"line":17,"column":null}},"13":{"start":{"line":20,"column":2},"end":{"line":20,"column":null}}},"fnMap":{"0":{"name":"makeDateTimeString","decl":{"start":{"line":1,"column":6},"end":{"line":1,"column":24}},"loc":{"start":{"line":10,"column":6},"end":{"line":21,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":7},"end":{"line":14,"column":57}},"type":"cond-expr","locations":[{"start":{"line":14,"column":25},"end":{"line":14,"column":52}},{"start":{"line":14,"column":55},"end":{"line":14,"column":57}}]},"1":{"loc":{"start":{"line":16,"column":2},"end":{"line":18,"column":null}},"type":"if","locations":[{"start":{"line":16,"column":2},"end":{"line":18,"column":null}}]}},"s":{"0":6,"1":151,"2":151,"3":151,"4":151,"5":151,"6":151,"7":151,"8":151,"9":151,"10":151,"11":151,"12":106,"13":151},"f":{"0":151},"b":{"0":[11,140],"1":[106]}} -,"/Users/zane/playground/string-input/src/lib/date-time/process-idiomatic-date-time.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/process-idiomatic-date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":10,"column":0},"end":{"line":10,"column":null}},"2":{"start":{"line":12,"column":0},"end":{"line":12,"column":null}},"3":{"start":{"line":13,"column":0},"end":{"line":13,"column":null}},"4":{"start":{"line":15,"column":30},"end":{"line":150,"column":1}},"5":{"start":{"line":16,"column":27},"end":{"line":16,"column":14}},"6":{"start":{"line":16,"column":27},"end":{"line":16,"column":22}},"7":{"start":{"line":19,"column":20},"end":{"line":21,"column":3}},"8":{"start":{"line":22,"column":23},"end":{"line":22,"column":45}},"9":{"start":{"line":23,"column":17},"end":{"line":23,"column":77}},"10":{"start":{"line":24,"column":20},"end":{"line":24,"column":39}},"11":{"start":{"line":25,"column":31},"end":{"line":27,"column":3}},"12":{"start":{"line":28,"column":34},"end":{"line":28,"column":67}},"13":{"start":{"line":31,"column":4},"end":{"line":33,"column":48}},"14":{"start":{"line":35,"column":2},"end":{"line":42,"column":null}},"15":{"start":{"line":36,"column":4},"end":{"line":41,"column":null}},"16":{"start":{"line":45,"column":23},"end":{"line":45,"column":53}},"17":{"start":{"line":46,"column":26},"end":{"line":46,"column":51}},"18":{"start":{"line":47,"column":19},"end":{"line":47,"column":61}},"19":{"start":{"line":48,"column":22},"end":{"line":48,"column":43}},"20":{"start":{"line":50,"column":21},"end":{"line":50,"column":69}},"21":{"start":{"line":51,"column":24},"end":{"line":51,"column":47}},"22":{"start":{"line":54,"column":4},"end":{"line":56,"column":38}},"23":{"start":{"line":58,"column":2},"end":{"line":74,"column":null}},"24":{"start":{"line":59,"column":4},"end":{"line":64,"column":null}},"25":{"start":{"line":66,"column":7},"end":{"line":74,"column":null}},"26":{"start":{"line":67,"column":4},"end":{"line":73,"column":null}},"27":{"start":{"line":76,"column":22},"end":{"line":76,"column":66}},"28":{"start":{"line":77,"column":15},"end":{"line":80,"column":3}},"29":{"start":{"line":82,"column":2},"end":{"line":88,"column":null}},"30":{"start":{"line":83,"column":22},"end":{"line":83,"column":40}},"31":{"start":{"line":84,"column":4},"end":{"line":84,"column":null}},"32":{"start":{"line":87,"column":4},"end":{"line":87,"column":null}},"33":{"start":{"line":89,"column":14},"end":{"line":91,"column":3}},"34":{"start":{"line":94,"column":4},"end":{"line":96,"column":12}},"35":{"start":{"line":98,"column":2},"end":{"line":121,"column":null}},"36":{"start":{"line":99,"column":4},"end":{"line":99,"column":null}},"37":{"start":{"line":100,"column":4},"end":{"line":100,"column":null}},"38":{"start":{"line":101,"column":4},"end":{"line":101,"column":null}},"39":{"start":{"line":102,"column":4},"end":{"line":102,"column":null}},"40":{"start":{"line":105,"column":4},"end":{"line":107,"column":null}},"41":{"start":{"line":108,"column":4},"end":{"line":113,"column":null}},"42":{"start":{"line":109,"column":6},"end":{"line":109,"column":null}},"43":{"start":{"line":110,"column":6},"end":{"line":112,"column":null}},"44":{"start":{"line":111,"column":8},"end":{"line":111,"column":null}},"45":{"start":{"line":114,"column":4},"end":{"line":116,"column":null}},"46":{"start":{"line":117,"column":4},"end":{"line":117,"column":null}},"47":{"start":{"line":118,"column":4},"end":{"line":120,"column":null}},"48":{"start":{"line":124,"column":4},"end":{"line":127,"column":20}},"49":{"start":{"line":128,"column":25},"end":{"line":137,"column":4}},"50":{"start":{"line":139,"column":2},"end":{"line":149,"column":null}}},"fnMap":{"0":{"name":"processIdiomaticDateTime","decl":{"start":{"line":15,"column":6},"end":{"line":15,"column":30}},"loc":{"start":{"line":15,"column":68},"end":{"line":150,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":5},"end":{"line":31,"column":34}},"type":"cond-expr","locations":[{"start":{"line":31,"column":29},"end":{"line":31,"column":30}},{"start":{"line":31,"column":33},"end":{"line":31,"column":34}}]},"1":{"loc":{"start":{"line":32,"column":7},"end":{"line":32,"column":33}},"type":"cond-expr","locations":[{"start":{"line":32,"column":28},"end":{"line":32,"column":29}},{"start":{"line":32,"column":32},"end":{"line":32,"column":33}}]},"2":{"loc":{"start":{"line":33,"column":7},"end":{"line":33,"column":47}},"type":"cond-expr","locations":[{"start":{"line":33,"column":42},"end":{"line":33,"column":43}},{"start":{"line":33,"column":46},"end":{"line":33,"column":47}}]},"3":{"loc":{"start":{"line":35,"column":2},"end":{"line":42,"column":null}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":42,"column":null}}]},"4":{"loc":{"start":{"line":54,"column":5},"end":{"line":54,"column":37}},"type":"cond-expr","locations":[{"start":{"line":54,"column":32},"end":{"line":54,"column":33}},{"start":{"line":54,"column":36},"end":{"line":54,"column":37}}]},"5":{"loc":{"start":{"line":55,"column":7},"end":{"line":55,"column":35}},"type":"cond-expr","locations":[{"start":{"line":55,"column":30},"end":{"line":55,"column":31}},{"start":{"line":55,"column":34},"end":{"line":55,"column":35}}]},"6":{"loc":{"start":{"line":56,"column":7},"end":{"line":56,"column":37}},"type":"cond-expr","locations":[{"start":{"line":56,"column":32},"end":{"line":56,"column":33}},{"start":{"line":56,"column":36},"end":{"line":56,"column":37}}]},"7":{"loc":{"start":{"line":58,"column":2},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":58,"column":2},"end":{"line":74,"column":null}},{"start":{"line":66,"column":7},"end":{"line":74,"column":null}}]},"8":{"loc":{"start":{"line":66,"column":7},"end":{"line":74,"column":null}},"type":"if","locations":[{"start":{"line":66,"column":7},"end":{"line":74,"column":null}}]},"9":{"loc":{"start":{"line":76,"column":22},"end":{"line":76,"column":66}},"type":"binary-expr","locations":[{"start":{"line":76,"column":22},"end":{"line":76,"column":38}},{"start":{"line":76,"column":42},"end":{"line":76,"column":60}},{"start":{"line":76,"column":64},"end":{"line":76,"column":66}}]},"10":{"loc":{"start":{"line":76,"column":22},"end":{"line":76,"column":38}},"type":"cond-expr","locations":[{"start":{"line":76,"column":33},"end":{"line":76,"column":36}},{"start":{"line":76,"column":22},"end":{"line":76,"column":38}}]},"11":{"loc":{"start":{"line":76,"column":22},"end":{"line":76,"column":36}},"type":"binary-expr","locations":[{"start":{"line":76,"column":22},"end":{"line":76,"column":36}},{"start":{"line":76,"column":22},"end":{"line":76,"column":36}}]},"12":{"loc":{"start":{"line":76,"column":42},"end":{"line":76,"column":60}},"type":"cond-expr","locations":[{"start":{"line":76,"column":55},"end":{"line":76,"column":58}},{"start":{"line":76,"column":42},"end":{"line":76,"column":60}}]},"13":{"loc":{"start":{"line":76,"column":42},"end":{"line":76,"column":58}},"type":"binary-expr","locations":[{"start":{"line":76,"column":42},"end":{"line":76,"column":58}},{"start":{"line":76,"column":42},"end":{"line":76,"column":58}}]},"14":{"loc":{"start":{"line":79,"column":9},"end":{"line":79,"column":null}},"type":"binary-expr","locations":[{"start":{"line":79,"column":9},"end":{"line":79,"column":29}},{"start":{"line":79,"column":33},"end":{"line":79,"column":49}},{"start":{"line":79,"column":53},"end":{"line":79,"column":71}}]},"15":{"loc":{"start":{"line":79,"column":9},"end":{"line":79,"column":29}},"type":"cond-expr","locations":[{"start":{"line":79,"column":24},"end":{"line":79,"column":27}},{"start":{"line":79,"column":9},"end":{"line":79,"column":29}}]},"16":{"loc":{"start":{"line":79,"column":9},"end":{"line":79,"column":27}},"type":"binary-expr","locations":[{"start":{"line":79,"column":9},"end":{"line":79,"column":27}},{"start":{"line":79,"column":9},"end":{"line":79,"column":27}}]},"17":{"loc":{"start":{"line":79,"column":33},"end":{"line":79,"column":49}},"type":"cond-expr","locations":[{"start":{"line":79,"column":44},"end":{"line":79,"column":47}},{"start":{"line":79,"column":33},"end":{"line":79,"column":49}}]},"18":{"loc":{"start":{"line":79,"column":33},"end":{"line":79,"column":47}},"type":"binary-expr","locations":[{"start":{"line":79,"column":33},"end":{"line":79,"column":47}},{"start":{"line":79,"column":33},"end":{"line":79,"column":47}}]},"19":{"loc":{"start":{"line":79,"column":53},"end":{"line":79,"column":71}},"type":"cond-expr","locations":[{"start":{"line":79,"column":66},"end":{"line":79,"column":69}},{"start":{"line":79,"column":53},"end":{"line":79,"column":71}}]},"20":{"loc":{"start":{"line":79,"column":53},"end":{"line":79,"column":69}},"type":"binary-expr","locations":[{"start":{"line":79,"column":53},"end":{"line":79,"column":69}},{"start":{"line":79,"column":53},"end":{"line":79,"column":69}}]},"21":{"loc":{"start":{"line":82,"column":2},"end":{"line":88,"column":null}},"type":"if","locations":[{"start":{"line":82,"column":2},"end":{"line":88,"column":null}},{"start":{"line":86,"column":7},"end":{"line":88,"column":null}}]},"22":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":60}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":37}},{"start":{"line":87,"column":41},"end":{"line":87,"column":59}}]},"23":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":37}},"type":"cond-expr","locations":[{"start":{"line":87,"column":32},"end":{"line":87,"column":35}},{"start":{"line":87,"column":21},"end":{"line":87,"column":37}}]},"24":{"loc":{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},"type":"binary-expr","locations":[{"start":{"line":87,"column":21},"end":{"line":87,"column":35}},{"start":{"line":87,"column":21},"end":{"line":87,"column":35}}]},"25":{"loc":{"start":{"line":87,"column":41},"end":{"line":87,"column":59}},"type":"cond-expr","locations":[{"start":{"line":87,"column":54},"end":{"line":87,"column":57}},{"start":{"line":87,"column":41},"end":{"line":87,"column":59}}]},"26":{"loc":{"start":{"line":87,"column":41},"end":{"line":87,"column":57}},"type":"binary-expr","locations":[{"start":{"line":87,"column":41},"end":{"line":87,"column":57}},{"start":{"line":87,"column":41},"end":{"line":87,"column":57}}]},"27":{"loc":{"start":{"line":90,"column":4},"end":{"line":90,"column":null}},"type":"binary-expr","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":24}},{"start":{"line":90,"column":28},"end":{"line":90,"column":44}},{"start":{"line":90,"column":48},"end":{"line":90,"column":66}}]},"28":{"loc":{"start":{"line":90,"column":4},"end":{"line":90,"column":24}},"type":"cond-expr","locations":[{"start":{"line":90,"column":19},"end":{"line":90,"column":22}},{"start":{"line":90,"column":4},"end":{"line":90,"column":24}}]},"29":{"loc":{"start":{"line":90,"column":4},"end":{"line":90,"column":22}},"type":"binary-expr","locations":[{"start":{"line":90,"column":4},"end":{"line":90,"column":22}},{"start":{"line":90,"column":4},"end":{"line":90,"column":22}}]},"30":{"loc":{"start":{"line":90,"column":28},"end":{"line":90,"column":44}},"type":"cond-expr","locations":[{"start":{"line":90,"column":39},"end":{"line":90,"column":42}},{"start":{"line":90,"column":28},"end":{"line":90,"column":44}}]},"31":{"loc":{"start":{"line":90,"column":28},"end":{"line":90,"column":42}},"type":"binary-expr","locations":[{"start":{"line":90,"column":28},"end":{"line":90,"column":42}},{"start":{"line":90,"column":28},"end":{"line":90,"column":42}}]},"32":{"loc":{"start":{"line":90,"column":48},"end":{"line":90,"column":66}},"type":"cond-expr","locations":[{"start":{"line":90,"column":61},"end":{"line":90,"column":64}},{"start":{"line":90,"column":48},"end":{"line":90,"column":66}}]},"33":{"loc":{"start":{"line":90,"column":48},"end":{"line":90,"column":64}},"type":"binary-expr","locations":[{"start":{"line":90,"column":48},"end":{"line":90,"column":64}},{"start":{"line":90,"column":48},"end":{"line":90,"column":64}}]},"34":{"loc":{"start":{"line":94,"column":4},"end":{"line":96,"column":12}},"type":"binary-expr","locations":[{"start":{"line":94,"column":4},"end":{"line":94,"column":35}},{"start":{"line":95,"column":7},"end":{"line":95,"column":49}},{"start":{"line":96,"column":7},"end":{"line":96,"column":12}}]},"35":{"loc":{"start":{"line":94,"column":4},"end":{"line":94,"column":21}},"type":"cond-expr","locations":[{"start":{"line":94,"column":16},"end":{"line":94,"column":19}},{"start":{"line":94,"column":4},"end":{"line":94,"column":21}}]},"36":{"loc":{"start":{"line":94,"column":4},"end":{"line":94,"column":19}},"type":"binary-expr","locations":[{"start":{"line":94,"column":4},"end":{"line":94,"column":19}},{"start":{"line":94,"column":4},"end":{"line":94,"column":19}}]},"37":{"loc":{"start":{"line":95,"column":7},"end":{"line":95,"column":35}},"type":"cond-expr","locations":[{"start":{"line":95,"column":30},"end":{"line":95,"column":33}},{"start":{"line":95,"column":7},"end":{"line":95,"column":35}}]},"38":{"loc":{"start":{"line":95,"column":7},"end":{"line":95,"column":33}},"type":"binary-expr","locations":[{"start":{"line":95,"column":7},"end":{"line":95,"column":33}},{"start":{"line":95,"column":7},"end":{"line":95,"column":33}}]},"39":{"loc":{"start":{"line":98,"column":2},"end":{"line":121,"column":null}},"type":"if","locations":[{"start":{"line":98,"column":2},"end":{"line":121,"column":null}},{"start":{"line":104,"column":7},"end":{"line":121,"column":null}}]},"40":{"loc":{"start":{"line":106,"column":6},"end":{"line":106,"column":null}},"type":"binary-expr","locations":[{"start":{"line":106,"column":6},"end":{"line":106,"column":23}},{"start":{"line":106,"column":27},"end":{"line":106,"column":41}},{"start":{"line":106,"column":45},"end":{"line":106,"column":73}}]},"41":{"loc":{"start":{"line":106,"column":6},"end":{"line":106,"column":23}},"type":"cond-expr","locations":[{"start":{"line":106,"column":18},"end":{"line":106,"column":21}},{"start":{"line":106,"column":6},"end":{"line":106,"column":23}}]},"42":{"loc":{"start":{"line":106,"column":6},"end":{"line":106,"column":21}},"type":"binary-expr","locations":[{"start":{"line":106,"column":6},"end":{"line":106,"column":21}},{"start":{"line":106,"column":6},"end":{"line":106,"column":21}}]},"43":{"loc":{"start":{"line":106,"column":27},"end":{"line":106,"column":41}},"type":"cond-expr","locations":[{"start":{"line":106,"column":36},"end":{"line":106,"column":39}},{"start":{"line":106,"column":27},"end":{"line":106,"column":41}}]},"44":{"loc":{"start":{"line":106,"column":27},"end":{"line":106,"column":39}},"type":"binary-expr","locations":[{"start":{"line":106,"column":27},"end":{"line":106,"column":39}},{"start":{"line":106,"column":27},"end":{"line":106,"column":39}}]},"45":{"loc":{"start":{"line":106,"column":45},"end":{"line":106,"column":73}},"type":"cond-expr","locations":[{"start":{"line":106,"column":68},"end":{"line":106,"column":71}},{"start":{"line":106,"column":45},"end":{"line":106,"column":73}}]},"46":{"loc":{"start":{"line":106,"column":45},"end":{"line":106,"column":71}},"type":"binary-expr","locations":[{"start":{"line":106,"column":45},"end":{"line":106,"column":71}},{"start":{"line":106,"column":45},"end":{"line":106,"column":71}}]},"47":{"loc":{"start":{"line":108,"column":4},"end":{"line":113,"column":null}},"type":"if","locations":[{"start":{"line":108,"column":4},"end":{"line":113,"column":null}}]},"48":{"loc":{"start":{"line":109,"column":15},"end":{"line":109,"column":59}},"type":"cond-expr","locations":[{"start":{"line":109,"column":53},"end":{"line":109,"column":54}},{"start":{"line":109,"column":57},"end":{"line":109,"column":59}}]},"49":{"loc":{"start":{"line":110,"column":6},"end":{"line":112,"column":null}},"type":"if","locations":[{"start":{"line":110,"column":6},"end":{"line":112,"column":null}}]},"50":{"loc":{"start":{"line":115,"column":6},"end":{"line":115,"column":null}},"type":"binary-expr","locations":[{"start":{"line":115,"column":6},"end":{"line":115,"column":23}},{"start":{"line":115,"column":27},"end":{"line":115,"column":41}},{"start":{"line":115,"column":45},"end":{"line":115,"column":73}}]},"51":{"loc":{"start":{"line":115,"column":6},"end":{"line":115,"column":23}},"type":"cond-expr","locations":[{"start":{"line":115,"column":18},"end":{"line":115,"column":21}},{"start":{"line":115,"column":6},"end":{"line":115,"column":23}}]},"52":{"loc":{"start":{"line":115,"column":6},"end":{"line":115,"column":21}},"type":"binary-expr","locations":[{"start":{"line":115,"column":6},"end":{"line":115,"column":21}},{"start":{"line":115,"column":6},"end":{"line":115,"column":21}}]},"53":{"loc":{"start":{"line":115,"column":27},"end":{"line":115,"column":41}},"type":"cond-expr","locations":[{"start":{"line":115,"column":36},"end":{"line":115,"column":39}},{"start":{"line":115,"column":27},"end":{"line":115,"column":41}}]},"54":{"loc":{"start":{"line":115,"column":27},"end":{"line":115,"column":39}},"type":"binary-expr","locations":[{"start":{"line":115,"column":27},"end":{"line":115,"column":39}},{"start":{"line":115,"column":27},"end":{"line":115,"column":39}}]},"55":{"loc":{"start":{"line":115,"column":45},"end":{"line":115,"column":73}},"type":"cond-expr","locations":[{"start":{"line":115,"column":68},"end":{"line":115,"column":71}},{"start":{"line":115,"column":45},"end":{"line":115,"column":73}}]},"56":{"loc":{"start":{"line":115,"column":45},"end":{"line":115,"column":71}},"type":"binary-expr","locations":[{"start":{"line":115,"column":45},"end":{"line":115,"column":71}},{"start":{"line":115,"column":45},"end":{"line":115,"column":71}}]},"57":{"loc":{"start":{"line":117,"column":23},"end":{"line":117,"column":76}},"type":"binary-expr","locations":[{"start":{"line":117,"column":23},"end":{"line":117,"column":37}},{"start":{"line":117,"column":41},"end":{"line":117,"column":69}},{"start":{"line":117,"column":73},"end":{"line":117,"column":76}}]},"58":{"loc":{"start":{"line":117,"column":23},"end":{"line":117,"column":37}},"type":"cond-expr","locations":[{"start":{"line":117,"column":32},"end":{"line":117,"column":35}},{"start":{"line":117,"column":23},"end":{"line":117,"column":37}}]},"59":{"loc":{"start":{"line":117,"column":23},"end":{"line":117,"column":35}},"type":"binary-expr","locations":[{"start":{"line":117,"column":23},"end":{"line":117,"column":35}},{"start":{"line":117,"column":23},"end":{"line":117,"column":35}}]},"60":{"loc":{"start":{"line":117,"column":41},"end":{"line":117,"column":69}},"type":"cond-expr","locations":[{"start":{"line":117,"column":64},"end":{"line":117,"column":67}},{"start":{"line":117,"column":41},"end":{"line":117,"column":69}}]},"61":{"loc":{"start":{"line":117,"column":41},"end":{"line":117,"column":67}},"type":"binary-expr","locations":[{"start":{"line":117,"column":41},"end":{"line":117,"column":67}},{"start":{"line":117,"column":41},"end":{"line":117,"column":67}}]},"62":{"loc":{"start":{"line":119,"column":14},"end":{"line":119,"column":67}},"type":"binary-expr","locations":[{"start":{"line":119,"column":14},"end":{"line":119,"column":28}},{"start":{"line":119,"column":32},"end":{"line":119,"column":60}},{"start":{"line":119,"column":64},"end":{"line":119,"column":67}}]},"63":{"loc":{"start":{"line":119,"column":14},"end":{"line":119,"column":28}},"type":"cond-expr","locations":[{"start":{"line":119,"column":23},"end":{"line":119,"column":26}},{"start":{"line":119,"column":14},"end":{"line":119,"column":28}}]},"64":{"loc":{"start":{"line":119,"column":14},"end":{"line":119,"column":26}},"type":"binary-expr","locations":[{"start":{"line":119,"column":14},"end":{"line":119,"column":26}},{"start":{"line":119,"column":14},"end":{"line":119,"column":26}}]},"65":{"loc":{"start":{"line":119,"column":32},"end":{"line":119,"column":60}},"type":"cond-expr","locations":[{"start":{"line":119,"column":55},"end":{"line":119,"column":58}},{"start":{"line":119,"column":32},"end":{"line":119,"column":60}}]},"66":{"loc":{"start":{"line":119,"column":32},"end":{"line":119,"column":58}},"type":"binary-expr","locations":[{"start":{"line":119,"column":32},"end":{"line":119,"column":58}},{"start":{"line":119,"column":32},"end":{"line":119,"column":58}}]},"67":{"loc":{"start":{"line":124,"column":4},"end":{"line":127,"column":20}},"type":"binary-expr","locations":[{"start":{"line":124,"column":4},"end":{"line":124,"column":21}},{"start":{"line":125,"column":7},"end":{"line":125,"column":21}},{"start":{"line":126,"column":7},"end":{"line":126,"column":35}},{"start":{"line":127,"column":7},"end":{"line":127,"column":20}}]},"68":{"loc":{"start":{"line":124,"column":4},"end":{"line":124,"column":21}},"type":"cond-expr","locations":[{"start":{"line":124,"column":16},"end":{"line":124,"column":19}},{"start":{"line":124,"column":4},"end":{"line":124,"column":21}}]},"69":{"loc":{"start":{"line":124,"column":4},"end":{"line":124,"column":19}},"type":"binary-expr","locations":[{"start":{"line":124,"column":4},"end":{"line":124,"column":19}},{"start":{"line":124,"column":4},"end":{"line":124,"column":19}}]},"70":{"loc":{"start":{"line":125,"column":7},"end":{"line":125,"column":21}},"type":"cond-expr","locations":[{"start":{"line":125,"column":16},"end":{"line":125,"column":19}},{"start":{"line":125,"column":7},"end":{"line":125,"column":21}}]},"71":{"loc":{"start":{"line":125,"column":7},"end":{"line":125,"column":19}},"type":"binary-expr","locations":[{"start":{"line":125,"column":7},"end":{"line":125,"column":19}},{"start":{"line":125,"column":7},"end":{"line":125,"column":19}}]},"72":{"loc":{"start":{"line":126,"column":7},"end":{"line":126,"column":35}},"type":"cond-expr","locations":[{"start":{"line":126,"column":30},"end":{"line":126,"column":33}},{"start":{"line":126,"column":7},"end":{"line":126,"column":35}}]},"73":{"loc":{"start":{"line":126,"column":7},"end":{"line":126,"column":33}},"type":"binary-expr","locations":[{"start":{"line":126,"column":7},"end":{"line":126,"column":33}},{"start":{"line":126,"column":7},"end":{"line":126,"column":33}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":3,"5":96,"6":96,"7":96,"8":96,"9":96,"10":96,"11":96,"12":96,"13":96,"14":96,"15":10,"16":86,"17":86,"18":86,"19":86,"20":86,"21":86,"22":86,"23":86,"24":3,"25":83,"26":1,"27":82,"28":82,"29":82,"30":8,"31":8,"32":74,"33":82,"34":82,"35":82,"36":4,"37":4,"38":4,"39":4,"40":78,"41":78,"42":2,"43":2,"44":1,"45":78,"46":78,"47":78,"48":82,"49":82,"50":82},"f":{"0":96},"b":{"0":[6,90],"1":[4,92],"2":[80,16],"3":[10],"4":[8,78],"5":[61,25],"6":[15,71],"7":[3,83],"8":[1],"9":[82,80,78],"10":[22,60],"11":[82,60],"12":[66,14],"13":[80,14],"14":[82,74,14],"15":[74,8],"16":[82,8],"17":[14,60],"18":[74,60],"19":[0,14],"20":[14,14],"21":[8,74],"22":[74,14],"23":[14,60],"24":[74,60],"25":[0,14],"26":[14,14],"27":[82,74,14],"28":[74,8],"29":[82,8],"30":[14,60],"31":[74,60],"32":[0,14],"33":[14,14],"34":[82,81,78],"35":[78,4],"36":[82,4],"37":[3,78],"38":[81,78],"39":[4,78],"40":[78,75,73],"41":[75,3],"42":[78,3],"43":[73,2],"44":[75,2],"45":[0,73],"46":[73,73],"47":[2],"48":[1,1],"49":[1],"50":[78,75,73],"51":[75,3],"52":[78,3],"53":[73,2],"54":[75,2],"55":[0,73],"56":[73,73],"57":[78,78,63],"58":[76,2],"59":[78,2],"60":[3,75],"61":[78,75],"62":[78,78,71],"63":[76,2],"64":[78,2],"65":[3,75],"66":[78,75],"67":[82,82,82,52],"68":[78,4],"69":[82,4],"70":[80,2],"71":[82,2],"72":[4,78],"73":[82,78]}} -,"/Users/zane/playground/string-input/src/lib/date-time/process-iso-8601-date-time.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/process-iso-8601-date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":null}},"2":{"start":{"line":5,"column":29},"end":{"line":5,"column":35}},"3":{"start":{"line":7,"column":28},"end":{"line":95,"column":1}},"4":{"start":{"line":8,"column":27},"end":{"line":8,"column":14}},"5":{"start":{"line":8,"column":27},"end":{"line":8,"column":22}},"6":{"start":{"line":10,"column":2},"end":{"line":23,"column":null}},"7":{"start":{"line":11,"column":4},"end":{"line":15,"column":null}},"8":{"start":{"line":17,"column":7},"end":{"line":23,"column":null}},"9":{"start":{"line":18,"column":4},"end":{"line":22,"column":null}},"10":{"start":{"line":25,"column":15},"end":{"line":25,"column":40}},"11":{"start":{"line":26,"column":16},"end":{"line":26,"column":46}},"12":{"start":{"line":27,"column":14},"end":{"line":27,"column":44}},"13":{"start":{"line":28,"column":16},"end":{"line":28,"column":45}},"14":{"start":{"line":29,"column":16},"end":{"line":29,"column":64}},"15":{"start":{"line":32,"column":2},"end":{"line":70,"column":null}},"16":{"start":{"line":37,"column":4},"end":{"line":37,"column":null}},"17":{"start":{"line":38,"column":4},"end":{"line":38,"column":null}},"18":{"start":{"line":39,"column":4},"end":{"line":39,"column":null}},"19":{"start":{"line":41,"column":7},"end":{"line":70,"column":null}},"20":{"start":{"line":43,"column":22},"end":{"line":43,"column":53}},"21":{"start":{"line":44,"column":24},"end":{"line":44,"column":38}},"22":{"start":{"line":45,"column":4},"end":{"line":45,"column":null}},"23":{"start":{"line":46,"column":24},"end":{"line":46,"column":39}},"24":{"start":{"line":47,"column":24},"end":{"line":47,"column":40}},"25":{"start":{"line":48,"column":4},"end":{"line":48,"column":null}},"26":{"start":{"line":50,"column":4},"end":{"line":50,"column":null}},"27":{"start":{"line":53,"column":4},"end":{"line":53,"column":null}},"28":{"start":{"line":54,"column":4},"end":{"line":69,"column":null}},"29":{"start":{"line":55,"column":6},"end":{"line":55,"column":null}},"30":{"start":{"line":56,"column":6},"end":{"line":56,"column":null}},"31":{"start":{"line":58,"column":9},"end":{"line":69,"column":null}},"32":{"start":{"line":59,"column":26},"end":{"line":59,"column":57}},"33":{"start":{"line":60,"column":26},"end":{"line":60,"column":42}},"34":{"start":{"line":61,"column":6},"end":{"line":61,"column":null}},"35":{"start":{"line":63,"column":6},"end":{"line":63,"column":null}},"36":{"start":{"line":66,"column":6},"end":{"line":66,"column":null}},"37":{"start":{"line":67,"column":6},"end":{"line":68,"column":null}},"38":{"start":{"line":72,"column":19},"end":{"line":72,"column":52}},"39":{"start":{"line":73,"column":25},"end":{"line":82,"column":4}},"40":{"start":{"line":84,"column":2},"end":{"line":94,"column":null}},"41":{"start":{"line":97,"column":25},"end":{"line":98,"column":null}},"42":{"start":{"line":97,"column":37},"end":{"line":98,"column":null}}},"fnMap":{"0":{"name":"processISO8601DateTime","decl":{"start":{"line":7,"column":6},"end":{"line":7,"column":28}},"loc":{"start":{"line":7,"column":73},"end":{"line":95,"column":1}}},"1":{"name":"roundFracSeconds","decl":{"start":{"line":97,"column":6},"end":{"line":97,"column":22}},"loc":{"start":{"line":97,"column":37},"end":{"line":98,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":2},"end":{"line":23,"column":null}},"type":"if","locations":[{"start":{"line":10,"column":2},"end":{"line":23,"column":null}},{"start":{"line":17,"column":7},"end":{"line":23,"column":null}}]},"1":{"loc":{"start":{"line":17,"column":7},"end":{"line":23,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":7},"end":{"line":23,"column":null}}]},"2":{"loc":{"start":{"line":26,"column":16},"end":{"line":26,"column":46}},"type":"binary-expr","locations":[{"start":{"line":26,"column":16},"end":{"line":26,"column":41}},{"start":{"line":26,"column":45},"end":{"line":26,"column":46}}]},"3":{"loc":{"start":{"line":27,"column":14},"end":{"line":27,"column":44}},"type":"binary-expr","locations":[{"start":{"line":27,"column":14},"end":{"line":27,"column":39}},{"start":{"line":27,"column":43},"end":{"line":27,"column":44}}]},"4":{"loc":{"start":{"line":29,"column":16},"end":{"line":29,"column":64}},"type":"cond-expr","locations":[{"start":{"line":29,"column":33},"end":{"line":29,"column":35}},{"start":{"line":29,"column":38},"end":{"line":29,"column":64}}]},"5":{"loc":{"start":{"line":32,"column":2},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":32,"column":2},"end":{"line":70,"column":null}},{"start":{"line":41,"column":7},"end":{"line":70,"column":null}}]},"6":{"loc":{"start":{"line":33,"column":4},"end":{"line":35,"column":37}},"type":"binary-expr","locations":[{"start":{"line":33,"column":4},"end":{"line":33,"column":34}},{"start":{"line":34,"column":7},"end":{"line":34,"column":37}},{"start":{"line":35,"column":7},"end":{"line":35,"column":37}}]},"7":{"loc":{"start":{"line":41,"column":7},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":7},"end":{"line":70,"column":null}},{"start":{"line":52,"column":7},"end":{"line":70,"column":null}}]},"8":{"loc":{"start":{"line":54,"column":4},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":54,"column":4},"end":{"line":69,"column":null}},{"start":{"line":58,"column":9},"end":{"line":69,"column":null}}]},"9":{"loc":{"start":{"line":54,"column":8},"end":{"line":54,"column":72}},"type":"binary-expr","locations":[{"start":{"line":54,"column":8},"end":{"line":54,"column":38}},{"start":{"line":54,"column":42},"end":{"line":54,"column":72}}]},"10":{"loc":{"start":{"line":58,"column":9},"end":{"line":69,"column":null}},"type":"if","locations":[{"start":{"line":58,"column":9},"end":{"line":69,"column":null}},{"start":{"line":65,"column":9},"end":{"line":69,"column":null}}]},"11":{"loc":{"start":{"line":68,"column":8},"end":{"line":68,"column":76}},"type":"cond-expr","locations":[{"start":{"line":68,"column":41},"end":{"line":68,"column":42}},{"start":{"line":68,"column":45},"end":{"line":68,"column":76}}]},"12":{"loc":{"start":{"line":72,"column":19},"end":{"line":72,"column":52}},"type":"binary-expr","locations":[{"start":{"line":72,"column":19},"end":{"line":72,"column":35}},{"start":{"line":72,"column":39},"end":{"line":72,"column":52}}]}},"s":{"0":3,"1":3,"2":3,"3":3,"4":19,"5":19,"6":19,"7":1,"8":18,"9":1,"10":17,"11":17,"12":17,"13":17,"14":17,"15":17,"16":4,"17":4,"18":4,"19":13,"20":3,"21":3,"22":3,"23":3,"24":3,"25":3,"26":3,"27":10,"28":10,"29":1,"30":1,"31":9,"32":2,"33":2,"34":2,"35":2,"36":7,"37":7,"38":17,"39":17,"40":17,"41":3,"42":5},"f":{"0":19,"1":5},"b":{"0":[1,18],"1":[1],"2":[17,1],"3":[17,2],"4":[1,16],"5":[4,13],"6":[17,14,4],"7":[3,10],"8":[1,9],"9":[10,8],"10":[2,7],"11":[1,6],"12":[17,2]}} -,"/Users/zane/playground/string-input/src/lib/date-time/process-rfc-2822-date-time.mjs": {"path":"/Users/zane/playground/string-input/src/lib/date-time/process-rfc-2822-date-time.mjs","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":null}},"1":{"start":{"line":2,"column":0},"end":{"line":2,"column":null}},"2":{"start":{"line":4,"column":28},"end":{"line":36,"column":1}},"3":{"start":{"line":5,"column":15},"end":{"line":5,"column":40}},"4":{"start":{"line":6,"column":20},"end":{"line":6,"column":35}},"5":{"start":{"line":7,"column":16},"end":{"line":7,"column":43}},"6":{"start":{"line":8,"column":14},"end":{"line":8,"column":39}},"7":{"start":{"line":9,"column":16},"end":{"line":9,"column":41}},"8":{"start":{"line":10,"column":18},"end":{"line":10,"column":43}},"9":{"start":{"line":11,"column":18},"end":{"line":11,"column":43}},"10":{"start":{"line":12,"column":19},"end":{"line":12,"column":51}},"11":{"start":{"line":14,"column":25},"end":{"line":23,"column":4}},"12":{"start":{"line":25,"column":2},"end":{"line":35,"column":null}}},"fnMap":{"0":{"name":"processRFC2822DateTime","decl":{"start":{"line":4,"column":6},"end":{"line":4,"column":28}},"loc":{"start":{"line":4,"column":73},"end":{"line":36,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":12,"column":19},"end":{"line":12,"column":51}},"type":"binary-expr","locations":[{"start":{"line":12,"column":19},"end":{"line":12,"column":34}},{"start":{"line":12,"column":38},"end":{"line":12,"column":51}}]}},"s":{"0":3,"1":3,"2":3,"3":6,"4":6,"5":6,"6":6,"7":6,"8":6,"9":6,"10":6,"11":6,"12":6},"f":{"0":6},"b":{"0":[6,2]}} -} diff --git a/qa/coverage/favicon.png b/qa/coverage/favicon.png deleted file mode 100644 index c1525b811a167671e9de1fa78aab9f5c0b61cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 99.86% - Statements - 720/721 -
- - -
- 97.49% - Branches - 583/598 -
- - -
- 100% - Functions - 69/69 -
- - -
- 99.83% - Lines - 623/624 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
src -
-
99.79%487/48897.78%353/361100%55/5599.76%420/421
src/lib -
-
100%63/6392.59%25/27100%6/6100%45/45
src/lib/date-time -
-
100%170/17097.61%205/210100%8/8100%158/158
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/prettify.css b/qa/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/qa/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/qa/coverage/prettify.js b/qa/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/qa/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/qa/coverage/sort-arrow-sprite.png b/qa/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/qa/coverage/sorter.js b/qa/coverage/sorter.js deleted file mode 100644 index 2bb296a..0000000 --- a/qa/coverage/sorter.js +++ /dev/null @@ -1,196 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - if ( - row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()) - ) { - row.style.display = ''; - } else { - row.style.display = 'none'; - } - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/qa/coverage/src/boolean-string.mjs.html b/qa/coverage/src/boolean-string.mjs.html deleted file mode 100644 index ed4f9a7..0000000 --- a/qa/coverage/src/boolean-string.mjs.html +++ /dev/null @@ -1,481 +0,0 @@ - - - - - - Code coverage report for src/boolean-string.mjs - - - - - - - - - -
-
-

All files / src boolean-string.mjs

-
- -
- 100% - Statements - 45/45 -
- - -
- 100% - Branches - 44/44 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 38/38 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -1332x -2x -  -2x -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -34x -  -  -34x -34x -34x -  -34x -34x -  -34x -  -34x -  -34x -  -  -  -5x -  -  -  -  -  -  -  -  -29x -  -  -  -5x -  -  -  -  -  -  -  -  -  -24x -6x -  -18x -5x -  -  -13x -13x -3x -  -  -  -  -  -  -  -10x -  -  -  -  -3x -  -  -  -  -  -  -  -7x -  -  -  -3x -  -4x -3x -  -  -1x -  -  -  -  -  -  -  -  -  -17x -  -  -  -17x -17x -  -17x -  -  -2x -2x -  -  - 
import { ArgumentInvalidError } from 'standard-error-set'
-import { floatRe } from 'regex-repo'
- 
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { possibleBooleanValues } from './lib/possible-boolean-values'
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Parses and validates an input string as a boolean. By default recognizes true/t/yes/y/any positive number as `true`
- * and false/f/no/n/0 as `false` (case insensitive).
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {boolean} options.noAbbreviations = Disallow t/f/y/n responses.
- * @param {boolean} options.noNumeric - Disallow numeric answers.
- * @param {boolean} options.noYesNo - Disallow yes/no/y/n responses.
- * @param {boolean} options.treatNegativeValuesAsFalse - When true, inputs that parse as a negative numeric value will
- *   be treated as `false` instead of raising an exception.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {boolean} A primitive boolean.
- */
-const BooleanString = function (input, options = this || {}) {
-  const {
-    name,
-    noAbbreviations = false,
-    noNumeric = false,
-    noYesNo = false,
-    status,
-    treatNegativeValuesAsFalse = false,
-  } = options
- 
-  typeChecks({ input, name, status })
- 
-  input = input.toLowerCase()
- 
-  if (
-    noAbbreviations === true
-    && (input === 't' || input === 'f' || input === 'y' || input === 'n')
-  ) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'is disallowed abbreviated value',
-      hint          : `Use ${possibleBooleanValues(options)}.`,
-      status,
-    })
-  }
- 
-  if (
-    noYesNo === true
-    && (input === 'yes' || input === 'y' || input === 'no' || input === 'n')
-  ) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'is disallowed yes/no value',
-      hint          : `Use ${possibleBooleanValues(options)}.`,
-      status,
-    })
-  }
- 
-  let value
-  if (['true', 't', 'yes', 'y'].includes(input)) {
-    value = true
-  }
-  else if (['false', 'f', 'no', 'n'].includes(input)) {
-    value = false
-  }
-  else {
-    const numericValue = Number.parseFloat(input)
-    if (noNumeric === true && Number.isNaN(numericValue) === false) {
-      throw new ArgumentInvalidError({
-        argumentName  : name,
-        argumentValue : input,
-        issue         : 'is disallowed numeric value',
-        hint          : `Use ${possibleBooleanValues(options)}.`,
-        status,
-      })
-    }
-    else if (
-      Number.isNaN(numericValue) === true
-      || floatRe.test(input) !== true
-    ) {
-      // parseFloat allows invalid input like '1.0' or '234abcd'
-      throw new ArgumentInvalidError({
-        argumentName  : name,
-        argumentValue : input,
-        issue         : 'could not be parsed as a boolean value',
-        hint          : `Use ${possibleBooleanValues(options)}.`,
-        status,
-      })
-    }
-    if (
-      numericValue === 0
-      || (treatNegativeValuesAsFalse === true && numericValue < 0)
-    ) {
-      value = false
-    }
-    else if (numericValue > 0) {
-      value = true
-    }
-    else {
-      throw new ArgumentInvalidError({
-        argumentName  : name,
-        argumentValue : input,
-        issue         : 'is ambiguous negative numeric value',
-        hint          : `Use ${possibleBooleanValues(options)}.`,
-        status,
-      })
-    }
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<boolean>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-BooleanString.description = 'Boolean string'
-BooleanString.toString = () => BooleanString.description
- 
-export { BooleanString }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/card-number.mjs.html b/qa/coverage/src/card-number.mjs.html deleted file mode 100644 index 41f4ce2..0000000 --- a/qa/coverage/src/card-number.mjs.html +++ /dev/null @@ -1,559 +0,0 @@ - - - - - - Code coverage report for src/card-number.mjs - - - - - - - - - -
-
-

All files / src card-number.mjs

-
- -
- 100% - Statements - 49/49 -
- - -
- 96% - Branches - 24/25 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 44/44 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -1592x -2x -  -2x -2x -2x -  -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -46x -  -  -  -46x -  -46x -  -46x -  -42x -2x -  -  -  -  -  -  -  -  -40x -40x -4x -  -  -  -  -  -  -  -  -36x -  -  -19x -5x -2x -  -  -  -  -  -  -  -  -  -3x -  -14x -14x -6x -  -8x -6x -6x -2x -  -  -  -  -  -  -  -4x -4x -4x -4x -  -4x -  -  -2x -  -  -  -  -  -  -  -  -8x -  -  -  -  -  -  -  -22x -  -  -  -22x -  -18x -2x -  -  -  -  -  -  -  -  -16x -  -12x -  -  -2x -5x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { ArgumentInvalidError } from 'standard-error-set'
-import luhn from 'luhn'
- 
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { typeChecks } from './lib/type-checks'
- 
-const seps = '[ -]'
-const formattedNumberRe = new RegExp(`^(?:\\d${seps}?)+\\d$`)
-const rawNumberRe = new RegExp(seps, 'g')
- 
-/**
- * Validates an input string as a syntactically valid card number.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {string[]} options.iins - A list of acceptable Industry Identifier Numbers, or initial card numbers. E.g.,
- *   iins : ['123']` would only accept cards with an account number starting with '123'. If left undefined, then all
- *   otherwise valid card numbers are treated as valid.
- * @param {number[]} options.length - An array of integers defining acceptable card lengths. The default value is any
- *   length between 12 and 19, inclusive.`
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {string} A number-string with no delimiters. Note, there are valid card numbers beginning with 0.
- */
-const CardNumber = function (input, options = this || {}) {
-  const {
-    name,
-    iins,
-    lengths = [12, 13, 14, 15, 16, 17, 18, 19],
-    status,
-  } = options
- 
-  typeChecks({ input, name, status })
- 
-  if (formattedNumberRe.test(input) === false) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'does not appear to be a card number',
-      hint          : "Expects a number with optional dashes ('-') or spaces (' ').",
-      status,
-    })
-  }
- 
-  const numberString = input.replaceAll(rawNumberRe, '')
-  if (lengths !== undefined && !lengths.includes(numberString.length)) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'is an invalid length',
-      hint          : `Card number must be ${lengths.join(', ')} digits long.`,
-      status,
-    })
-  }
- 
-  if (
-    iins !== undefined
-    && iins.some((iin) => {
-      if (iin.test !== undefined) {
-        if (!iin.toString().startsWith('/^')) {
-          throw new ArgumentInvalidError({
-            argumentName  : `${name}' constraint 'iins`,
-            argumentValue : iin,
-            issue :
-              'is invalid; regular expression must be pinned to the start of string',
-            hint   : "Start regular expression with '^'.",
-            status : 500,
-          })
-        }
- 
-        return iin.test(numberString)
-      } // else
-      const range = ('' + iin).split('-')
-      if (range.length === 1) {
-        return numberString.startsWith(range[0])
-      }
-      else if (range.length === 2) {
-        const matchLength = range[0].length
-        if (range[1].length !== matchLength) {
-          throw new ArgumentInvalidError({
-            argumentName  : `${name}' constraint 'iins`,
-            argumentValue : iin,
-            issue :
-              'contains an invalid range; both the min and max must specify the same number of digits',
-            status : 500,
-          })
-        }
-        const min = parseInt(range[0])
-        const max = parseInt(range[1])
-        const matchBit = numberString.slice(0, matchLength)
-        const matchNumber = parseInt(matchBit)
- 
-        return matchNumber >= min && matchNumber <= max
-      }
-      else {
-        throw new ArgumentInvalidError({
-          argumentName  : `${name}' constraint 'iins`,
-          argumentValue : iin,
-          issue         : 'contains an invalid range',
-          status        : 500,
-        })
-      }
-    }) !== true
-  ) {
-    throw new ArgumentInvalidError({
-      argumentName  : `${name}' constraint 'iins`,
-      argumentValue : iins,
-      issue         : 'contains a non-accepted Issuer Identifier Number (IIN)',
-      status        : 500,
-    })
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<card number>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
- 
-  if (luhn.validate(numberString) !== true) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'failed the check-digit validation',
-      hint          : 'Check input for typos.',
-      status,
-    })
-  }
- 
-  checkValidateValue(numberString, validationOptions)
- 
-  return numberString
-}
- 
-CardNumber.description = 'Card number'
-CardNumber.toString = () => CardNumber.description
- 
-export { CardNumber }
- 
-/*
-At one point, we tried to incorporate issuer identification number (IIN) / bank identification number (BIN)
-information into the logic. This provide unworkable as there are too many holes and exceptions in the data. Even
-with fairly standard groups there are issue. E.g., while almost all '34' cards are American Express, IIN 345678 is a
-RuPay IIN. So, if you want to limit the match to certain IINs, can provide the `iins` parameter.
- 
-For reference, if you want to mess with IIN/BIN validation:
-- Mastercard provides a [BIN lookup service](https://developer.mastercard.com/bin-lookup/documentation/)
-- [BinList.io](https://binlist.io/) and the corresponding
-  [GitHub project][https://github.com/iannuttall/binlist-data] seem to be defunct.
-- As of 2024-07-19, it's successor [BIN Lookup](https://binlookup.io/) seems to be operational and you can find
-  their data on [this github project](https://github.com/venelinkochev/bin-list-data). However, despite being
-  updated 8 4 months ago, they don't have *any* 8 digit BINs so their data is clearly incomplete.
-- Other commercial services: [BinDB](https://www.bindb.com/bin-database), [BIN Codes](https://www.bincodes.com/)
-*/
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/date-time.mjs.html b/qa/coverage/src/date-time.mjs.html deleted file mode 100644 index 6e40980..0000000 --- a/qa/coverage/src/date-time.mjs.html +++ /dev/null @@ -1,865 +0,0 @@ - - - - - - Code coverage report for src/date-time.mjs - - - - - - - - - -
-
-

All files / src date-time.mjs

-
- -
- 100% - Statements - 86/86 -
- - -
- 100% - Branches - 40/40 -
- - -
- 100% - Functions - 17/17 -
- - -
- 100% - Lines - 79/79 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -2612x -2x -  -2x -2x -2x -2x -2x -2x -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -87x -  -  -87x -87x -  -87x -  -  -  -81x -81x -1x -  -  -  -  -81x -81x -1x -  -  -  -  -81x -79x -  -  -70x -2x -  -  -  -  -  -  -  -68x -  -  -  -68x -  -  -  -  -66x -6x -  -  -  -  -60x -1x -1x -  -  -  -  -  -  -  -  -  -  -  -  -59x -3x -  -  -  -  -  -  -  -  -  -  -  -  -56x -2x -  -  -  -  -  -  -  -  -62x -8x -  -  -  -  -54x -1x -1x -  -  -  -  -  -  -  -  -  -  -  -  -53x -3x -  -  -  -  -  -  -  -  -  -  -  -  -50x -  -2x -  -  -  -  -  -  -  -58x -  -44x -  -42x -  -  -2x -3x -  -2x -70x -70x -70x -70x -70x -70x -70x -70x -70x -70x -70x -70x -  -  -  -  -  -  -  -  -  -70x -  -70x -6x -21x -18x -18x -20x -18x -18x -18x -18x -18x -6x -3x -  -  -  -48x -28x -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { ArgumentInvalidError, ArgumentTypeError } from 'standard-error-set'
-import { iso8601DateTimeRe, rfc2822DateRe } from 'regex-repo'
- 
-import { checkMaxMin } from './lib/check-max-min'
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { convertTimezoneOffsetToString } from './lib/date-time/convert-timezone-offset-to-string'
-import { makeDateTimeString } from './lib/date-time/make-date-time-string'
-import { processIdiomaticDateTime } from './lib/date-time/process-idiomatic-date-time'
-import { processISO8601DateTime } from './lib/date-time/process-iso-8601-date-time'
-import { processRFC2822DateTime } from './lib/date-time/process-rfc-2822-date-time'
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Date-time components.
- * @typedef {object} DateTimeData
- * @property {function(): boolean} isDateTimeObject() - Used for duck-typing. Always returns true.
- * @property {function(): number} getYear() - The year component of the date-time (integer).
- * @property {function(): number} getMonth() - The month of the year (1-indexed; integer).
- * @property {function(): number} getDayOfMonth() - The numerical day of the month (integer).
- * @property {function(): boolean} isEod() - Whether or not the time is the special 'end of day' time.
- * @property {function(): number} getHours() - The hours component of the date-time (integer).
- * @property {function(): number} getMinutes() - The minutes component of the date-time (integer).
- * @property {function(): number} getSeconds() - The seconds component of the date-time (integer).
- * @property {function(): number} getFractionalSeconds() - The fractional seconds component of the date-time.
- * @property {function(): number} getMilliseconds() - The fractional seconds component of the date-time expressed as
- *   milliseconds (integer).
- * @property {function(): number} getTimezoneOffset() - The timezone offset of the original input string in minutes.
- *   May be positive, or negative (integer).
- * @property {function(): Date} getDate() - A `Date` object corresponding to the original input string.
- * @property {function(): number} valueOf() - The milliseconds since the epoch (UTC) represented by the original
- *   input string (integer).
- */
- 
-/**
- * Parses and validates a wide range of date-time formats. Accepts RFC 8601 style date times (e.g.:
- * `2024-01-01T12:30:00Z`) as well RFC-2822 style dates (e.g., '1 Jan 2024'), year-first, and US style dates combined
- * with standard (AP/PM), twenty-four hour, and military time designations in either '[date] [time]' or '[time] [date]'
- * order.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {string} options.localTimezone - For otherwise valid date time input with no time zone component, then the
- *   `localTimeZone` must be specified as an option. This value is only used if the timezone is not specified in the
- *   input string and any timezone specified in the input string will override this value.
- * @param {string|number|Date} options.min - The earliest valid time, inclusive. This may be specified as any string
- *   parseable by this function, milliseconds since the epoch (UTC), or a Date object.
- * @param {string|number|Date} options.max - The latest valid time, inclusive. This may be specified as any string
- *   parseable by this function, milliseconds since the epoch (UTC), or a Date object.
- * @param {boolean} options.noEod - Disallows the special times '24:00:00', which represents the last moment of the day.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {DateTimeData} The date-time data.
- */
-const DateTime = function (input, options = this || {}) {
-  // we deconstruct options here instead of in the function call because we use the options later to create the
-  // 'validationOptions'
-  const { name, localTimezone, noEod, status = 400 } = options
-  let { min, max } = options
- 
-  typeChecks({ input, name, status })
- 
-  let value
- 
-  const iso8601Match = input.match(iso8601DateTimeRe)
-  if (iso8601Match !== null) {
-    value = createValue(
-      processISO8601DateTime(options, iso8601Match, localTimezone)
-    )
-  }
- 
-  const rfc2822Match = input.match(rfc2822DateRe)
-  if (rfc2822Match !== null) {
-    value = createValue(
-      processRFC2822DateTime(options, rfc2822Match, localTimezone)
-    )
-  }
- 
-  if (value === undefined) {
-    value = createValue(processIdiomaticDateTime(options, input, localTimezone))
-  }
- 
-  if (noEod === true && value.isEod() === true) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : "uses disallowed special EOD time '24:00'",
-      status,
-    })
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<date-time>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
- 
-  // We compare DateTime objects so we can preserve the timezone. The problem is that when things are converted to
-  // `Date`, the original TZ is lost and `Date.getTimezoneOffset()` always shows the local offset, not the offset of
-  // the original date input itself.
-  if (typeof max === 'string') {
-    max = DateTime(max, {
-      name   : `${name}' constraint 'max`,
-      status : 500,
-    })
-  }
-  else if (typeof max === 'number') {
-    const maxDate = new Date(max)
-    max = DateTime(
-      makeDateTimeString([
-        maxDate.getUTCFullYear(),
-        maxDate.getUTCMonth() + 1,
-        maxDate.getUTCDate(),
-        maxDate.getUTCHours(),
-        maxDate.getUTCMinutes(),
-        maxDate.getUTCSeconds(),
-        maxDate.getUTCMilliseconds() / 1000,
-        'Z',
-      ])
-    )
-  }
-  else if (max instanceof Date) {
-    max = DateTime(
-      makeDateTimeString([
-        max.getUTCFullYear(),
-        max.getUTCMonth() + 1,
-        max.getUTCDate(),
-        max.getUTCHours(),
-        max.getUTCMinutes(),
-        max.getUTCSeconds(),
-        max.getUTCMilliseconds() / 1000,
-        'Z',
-      ])
-    )
-  }
-  else if (max !== undefined && max.isDateTimeObject?.() !== true) {
-    throw new ArgumentTypeError({
-      argumentName  : `${name}' constraint 'max`,
-      argumentValue : max,
-      issue         : 'is nonconvertible type',
-      hint          : "Use 'string', 'number', Date', or 'DateTime'.",
-      status        : 500,
-    })
-  }
- 
-  if (typeof min === 'string') {
-    min = DateTime(min, {
-      name   : `${name}' constraint 'min`,
-      status : 500,
-    })
-  }
-  else if (typeof min === 'number') {
-    const minDate = new Date(min)
-    min = DateTime(
-      makeDateTimeString([
-        minDate.getUTCFullYear(),
-        minDate.getUTCMonth() + 1,
-        minDate.getUTCDate(),
-        minDate.getUTCHours(),
-        minDate.getUTCMinutes(),
-        minDate.getUTCSeconds(),
-        minDate.getUTCMilliseconds() / 1000,
-        'Z',
-      ])
-    )
-  }
-  else if (min instanceof Date) {
-    min = DateTime(
-      makeDateTimeString([
-        min.getUTCFullYear(),
-        min.getUTCMonth() + 1,
-        min.getUTCDate(),
-        min.getUTCHours(),
-        min.getUTCMinutes(),
-        min.getUTCSeconds(),
-        min.getUTCMilliseconds() / 1000,
-        'Z',
-      ])
-    )
-  }
-  else if (min !== undefined && min.isDateTimeObject?.() !== true) {
-    // this is an argument error, yes
-    throw new ArgumentTypeError({
-      argumentName  : `${name}' constraint 'min`,
-      argumentValue : min,
-      issue         : 'is nonconvertible type',
-      hint          : "Use 'string', 'number', Date', or 'DateTime'.",
-      status        : 500,
-    })
-  }
-  checkMaxMin({ input, max, min, name, status, value })
- 
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-DateTime.description = 'Date-time'
-DateTime.toString = () => DateTime.description
- 
-const createValue = ([
-  year,
-  month,
-  day,
-  isEod,
-  hours,
-  minutes,
-  seconds,
-  fracSeconds,
-  timezoneOffset,
-]) => {
-  const tz = convertTimezoneOffsetToString(timezoneOffset)
-  const dateString = makeDateTimeString([
-    year,
-    month,
-    day,
-    hours,
-    minutes,
-    seconds,
-    fracSeconds,
-    tz,
-  ])
-  const date = new Date(dateString)
- 
-  return {
-    isDateTimeObject     : () => true,
-    getYear              : () => year,
-    getMonth             : () => month,
-    getDayOfMonth        : () => day,
-    isEod                : () => isEod,
-    getHours             : () => hours,
-    getMinutes           : () => minutes,
-    getSeconds           : () => seconds,
-    getFractionalSeconds : () => fracSeconds,
-    getMilliseconds      : () => Math.round(fracSeconds * 1000),
-    getTimezoneOffset    : () => timezoneOffset,
-    getDate              : () => date,
-    // we return epoch seconds rather than date so that '<' and similar work; the problem is they don't call 'valueOf()'
-    // recursively, so if we returned a date, it would compare dates directly (which doesn't work) rather than
-    // 'date.valueOf()'
-    valueOf              : () => date.getTime(),
-    toString             : () =>
-      makeDateTimeString([
-        year,
-        month,
-        day,
-        hours,
-        minutes,
-        seconds,
-        fracSeconds,
-        tz,
-      ]),
-  }
-}
- 
-export { DateTime }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/day.mjs.html b/qa/coverage/src/day.mjs.html deleted file mode 100644 index b5b4b96..0000000 --- a/qa/coverage/src/day.mjs.html +++ /dev/null @@ -1,577 +0,0 @@ - - - - - - Code coverage report for src/day.mjs - - - - - - - - - -
-
-

All files / src day.mjs

-
- -
- 100% - Statements - 68/68 -
- - -
- 96.29% - Branches - 78/81 -
- - -
- 100% - Functions - 11/11 -
- - -
- 100% - Lines - 59/59 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -1652x -2x -  -2x -2x -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -90x -90x -90x -  -90x -  -83x -83x -83x -  -  -83x -  -  -  -83x -2x -  -  -  -  -  -  -81x -6x -  -  -  -  -  -  -  -  -75x -  -  -  -75x -  -73x -73x -  -  -  -73x -51x -  -  -22x -  -73x -  -  -  -73x -  -73x -17x -  -69x -17x -  -  -65x -  -  -49x -2x -  -  -  -  -  -  -  -  -47x -  -47x -  -45x -  -  -2x -3x -  -2x -34x -12x -  -22x -6x -  -6x -  -  -  -16x -6x -  -  -  -10x -4x -  -  -  -  -  -  -  -6x -  -  -47x -6x -19x -19x -22x -1x -27x -32x -  -  -  -  - 
import { ArgumentInvalidError, ArgumentTypeError } from 'standard-error-set'
-import { intlDateRe, rfc2822DayReString, usDateRe } from 'regex-repo'
- 
-import { checkMaxMin } from './lib/check-max-min'
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { convertMonthName } from './lib/date-time/convert-month-name'
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Represents the components of specific day.
- * @typedef DayData
- * @property {function(): boolean} isDateTimeObject() - Used for duck-typing. Always returns true.
- * @property {function(): number} getYear() - The year component of the date-time (integer).
- * @property {function(): number} getMonth() - The month of the year (1-indexed) (integer).
- * @property {function(): number} getDayOfMonth() - The numerical day of the month (integer).
- * @property {function(): Date} getDate() - A `Date` object corresponding to the original input string. The time
- *   components of the `Date` will all be set to 0 and the timezone is always UTC.
- * @property {function(): number} valueOf() - The seconds since the epoch (UTC) represented by the original input
- *   string (at the start of the UTC day).
- */
- 
-/**
- * Parses and validates input string as a specific day (date). Can handle year first and US format, with or without
- * delimiters, along with RFC 2822 style dates like '1 Jan 2024'.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {string|number|Date} options.max - The latest day to be considered valid.
- * @param {string|number|Date} options.min - The earliest day to be considered valid.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {DayData} The day/date data.
- */
-const Day = function (input, options = this || {}) {
-  const { name, status } = options
-  let { max, min } = options
- 
-  typeChecks({ input, name, status })
- 
-  const intlMatch = input.match(intlDateRe)
-  const usMatch = input.match(usDateRe)
-  const rfc2822Match = input.match(new RegExp(`^${rfc2822DayReString}$`))
- 
-  const matchCount =
-    (intlMatch !== null ? 1 : 0)
-    + (usMatch !== null ? 1 : 0)
-    + (rfc2822Match !== null ? 1 : 0)
- 
-  if (matchCount > 1) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'is ambiguous',
-      hint          : 'Try specifying four digit year (with leading zeros if necessary) to disambiguate US (MM/DD/YYYY) vs international (YYYY/MM/DD) formats.',
-    })
-  }
-  else if (matchCount === 0) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue :
-        'is not recognized as either US, international, or a RFC 2822 style date',
-      hint : "Try something like '1/15/2024', '2024-1-15', or '15 Jan 2024'.",
-    })
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<day>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
- 
-  const ceIndicator = intlMatch?.[1] || usMatch?.[3] || ''
-  const year = parseInt(
-    ceIndicator + (intlMatch?.[2] || usMatch?.[4] || rfc2822Match?.[4])
-  )
-  let month
-  if (rfc2822Match !== null) {
-    month = convertMonthName(rfc2822Match[3])
-  }
-  else {
-    month = parseInt(intlMatch?.[3] || usMatch?.[1])
-  }
-  const day = parseInt(intlMatch?.[4] || usMatch?.[2] || rfc2822Match?.[2])
- 
-  // we set the date explicitly like this because Date parses things inconsistently. E.g. (as of Node 21.5.0),
-  // '-2024-01-02' parses as '2024-01-02T06:00:00.000Z', while '01/02/-2024' is just invalid.
-  const date = new Date(year, month - 1, day)
- 
-  if (max !== undefined) {
-    max = convertToDay(max, name, 'max', status)
-  }
-  if (min !== undefined) {
-    min = convertToDay(min, name, 'min', status)
-  }
- 
-  checkMaxMin({ input, max, min, name, status, value : date })
- 
-  // The month can't overflow because we only accept valid months, so we just need to check the day of the month
-  if (day !== date.getDate()) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue :
-        'looks syntactically valid, but specifies an invalid day for the given month/year.',
-      status,
-    })
-  }
- 
-  const value = createValue({ day, month, year, date })
- 
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-Day.description = 'Day'
-Day.toString = () => Day.description
- 
-const convertToDay = (value, name, constraint, status) => {
-  if (typeof value === 'string') {
-    return Day(value, { name : `${name}' constraint '${constraint}` })
-  }
-  else if (typeof value === 'number') {
-    const date = new Date(value)
- 
-    return Day(
-      `${date.getUTCFullYear()}-${date.getUTCMonth() + 1}-${date.getUTCDate()}`
-    )
-  }
-  else if (value instanceof Date) {
-    return Day(
-      `${value.getUTCFullYear()}-${value.getUTCMonth() + 1}-${value.getUTCDate()}`
-    )
-  }
-  else if (!value.isDayObject?.()) {
-    throw new ArgumentTypeError({
-      argumentName : `${name}' constraint '${constraint}`,
-      arguemntType : "string'/'number'/'Date",
-      issue        : 'has nonconvertible type',
-      status,
-    })
-  } // else
- 
-  return value
-}
- 
-const createValue = ({ day, month, year, date }) => ({
-  isDayObject   : () => true,
-  getDayOfMonth : () => day,
-  getMonth      : () => month,
-  getYear       : () => year,
-  getDate       : () => date,
-  valueOf       : () => date.getTime(),
-  toString      : () =>
-    `${('' + year).padStart(2, '0')}-${('' + month).padStart(2, '0')}-${('' + day).padStart(2, '0')}`,
-})
- 
-export { Day }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/ein.mjs.html b/qa/coverage/src/ein.mjs.html deleted file mode 100644 index f9f8ad6..0000000 --- a/qa/coverage/src/ein.mjs.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - Code coverage report for src/ein.mjs - - - - - - - - - -
-
-

All files / src ein.mjs

-
- -
- 100% - Statements - 21/21 -
- - -
- 100% - Branches - 7/7 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 18/18 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -522x -2x -  -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -18x -18x -  -18x -  -18x -18x -6x -  -  -  -  -  -  -12x -  -  -  -12x -  -8x -  -8x -  -4x -  -  -2x -5x -  -  - 
import { einRe } from 'regex-repo'
-import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Validates the input as a valid EIN.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {string} A canonically formatted EIN 'XX-XXXXXXX'.
- */
-const EIN = function (input, options = this || {}) {
-  const { name, status } = options
- 
-  typeChecks({ input, name, status })
- 
-  const einMatch = input.match(einRe)
-  if (einMatch === null) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'is not a valid EIN',
-      status,
-    })
-  }
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<EIN>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
- 
-  const value = input.slice(0, 2) + '-' + input.slice(-7)
- 
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-EIN.description = 'EIN'
-EIN.toString = () => EIN.description
- 
-export { EIN }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/email.mjs.html b/qa/coverage/src/email.mjs.html deleted file mode 100644 index d173e6d..0000000 --- a/qa/coverage/src/email.mjs.html +++ /dev/null @@ -1,544 +0,0 @@ - - - - - - Code coverage report for src/email.mjs - - - - - - - - - -
-
-

All files / src email.mjs

-
- -
- 95.65% - Statements - 22/23 -
- - -
- 88.88% - Branches - 8/9 -
- - -
- 100% - Functions - 2/2 -
- - -
- 94.73% - Lines - 18/19 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -1542x -2x -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -46x -46x -  -46x -  -46x -9x -  -  -46x -46x -46x -46x -  -46x -36x -  -  -  -36x -  -  -  -  -  -  -  -10x -  -  -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { getLatestTLDs, validateEmail } from 'true-email-validator'
-import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Email address and components.
- * @typedef EmailData
- * @property {string} address - The normalized email address. The domain portion, if any, will always be in lowercase (
- *   the `domain` property will preserve the original case).
- * @property {string} username - The username or local part of the email address.
- * @property {string|undefined} domain - The domain value, if present. Exactly one of `domain` and `domainLiteral` will
- *   always be defined for a syntactically valid email address. The original case of the domain is preserved.
- * @property {string|undefined} domainLiteral - The domain literal value, if present. Exactly one of `domain` and
- *   `domainLiteral` will always be defined for a syntactically valid email address.
- * @property {string|undefined} commentLocalPartPrefix - The embedded comment, if any, immediately before the address
- *   username (local part).
- * @property {string|undefined} commentLocalPartSuffix - The embedded comment, if any, immediately following the
- *   address username (local part).
- * @property {string|undefined} commentDomainPrefix - The embedded comment, if any, immediately before the domain or
- *   domain literal.
- * @property {string|undefined} commentDomainSuffix - The embedded comment, if any, immediately after the domain or
- *   domain literal.
- */
- 
-// TODO: ESLint is complaining about 'object<string, true>'; it wants us to use 'object shorthand or index signatures',
-// whic would make the spec '{[key: string]: true}', but the JSDoc parser chokes on it (even though lint passes it).
-/* eslint-disable jsdoc/check-types */
-/**
- * Parses and validates an input string as a valid email address according to RFC 5322 (email messaging), RFC 6531/6532
- * (internationalized email), and RFC 5890 (internationalized domain names). Validation happens in two general steps.
- * First, the input is parsed according to the relevant RFC specifications. If this is successful, then the result will
- * always contain a `username`,`address`, and either `domain` or `domainLiteral` fields. If these are present, you know
- * that the email was successfully parsed. The second stage validates the parsed email components against the provided
- * options or option defaults. Therefore, you can have a situation where an email address is valid according to the
- * specs and can be parsed without an issue, but is still _invalid_ according to the effective options (or defaults).
- *
- * By default, the validation restricts possible features in the email address—such as comments and domain
- * literals—which are not normally wanted in basic email address. In particular, the default options:
- * - disallow embedded comments,
- * - disallow domain literal (IP addressing),
- * - disallow the 'localhost' domain,
- * - restricts possible TLDs to known good TLDs,
- * - restricts domain names to valid subdomain and TLDs based on DNS and ICANN rules beyond the email address
- * specification, and
- * - performs extra validation for known provider domains google.com and hotmail.com.
- *
- * Options can be explicitly defined to allow for a more liberal or restrictive validation.
- *
- * This type uses [true-email-validator](https://github.com/liquid-labs/true-email-validator/) under the hood.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {boolean} options.allowComments - If true, allows embedded comments in the address like '(comment)
- *   john@foo.com', which are disallowed by default. Note, the comments, if present, will be extracted regardless of
- *   this setting, the result `valid` field will just be set false and an issue will be reported.
- * @param {boolean}options.allowAnyDomain - If true, then overrides all default restrictions and format checks of the
- *   domain value and allows any syntactically valid domain value except a localhost name or address (unless
- *   `allowLocalHost` is also set true). Note that impossible sub-domain labels (e.g., a label more than 63 characters
- *   long or a single digit) or TLDs (e.g. '123') will still trigger an invalid result. Otherwise, the domain value is
- *   verified as recognizable as a domain name (as opposed to an IP address, for instance).
- * @param {boolean} options.allowAnyDomainLiteral - If true, then overrides default restrictions and format checks of
- *   domain literal values and allows any syntactically valid domain literal value that is not a localhost address (
- *   unless `allowLocalhost` is also true). In general, domain literal values point to IPV4/6 addresses and the
- *   validation will (when `allowIP4` and/or`allowIPV6` are true), allow valid IP address values but would reject other
- *   domain literal values, unless this value is set true. Note, if this value is true then allowIPV4` and `allowIPV6`
- *   are essentially ignored.
- * @param {boolean} options.allowIPV4 - Allows IPV4 domain literal values. Note that any loopback address will still
- *   cause a validation error unless `allowLocalHost` is also set true. See `allowAnyDomainLiteral`, `allowIPV6`, and
- *  `allowLocahost`.`
- * @param {boolean} options.allowIPV6 - Allows IPV6 domain literal values. Note that the localhost address will still
- *   cause a validation error unless `allowLocaHost` is also set true. See `allowAnyDomainLiteral`, `allowIPV4`, and
- *  `allowLocahost`.`
- * @param {boolean} options.allowLocalhost - Allows `localhost` domain value or (when `allowIPV6` and/or `allowIPV4`
- *   also set true) loopback IP addresses.
- * @param {object<string,true>} options.allowedTLDs - By default, the TLD portion of a domain name will be validated
- *   against known good TLDs. To limit this list or use an updated list, set this value to an array of acceptable TLDs
- *   or a map with valid TLD keys (the value is not used). You can use the `getLatestTLDs`, also exported by this
- *   package, to get an object defining the most current TLDs as registered with ICANN. See `arbitraryTLDs`.
- * @param {boolean} options.allowQuotedLocalPart - Overrides default restriction and allows quoted username/local parts.
- * @param {boolean} options.arbitraryTLDs - Skips the 'known TLD' check and allows any validly formatted TLD name. This
- *   is still restricted by the TLD name restrictions which are tighter than standard domain labels.
- * @param {boolean} options.excludeChars - Either a string or array of excluded characters. In the array form, it will
- *   match the whole string, so you can also use this to exclude specific character sequences.
- * @param {boolean} options.excludeDomains - An array of domains to exclude. Excluding a domain also excludes all
- *   subdomains so eclxuding 'foo.com' would exclude 'john@foo.com' and 'john@bar.foo.com'. Initial periods are ignored
- *   so `excludeDomains: ['com']', and `excludeDomains: ['.com']` are equivalent.
- * @param {boolean} options.noDomainSpecificValidation - Setting this to true will skip domain specific validations. By
- *   default, the validation includes domain specific checks for 'google.com' and 'hotmail.com' domains. These domains
- *   are known to have more restrictive policies regarding what is and is not a valid email address.
- * @param {boolean} options.noLengthCheck - If true, then skips username (local part) and total email address length
- *   restrictions. Note that domain name label lengths are still enforced.
- * @param {boolean} options.noPlusEmails - If true, then '+' is not allowed in the username/local part. This is
- *   equivalent to setting `excludeChars = '+'.`
- * @param {boolean} options.noTLDOnly - If true, then disallows TLD only domains in an address like 'john@com'.
- * @param {boolean} options.noNonASCIILocalPart - If true, then disallows non-ASCII/international characters in the
- *   username/local part of the address.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {EmailData} Email data object.
- */
-const Email = function (input, options = this || {}) {
-  const { name, status } = options
- 
-  typeChecks({ input, name, status })
- 
-  if (options.validateValue !== undefined) {
-    options.validateResult = options.validateValue
-  }
- 
-  const result = validateEmail(input, options)
-  const { issues, isValid } = result
-  delete result.issues
-  delete result.isValid
- 
-  if (isValid === false) {
-    Iif (issues.length === 0) {
-      // shouldn't happen, but just in case
-      issues.push('has unspecified issues')
-    }
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : issues.join(', '),
-      status,
-    })
-  }
- 
-  return result
-}
- 
-Email.description = 'Email'
-Email.toString = () => Email.description
- 
-export {
-  Email,
-  /**
-   * Dynamically retrieves the latest list of valid TLDs from the Internet Assigned Numbers Authority (IANA).
-   * International domains are decoded and both the decoded (international domain) and encoded ('xn--`) domain will be
-   * present in the results object as both represent valid domains from a user's point of view. The resolved result can
-   * be passed to the `Email` ``
-   * @function
-   * @returns {Promise<object>} A Promise resolving to an object whose keys are valid domains; the value of each entry
-   *   is `true`. ASCII characters are always lowercased, but the international domains are not transformed after
-   *   decoding and may contain uppercase non-ASCII unicode characters per [RFC 4343](https://www.rfc-editor.org/rfc/
-   *   rfc4343).
-   */
-  getLatestTLDs
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/index.html b/qa/coverage/src/index.html deleted file mode 100644 index 33ed697..0000000 --- a/qa/coverage/src/index.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - Code coverage report for src - - - - - - - - - -
-
-

All files src

-
- -
- 99.79% - Statements - 487/488 -
- - -
- 97.78% - Branches - 353/361 -
- - -
- 100% - Functions - 55/55 -
- - -
- 99.76% - Lines - 420/421 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
boolean-string.mjs -
-
100%45/45100%44/44100%2/2100%38/38
card-number.mjs -
-
100%49/4996%24/25100%3/3100%44/44
date-time.mjs -
-
100%86/86100%40/40100%17/17100%79/79
day.mjs -
-
100%68/6896.29%78/81100%11/11100%59/59
ein.mjs -
-
100%21/21100%7/7100%2/2100%18/18
email.mjs -
-
95.65%22/2388.88%8/9100%2/294.73%18/19
integer.mjs -
-
100%34/34100%17/17100%2/2100%27/27
numeric.mjs -
-
100%30/30100%14/14100%2/2100%23/23
ssn.mjs -
-
100%21/21100%7/7100%2/2100%18/18
time-of-day.mjs -
-
100%67/6796.47%82/85100%10/10100%62/62
validated-string.mjs -
-
100%44/44100%32/32100%2/2100%34/34
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/integer.mjs.html b/qa/coverage/src/integer.mjs.html deleted file mode 100644 index 22d55a5..0000000 --- a/qa/coverage/src/integer.mjs.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - Code coverage report for src/integer.mjs - - - - - - - - - -
-
-

All files / src integer.mjs

-
- -
- 100% - Statements - 34/34 -
- - -
- 100% - Branches - 17/17 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 27/27 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -792x -2x -  -2x -2x -2x -2x -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -33x -33x -  -33x -  -27x -6x -6x -2x -  -6x -  -  -  -  -  -  -21x -2x -  -  -  -  -  -  -  -19x -  -  -  -19x -17x -17x -13x -2x -  -  -  -  -  -  -11x -  -9x -  -  -2x -3x -  -  - 
import { integerRe } from 'regex-repo'
-import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { checkMaxMin } from './lib/check-max-min'
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { typeChecks } from './lib/type-checks'
- 
-const anyDigitsRe = /^-?\d+$/
- 
-/**
- * Parses and validates an input string as an integer.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {boolean} options.allowLeadingZeros - Overrides default behavior which rejects strings with leading zeros.
- * @param {number} options.divisibleBy - Requires the resulting integer value be divisible by the indicated number (
- *   which need not itself be an integer).
- * @param {number} options.max - The largest value considered valid.
- * @param {number} options.min - The smallest value considered valid.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {number} A primitive integer.
- */
-const Integer = function (input, options = this || {}) {
-  const { name, allowLeadingZeros, divisibleBy, max, min, status } = options
- 
-  typeChecks({ input, name, status })
- 
-  if (allowLeadingZeros !== true && input.match(integerRe) === null) {
-    let issue = 'does not appear to be an integer'
-    if (input.match(anyDigitsRe)) {
-      issue += '; leading zeroes are not allowed.'
-    }
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue,
-      status,
-    })
-  }
-  else if (allowLeadingZeros === true && input.match(anyDigitsRe) === null) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'does not appear to be an integer (leading zeros allowed)',
-      status,
-    })
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<integer>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
-  const value = parseInt(input)
-  checkMaxMin({ input, max, min, name, status, value })
-  if (divisibleBy !== undefined && value % divisibleBy !== 0) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `must be divisible by '${divisibleBy}'`,
-      status,
-    })
-  }
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-Integer.description = 'Integer'
-Integer.toString = () => Integer.description
- 
-export { Integer }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/check-max-min.mjs.html b/qa/coverage/src/lib/check-max-min.mjs.html deleted file mode 100644 index 12f3a97..0000000 --- a/qa/coverage/src/lib/check-max-min.mjs.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - Code coverage report for src/lib/check-max-min.mjs - - - - - - - - - -
-
-

All files / src/lib check-max-min.mjs

-
- -
- 100% - Statements - 11/11 -
- - -
- 100% - Branches - 6/6 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 6/6 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -256x -  -193x -193x -20x -  -  -  -  -  -  -  -173x -22x -  -  -  -  -  -  -  -  -  -  - 
import { ArgumentOutOfRangeError } from 'standard-error-set'
- 
-const checkMaxMin = ({ max, min, name, status, value }) => {
-  if (max !== undefined && value > max) {
-    throw new ArgumentOutOfRangeError({
-      argumentName  : `${name}' constraint 'max`,
-      argumentValue : max,
-      max,
-      min,
-      status,
-    })
-  }
-  if (min !== undefined && value < min) {
-    throw new ArgumentOutOfRangeError({
-      argumentName  : `${name}' constraint 'min`,
-      argumentValue : min,
-      max,
-      min,
-      status,
-    })
-  }
-}
- 
-export { checkMaxMin }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/check-validate-input.mjs.html b/qa/coverage/src/lib/check-validate-input.mjs.html deleted file mode 100644 index 6f71716..0000000 --- a/qa/coverage/src/lib/check-validate-input.mjs.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - Code coverage report for src/lib/check-validate-input.mjs - - - - - - - - - -
-
-

All files / src/lib check-validate-input.mjs

-
- -
- 100% - Statements - 4/4 -
- - -
- 75% - Branches - 3/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 3/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -1211x -  -295x -295x -  -  -  -  -  -  -  - 
import { validateHelper } from './validate-helper'
- 
-const checkValidateInput = (input, options = {}) => {
-  validateHelper({
-    validationType : 'input',
-    validationFunc : options.validateInput,
-    validationArgs : [input, options],
-  })
-}
- 
-export { checkValidateInput }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/check-validate-value.mjs.html b/qa/coverage/src/lib/check-validate-value.mjs.html deleted file mode 100644 index 841906f..0000000 --- a/qa/coverage/src/lib/check-validate-value.mjs.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - Code coverage report for src/lib/check-validate-value.mjs - - - - - - - - - -
-
-

All files / src/lib check-validate-value.mjs

-
- -
- 100% - Statements - 4/4 -
- - -
- 75% - Branches - 3/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 3/3 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -1211x -  -208x -208x -  -  -  -  -  -  -  - 
import { validateHelper } from './validate-helper'
- 
-const checkValidateValue = (value, options = {}) => {
-  validateHelper({
-    validationType : 'value',
-    validationFunc : options.validateValue,
-    validationArgs : [value, options],
-  })
-}
- 
-export { checkValidateValue }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/convert-month-name.mjs.html b/qa/coverage/src/lib/date-time/convert-month-name.mjs.html deleted file mode 100644 index 13bfed8..0000000 --- a/qa/coverage/src/lib/date-time/convert-month-name.mjs.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time/convert-month-name.mjs - - - - - - - - - -
-
-

All files / src/lib/date-time convert-month-name.mjs

-
- -
- 100% - Statements - 14/14 -
- - -
- 100% - Branches - 12/12 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 14/14 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -316x -77x -  -66x -  -1x -  -1x -  -1x -  -1x -  -1x -  -1x -  -1x -  -1x -  -1x -  -1x -  -1x -  -  -  -  - 
const convertMonthName = (monthName) => {
-  switch (monthName) {
-    case 'Jan':
-      return 1
-    case 'Feb':
-      return 2
-    case 'Mar':
-      return 3
-    case 'Apr':
-      return 4
-    case 'May':
-      return 5
-    case 'Jun':
-      return 6
-    case 'Jul':
-      return 7
-    case 'Aug':
-      return 8
-    case 'Sep':
-      return 9
-    case 'Oct':
-      return 10
-    case 'Nov':
-      return 11
-    case 'Dec':
-      return 12
-  }
-}
- 
-export { convertMonthName }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html b/qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html deleted file mode 100644 index c358e88..0000000 --- a/qa/coverage/src/lib/date-time/convert-timezone-offset-to-string.mjs.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time/convert-timezone-offset-to-string.mjs - - - - - - - - - -
-
-

All files / src/lib/date-time convert-timezone-offset-to-string.mjs

-
- -
- 100% - Statements - 5/5 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 5/5 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -163x -72x -72x -  -  -  -  -72x -  -  -  -72x -  -  -  - 
const convertTimezoneOffsetToString = (offset) => {
-  const tzHrs = Math.trunc(offset / 60)
-  const tzMins = offset % 60
-  // Note, the offset is reversed from the string. Eg, a positive offset of 300 would translate to -0500. The offset
-  // shows the difference between UTC and local, so if you're behind, then that's positive. But the TZ string does the
-  // opposite.
-  const tz =
-    (offset <= 0 ? '+' : '-')
-    + ('' + Math.abs(tzHrs)).padStart(2, '0')
-    + ('' + Math.abs(tzMins)).padStart(2, '0')
- 
-  return tz
-}
- 
-export { convertTimezoneOffsetToString }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html b/qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html deleted file mode 100644 index bb3d1a5..0000000 --- a/qa/coverage/src/lib/date-time/get-timezone-offset.mjs.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time/get-timezone-offset.mjs - - - - - - - - - -
-
-

All files / src/lib/date-time get-timezone-offset.mjs

-
- -
- 100% - Statements - 30/30 -
- - -
- 100% - Branches - 11/11 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 21/21 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -656x -  -6x -  -6x -113x -113x -  -113x -  -  -41x -  -  -  -  -  -  -  -  -  -  -  -72x -43x -  -  -29x -29x -25x -25x -25x -  -25x -  -  -  -4x -  -  -  -  -  -  -  -  -4x -4x -  -1x -  -  -  -  -  -  -3x -  -3x -  -  -  -  -  - 
import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { makeDateTimeString } from './make-date-time-string'
- 
-const getTimezoneOffset = (
-  { name, status },
-  [year, month, day, hours, minutes, seconds, fracSeconds, timezone]
-) => {
-  if (timezone === undefined) {
-    // it's important to test against the date/time itself in case it's in a different daylight savings period than the
-    // current
-    return new Date(
-      makeDateTimeString([
-        year,
-        month,
-        day,
-        hours,
-        minutes,
-        seconds,
-        fracSeconds,
-      ])
-    ).getTimezoneOffset()
-  }
-  else if (timezone === 'z' || timezone === 'Z') {
-    return 0
-  }
-  else {
-    const numericTZMatch = timezone.match(/([+-])(\d{2})(?::?(\d{2}))?/)
-    if (numericTZMatch !== null) {
-      const offsetDirection = numericTZMatch[1] === '-' ? -1 : 1
-      const offsetHours = 60 * parseInt(numericTZMatch[2])
-      const offsetMinutes = parseInt(numericTZMatch[3])
- 
-      return offsetDirection * (offsetHours + offsetMinutes)
-    }
-    else {
-      // it's a named TZ
-      const partialSpec = makeDateTimeString([
-        year,
-        month,
-        day,
-        hours,
-        minutes,
-        seconds,
-        fracSeconds,
-      ])
-      const tzDate = new Date(`${partialSpec} ${timezone}`)
-      if (isNaN(tzDate.getDate())) {
-        // we assume everything but the TZ is good
-        throw new ArgumentInvalidError({
-          argumentName : name,
-          issue        : 'timezone designation not recognized as valid timezone',
-          hint         : "The recognized timezones are limited to basic US timezone like CST and PDT; otherwise it's best to designate the offset like '+1030' or '-0100'.",
-          status,
-        })
-      }
-      const utcDate = new Date(`${partialSpec} Z`)
- 
-      return Math.trunc((utcDate - tzDate) / (1000 * 60))
-    }
-  }
-}
- 
-export { getTimezoneOffset }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/index.html b/qa/coverage/src/lib/date-time/index.html deleted file mode 100644 index 5445609..0000000 --- a/qa/coverage/src/lib/date-time/index.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time - - - - - - - - - -
-
-

All files src/lib/date-time

-
- -
- 100% - Statements - 170/170 -
- - -
- 97.61% - Branches - 205/210 -
- - -
- 100% - Functions - 8/8 -
- - -
- 100% - Lines - 158/158 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
convert-month-name.mjs -
-
100%14/14100%12/12100%1/1100%14/14
convert-timezone-offset-to-string.mjs -
-
100%5/5100%2/2100%1/1100%5/5
get-timezone-offset.mjs -
-
100%30/30100%11/11100%1/1100%21/21
make-date-time-string.mjs -
-
100%14/14100%3/3100%1/1100%14/14
process-idiomatic-date-time.mjs -
-
100%51/5196.75%149/154100%1/1100%50/50
process-iso-8601-date-time.mjs -
-
100%43/43100%26/26100%2/2100%41/41
process-rfc-2822-date-time.mjs -
-
100%13/13100%2/2100%1/1100%13/13
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/make-date-time-string.mjs.html b/qa/coverage/src/lib/date-time/make-date-time-string.mjs.html deleted file mode 100644 index 8bc4989..0000000 --- a/qa/coverage/src/lib/date-time/make-date-time-string.mjs.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time/make-date-time-string.mjs - - - - - - - - - -
-
-

All files / src/lib/date-time make-date-time-string.mjs

-
- -
- 100% - Statements - 14/14 -
- - -
- 100% - Branches - 3/3 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 14/14 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -246x -151x -151x -151x -151x -151x -151x -151x -151x -151x -  -151x -  -  -  -151x -106x -  -  -151x -  -  -  - 
const makeDateTimeString = ([
-  year,
-  month,
-  day,
-  hours,
-  minutes,
-  seconds,
-  fracSeconds,
-  timezone,
-]) => {
-  let dtString =
-    `${year}-${('' + month).padStart(2, '0')}-${('' + day).padStart(2, '0')} `
-    + `${('' + hours).padStart(2, '0')}:${('' + minutes).padStart(2, '0')}:${('' + seconds).padStart(2, '0')}`
-    + (fracSeconds > 0 ? ('' + fracSeconds).slice(1) : '')
- 
-  if (timezone !== undefined) {
-    dtString += ' ' + timezone
-  }
- 
-  return dtString
-}
- 
-export { makeDateTimeString }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html b/qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html deleted file mode 100644 index 914fdba..0000000 --- a/qa/coverage/src/lib/date-time/process-idiomatic-date-time.mjs.html +++ /dev/null @@ -1,541 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time/process-idiomatic-date-time.mjs - - - - - - - - - -
-
-

All files / src/lib/date-time process-idiomatic-date-time.mjs

-
- -
- 100% - Statements - 51/51 -
- - -
- 96.75% - Branches - 149/154 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 50/50 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -1533x -  -  -  -  -  -  -  -  -3x -  -3x -3x -  -3x -96x -  -  -96x -  -  -96x -96x -96x -96x -  -  -96x -  -  -96x -  -  -  -96x -10x -  -  -  -  -  -  -  -  -86x -86x -86x -86x -  -86x -86x -  -  -86x -  -  -  -86x -3x -  -  -  -  -  -  -83x -1x -  -  -  -  -  -  -  -  -82x -82x -  -  -  -  -82x -8x -8x -  -  -74x -  -82x -  -  -  -  -82x -  -  -  -82x -4x -4x -4x -4x -  -  -78x -  -  -78x -2x -2x -1x -  -  -78x -  -  -78x -78x -  -  -  -  -  -82x -  -  -  -82x -  -  -  -  -  -  -  -  -  -  -82x -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import {
-  intlDateReString,
-  militaryTimeReString,
-  rfc2822DayReString,
-  timeReString,
-  timezoneReString,
-  twentyFourHourTimeReString,
-  usDateReString
-} from 'regex-repo'
-import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { convertMonthName } from './convert-month-name'
-import { getTimezoneOffset } from './get-timezone-offset'
- 
-const processIdiomaticDateTime = (options, input, localTimezone) => {
-  const { name, status } = options
- 
-  // mil time can easily be confused for the year, so we have to exclude matches to the year
-  const milTimeRe = new RegExp(
-    `(?<![a-zA-Z]{3}\\s+|[./+-])${militaryTimeReString}(?![./-])(?:\\s*${timezoneReString}\\b)?`
-  )
-  const milTimeMatch = input.match(milTimeRe)
-  const timeRe = new RegExp(`${timeReString}(?:\\s*${timezoneReString}\\b)?`)
-  const timeMatch = input.match(timeRe)
-  const twentyFourHourTimeRe = new RegExp(
-    `${twentyFourHourTimeReString}(?:\\s*${timezoneReString}\\b)?`
-  )
-  const twentyFourHourTimeMatch = input.match(twentyFourHourTimeRe)
- 
-  const timeMatches =
-    (milTimeMatch !== null ? 1 : 0)
-    + (timeMatch !== null ? 1 : 0)
-    + (twentyFourHourTimeMatch !== null ? 1 : 0)
- 
-  if (timeMatches === 0) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'does not contain a recognizable time component',
-      status,
-    })
-  }
-  // I don't believe multiple matches is actually possible.
- 
-  const rfc2822DayRe = new RegExp(rfc2822DayReString)
-  const rfc2822DayMatch = input.match(rfc2822DayRe)
-  const usDateRe = new RegExp('\\b' + usDateReString + '\\b')
-  const usDateMatch = input.match(usDateRe)
-  // can't use '\b' at start because it would match '-' in '-2024/01/01'
-  const intlDateRe = new RegExp('(?:^| )' + intlDateReString + '\\b')
-  const intlDateMatch = input.match(intlDateRe)
- 
-  const dayMatches =
-    (rfc2822DayMatch !== null ? 1 : 0)
-    + (usDateMatch !== null ? 1 : 0)
-    + (intlDateMatch !== null ? 1 : 0)
- 
-  if (dayMatches === 0) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'does not contain a recognizable date component',
-      status,
-    })
-  }
-  else if (dayMatches > 1) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'date component is ambiguous',
-      hint          : "Try specifying a 4+ digit year (pad with '0' where necessary).",
-      status,
-    })
-  }
- 
-  const ceIndicator = usDateMatch?.[3] || intlDateMatch?.[1] || ''
-  const year = parseInt(
-    ceIndicator
-      + (rfc2822DayMatch?.[4] || usDateMatch?.[4] || intlDateMatch?.[2])
-  )
-  let month
-  if (rfc2822DayMatch !== null) {
-    const monthName = rfc2822DayMatch[3]
-    month = convertMonthName(monthName)
-  }
-  else {
-    month = parseInt(usDateMatch?.[1] || intlDateMatch?.[3])
-  }
-  const day = parseInt(
-    rfc2822DayMatch?.[2] || usDateMatch?.[2] || intlDateMatch?.[4]
-  )
- 
-  const isEod =
-    milTimeMatch?.[1] !== undefined
-    || twentyFourHourTimeMatch?.[1] !== undefined
-    || false
-  let hours, minutes, seconds, fractionalSeconds
-  if (isEod === true) {
-    hours = 24
-    minutes = 0
-    seconds = 0
-    fractionalSeconds = 0
-  }
-  else {
-    hours = parseInt(
-      milTimeMatch?.[2] || timeMatch?.[1] || twentyFourHourTimeMatch?.[2]
-    )
-    if (timeMatch !== null) {
-      hours += timeMatch[5].toLowerCase() === 'am' ? 0 : 12
-      if (hours === 24) {
-        hours = 0
-      }
-    }
-    minutes = parseInt(
-      milTimeMatch?.[3] || timeMatch?.[2] || twentyFourHourTimeMatch?.[3]
-    )
-    seconds = parseInt(timeMatch?.[3] || twentyFourHourTimeMatch?.[4] || '0')
-    fractionalSeconds = Number(
-      '0.' + (timeMatch?.[4] || twentyFourHourTimeMatch?.[5] || '0')
-    )
-  }
- 
-  const timezone =
-    milTimeMatch?.[4]
-    || timeMatch?.[6]
-    || twentyFourHourTimeMatch?.[6]
-    || localTimezone
-  const timezoneOffset = getTimezoneOffset(options, [
-    year,
-    month,
-    day,
-    hours,
-    minutes,
-    seconds,
-    fractionalSeconds,
-    timezone,
-  ])
- 
-  return [
-    year,
-    month,
-    day,
-    isEod,
-    hours,
-    minutes,
-    seconds,
-    fractionalSeconds,
-    timezoneOffset,
-  ]
-}
- 
-export { processIdiomaticDateTime }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html b/qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html deleted file mode 100644 index dd4d387..0000000 --- a/qa/coverage/src/lib/date-time/process-iso-8601-date-time.mjs.html +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time/process-iso-8601-date-time.mjs - - - - - - - - - -
-
-

All files / src/lib/date-time process-iso-8601-date-time.mjs

-
- -
- 100% - Statements - 43/43 -
- - -
- 100% - Branches - 26/26 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 41/41 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -1013x -  -3x -  -3x -  -3x -19x -  -19x -1x -  -  -  -  -  -18x -1x -  -  -  -  -  -  -17x -17x -17x -17x -17x -  -  -17x -  -  -  -  -4x -4x -4x -  -13x -  -3x -3x -3x -3x -3x -3x -  -3x -  -  -10x -10x -1x -1x -  -9x -2x -2x -2x -  -2x -  -  -7x -7x -  -  -  -  -17x -17x -  -  -  -  -  -  -  -  -  -  -17x -  -  -  -  -  -  -  -  -  -  -  -  -5x -  -  -  - 
import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { getTimezoneOffset } from './get-timezone-offset'
- 
-const fracSecondsPrecision = 100000
- 
-const processISO8601DateTime = (options, iso8601Match, localTimezone) => {
-  const { name, status } = options
- 
-  if (iso8601Match[5] !== undefined) {
-    throw new ArgumentInvalidError({
-      argumentName : name,
-      issue        : 'does not support week of year style dates',
-      status,
-    })
-  }
-  else if (iso8601Match[7] !== undefined) {
-    throw new ArgumentInvalidError({
-      argumentName : name,
-      issue        : 'does not support day of year/ordinal/Julian style dates',
-      status,
-    })
-  }
- 
-  const year = parseInt(iso8601Match[1])
-  const month = parseInt(iso8601Match[3]) || 1
-  const day = parseInt(iso8601Match[4]) || 1
-  const isEod = iso8601Match[8] !== undefined
-  const hours = isEod === true ? 24 : parseInt(iso8601Match[10])
-  let minutes, seconds, fracSeconds
- 
-  if (
-    iso8601Match[11] === undefined
-    && iso8601Match[13] === undefined
-    && iso8601Match[15] === undefined
-  ) {
-    minutes = 0
-    seconds = 0
-    fracSeconds = 0
-  }
-  else if (iso8601Match[11] !== undefined) {
-    // fractional hours
-    const fracHours = Number('0.' + iso8601Match[11])
-    const realMinutes = 60 * fracHours
-    minutes = Math.trunc(realMinutes)
-    const fracMinutes = realMinutes % 1
-    const realSeconds = 60 * fracMinutes
-    seconds = Math.trunc(realSeconds)
-    // we can easily get floating point math errors here, so we limit the precision
-    fracSeconds = roundFracSeconds(realSeconds)
-  }
-  else {
-    minutes = parseInt(iso8601Match[13])
-    if (iso8601Match[14] === undefined && iso8601Match[15] === undefined) {
-      seconds = 0
-      fracSeconds = 0
-    }
-    else if (iso8601Match[14] !== undefined) {
-      const fracMinutes = Number('0.' + iso8601Match[14])
-      const realSeconds = 60 * fracMinutes
-      seconds = Math.trunc(realSeconds)
-      // we can easily get floating point math errors here, so we limit the precision
-      fracSeconds = roundFracSeconds(realSeconds)
-    }
-    else {
-      seconds = parseInt(iso8601Match[15])
-      fracSeconds =
-        iso8601Match[16] === undefined ? 0 : Number('0.' + iso8601Match[16])
-    }
-  }
- 
-  const timezone = iso8601Match[17] || localTimezone
-  const timezoneOffset = getTimezoneOffset(options, [
-    year,
-    month,
-    day,
-    hours,
-    minutes,
-    seconds,
-    fracSeconds,
-    timezone,
-  ])
- 
-  return [
-    year,
-    month,
-    day,
-    isEod,
-    hours,
-    minutes,
-    seconds,
-    fracSeconds,
-    timezoneOffset,
-  ]
-}
- 
-const roundFracSeconds = (realSeconds) =>
-  Math.round((realSeconds % 1) * fracSecondsPrecision) / fracSecondsPrecision
- 
-export { processISO8601DateTime }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html b/qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html deleted file mode 100644 index ede356f..0000000 --- a/qa/coverage/src/lib/date-time/process-rfc-2822-date-time.mjs.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - Code coverage report for src/lib/date-time/process-rfc-2822-date-time.mjs - - - - - - - - - -
-
-

All files / src/lib/date-time process-rfc-2822-date-time.mjs

-
- -
- 100% - Statements - 13/13 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 13/13 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -393x -3x -  -3x -6x -6x -6x -6x -6x -6x -6x -6x -  -6x -  -  -  -  -  -  -  -  -  -  -6x -  -  -  -  -  -  -  -  -  -  -  -  -  - 
import { convertMonthName } from './convert-month-name'
-import { getTimezoneOffset } from './get-timezone-offset'
- 
-const processRFC2822DateTime = (options, rfc2822Match, localTimezone) => {
-  const year = parseInt(rfc2822Match[4])
-  const monthName = rfc2822Match[3]
-  const month = convertMonthName(monthName)
-  const day = parseInt(rfc2822Match[2])
-  const hours = parseInt(rfc2822Match[5])
-  const minutes = parseInt(rfc2822Match[6])
-  const seconds = parseInt(rfc2822Match[7])
-  const timezone = rfc2822Match[8] || localTimezone
- 
-  const timezoneOffset = getTimezoneOffset(options, [
-    year,
-    month,
-    day,
-    hours,
-    minutes,
-    seconds,
-    0,
-    timezone,
-  ])
- 
-  return [
-    year,
-    month,
-    day,
-    /* isEod */ false,
-    hours,
-    minutes,
-    seconds,
-    0,
-    timezoneOffset,
-  ]
-}
- 
-export { processRFC2822DateTime }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/index.html b/qa/coverage/src/lib/index.html deleted file mode 100644 index c0bceb0..0000000 --- a/qa/coverage/src/lib/index.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - Code coverage report for src/lib - - - - - - - - - -
-
-

All files src/lib

-
- -
- 100% - Statements - 63/63 -
- - -
- 92.59% - Branches - 25/27 -
- - -
- 100% - Functions - 6/6 -
- - -
- 100% - Lines - 45/45 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
check-max-min.mjs -
-
100%11/11100%6/6100%1/1100%6/6
check-validate-input.mjs -
-
100%4/475%3/4100%1/1100%3/3
check-validate-value.mjs -
-
100%4/475%3/4100%1/1100%3/3
possible-boolean-values.mjs -
-
100%18/18100%5/5100%1/1100%18/18
type-checks.mjs -
-
100%9/9100%4/4100%1/1100%6/6
validate-helper.mjs -
-
100%17/17100%4/4100%1/1100%9/9
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/possible-boolean-values.mjs.html b/qa/coverage/src/lib/possible-boolean-values.mjs.html deleted file mode 100644 index efacfde..0000000 --- a/qa/coverage/src/lib/possible-boolean-values.mjs.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - Code coverage report for src/lib/possible-boolean-values.mjs - - - - - - - - - -
-
-

All files / src/lib possible-boolean-values.mjs

-
- -
- 100% - Statements - 18/18 -
- - -
- 100% - Branches - 5/5 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 18/18 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -293x -22x -22x -22x -22x -  -22x -22x -16x -  -22x -16x -16x -10x -  -  -22x -18x -18x -1x -  -18x -  -  -22x -  -  -  - 
const possibleBooleanValues = ({
-  noAbbreviations,
-  noNumeric,
-  noYesNo,
-  treatNegativeValuesAsFalse,
-}) => {
-  let response = 'true/false'
-  if (noAbbreviations !== true) {
-    response += ', t/f'
-  }
-  if (noYesNo !== true) {
-    response += ', yes/no'
-    if (noAbbreviations !== true) {
-      response += ', y/n'
-    }
-  }
-  if (noNumeric !== true) {
-    response += ', '
-    if (treatNegativeValuesAsFalse === true) {
-      response += 'negative number-'
-    }
-    response += '0/positive number'
-  }
- 
-  return response.replace(/(.+),([^,]+)+$/, '$1, or$2')
-}
- 
-export { possibleBooleanValues }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/type-checks.mjs.html b/qa/coverage/src/lib/type-checks.mjs.html deleted file mode 100644 index 251b56d..0000000 --- a/qa/coverage/src/lib/type-checks.mjs.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - Code coverage report for src/lib/type-checks.mjs - - - - - - - - - -
-
-

All files / src/lib type-checks.mjs

-
- -
- 100% - Statements - 9/9 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 6/6 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -2212x -  -478x -478x -20x -  -  -  -  -  -458x -7x -  -  -  -  -  -  -  -  -  - 
import { ArgumentMissingError, ArgumentTypeError } from 'standard-error-set'
- 
-const typeChecks = ({ input, name, status }) => {
-  if (input === undefined || input === null) {
-    throw new ArgumentMissingError({
-      argumentName  : name,
-      argumentValue : input,
-      status,
-    })
-  }
-  if (typeof input !== 'string') {
-    throw new ArgumentTypeError({
-      argumentName : name,
-      argumentType : 'string',
-      receivedType : typeof input,
-      status,
-    })
-  }
-}
- 
-export { typeChecks }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/lib/validate-helper.mjs.html b/qa/coverage/src/lib/validate-helper.mjs.html deleted file mode 100644 index c65a569..0000000 --- a/qa/coverage/src/lib/validate-helper.mjs.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - Code coverage report for src/lib/validate-helper.mjs - - - - - - - - - -
-
-

All files / src/lib validate-helper.mjs

-
- -
- 100% - Statements - 17/17 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 9/9 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -2911x -  -503x -503x -  -56x -56x -56x -8x -  -  -  -  -  -  -  -48x -30x -  -  -  -  -  -  -  -  -  -  - 
import { ArgumentInvalidError } from 'standard-error-set'
- 
-const validateHelper = ({ validationArgs, validationFunc, validationType }) => {
-  if (validationFunc === undefined) return
- 
-  const result = validationFunc(...validationArgs)
-  const { input, name, status, type } = validationArgs[1]
-  if (typeof result === 'string') {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentType  : type,
-      argumentValue : input,
-      issue         : result,
-      status,
-    })
-  }
-  else if (result !== true) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentType  : type,
-      argumentValue : input,
-      issue         : `failed custom ${validationType} validation`,
-      status,
-    })
-  }
-}
- 
-export { validateHelper }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/numeric.mjs.html b/qa/coverage/src/numeric.mjs.html deleted file mode 100644 index b69726c..0000000 --- a/qa/coverage/src/numeric.mjs.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - Code coverage report for src/numeric.mjs - - - - - - - - - -
-
-

All files / src numeric.mjs

-
- -
- 100% - Statements - 30/30 -
- - -
- 100% - Branches - 14/14 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 23/23 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -772x -  -2x -2x -2x -2x -  -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -27x -27x -  -27x -  -27x -2x -  -  -  -  -  -  -25x -4x -  -  -  -  -  -  -  -21x -  -  -  -21x -  -21x -  -21x -17x -2x -  -  -  -  -  -  -  -15x -  -15x -  -  -2x -2x -  -  - 
import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { checkMaxMin } from './lib/check-max-min'
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { typeChecks } from './lib/type-checks'
- 
-const leadingZeroRe = /^0(?!\.|$)/ // test for leading zeros, but allow '0', and '0.xx'
- 
-/**
- * Parses and validates an input string as a valid number (float).
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {boolean} options.allowLeadingZeros - Overrides default behavior which rejects strings with leading zeros.
- * @param {number} options.divisibleBy - Requires the resulting integer value be divisible by the indicated number (
- *   which need not be an integer).
- * @param {number} options.max - The largest value considered valid.
- * @param {number} options.min - The smallest value considered valid.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {number} A primitive number.
- */
-const Numeric = function (input, options = this || {}) {
-  const { name, allowLeadingZeros, divisibleBy, max, min, status } = options
- 
-  typeChecks({ input, name, status })
- 
-  if (allowLeadingZeros !== true && leadingZeroRe.test(input) === true) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'contains disallowed leading zeros',
-      status,
-    })
-  }
-  else if (input !== input.trim()) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'contains disallowed leading or trailing space',
-      status,
-    })
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<numeric>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
- 
-  const value = Number(input)
-  // TODO: wrap these two together in 'checkNumerics' and share with Integer
-  checkMaxMin({ input, max, min, name, status, value })
-  if (divisibleBy !== undefined && value % divisibleBy !== 0) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `must be divisible by '${divisibleBy}'`,
-      status,
-    })
-  }
- 
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-Numeric.description = 'Numeric'
-Numeric.toString = () => Numeric.description
- 
-export { Numeric }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/ssn.mjs.html b/qa/coverage/src/ssn.mjs.html deleted file mode 100644 index b67aa48..0000000 --- a/qa/coverage/src/ssn.mjs.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - Code coverage report for src/ssn.mjs - - - - - - - - - -
-
-

All files / src ssn.mjs

-
- -
- 100% - Statements - 21/21 -
- - -
- 100% - Branches - 7/7 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 18/18 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -522x -2x -  -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -18x -18x -  -18x -  -18x -18x -10x -  -  -  -  -  -  -8x -  -  -  -8x -  -6x -  -6x -  -4x -  -  -2x -3x -  -  - 
import { ssnRe } from 'regex-repo'
-import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Parses and validates a string as a valid Social Security Number, with our without dashes.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {string} A canonically formatted SSN like 'XX-XXX-XXXX'.
- */
-const SSN = function (input, options = this || {}) {
-  const { name, status } = options
- 
-  typeChecks({ input, name, status })
- 
-  const ssnMatch = input.match(ssnRe)
-  if (ssnMatch === null) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'is not a valid SSN',
-      status        : 'Ensure there are nine digits and a valid area code.',
-    })
-  }
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<SSN>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
- 
-  const value = `${ssnMatch[1]}-${ssnMatch[2]}-${ssnMatch[3]}`
- 
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-SSN.description = 'SSN'
-SSN.toString = () => SSN.description
- 
-export { SSN }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/time-of-day.mjs.html b/qa/coverage/src/time-of-day.mjs.html deleted file mode 100644 index 1958513..0000000 --- a/qa/coverage/src/time-of-day.mjs.html +++ /dev/null @@ -1,553 +0,0 @@ - - - - - - Code coverage report for src/time-of-day.mjs - - - - - - - - - -
-
-

All files / src time-of-day.mjs

-
- -
- 100% - Statements - 67/67 -
- - -
- 96.47% - Branches - 82/85 -
- - -
- 100% - Functions - 10/10 -
- - -
- 100% - Lines - 62/62 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -1572x -2x -  -2x -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -43x -43x -43x -  -43x -  -39x -39x -39x -  -39x -  -  -  -  -3x -  -  -  -  -  -  -  -36x -  -36x -1x -  -  -  -  -  -35x -  -  -  -35x -  -34x -  -  -  -  -  -  -34x -5x -  -  -33x -5x -  -32x -  -28x -  -27x -  -  -2x -34x -34x -34x -34x -  -  -34x -3x -3x -3x -3x -  -  -31x -5x -  -5x -1x -  -  -  -26x -  -31x -  -  -31x -  -31x -31x -  -  -34x -19x -16x -16x -18x -16x -16x -  -8x -8x -4x -4x -4x -  -  -  -8x -  -  -  -  -2x -2x -  -  - 
import { militaryTimeRe, timeRe, twentyFourHourTimeRe } from 'regex-repo'
-import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { checkMaxMin } from './lib/check-max-min'
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Represents the time components.
- * @typedef TimeData
- * @property {function(): boolean} isEod() - Whether or not the time is the special 'end of day' time.
- * @property {function(): number} getHours() - The hours component of the date-time (integer).
- * @property {function(): number} getMinutes() - The minutes component of the date-time (integer).
- * @property {function(): number} getSeconds() - The seconds component of the date-time (integer).
- * @property {function(): number} getFractionalSeconds() - The fractional seconds component of the date-time; this will
- *   always be a float less than 1.
- * @property {function(): number} getMilliseconds() - The fractional seconds component of the date-time expressed as
- *   milliseconds (integer).
- * @property {function(): number} valueOf() - Seconds (including fractional seconds) since 00:00:00.
- */
- 
-/**
- * Parses and validates the input as a time-of-day. Because there is no date component and some timezones would be
- * ambiguous, this type does not recognize nor accepts timezone specification.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {string} options.max - A string, parseable by this function, representing the latest valid time.
- * @param {string} options.min - A string, parseable by this function, representing the earliest valid time.
- * @param {boolean} options.noEod - Disallows the special times '24:00:00', which represents the last moment of the day.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {TimeData} The parsed time data.
- */
-const TimeOfDay = function (input, options = this || {}) {
-  const { name, noEod, status } = options
-  let { min, max } = options
- 
-  typeChecks({ input, name, status })
- 
-  const militaryTimeMatch = input.match(militaryTimeRe)
-  const timeMatch = input.match(timeRe)
-  const twentyFourHourTimeMatch = input.match(twentyFourHourTimeRe)
- 
-  if (
-    militaryTimeMatch === null
-    && timeMatch === null
-    && twentyFourHourTimeMatch === null
-  ) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : 'not recognized as either military, standard, or 24-hour time',
-    })
-  }
- 
-  const isEod =
-    militaryTimeMatch?.[1] !== undefined
-    || twentyFourHourTimeMatch?.[1] !== undefined
-  if (noEod === true) {
-    throw new ArgumentInvalidError({
-      argumentName : name,
-      issue        : "special 'end-of-day' time disallowed",
-    })
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string<time>' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
- 
-  const value = getValue({
-    isEod,
-    militaryTimeMatch,
-    timeMatch,
-    twentyFourHourTimeMatch,
-  })
- 
-  if (max !== undefined) {
-    max = TimeOfDay(max, { name : `${name}' constraint 'max` })
-  }
- 
-  if (min !== undefined) {
-    min = TimeOfDay(min, { name : `${name}' constraint 'min` })
-  }
-  checkMaxMin({ input, max, min, name, status, value })
- 
-  checkValidateValue(value, validationOptions)
- 
-  return value
-}
- 
-const getValue = ({
-  isEod,
-  militaryTimeMatch,
-  timeMatch,
-  twentyFourHourTimeMatch,
-}) => {
-  let hours, minutes, seconds, fracSeconds
-  if (isEod === true) {
-    hours = 24
-    minutes = 0
-    seconds = 0
-    fracSeconds = 0
-  }
-  else {
-    if (timeMatch !== null) {
-      hours =
-        parseInt(timeMatch[1]) + (timeMatch[5].toLowerCase() === 'pm' ? 12 : 0)
-      if (hours === 24) {
-        hours = 0
-      }
-    }
-    else {
-      hours = parseInt(militaryTimeMatch?.[2] || twentyFourHourTimeMatch?.[2])
-    }
-    minutes = parseInt(
-      timeMatch?.[2] || militaryTimeMatch?.[3] || twentyFourHourTimeMatch?.[3]
-    )
-    seconds = parseInt(timeMatch?.[3] || twentyFourHourTimeMatch?.[4] || '0')
-    const fracSecondsString =
-      timeMatch?.[4] || twentyFourHourTimeMatch?.[5] || '0'
-    fracSeconds = Number('0.' + fracSecondsString)
-  }
- 
-  return {
-    isEod                : () => isEod,
-    getHours             : () => hours,
-    getMinutes           : () => minutes,
-    getSeconds           : () => seconds,
-    getFractionalSeconds : () => fracSeconds,
-    valueOf              : () => hours * 60 * 60 + minutes * 60 + seconds + fracSeconds,
-    toString             : () => {
-      let time = `${('' + hours).padStart(2, '0')}:${('' + (minutes || '00')).padStart(2, '0')}`
-      if (seconds > 0 || fracSeconds > 0) {
-        time += (':' + (seconds || '00')).padStart(2, '0')
-        if (fracSeconds !== undefined) {
-          time += ('' + fracSeconds).slice(1) // cut off leading zero
-        }
-      }
- 
-      return time
-    },
-  }
-}
- 
-TimeOfDay.description = 'Time of day'
-TimeOfDay.toString = () => TimeOfDay.description
- 
-export { TimeOfDay }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/coverage/src/validated-string.mjs.html b/qa/coverage/src/validated-string.mjs.html deleted file mode 100644 index 275494b..0000000 --- a/qa/coverage/src/validated-string.mjs.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - - Code coverage report for src/validated-string.mjs - - - - - - - - - -
-
-

All files / src validated-string.mjs

-
- -
- 100% - Statements - 44/44 -
- - -
- 100% - Branches - 32/32 -
- - -
- 100% - Functions - 2/2 -
- - -
- 100% - Lines - 34/34 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -1342x -  -2x -2x -2x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -36x -  -  -  -  -  -  -  -  -  -  -36x -36x -  -36x -  -36x -2x -  -  -  -  -  -  -34x -2x -  -  -  -  -  -  -  -32x -2x -  -  -  -  -  -  -30x -2x -  -  -  -  -  -  -  -28x -4x -3x -  -4x -2x -  -  -  -  -  -  -  -  -26x -2x -  -  -  -  -  -  -24x -2x -  -  -  -  -  -  -  -22x -4x -4x -  -  -  -  -  -  -  -18x -  -  -  -18x -16x -  -14x -  -  -2x -3x -  -  - 
import { ArgumentInvalidError } from 'standard-error-set'
- 
-import { checkValidateInput } from './lib/check-validate-input'
-import { checkValidateValue } from './lib/check-validate-value'
-import { typeChecks } from './lib/type-checks'
- 
-/**
- * Validates a string according to the provided options. This is useful when there's not a pre-built type like `Email`.
- * @param {string} input - The input string.
- * @param {object} options - The validation options.
- * @param {string} options.name - The 'name' by which to refer to the input when generating error messages for the user.
- * @param {number} [options.failureStatus = 400] - The HTTP status to use when throwing `ArgumentInvalidError` errors.
- *   This can be used to mark arguments specified by in code or configurations without user input.
- * @param {string} options.after - The input must be or lexicographically sort after this string.
- * @param {string} options.before - The input must be or lexicographically sort before this string.
- * @param {string} options.endsWith - The input string must end with the indicated string.
- * @param {number} options.maxLength - The longest valid input string in terms of characters.
- * @param {string|RegExp} options.matchRe - The input string must match the provided regular expression. Specifying a
- *   string which is an invalid regular expression will cause an exception to be thrown.
- * @param {number} options.minLength - The shortest valid input string in terms of characters.
- * @param {Array.<string>} options.oneOf - The input string must be exactly one of the members of this array.
- * @param {string} options.startsWith - The input string must start with the indicated string.
- * @param {Function} options.validateInput - A custom validation function which looks at the original input string. See
- *   the [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @param {Function} options.validateValue - A custom validation function which looks at the transformed value. See the
- *   [custom validation functions](#custom-validation-functions) section for details on input and return values.
- * @returns {string} Returns the input.
- */
-const ValidatedString = function (input, options = this || {}) {
-  const {
-    after,
-    before,
-    endsWith,
-    maxLength,
-    minLength,
-    name,
-    oneOf,
-    startsWith,
-    status,
-  } = options
-  let { matchRe } = options
- 
-  typeChecks({ input, name, status })
- 
-  if (after !== undefined && [after, input].sort()[0] !== after) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `must be lexicographically after '${after}'`,
-      status,
-    })
-  }
-  if (before !== undefined && [input, before].sort()[1] !== before) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `must be lexicographically before '${before}'`,
-      status,
-    })
-  }
- 
-  if (endsWith !== undefined && !input.endsWith(endsWith)) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `must end with '${endsWith}'`,
-      status,
-    })
-  }
-  if (startsWith !== undefined && !input.startsWith(startsWith)) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `must start with '${startsWith}'`,
-      status,
-    })
-  }
- 
-  if (matchRe !== undefined) {
-    if (typeof matchRe === 'string') {
-      matchRe = new RegExp(matchRe)
-    }
-    if (matchRe.test(input) !== true) {
-      throw new ArgumentInvalidError({
-        argumentName  : name,
-        argumentValue : input,
-        issue         : `must match ${matchRe.toString()}`,
-        status,
-      })
-    }
-  }
- 
-  if (maxLength !== undefined && input.length > maxLength) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `may be no more than ${maxLength} characters long`,
-      status,
-    })
-  }
-  if (minLength !== undefined && input.length < minLength) {
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue         : `must be at least ${minLength} characters long`,
-      status,
-    })
-  }
- 
-  if (oneOf !== undefined && !oneOf.includes(input)) {
-    const issue = 'must be ' + (oneOf.length === 1 ? `'${oneOf[0]}'` : `one of '${oneOf.join("', '")}'`)
-    throw new ArgumentInvalidError({
-      argumentName  : name,
-      argumentValue : input,
-      issue,
-      status,
-    })
-  }
- 
-  const validationOptions = Object.assign(
-    { input, name, type : 'string' },
-    options
-  )
-  checkValidateInput(input, validationOptions)
-  checkValidateValue(input, validationOptions)
- 
-  return input
-}
- 
-ValidatedString.description = 'Validated string'
-ValidatedString.toString = () => ValidatedString.description
- 
-export { ValidatedString }
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/qa/lint.txt b/qa/lint.txt deleted file mode 100644 index c3e21c9..0000000 --- a/qa/lint.txt +++ /dev/null @@ -1 +0,0 @@ -Test git rev: c48599433c3860432dab5c6061e52c892726991e diff --git a/qa/unit-test.txt b/qa/unit-test.txt deleted file mode 100644 index 78c0ba2..0000000 --- a/qa/unit-test.txt +++ /dev/null @@ -1,60 +0,0 @@ -Test git rev: c48599433c3860432dab5c6061e52c892726991e -PASS test/validate-string.test.js -(node:66664) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. -(Use `node --trace-deprecation ...` to show where the warning was created) -PASS test/type-names.test.js -PASS test/date-time.test.js -PASS test/day.test.js -PASS test/email.test.js -PASS test/time-of-day.test.js -PASS test/card-number.test.js -PASS test/integer.test.js -PASS test/boolean-string.test.js -PASS lib/date-time/test/process-idiomatic-date-time.test.js -PASS test/numeric.test.js -PASS test/ein.test.js -PASS test/ssn.test.js -PASS lib/date-time/test/process-iso-8601-date-time.test.js -PASS lib/date-time/test/get-timezone-offset.test.js -PASS lib/date-time/test/process-rfc-2822-date-time.test.js -PASS lib/test/possible-boolean-values.test.js -PASS lib/date-time/test/convert-month-name.test.js -PASS lib/date-time/test/convert-timezone-offset-to-string.test.js -----------------------------------------|---------|----------|---------|---------|------------------- -File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s -----------------------------------------|---------|----------|---------|---------|------------------- -All files | 99.86 | 97.49 | 100 | 99.83 | - src | 99.79 | 97.78 | 100 | 99.76 | - boolean-string.mjs | 100 | 100 | 100 | 100 | - card-number.mjs | 100 | 96 | 100 | 100 | 34 - date-time.mjs | 100 | 100 | 100 | 100 | - day.mjs | 100 | 96.29 | 100 | 100 | 80,87-89 - ein.mjs | 100 | 100 | 100 | 100 | - email.mjs | 95.65 | 88.88 | 100 | 94.73 | 123 - integer.mjs | 100 | 100 | 100 | 100 | - numeric.mjs | 100 | 100 | 100 | 100 | - ssn.mjs | 100 | 100 | 100 | 100 | - time-of-day.mjs | 100 | 96.47 | 100 | 100 | 121-124,142 - validated-string.mjs | 100 | 100 | 100 | 100 | - src/lib | 100 | 92.59 | 100 | 100 | - check-max-min.mjs | 100 | 100 | 100 | 100 | - check-validate-input.mjs | 100 | 75 | 100 | 100 | 3 - check-validate-value.mjs | 100 | 75 | 100 | 100 | 3 - possible-boolean-values.mjs | 100 | 100 | 100 | 100 | - type-checks.mjs | 100 | 100 | 100 | 100 | - validate-helper.mjs | 100 | 100 | 100 | 100 | - src/lib/date-time | 100 | 97.61 | 100 | 100 | - convert-month-name.mjs | 100 | 100 | 100 | 100 | - convert-timezone-offset-to-string.mjs | 100 | 100 | 100 | 100 | - get-timezone-offset.mjs | 100 | 100 | 100 | 100 | - make-date-time-string.mjs | 100 | 100 | 100 | 100 | - process-idiomatic-date-time.mjs | 100 | 96.75 | 100 | 100 | 79,87-90,106,115 - process-iso-8601-date-time.mjs | 100 | 100 | 100 | 100 | - process-rfc-2822-date-time.mjs | 100 | 100 | 100 | 100 | -----------------------------------------|---------|----------|---------|---------|------------------- - -Test Suites: 19 passed, 19 total -Tests: 515 passed, 515 total -Snapshots: 0 total -Time: 0.734 s, estimated 1 s -Ran all test suites.