diff --git a/assets/navigation.js b/assets/navigation.js index eb74b987..5cf82699 100644 --- a/assets/navigation.js +++ b/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "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" \ No newline at end of file +window.navigationData = "eJztnVt32ziSx79Kjp97tre7Zy+Tp7Vle8fT8aUtJXmYMw8wCUlokwCHBB1r9+x33wOQEnGpKiCx3K2k9cr640cSxI24VP39f080f9Ynb09O25ZtTr47KdaiKlsuT97+3bddVLzmUp98d9IwvT55e6I3De++d23/stZ1dfLdyaOQ5cnbH//1L//xw7/9+H/fTRz9jrNOL/qm4hHHsaU416xpeAliHFOasnng29cOIFtLFuOes1LJaoOzPEUWE3m5rSXFuOe1euKXoh1z9ELqNno0UJRHfsfSYF+T4oIvnPWuzGTqQt0+/MoLp3gue1looWT3vSfwaf/+Zxf0iQnNy7NKFY9Crq5ZA9IiVRp5KSrNW4I2CDJAqr1gxZoiDQoCVaj6QUh+0baq7SCSJ6BALWc6rEEOZjITkKV9cySvd8Yk4LbXV7Lkzxx8o1CTxC3UhezrD6zqKaCrIpCrVvWNzYczMKNcO4Fpba0675tKFEzDzxVqSFzDmUa/nmMmIN26Xy4rvAy4dgKjW1FbzVy3Qq7AVws1FG7T8BIpUltblPwfbkfVdbzVSG/Itsa4CloLVYut4GOLtCw7K1Xp1rx4BKubMaQSzvpOq/qc8+aXnlVCwxUXVKbQ2FvtjATANF3vpRYVBNgZMz7Zm7dv3g8YcBxjNUJJ27RN9yoqk/Xd977dv90PP/6nc7cZk2f8om501PdNllS/NeTwba+bXg93druIkQZoUlzwsbKeyL72NdPF+raxeR9RQkGKeMmqLnoWezErpW1aweTWkmJcLS/+2bMqeo3t9Yz0z5rLEgIMhuSopu31OsqA4Woq7cdtuUc+RmiHeW4dmakGG+IXqtks1q3qV+u/dUrCwwJPQtZG0y8idzKmM9bxxaaJPq1rS2XPa3TUXNM0T5DIgCfk/e97qUXNB8F4By77uvt+svhot+GZNEgbFgioRqzo25ZLDT3QE2sFe6h4930k8ok/uZ+k5Jq3tZAcQk65CMiIjyI6mubaCUzDWwQwWOivOeY1XHOm0fI17zq2gssOpPstRulcdn3Lg9IyYRxzHuRUlndmcCjL8S0S1EhP3eZZt6zQbh6B9FhGfr7LMSXyBc/5g+plwed64/6CDpXSM+L1ciuLK+TWQtXEU7lxntGfF5lMqRbxRl3Jptcdhgrtyc7LDJUxmGdMdmUta67kot1gXVlgT/EKVlWn3UYW61ZJ1XcVPI6NVFR9Y1X1Uej1PdetQGqwL6HarGXY8Tvt1RLq/r3kNWe2+jzzojeJzvuW+d9gwmFaarS9zW1wtL01kjXqr4vFHVKb/qp1M9dM911YlSYLXo8mzYxpvlLuQ4aUrSKHdraJeUPZgzSp8rcmuVPnCen+9EPUg7o5+7f57c2bt29mqq7RBssMv2aqbpgWD9HP9/BWgCT1Un6ScDoNwkIzainuXStqocVTNPZDZJ9HB38YAElyTrExHRY2Ep6sZAf+4hH1BPu1U1IswQo7msjqOhaqG1VypEh9bIXm5iHQFtq352fgpajATtxXkBNVjAS5drLVG98A43gCMjvfqRWSjdz8Zg/mqDHY2ogBdAWnrMhEzjzrO7VawfPMkSg5r5tiIZggn+gJmXdqNVOVan/mUTPvmPD2/Z1aDXMj/s/kjjAZSYa90UzJpViF5d63pkp9mGc7RpRTWNp3ahXVvcmSx0CqsGfMINkqD73MYMgm3LGW1dDTuOZsGg5KT8aod2o1zB7DzxQJUsSSL1lfaawITTUYFJJ/0ls99D0hLvZpEWyUmRATzNewwbIvBIJ2RgKgpywHZ+snM9nS3PT1A8f+0GdKtfEc3nA1OUlrVT+VcOqfylT6c7ES0SjKXkynrLnsoIo8WfIZ8Ru4tuSStJDX7DlajrZXM+vIou1lYf9M5v1yKbyFuqjsxWKiCLGyNKNl1i3UrhjEo41QRPV/FavhpQxjSM6ShJkVzopA2RYMeP7Zi5Z380JwqcVSFDdKoz+AuJq6heplCdKMgVpaUxf2JUo8qwMJCbM7GiiUIyBBFCOdfChu1IN4isS/NY6ZrGRrtvv3Ahex5Ab+N9sZkttwWm7XP2asqh6Yu5q43dLj29NtZN1UXPP7oSTGTaVnzqWFs/A+DJqCBxa0ZF9768DTMkO0BAykfi6qvoSX+VxbJudnvunM9JFdPxNyBb8gKU7fyU6M5t6JEKfu9DPfzFQfbwfbXk+lv2OtFsxOp930VWVa/xAFSD6D+l6WfCkkj/o9SJPe9GSLbnkqyxulzdPEW55CRS7T5P/tEuMN1hRrzvUw+GOVeQAkQ2FVBjv9+qAoRX4vH6X6JOHWzDOmSLbMnmon00JcrMhiRpUmr3bsbUtaKZZL+9MOTkhP1gTijHWiwAjWmAAMD4o+xGhOQPB11cma3uiF5qlrTy3y2gn8uWrNRr6NV1yCxd5QSIOHm9ulkTEpAo6F2WDTIqSpRpWNJBe8I10C2845+Hm2tozkl62qke1bgYSC7WfXXc0aM1ygKnMgoWEkJh+Af7JAkg+bbyTYRgAyAqpqMRYZrKD6CmrJXhSPNMpXEKjOTiEgM+g7I/WLYMr/cCtT9IjaDSszxvtv3r655u0Km6Gvjc3sx4NXAUcjuapoNXbAc9eqxmx1Q4oQqEyhR+UG768AGZkvd0yvU2thppXuaqPE2vDBmnMjYn2k23Sa1/dKaf9W09SFryDmK5ZClqey4J2Gd2S4dmqNWWreNqoapknYkn8UslSfOiwrKD218qSEXRDpFupcgM/rKxILOYuuCCZJ/YWcrZ3ENBUruBnAO69wtbzhvOTwpAaZgrxVp6onflU3qtVYxkYicqLiTnXiGUM5Zrq8tqKrWapqmJ10g3JWCeDoTmhPjWon/R3bVIpFv1aRIPm/ZsWnVWXHoNeq5PFmTUiTzR3kM7tghYJdUR55ehQYOtnzeJf9+BQwbmfOo/3MN7y0eurFQ1UeO4n9MuINqymeMadoTXj7cSYFaqsxLdFqR0lua6Gvyiz6ICW3fQQ1ml42vXhumCzvlDYTvqyyPekAMMP0a9Yg9TM3XXqayXLy75h9DzBLiG55rMPlUJDPmWZILXcUecXSKM/7ukEWU0FRXhHFi0xeCTHZQZePseaI1bAVbOjmkP3CuJbasDikuucd1xn0UJcmz4s1rxkJdSRp3u79wp1pXlPji3JKqKpFh5XNc77kbWtH0KMqeI9AQL+FlfzS8x4AudYMykLUXPUazd1IRDHtAk30is55VfDt4rphTvmASyYsXCqNTg4Fm778tMB2r2jBZnzEKzm+NLZ0E+oSYzQrTtXU6cu9b0rTEz15IzXoEzvC3DJzpXkdF3rfnm4Xw0egiIMiXYfumSwVdlaktcYzpSrO4MVPV0AN5K3uSmqO7GnyBEkQvmHBtZPFY3hvunSwqlKfeHnvMN9xje3bwNVkv3LPVxfPDfYEshM7QXzHnZUYOJljUubP687kUW/bV5yIiqmRWQ44EtEbCgbNZcXgs6i+gtoR0BWs4cPHuFRt+HzO1gBISE1osSW3K3bghNbWSAHMio25yYx1fG52gmjxhBwIxbQ5eDQPfQVZV+a84tQBjv/mkrei2Mm8GeihaQIkyfZOFI8zVVWs6XjpPoLf5oGq9KJaNc4PxitpW0seA37dz3nPzmp37+A/lPu9Ihn5/eMXDFnGGu6GD7/8tqGFPvtgNGVyusew9XOy+HT/CG8n5AoZ3nvGVAZedeZOCMkzJovc1EoNTXdU2kJBco21F9FPmbmWSmcbYd4WwLSRY8qitHwpor1jkyWLAafPSjvsIIPSD5bkWu7Lu8BxVxtS4qLdb0Th+4171uErhzno9KquIK+LJgYwseq37PWbZ+I9n5OvuPddiKwsowrokcA6GCGC2ucTgAoYAdDEiYRhbnqJoewMjuPVvDIt50L9zB/Yg9/Ku2fyYh2JbYRmlfifwe1R2Mi6XEBIgcd+8eNaaD5vWAE/baSikHbu0DTWH/4Mwhw7uW1ClvP+YVjkJH3kxDoCu2Yd9k1GE7V2haYVqaRmtcm0Y5dCsmqm5K/R+VR/ZQrSEvjHbSFaqNm2aEFoSEcutW8e+GxXpuBldk9CrkoZJz+nshMX9q9hpkrKG1AgTILtnn0cZ80ZENPMURRjT2J2noxma2Y2K3L4LDwqTt7gQpbmtMfUT+D4SJqEE+23J0iD0FbctacxFCKdHG/RXXt65XYYnZ8OzriI9VpPl/gXnjcVPH+4M1IAY7+SdgkIB4Wi19xuYmYb8UmmyUr+PC14h20i17zTH/kDNNYZTdRQxzoimkvWdGtFOMLaKqhtgbwrWvEANohbG9WPgHcnP40ww2u4uRxN6cSmT5kpaS/iHEdFFZUxk9Cn8gS5oMQTYtpkcaLnK7cf3OwGuRad+YtBFhkwJTWfbXYXbB1OgO83bUIAZDmbG8wb+h3+hNzaUpzxdmcbz9vM9vDCZEtxtq+APVNo/1zedV9p0VR8cAmSovvqz73XXMjVmDZ1I0eaexfnI6cyC5C+4C55WZhM+IInyMhYOlXq3teqWLNx/d1f2tsasghmVxxIMIYswrwX8XrTZMlijP1hjDCGbALS7IT2FM/kHYELzMlpPimeeNux6oy1/DzqVLdHKgDRZ5GvgGManjmblnzGz34+4tk+47muNHYqDpBkU4kPDWmSU5J2eAVCwzEYSkX8kmZBAyE5vhtdvTnylFc4X0rOIiSe1hPQY5vBfwQ0qLlhbas+LdSp+e2LNuj51mSlH9UXzw0vdHw2LbSneLdPvLVuS0LQzpBccfgaz+HdKPlBxesavjXFWnT3vOjbeLCwM+QShh1DbVS1Q/tn8BYtKx7j5Z9YkWYulLrui/UuYcwMFSnmcIzdd7kSHnKPfa4E82GPO6f48GTYZE9gjJMKv9j6mK2drP/v31+dI/X/S1fQXjR96z7b8J8OPZrZR3lVI04Sd0Yi/4zmgyi5wgDWmNh+dWl8PIraToldtt5GXn8rViRMvfabt2/GyBIdkgO/9LzdutCar1mpPiHLsKgw2ddaN1VmW76Rn/OHfnUuwA4MVpKLEVXRV0zzBX/WkLsPz/UgJKXgxu321fJCatHyanMl50WrquqD4J/AG+Dy9E0y4ZnQrXfP4csvkL49VmUgzZa5BWtX8AnFWJVYVtkemU+d5gl1CazpvJeV+pTChjoCu+J6xs0BoNtlFMfFOy0VqGjkuWjNlpBtvYSJvogG3vBO8zIB9EU08I4Z58X0K3sacrg5ai5V0XfwSaNQk4P7IDqB9F+hhsD9M2rgIGCsIpBaLdjqtrUHAQW2NhKJyEZ93Lt+rsbRDdSml8of+jj7I1Q85Al2M3o3oGcrB435O2BC8hb2WQqK8E1Fg/yDqvranHVohFxBrukQGbFZyXiKVMHDwE7MCGmqrwsSXcmlCumA5AuoJhujcTemy+NfyCfA04try+PcqVajoNGYR9p9Xpi1Myd/enoZZI1dPJUl/P0T8s+/W+5t8vj82UQpAqsV7BKMTJDTFoz+PsEmQFjkOMD0P9JkSu4yO1zfqcNPxnxTV0LCUWNcATWRoz5J80OAPZFrJ1eAWXlaVWC++weBfVUCeS5aewL5bGPjcnToOj4oTcPHX+Mn8NVDTQJn7m7ih4gOf3lXk8DtwTNua45nJT+JryHXroXmCVyoSeHMG5zKEjmBHkhSsP04AR5bl5sGO7xy09QfVfvY+ZvBxok+x5ZqDsxQ/6apz4TEjo37itQgEX6uYIyIP2BUAu9Y8chWHHNyHUhy8vR2jmTpbcPNCT25mltnC+GwKjDjw6kxqAmKi8KfkGRvc4ToUKo7rieBcK4s7PQ4w4azrHv8pecdNk53zORCwE5lQwvNlCztqP4a/mWm9On/8Xte8Scm9WkLHxEBZFRZ7OV8zatqHO6AZdGX0Dt4OKtTvFj1OR8ysZnCUM+VxE4E+nZq44RV2u0VFGoSJFlzXfKWhDmKHJo5aErTtookLZze8UDQrE4QiWUq0MhoLlakGnDjwtjcffBGjnvnjkUpMlr38FlQUp9ef5lqIrjrIBJk/G641Qd5bliVYjv5GQIdU4qyGyYu1H0vJTwzEYmIHqLyvjQ8875CHzBs8maVmBetaOBdpo6dbJnGDvrN2zf/xfqVmXH605NoTYwp3L3MPsImHVKwmEMIRvCy4HAvOxD3shBWB+vt4DXP1u/Vk8I+Q/vtJ6DY4bmaPrRI9IfvYmt/x1wP1833McDDSwM87Cso6x/P4fq36onLGwC3v41T+dfx4/BaQQD3d+z/GM8Po+8rnt9LwxUcg4QhpG8uSJhZjuclODB0TGnK5gGuyJMli7EHz2pWu91MiT+Tp8hiIpm0tSQZLwgqdcibsvcdhvmPtsn7Nf0uHR0OHx0O78vh8OH6V3SYe3codW+P+lunKLaVN/ENog4FFOWR37E02NekuYcdvGmfh1oOya/c1xmUav9BYo8Hjb70oBE4wMwaW9pwRdgAzDOmSPsLUvalB4kOLbjZ0TXgjtGy5kou2g268dO3p3iv5u/XucXLvRmOW6Kgpcpo3xS2avlbuEf8wwfnfvXIy9xMxr9TYKZubVTy1/ZfuSZnfic2pAsd04ZbOCBORb7ui2Ol788d51cXKsWBH12J/uFcie7LG/uLvZJO5y5Aws5KIfYVGpaZI9W8PKtU8SjkComXGavSyEsbSJWgDYIMkGovGOyi3lcQqIJV1Wm3kcW6VVL1HewvIFYlkKYruedoEMdAQsK+Mke1FavBkmINVMJX8HCr6gchud3NdM27jq2QrwHoMrFJHg1qtodlsTofSCiY7d+C9ZfwIBaw+IJBwmVEEAWtKgLAFCsT82JfxTsfQNDPBeAqCPu98KHHGNrOkNs4Zwn2F4a+W4DdhRjk1Gwp4abbG+tlghrpk7cJVwlDLLReCGBe5K3m1aK4bD1OOA0biI1lBHSIg46MB3bGJODFgdZHWa9Jp+O+JolbKLOXDK8FsYpEvopr9NeMME+/vSdIgL4oaLKHOEa7P5xo9y9zx79ctL1eg2V0a6OSf7k3f9HRPb1rJzCvHBTg105JxJn3aCISv1pEgd/fg5qLaUzDQ/3XBhIaRmLyAXhVDyT5sPlGgqNAQEZC9xgPoubMDrCeedGbtOd9i4YywLQkvl3xc87BFmpnTAPs5p+7VjW81UhfAStT6FG5wQf5gIyAqlqM/QDW+/gKAtVY5zMQYrBQSUXxSD+FryBQ31gYTQdzjIQCMr8kEsouTQ73GFjFx/z+gVU40+jckmOmIa8RnaUddiV088IcgBNLUdwoTZQITE3dQvWIvwdjIBK+PIrqi0PPHFjwTRdy2AFiHdS6Xy6jczMOyLFTmIOLAqTVhZ2eKvFlwEBCwnb71mDQzkxC7P5+6nkcAQmiGOnkrajt9xyeGCw/oYbE2V0P1Ht5Cgplpg6Q3/mtLZV8GNSZGkrMq8BKAm1W3CCQuZ5IFhzD8tMCB7ACn1vjLigQsDUmAPiXmawJxLh7+kqOB/IxWKhLYF8cpgvxvTGEWkB8b5xao1AScRXg2/3b+54CZkyewSduJ4ufHjhD3Xda1YN/i+HO8Y5SSJPiwgeBs04A26ly03kjW/MiQYp4yaouehZ7MSsleJBxsqQYV0vrJiE+Zjpez0hvPNTEh+R3hhQhnCEct9ICc4PAPkkmtHU5hO2TDOwp3q5qxNsKrIXambALYIInN1ZqrdN4MwcXOY0hlRC79c6YaIptPmFNsTV+SWOj8VCBx6Bux6Bu0L2OQd2OQd2OQd183jGo2zGoW/OFQd0OJSTv1xRc7kXBgw85Np0DOoY4hkGvEeIYGR1/QiNwHeNPkT87x/hTPvIYf+oYfyrifRvxp37/WISHGwHLn8F5pXiJSN8lh/+8rz0A1r4iP4w+XsRq2PZ0w3nJS9R/L6alZrSGVPcmXkoGPdSlyfNizWtGQh0JxTtGGPhWIgz8RuHh9hIt6xhk7hCDzL1ejIp9hUEavaeVgwuxc6ZZSIsVeUyjPO/rBnlrUJRH3vUdYd/qORzzRSnyNxHz4xsKaHj4EUz2HZ/wFaNnfXbsV/cf+1UDSzp7C/YdEGZwggFRBguRtLMZahZc/MNcE8JXUFPI+4s6+TWFIju0CJmvEhrNzNakZnMyJ4f2FIlQmGmeRlVDx8eW/KOQpfrUYWBKT05y7CUa3wQ0p8ds/NCFQoJR+gpywmNvcaBeJa7jMU7rwcVpfXGwTR+26IrAKZpP2tpJjD0MYBZYnBp5tRymNGAwlYK81V7D1La8U9UTv6ob1Wqs2YlEFPAlwdg8zAGGsXTnRM0S0zOWY46Zmgf9lmME/+P/ARaPtWE=" \ No newline at end of file diff --git a/assets/search.js b/assets/search.js index d04d1fe4..8dc2e10d 100644 --- a/assets/search.js +++ b/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/classes/AssertionError.html b/classes/AssertionError.html index 2daba7e6..b52248ec 100644 --- a/classes/AssertionError.html +++ b/classes/AssertionError.html @@ -1,4 +1,4 @@ -AssertionError | augment-vir - v31.4.0

Class AssertionError

An error thrown by the @augment-vir/assert package when an assertion fails.

+AssertionError | augment-vir - v31.5.0

Class AssertionError

An error thrown by the @augment-vir/assert package when an assertion fails.

This requires both a baseMessage (the default "this thing failed" error message defined inside @augment-vir/assert for each assert method), and a possibly-undefined userCustomizedMessage (the optional user-defined failure message for any assertion).

@@ -6,6 +6,6 @@

Hierarchy

  • Error
    • AssertionError

Constructors

Hierarchy

  • Error
    • AssertionError

Constructors

Properties

Constructors

Properties

name: string = 'AssertionError'
+

Constructors

Properties

name: string = 'AssertionError'
diff --git a/classes/Debounce.html b/classes/Debounce.html index ac0bba96..91dea55e 100644 --- a/classes/Debounce.html +++ b/classes/Debounce.html @@ -1,11 +1,11 @@ -Debounce | augment-vir - v31.4.0

Class Debounce

Enable debouncing of callbacks, with various styles of debounce supported in DebounceStyle +Debounce | augment-vir - v31.5.0

Class Debounce

Enable debouncing of callbacks, with various styles of debounce supported in DebounceStyle (see its docs for debounce style details). A callback can be provided on construction or to the .execute() method.

import {Debounce} from '@augment-vir/common';

const debounce = new Debounce(
DebounceStyle.FirstThenWait,
{
milliseconds: 500,
},
// callback can optionally be provided on construction
() => {
console.log('called');
},
);

debounce.execute();
// providing a callback in `.execute()` permanently overrides the callback provided in construction.
debounce.execute(() => {});

Constructors

Constructors

Properties

  • debounceDuration: Partial<Record<DurationUnit, undefined | number>>

    Duration between debounces.

  • Optionalcallback: () => MaybePromise<void>

    Set the callback to be triggered on .execute(). If this is not set, the callback to be called can be passed in .execute() instead.

    -
  • Returns Debounce

    Properties

    callback?: () => MaybePromise<void>

    Set the callback to be triggered on .execute(). If this is not set, the callback to be +

    Returns Debounce

    Properties

    callback?: () => MaybePromise<void>

    Set the callback to be triggered on .execute(). If this is not set, the callback to be called can be passed in .execute() instead.

    -
    debounceDuration: Partial<Record<DurationUnit, undefined | number>>

    Duration between debounces.

    -
    debounceStyle: DebounceStyle

    Debounce style. See DebounceStyle for more details.

    -
    nextCallTimestamp: number = 0

    Methods

    +
    debounceDuration: Partial<Record<DurationUnit, undefined | number>>

    Duration between debounces.

    +
    debounceStyle: DebounceStyle

    Debounce style. See DebounceStyle for more details.

    +
    nextCallTimestamp: number = 0

    Methods

    diff --git a/classes/DeferredPromise.html b/classes/DeferredPromise.html index 683d84b3..44e4d271 100644 --- a/classes/DeferredPromise.html +++ b/classes/DeferredPromise.html @@ -1,16 +1,16 @@ -DeferredPromise | augment-vir - v31.4.0

    Class DeferredPromise<T>

    Creates a promise that can be resolved or rejected at any later time. It also includes indication +DeferredPromise | augment-vir - v31.5.0

    Class DeferredPromise<T>

    Creates a promise that can be resolved or rejected at any later time. It also includes indication on whether its been settled yet or not.

    import {DeferredPromise} from '@augment-vir/common';

    function waitForInput() {
    const deferred = new DeferredPromise<string>();

    window.addEventListener('keydown', (event) => {
    deferred.resolve(event.code);
    });
    return deferred.promise;
    }

    Type Parameters

    • T = void

    Constructors

    Type Parameters

    • T = void

    Constructors

    Properties

    Constructors

    Properties

    isSettled: boolean = false

    Indicates whether the promise has been settled (resolved or rejected) yet.

    -
    promise: Promise<T>

    The deferred promise which can be awaited.

    -
    reject: (reason?: any) => void

    Call this to reject the deferred promise with the given reason.

    -
    resolve: (value: T | PromiseLike<T>) => void

    Call this to resolve the deferred promise with the given value.

    -
    +

    Constructors

    Properties

    isSettled: boolean = false

    Indicates whether the promise has been settled (resolved or rejected) yet.

    +
    promise: Promise<T>

    The deferred promise which can be awaited.

    +
    reject: (reason?: any) => void

    Call this to reject the deferred promise with the given reason.

    +
    resolve: (value: T | PromiseLike<T>) => void

    Call this to resolve the deferred promise with the given value.

    +
    diff --git a/classes/PrismaMigrationNeededError.html b/classes/PrismaMigrationNeededError.html index 9ad030d0..97164477 100644 --- a/classes/PrismaMigrationNeededError.html +++ b/classes/PrismaMigrationNeededError.html @@ -1,7 +1,7 @@ -PrismaMigrationNeededError | augment-vir - v31.4.0

    Class PrismaMigrationNeededError

    An error thrown by the Prisma API that indicates that applying migrations in dev failed such that +PrismaMigrationNeededError | augment-vir - v31.5.0

    Class PrismaMigrationNeededError

    An error thrown by the Prisma API that indicates that applying migrations in dev failed such that a new migration is needed. You can do that by prompting user for a new migration name and passing it to prisma.migration.create.

    Hierarchy

    • Error
      • PrismaMigrationNeededError

    Constructors

    Hierarchy

    • Error
      • PrismaMigrationNeededError

    Constructors

    Properties

    Constructors

    Properties

    name: "PrismaMigrationNeededError" = 'PrismaMigrationNeededError'
    +

    Constructors

    Properties

    name: "PrismaMigrationNeededError" = 'PrismaMigrationNeededError'
    diff --git a/classes/PrismaResetNeededError.html b/classes/PrismaResetNeededError.html index b85968fd..aeeff615 100644 --- a/classes/PrismaResetNeededError.html +++ b/classes/PrismaResetNeededError.html @@ -1,6 +1,6 @@ -PrismaResetNeededError | augment-vir - v31.4.0

    Class PrismaResetNeededError

    An error thrown by the Prisma API that indicates that applying migrations in dev failed such that +PrismaResetNeededError | augment-vir - v31.5.0

    Class PrismaResetNeededError

    An error thrown by the Prisma API that indicates that applying migrations in dev failed such that the entire database needs to be reset. You can do that by calling prisma.database.resetDev.

    Hierarchy

    • Error
      • PrismaResetNeededError

    Constructors

    Hierarchy

    • Error
      • PrismaResetNeededError

    Constructors

    Properties

    Constructors

    Properties

    name: "PrismaResetNeededError" = 'PrismaResetNeededError'
    +

    Constructors

    Properties

    name: "PrismaResetNeededError" = 'PrismaResetNeededError'
    diff --git a/classes/PrismaSchemaError.html b/classes/PrismaSchemaError.html index 50f98f6b..1cdc5e38 100644 --- a/classes/PrismaSchemaError.html +++ b/classes/PrismaSchemaError.html @@ -1,6 +1,6 @@ -PrismaSchemaError | augment-vir - v31.4.0

    Class PrismaSchemaError

    An error thrown by the Prisma API that indicates that something is wrong with the given Prisma +PrismaSchemaError | augment-vir - v31.5.0

    Class PrismaSchemaError

    An error thrown by the Prisma API that indicates that something is wrong with the given Prisma schema. See the error message for more details.

    Hierarchy

    • Error
      • PrismaSchemaError

    Constructors

    Hierarchy

    • Error
      • PrismaSchemaError

    Constructors

    Properties

    Constructors

    Properties

    name: "PrismaSchemaError" = 'PrismaSchemaError'
    +

    Constructors

    Properties

    name: "PrismaSchemaError" = 'PrismaSchemaError'
    diff --git a/classes/PromiseQueue.html b/classes/PromiseQueue.html index 0d032766..c04be7b0 100644 --- a/classes/PromiseQueue.html +++ b/classes/PromiseQueue.html @@ -1,16 +1,16 @@ -PromiseQueue | augment-vir - v31.4.0

    Class PromiseQueue

    A queue that manages its items with promises.

    +PromiseQueue | augment-vir - v31.5.0

    Class PromiseQueue

    A queue that manages its items with promises.

    Hierarchy

    Constructors

    Hierarchy

    Constructors

    Properties

    currentlyAwaiting: undefined | PromiseQueueItem<any> = undefined
    queue: PromiseQueueItem<any>[] = []

    Accessors

    Methods

    • Add an item to the queue.

      +

    Constructors

    Properties

    currentlyAwaiting: undefined | PromiseQueueItem<any> = undefined
    queue: PromiseQueueItem<any>[] = []

    Accessors

    Methods

    +
    diff --git a/classes/PromiseQueueUpdateEvent.html b/classes/PromiseQueueUpdateEvent.html index ca246d7a..36f818d3 100644 --- a/classes/PromiseQueueUpdateEvent.html +++ b/classes/PromiseQueueUpdateEvent.html @@ -1,7 +1,7 @@ -PromiseQueueUpdateEvent | augment-vir - v31.4.0

    Class PromiseQueueUpdateEvent

    The event emitted from a PromiseQueue instance whenever the queue is updated (an item is +PromiseQueueUpdateEvent | augment-vir - v31.5.0

    Class PromiseQueueUpdateEvent

    The event emitted from a PromiseQueue instance whenever the queue is updated (an item is resolved or an item is added).

    Hierarchy

    • TypedCustomEvent<PromiseQueueUpdate<unknown>, "promise-queue-update", this>
      • PromiseQueueUpdateEvent

    Constructors

    Hierarchy

    • TypedCustomEvent<PromiseQueueUpdate<unknown>, "promise-queue-update", this>
      • PromiseQueueUpdateEvent

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns PromiseQueueUpdateEvent

    +).constructor

    • Defined in node_modules/typed-event-target/dist/events/typed-custom-event.d.ts:27
    diff --git a/classes/PromiseTimeoutError.html b/classes/PromiseTimeoutError.html index 066e2ccb..f53b1696 100644 --- a/classes/PromiseTimeoutError.html +++ b/classes/PromiseTimeoutError.html @@ -1,6 +1,6 @@ -PromiseTimeoutError | augment-vir - v31.4.0

    Class PromiseTimeoutError

    An error thrown by wrapPromiseInTimeout when the timeout is reached.

    +PromiseTimeoutError | augment-vir - v31.5.0

    Class PromiseTimeoutError

    An error thrown by wrapPromiseInTimeout when the timeout is reached.

    Hierarchy

    • Error
      • PromiseTimeoutError

    Constructors

    Hierarchy

    • Error
      • PromiseTimeoutError

    Constructors

    Properties

    Constructors

    Properties

    duration: Partial<Record<DurationUnit, undefined | number>>
    name: "PromiseTimeoutError" = 'PromiseTimeoutError'
    +

    Constructors

    Properties

    duration: Partial<Record<DurationUnit, undefined | number>>
    name: "PromiseTimeoutError" = 'PromiseTimeoutError'
    diff --git a/classes/RuntimeEnvError.html b/classes/RuntimeEnvError.html index 716cc515..5ae9f3f9 100644 --- a/classes/RuntimeEnvError.html +++ b/classes/RuntimeEnvError.html @@ -1,6 +1,6 @@ -RuntimeEnvError | augment-vir - v31.4.0

    Class RuntimeEnvError

    Throw this Error to indicate that something was attempted that cannot be done in the current +RuntimeEnvError | augment-vir - v31.5.0

    Class RuntimeEnvError

    Throw this Error to indicate that something was attempted that cannot be done in the current runtime.

    Hierarchy

    • Error
      • RuntimeEnvError

    Constructors

    Hierarchy

    • Error
      • RuntimeEnvError

    Constructors

    Properties

    Constructors

    • Parameters

      • Optionalmessage: string

      Returns RuntimeEnvError

    • Parameters

      • Optionalmessage: string
      • Optionaloptions: ErrorOptions

      Returns RuntimeEnvError

    Properties

    name: "RuntimeEnvError" = 'RuntimeEnvError'
    +

    Constructors

    • Parameters

      • Optionalmessage: string

      Returns RuntimeEnvError

    • Parameters

      • Optionalmessage: string
      • Optionaloptions: ErrorOptions

      Returns RuntimeEnvError

    Properties

    name: "RuntimeEnvError" = 'RuntimeEnvError'
    diff --git a/classes/ShellDoneEvent.html b/classes/ShellDoneEvent.html index 0e31d062..95ec939d 100644 --- a/classes/ShellDoneEvent.html +++ b/classes/ShellDoneEvent.html @@ -1,9 +1,9 @@ -ShellDoneEvent | augment-vir - v31.4.0

    Class ShellDoneEvent

    An event that indicates that the shell command is finished. This contains an exit code or an exit +ShellDoneEvent | augment-vir - v31.5.0

    Class ShellDoneEvent

    An event that indicates that the shell command is finished. This contains an exit code or an exit signal. Based on the Node.js documentation, either one or the other is defined, never both at the same time.

    Hierarchy

    • TypedCustomEvent<
          { exitCode: undefined
          | number; exitSignal: undefined | Signals },
          "shell-done",
          this,
      >
      • ShellDoneEvent

    Constructors

    Hierarchy

    • TypedCustomEvent<
          { exitCode: undefined
          | number; exitSignal: undefined | Signals },
          "shell-done",
          this,
      >
      • ShellDoneEvent

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns ShellDoneEvent

    +}>()('shell-done').constructor

    • Defined in node_modules/typed-event-target/dist/events/typed-custom-event.d.ts:27
    diff --git a/classes/ShellErrorEvent.html b/classes/ShellErrorEvent.html index 86a2f931..e14e6ee7 100644 --- a/classes/ShellErrorEvent.html +++ b/classes/ShellErrorEvent.html @@ -1,4 +1,4 @@ -ShellErrorEvent | augment-vir - v31.4.0

    Class ShellErrorEvent

    An event that indicates that the shell command errored.

    +ShellErrorEvent | augment-vir - v31.5.0

    Class ShellErrorEvent

    An event that indicates that the shell command errored.

    Hierarchy

    • TypedCustomEvent<Error, "shell-error", this>
      • ShellErrorEvent

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns ShellErrorEvent

    +

    Hierarchy

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns ShellErrorEvent

    diff --git a/classes/ShellStderrEvent.html b/classes/ShellStderrEvent.html index 1806d620..ae57e22b 100644 --- a/classes/ShellStderrEvent.html +++ b/classes/ShellStderrEvent.html @@ -1,4 +1,4 @@ -ShellStderrEvent | augment-vir - v31.4.0

    Class ShellStderrEvent

    An event that indicates that the shell command just wrote to stderr.

    +ShellStderrEvent | augment-vir - v31.5.0

    Class ShellStderrEvent

    An event that indicates that the shell command just wrote to stderr.

    Hierarchy

    • TypedCustomEvent<string | Buffer, "shell-stderr", this>
      • ShellStderrEvent

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns ShellStderrEvent

    +

    Hierarchy

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns ShellStderrEvent

    diff --git a/classes/ShellStdoutEvent.html b/classes/ShellStdoutEvent.html index f9bd098d..3a78c969 100644 --- a/classes/ShellStdoutEvent.html +++ b/classes/ShellStdoutEvent.html @@ -1,4 +1,4 @@ -ShellStdoutEvent | augment-vir - v31.4.0

    Class ShellStdoutEvent

    An event that indicates that the shell command just wrote to stdout.

    +ShellStdoutEvent | augment-vir - v31.5.0

    Class ShellStdoutEvent

    An event that indicates that the shell command just wrote to stdout.

    Hierarchy

    • TypedCustomEvent<string | Buffer, "shell-stdout", this>
      • ShellStdoutEvent

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns ShellStdoutEvent

    +

    Hierarchy

    Constructors

    Constructors

    • Parameters

      • eventInitDict: {}

      Returns ShellStdoutEvent

    diff --git a/classes/ShellTarget.html b/classes/ShellTarget.html index f8e1b521..8dfbad43 100644 --- a/classes/ShellTarget.html +++ b/classes/ShellTarget.html @@ -1,7 +1,7 @@ -ShellTarget | augment-vir - v31.4.0

    Class ShellTarget

    A shell command listen target that emits events.

    +ShellTarget | augment-vir - v31.5.0

    Class ShellTarget

    A shell command listen target that emits events.

    Hierarchy

    Constructors

    Hierarchy

    Constructors

    Properties

    Constructors

    Properties

    childProcess: ChildProcess
    +>.constructor

    Properties

    childProcess: ChildProcess
    diff --git a/classes/SnapshotFileMissingError.html b/classes/SnapshotFileMissingError.html index f45ff3a0..c948de66 100644 --- a/classes/SnapshotFileMissingError.html +++ b/classes/SnapshotFileMissingError.html @@ -1,5 +1,5 @@ -SnapshotFileMissingError | augment-vir - v31.4.0

    Class SnapshotFileMissingError

    An error that is thrown from assertSnapshot when the snapshot comparison fails due to the +SnapshotFileMissingError | augment-vir - v31.5.0

    Class SnapshotFileMissingError

    An error that is thrown from assertSnapshot when the snapshot comparison fails due to the snapshot expectation file simply not existing.

    Hierarchy

    • Error
      • SnapshotFileMissingError

    Constructors

    Constructors

    +

    Hierarchy

    Constructors

    Constructors

    diff --git a/enums/DebounceStyle.html b/enums/DebounceStyle.html index d8ac2642..19d09d5e 100644 --- a/enums/DebounceStyle.html +++ b/enums/DebounceStyle.html @@ -1,6 +1,6 @@ -DebounceStyle | augment-vir - v31.4.0

    Enumeration DebounceStyle

    Different types of debouncing for the Debounce class.

    +DebounceStyle | augment-vir - v31.5.0

    Enumeration DebounceStyle

    Different types of debouncing for the Debounce class.

    Enumeration Members

    Enumeration Members

    Enumeration Members

    AfterWait: "after-wait"

    Waits the given amount of milliseconds after the first call and then fires the latest assigned callback.

    @@ -35,7 +35,7 @@ -
    FirstThenWait: "first-then-wait"

    Fires on the first call, then waits the given amount of milliseconds until another call is +

    FirstThenWait: "first-then-wait"

    Fires on the first call, then waits the given amount of milliseconds until another call is allowed through.

    .execute() calls with a 25ms debounce time looks like this:

    @@ -62,4 +62,4 @@
    -
    +
    diff --git a/enums/DockerContainerStatus.html b/enums/DockerContainerStatus.html index 6bc64111..8372f4d6 100644 --- a/enums/DockerContainerStatus.html +++ b/enums/DockerContainerStatus.html @@ -1,6 +1,6 @@ -DockerContainerStatus | augment-vir - v31.4.0

    Enumeration DockerContainerStatus

    All possible statuses for an existing container.

    +DockerContainerStatus | augment-vir - v31.5.0

    Enumeration DockerContainerStatus

    All possible statuses for an existing container.

    Enumeration Members

    Enumeration Members

    Enumeration Members

    Created: "created"
    Dead: "dead"
    Exited: "exited"
    Paused: "paused"
    Removed: "removed"

    This is not a native Docker status but indicates that the container does not exist.

    -
    Removing: "removing"
    Restarting: "restarting"
    Running: "running"
    +

    Enumeration Members

    Created: "created"
    Dead: "dead"
    Exited: "exited"
    Paused: "paused"
    Removed: "removed"

    This is not a native Docker status but indicates that the container does not exist.

    +
    Removing: "removing"
    Restarting: "restarting"
    Running: "running"
    diff --git a/enums/DockerVolumeMappingType.html b/enums/DockerVolumeMappingType.html index e722d82d..1c342ec0 100644 --- a/enums/DockerVolumeMappingType.html +++ b/enums/DockerVolumeMappingType.html @@ -1,7 +1,7 @@ -DockerVolumeMappingType | augment-vir - v31.4.0

    Enumeration DockerVolumeMappingType

    Used for type in DockerVolumeMap. These types are apparently only relevant for running +DockerVolumeMappingType | augment-vir - v31.5.0

    Enumeration DockerVolumeMappingType

    Used for type in DockerVolumeMap. These types are apparently only relevant for running Docker on macOS and are potentially irrelevant now. It's likely best to leave the type property empty (undefined).

    Enumeration Members

    Enumeration Members

    Enumeration Members

    Cached: "cached"
    Delegated: "delegated"
    +

    Enumeration Members

    Cached: "cached"
    Delegated: "delegated"
    diff --git a/enums/HttpStatus.html b/enums/HttpStatus.html index acbc3cdb..a083c282 100644 --- a/enums/HttpStatus.html +++ b/enums/HttpStatus.html @@ -1,8 +1,8 @@ -HttpStatus | augment-vir - v31.4.0

    Enumeration HttpStatus

    All standardized HTTP status codes.

    +HttpStatus | augment-vir - v31.5.0

    Enumeration HttpStatus

    Enumeration Members

    Enumeration Members

    Accepted AlreadyReported BadGateway BadRequest @@ -70,115 +70,115 @@ is intended for cases where another process or server handles the request, or for batch processing.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/202

    -
    AlreadyReported: 208

    Used inside a dav:propstat response element to avoid repeatedly enumerating +

    AlreadyReported: 208

    Used inside a dav:propstat response element to avoid repeatedly enumerating the internal members of multiple bindings to the same collection.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/208

    -
    BadGateway: 502

    This error response means that the server, while working as a gateway to get a response +

    BadGateway: 502

    This error response means that the server, while working as a gateway to get a response needed to handle the request, got an invalid response.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/502

    -
    BadRequest: 400

    The server cannot or will not process the request due to something that is perceived to be a +

    BadRequest: 400

    The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).

    See https://developer.mozilla.org/docs/Web/HTTP/Status/400

    -
    Conflict: 409

    This response is sent when a request conflicts with the current state of the server.

    +
    Conflict: 409

    This response is sent when a request conflicts with the current state of the server.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/409

    -
    Continue: 100

    This interim response indicates that the client should continue the request or ignore the +

    Continue: 100

    This interim response indicates that the client should continue the request or ignore the response if the request is already finished.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/100

    -
    Created: 201

    The request succeeded, and a new resource was created as a result. This is typically the +

    Created: 201

    The request succeeded, and a new resource was created as a result. This is typically the response sent after POST requests, or some PUT requests.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/201

    -
    EarlyHints: 103

    This status code is primarily intended to be used with the Link header, letting the user +

    EarlyHints: 103

    This status code is primarily intended to be used with the Link header, letting the user agent start preloading resources while the server prepares a response or preconnect to an origin from which the page will need resources.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/103

    -
    ExpectationFailed: 417

    This response code means the expectation indicated by the Expect request header field cannot +

    ExpectationFailed: 417

    This response code means the expectation indicated by the Expect request header field cannot be met by the server.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/417

    -
    FailedDependency: 424

    The request failed due to failure of a previous request.

    +
    FailedDependency: 424

    The request failed due to failure of a previous request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/424

    -
    Forbidden: 403

    The client does not have access rights to the content; that is, it is unauthorized, so the +

    Forbidden: 403

    The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401 Unauthorized, the client's identity is known to the server.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/403

    -
    Found: 302

    This response code means that the URI of requested resource has been changed temporarily. +

    Found: 302

    This response code means that the URI of requested resource has been changed temporarily. Further changes in the URI might be made in the future. Therefore, this same URI should be used by the client in future requests.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/302

    -
    GatewayTimeout: 504

    This error response is given when the server is acting as a gateway and cannot get a response +

    GatewayTimeout: 504

    This error response is given when the server is acting as a gateway and cannot get a response in time.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/504

    -
    Gone: 410

    This response is sent when the requested content has been permanently deleted from server, +

    Gone: 410

    This response is sent when the requested content has been permanently deleted from server, with no forwarding address. Clients are expected to remove their caches and links to the resource. The HTTP specification intends this status code to be used for "limited-time, promotional services". APIs should not feel compelled to indicate resources that have been deleted with this status code.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/410

    -
    HttpVersionNotSupported: 505

    The HTTP version used in the request is not supported by the server.

    +
    HttpVersionNotSupported: 505

    The HTTP version used in the request is not supported by the server.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/505

    -
    ImATeapot: 418

    The server refuses the attempt to brew coffee with a teapot.

    +
    ImATeapot: 418

    The server refuses the attempt to brew coffee with a teapot.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/418

    -
    ImUsed: 226

    The server has fulfilled a GET request for the resource, and the response is a representation +

    ImUsed: 226

    The server has fulfilled a GET request for the resource, and the response is a representation of the result of one or more instance-manipulations applied to the current instance.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/226

    -
    InsufficientStorage: 507

    The method could not be performed on the resource because the server is unable to store the +

    InsufficientStorage: 507

    The method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/507

    -
    InternalServerError: 500

    The server has encountered a situation it does not know how to handle.

    +
    InternalServerError: 500

    The server has encountered a situation it does not know how to handle.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/500

    -
    LengthRequired: 411

    Server rejected the request because the Content-Length header field is not defined and the +

    LengthRequired: 411

    Server rejected the request because the Content-Length header field is not defined and the server requires it.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/411

    -
    Locked: 423

    The resource that is being accessed is locked.

    +
    Locked: 423

    The resource that is being accessed is locked.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/423

    -
    LoopDetected: 508

    The server detected an infinite loop while processing the request.

    +
    LoopDetected: 508

    The server detected an infinite loop while processing the request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/508

    -
    MethodNotAllowed: 405

    The request method is known by the server but is not supported by the target resource. For +

    MethodNotAllowed: 405

    The request method is known by the server but is not supported by the target resource. For example, an API may not allow calling DELETE to remove a resource.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/405

    -
    MisdirectedRequest: 421

    The request was directed at a server that is not able to produce a response. This can be sent +

    MisdirectedRequest: 421

    The request was directed at a server that is not able to produce a response. This can be sent by a server that is not configured to produce responses for the combination of scheme and authority that are included in the request URI.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/421

    -
    MovedPermanently: 301

    The URL of the requested resource has been changed permanently. The new URL is given in the +

    MovedPermanently: 301

    The URL of the requested resource has been changed permanently. The new URL is given in the response.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/301

    -
    MultipleChoices: 300

    The request has more than one possible response. The user agent or user should choose one of +

    MultipleChoices: 300

    The request has more than one possible response. The user agent or user should choose one of them. (There is no standardized way of choosing one of the responses, but HTML links to the possibilities are recommended so the user can pick.)

    See https://developer.mozilla.org/docs/Web/HTTP/Status/300

    -
    MultiStatus: 207

    Conveys information about multiple resources, for situations where multiple status codes +

    MultiStatus: 207

    Conveys information about multiple resources, for situations where multiple status codes might be appropriate.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/207

    -
    NetworkAuthenticationRequired: 511

    Indicates that the client needs to authenticate to gain network access.

    +
    NetworkAuthenticationRequired: 511

    Indicates that the client needs to authenticate to gain network access.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/511

    -
    NoContent: 204

    There is no content to send for this request, but the headers may be useful. The user agent +

    NoContent: 204

    There is no content to send for this request, but the headers may be useful. The user agent may update its cached headers for this resource with the new ones.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/204

    -
    NonAuthoritativeInformation: 203

    This response code means the returned metadata is not exactly the same as is available from +

    NonAuthoritativeInformation: 203

    This response code means the returned metadata is not exactly the same as is available from the origin server, but is collected from a local or a third-party copy. This is mostly used for mirrors or backups of another resource. Except for that specific case, the 200 OK response is preferred to this status.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/203

    -
    NotAcceptable: 406

    This response is sent when the web server, after performing server-driven content +

    NotAcceptable: 406

    This response is sent when the web server, after performing server-driven content negotiation, doesn't find any content that conforms to the criteria given by the user agent.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/406

    -
    NotExtended: 510

    Further extensions to the request are required for the server to fulfill it.

    +
    NotExtended: 510

    Further extensions to the request are required for the server to fulfill it.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/510

    -
    NotFound: 404

    The server cannot find the requested resource. In the browser, this means the URL is not +

    NotFound: 404

    The server cannot find the requested resource. In the browser, this means the URL is not recognized. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 Forbidden to hide the existence of a resource from an unauthorized client. This response code is probably the most well known due to its frequent occurrence on the web.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/404

    -
    NotImplemented: 501

    The request method is not supported by the server and cannot be handled. The only methods +

    NotImplemented: 501

    The request method is not supported by the server and cannot be handled. The only methods that servers are required to support (and therefore that must not return this code) are GET and HEAD.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/501

    -
    NotModified: 304

    This is used for caching purposes. It tells the client that the response has not been +

    NotModified: 304

    This is used for caching purposes. It tells the client that the response has not been modified, so the client can continue to use the same cached version of the response.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/304

    -
    Ok: 200

    The request succeeded. The result meaning of "success" depends on the HTTP method:

    +
    Ok: 200

    The request succeeded. The result meaning of "success" depends on the HTTP method:

    • GET: The resource has been fetched and transmitted in the message body.
    • HEAD: The representation headers are included in the response without any message body.
    • @@ -187,51 +187,51 @@
    • TRACE: The message body contains the request message as received by the server.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/200

    -
    PartialContent: 206

    This response code is used when the Range header is sent from the client to request only part +

    PartialContent: 206

    This response code is used when the Range header is sent from the client to request only part of a resource.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/206

    -
    PayloadTooLarge: 413

    Request entity is larger than limits defined by server. The server might close the connection +

    PayloadTooLarge: 413

    Request entity is larger than limits defined by server. The server might close the connection or return an Retry-After header field.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/413

    -
    PaymentRequired: 402

    This response code is reserved for future use. The initial aim for creating this code was +

    PaymentRequired: 402

    This response code is reserved for future use. The initial aim for creating this code was using it for digital payment systems, however this status code is used very rarely and no standard convention exists.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/402

    -
    PermanentRedirect: 308

    This means that the resource is now permanently located at another URI, specified by the +

    PermanentRedirect: 308

    This means that the resource is now permanently located at another URI, specified by the Location: HTTP Response header. This has the same semantics as the 301 Moved Permanently HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/308

    -
    PreconditionFailed: 412

    The client has indicated preconditions in its headers which the server does not meet.

    +
    PreconditionFailed: 412

    The client has indicated preconditions in its headers which the server does not meet.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/412

    -
    PreconditionRequired: 428

    The origin server requires the request to be conditional. This response is intended to +

    PreconditionRequired: 428

    The origin server requires the request to be conditional. This response is intended to prevent the 'lost update' problem, where a client GETs a resource's state, modifies it and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/428

    -
    Processing: 102

    This code indicates that the server has received and is processing the request, but no +

    Processing: 102

    This code indicates that the server has received and is processing the request, but no response is available yet.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/102

    -
    ProxyAuthenticationRequired: 407

    This is similar to 401 Unauthorized but authentication is needed to be done by a proxy.

    +
    ProxyAuthenticationRequired: 407

    This is similar to 401 Unauthorized but authentication is needed to be done by a proxy.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/407

    -
    RangeNotSatisfiable: 416

    The range specified by the Range header field in the request cannot be fulfilled. It's +

    RangeNotSatisfiable: 416

    The range specified by the Range header field in the request cannot be fulfilled. It's possible that the range is outside the size of the target URI's data.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/416

    -
    RequestHeaderFieldsTooLarge: 431

    The server is unwilling to process the request because its header fields are too large. The +

    RequestHeaderFieldsTooLarge: 431

    The server is unwilling to process the request because its header fields are too large. The request may be resubmitted after reducing the size of the request header fields.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/431

    -
    RequestTimeout: 408

    This response is sent on an idle connection by some servers, even without any previous +

    RequestTimeout: 408

    This response is sent on an idle connection by some servers, even without any previous request by the client. It means that the server would like to shut down this unused connection. This response is used much more since some browsers, like Chrome, Firefox 27+, or IE9, use HTTP pre-connection mechanisms to speed up surfing. Also note that some servers merely shut down the connection without sending this message.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/408

    -
    ResetContent: 205

    Tells the user agent to reset the document which sent this request.

    +
    ResetContent: 205

    Tells the user agent to reset the document which sent this request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/205

    -
    SeeOther: 303

    The server sent this response to direct the client to get the requested resource at another +

    SeeOther: 303

    The server sent this response to direct the client to get the requested resource at another URI with a GET request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/303

    -
    ServiceUnavailable: 503

    The server is not ready to handle the request. Common causes are a server that is down for +

    ServiceUnavailable: 503

    The server is not ready to handle the request. Common causes are a server that is down for maintenance or that is overloaded. Note that together with this response, a user-friendly page explaining the problem should be sent. This response should be used for temporary conditions and the Retry-After HTTP header should, if possible, contain the estimated time @@ -239,46 +239,46 @@ caching-related headers that are sent along with this response, as these temporary condition responses should usually not be cached.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/503

    -
    SwitchingProtocols: 101

    This code is sent in response to an Upgrade request header from the client and indicates the +

    SwitchingProtocols: 101

    This code is sent in response to an Upgrade request header from the client and indicates the protocol the server is switching to.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/101

    -
    TemporaryRedirect: 307

    The server sends this response to direct the client to get the requested resource at another +

    TemporaryRedirect: 307

    The server sends this response to direct the client to get the requested resource at another URI with the same method that was used in the prior request. This has the same semantics as the 302 Found HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/307

    -
    TooEarly: 425

    Indicates that the server is unwilling to risk processing a request that might be replayed.

    +
    TooEarly: 425

    Indicates that the server is unwilling to risk processing a request that might be replayed.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/425

    -
    TooManyRequests: 429

    The user has sent too many requests in a given amount of time ("rate limiting").

    +
    TooManyRequests: 429

    The user has sent too many requests in a given amount of time ("rate limiting").

    See https://developer.mozilla.org/docs/Web/HTTP/Status/429

    -
    Unauthorized: 401

    Although the HTTP standard specifies "unauthorized", semantically this response means +

    Unauthorized: 401

    Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/401

    -
    UnavailableForLegalReasons: 451

    The user agent requested a resource that cannot legally be provided, such as a web page +

    UnavailableForLegalReasons: 451

    The user agent requested a resource that cannot legally be provided, such as a web page censored by a government.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/451

    -
    UnprocessableContent: 422

    The request was well-formed but was unable to be followed due to semantic errors.

    +
    UnprocessableContent: 422

    The request was well-formed but was unable to be followed due to semantic errors.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/422

    -
    UnsupportedMediaType: 415

    The media format of the requested data is not supported by the server, so the server is +

    UnsupportedMediaType: 415

    The media format of the requested data is not supported by the server, so the server is rejecting the request.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/415

    -
    Unused: 306

    This response code is no longer used; it is just reserved. It was used in a previous version +

    Unused: 306

    This response code is no longer used; it is just reserved. It was used in a previous version of the HTTP/1.1 specification.

    See https://developer.mozilla.org/about:blank#306_unused

    -
    UpgradeRequired: 426

    The server refuses to perform the request using the current protocol but might be willing to +

    UpgradeRequired: 426

    The server refuses to perform the request using the current protocol but might be willing to do so after the client upgrades to a different protocol. The server sends an Upgrade header in a 426 response to indicate the required protocol(s).

    See https://developer.mozilla.org/docs/Web/HTTP/Status/426

    -
    UriTooLong: 414

    The URI requested by the client is longer than the server is willing to interpret.

    +
    UriTooLong: 414

    The URI requested by the client is longer than the server is willing to interpret.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/414

    -
    UseProxy: 305

    Defined in a previous version of the HTTP specification to indicate that a requested response +

    UseProxy: 305

    Defined in a previous version of the HTTP specification to indicate that a requested response must be accessed by a proxy. It has been deprecated due to security concerns regarding in-band configuration of a proxy.

    See https://developer.mozilla.org/about:blank#305_use_proxy

    -
    VariantAlsoNegotiates: 506

    The server has an internal configuration error: the chosen variant resource is configured to +

    VariantAlsoNegotiates: 506

    The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.

    See https://developer.mozilla.org/docs/Web/HTTP/Status/506

    -
    +
    diff --git a/enums/HttpStatusCategory.html b/enums/HttpStatusCategory.html index 451d68d2..0b639e59 100644 --- a/enums/HttpStatusCategory.html +++ b/enums/HttpStatusCategory.html @@ -1,9 +1,9 @@ -HttpStatusCategory | augment-vir - v31.4.0

    Enumeration HttpStatusCategory

    All standardized HTTP status code categories. These are determined by the first number in the +HttpStatusCategory | augment-vir - v31.5.0

    Enumeration HttpStatusCategory

    All standardized HTTP status code categories. These are determined by the first number in the HTTP status code.

    Enumeration Members

    Enumeration Members

    ClientError: "clientError"
    Information: "information"
    Redirect: "redirect"
    ServerError: "serverError"
    Success: "success"
    +

    Enumeration Members

    ClientError: "clientError"
    Information: "information"
    Redirect: "redirect"
    ServerError: "serverError"
    Success: "success"
    diff --git a/enums/LogColorKey.html b/enums/LogColorKey.html index 84ee6272..2a39c1c1 100644 --- a/enums/LogColorKey.html +++ b/enums/LogColorKey.html @@ -1,8 +1,8 @@ -LogColorKey | augment-vir - v31.4.0

    Enumeration LogColorKey

    Standardized color keys for logging. If you want to use customized colors, use +LogColorKey | augment-vir - v31.5.0

    Enumeration LogColorKey

    Standardized color keys for logging. If you want to use customized colors, use ansi-styles in Node.js or custom CSS in browsers.

    Enumeration Members

    Enumeration Members

    Bold Debug Error Faint @@ -13,4 +13,4 @@ Reset Success Warning -

    Enumeration Members

    Bold: "bold"
    Debug: "debug"
    Error: "error"
    Faint: "faint"
    Info: "info"
    Mutate: "mutate"
    NormalWeight: "normalWeight"
    Plain: "plain"
    Reset: "reset"
    Success: "success"
    Warning: "warning"
    +

    Enumeration Members

    Bold: "bold"
    Debug: "debug"
    Error: "error"
    Faint: "faint"
    Info: "info"
    Mutate: "mutate"
    NormalWeight: "normalWeight"
    Plain: "plain"
    Reset: "reset"
    Success: "success"
    Warning: "warning"
    diff --git a/enums/LogOutputType.html b/enums/LogOutputType.html index 8f8a099f..dd2b4f9f 100644 --- a/enums/LogOutputType.html +++ b/enums/LogOutputType.html @@ -1,7 +1,7 @@ -LogOutputType | augment-vir - v31.4.0

    Enumeration LogOutputType

    Supported log output types.

    +LogOutputType | augment-vir - v31.5.0

    Enumeration LogOutputType

    Supported log output types.

    Enumeration Members

    Enumeration Members

    Enumeration Members

    Error: "stderr"

    Logged to stderr if the current environment supports it, or just console.error.

    -
    Standard: "stdout"

    Logged to stdout if the current environment supports it, or just console.log.

    -
    +
    Standard: "stdout"

    Logged to stdout if the current environment supports it, or just console.log.

    +
    diff --git a/enums/OperatingSystem.html b/enums/OperatingSystem.html index 5f3a06d5..0d143f59 100644 --- a/enums/OperatingSystem.html +++ b/enums/OperatingSystem.html @@ -1,6 +1,6 @@ -OperatingSystem | augment-vir - v31.4.0

    Enumeration OperatingSystem

    The three major operating system types.

    +OperatingSystem | augment-vir - v31.5.0

    Enumeration OperatingSystem

    The three major operating system types.

    Enumeration Members

    Enumeration Members

    Enumeration Members

    Linux: "linux"
    Mac: "mac"
    Windows: "windows"
    +

    Enumeration Members

    Linux: "linux"
    Mac: "mac"
    Windows: "windows"
    diff --git a/enums/RuntimeEnv.html b/enums/RuntimeEnv.html index a88e232e..6b96e64d 100644 --- a/enums/RuntimeEnv.html +++ b/enums/RuntimeEnv.html @@ -1,10 +1,10 @@ -RuntimeEnv | augment-vir - v31.4.0

    Enumeration RuntimeEnv

    JavaScript runtime env.

    +RuntimeEnv | augment-vir - v31.5.0

    Enumeration RuntimeEnv

    JavaScript runtime env.

    Enumeration Members

    Enumeration Members

    Enumeration Members

    Node: "node"
    Web: "web"
    +

    Enumeration Members

    Node: "node"
    Web: "web"
    diff --git a/enums/StringCase.html b/enums/StringCase.html index 889e44e7..6b7a632e 100644 --- a/enums/StringCase.html +++ b/enums/StringCase.html @@ -1,5 +1,5 @@ -StringCase | augment-vir - v31.4.0

    Enumeration StringCase

    The different string cases.

    +StringCase | augment-vir - v31.5.0

    Enumeration StringCase

    The different string cases.

    Enumeration Members

    Enumeration Members

    Enumeration Members

    Lower: "lower"
    Upper: "upper"
    +

    Enumeration Members

    Lower: "lower"
    Upper: "upper"
    diff --git a/functions/addCommasToNumber.html b/functions/addCommasToNumber.html index a82e5120..33b19179 100644 --- a/functions/addCommasToNumber.html +++ b/functions/addCommasToNumber.html @@ -1,6 +1,6 @@ -addCommasToNumber | augment-vir - v31.4.0

    Function addCommasToNumber

    • Convert the given number into a string, then add commas like a normal number would have.

      +addCommasToNumber | augment-vir - v31.5.0

      Function addCommasToNumber

      • Convert the given number into a string, then add commas like a normal number would have.

        Parameters

        • input: string | number

        Returns string

        import {addCommasToNumber} from '@augment-vir/common';

        addCommasToNumber(1000123.456);
        // output is `'1,000,123.456'`
      +
    diff --git a/functions/addPercent.html b/functions/addPercent.html index 9e3fb724..b30a0586 100644 --- a/functions/addPercent.html +++ b/functions/addPercent.html @@ -1,3 +1,3 @@ -addPercent | augment-vir - v31.4.0

    Function addPercent

    diff --git a/functions/addPrefix.html b/functions/addPrefix.html index 10e8116d..86de49ce 100644 --- a/functions/addPrefix.html +++ b/functions/addPrefix.html @@ -1,3 +1,3 @@ -addPrefix | augment-vir - v31.4.0

    Function addPrefix

    diff --git a/functions/addPx.html b/functions/addPx.html index 1687967a..12cb2ab2 100644 --- a/functions/addPx.html +++ b/functions/addPx.html @@ -1,3 +1,3 @@ -addPx | augment-vir - v31.4.0

    Function addPx

    • Adds the 'px' suffix to a string if it does not already exist.

      +addPx | augment-vir - v31.5.0

      Function addPx

      +
    diff --git a/functions/addRegExpFlags.html b/functions/addRegExpFlags.html index 673dbb2f..1623774b 100644 --- a/functions/addRegExpFlags.html +++ b/functions/addRegExpFlags.html @@ -1,6 +1,6 @@ -addRegExpFlags | augment-vir - v31.4.0

    Function addRegExpFlags

    • Creates a new RegExp by adding the given flags to the original RegExp.

      +addRegExpFlags | augment-vir - v31.5.0

      Function addRegExpFlags

      • Creates a new RegExp by adding the given flags to the original RegExp.

        Parameters

        • originalRegExpOrString: string | RegExp
        • flags: string

        Returns RegExp

        import {addRegExpFlags} from '@augment-vir/common';

        addRegExpFlags(/a/i, 'gm');
        // output is `/a/igm`
      +
    diff --git a/functions/addSuffix.html b/functions/addSuffix.html index 248ddf4c..4425844e 100644 --- a/functions/addSuffix.html +++ b/functions/addSuffix.html @@ -1,3 +1,3 @@ -addSuffix | augment-vir - v31.4.0

    Function addSuffix

    diff --git a/functions/appendJson.html b/functions/appendJson.html index 348fac52..1fa580a9 100644 --- a/functions/appendJson.html +++ b/functions/appendJson.html @@ -1,4 +1,4 @@ -appendJson | augment-vir - v31.4.0

    Function appendJson

    Appends all provided JSON values together. undefined values will be ignored. The first value +appendJson | augment-vir - v31.5.0

    Function appendJson

    Appends all provided JSON values together. undefined values will be ignored. The first value determines whether the output will be an object or an array. Any value appended to an array will work just fine, but primitives append to an object will likely behave unexpectedly. Arrays appended to arrays will be flattened (but only by one level).

    @@ -6,4 +6,4 @@
    +
    diff --git a/functions/appendJsonFile.html b/functions/appendJsonFile.html index b0794cf3..3e8b1cbf 100644 --- a/functions/appendJsonFile.html +++ b/functions/appendJsonFile.html @@ -1,8 +1,8 @@ -appendJsonFile | augment-vir - v31.4.0

    Function appendJsonFile

    diff --git a/functions/appendPositionDebugDiv.html b/functions/appendPositionDebugDiv.html index b8b53573..56c6a027 100644 --- a/functions/appendPositionDebugDiv.html +++ b/functions/appendPositionDebugDiv.html @@ -1,4 +1,4 @@ -appendPositionDebugDiv | augment-vir - v31.4.0

    Function appendPositionDebugDiv

    • Useful for debugging purposes, this sticks an absolutely positioned and brightly colored div at +appendPositionDebugDiv | augment-vir - v31.5.0

      Function appendPositionDebugDiv

      +
    diff --git a/functions/arrayToObject.html b/functions/arrayToObject.html index 328b5409..c5ddab5f 100644 --- a/functions/arrayToObject.html +++ b/functions/arrayToObject.html @@ -1,4 +1,4 @@ -arrayToObject | augment-vir - v31.4.0

    Function arrayToObject

    Similar to groupArrayBy but maps array entries to a single key and requires key and +arrayToObject | augment-vir - v31.5.0

    Function arrayToObject

    Similar to groupArrayBy but maps array entries to a single key and requires key and value outputs from the callback. The resulting object does not have an array of elements (unless the original array itself contains arrays). Automatically handles the case where the callback returns a promise.

    @@ -6,4 +6,4 @@
    +
    diff --git a/functions/askQuestion.html b/functions/askQuestion.html index 4aabb617..c2c902a8 100644 --- a/functions/askQuestion.html +++ b/functions/askQuestion.html @@ -1,7 +1,7 @@ -askQuestion | augment-vir - v31.4.0

    Function askQuestion

    • Asks the user a question in their terminal and then waits for them to type something in response. +askQuestion | augment-vir - v31.5.0

      Function askQuestion

      +
    diff --git a/functions/askQuestionUntilConditionMet.html b/functions/askQuestionUntilConditionMet.html index 407827d4..745c5abd 100644 --- a/functions/askQuestionUntilConditionMet.html +++ b/functions/askQuestionUntilConditionMet.html @@ -1,8 +1,8 @@ -askQuestionUntilConditionMet | augment-vir - v31.4.0

    Function askQuestionUntilConditionMet

    diff --git a/functions/assert.html b/functions/assert.html index 5c79e9e4..17de533e 100644 --- a/functions/assert.html +++ b/functions/assert.html @@ -1,4 +1,4 @@ -assert | augment-vir - v31.4.0

    Function assert

    A group of guard methods that assert their conditions and do nothing else.

    +assert | augment-vir - v31.5.0

    Function assert

    A group of guard methods that assert their conditions and do nothing else.

    This can also be called as a standalone assertion function which asserts that its input is truthy.

    import {assert} from '@augment-vir/assert';

    const value: unknown = 'some value' as unknown;
    assert.isString(value);
    // `value` will now be typed as a `string` @@ -6,7 +6,7 @@

    AssertionError When the assertion fails.

    Properties

    Properties

    endsWith endsWithout fail isError @@ -109,7 +109,7 @@
  • assert.endsWithout : the opposite assertion.
  • assert.startsWith : assertion on the other end.
  • -
    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): void;
        (parent: string, child: string, failureMessage?: string): void;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): void;
    }

    Asserts that a parent string or array does not end with a specific child. This uses +

    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): void;
        (parent: string, child: string, failureMessage?: string): void;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): void;
    }

    Asserts that a parent string or array does not end with a specific child. This uses reference equality when the parent is an array.

    Performs no type guarding.

    import {assert} from '@augment-vir/assert';

    assert.endsWithout('ab', 'b'); // fails
    assert.endsWithout('ab', 'a'); // passes
    assert.endsWithout(['a', 'b'], 'b'); // fails
    assert.endsWithout(['a', 'b'], 'a'); // passes @@ -120,19 +120,19 @@
  • assert.endsWith : the opposite assertion.
  • assert.startsWithout : assertion on the other end.
  • -
    fail: (failureMessage?: string) => never = ...

    Immediately throw an assertion error.

    +
    fail: (failureMessage?: string) => never = ...

    Immediately throw an assertion error.

    import {assert} from '@augment-vir/assert';

    assert.fail(); // throws an `AssertionError`
    isError: (
        this: void,
        actual: unknown,
        matchOptions?: PartialWithNullable<
            {
                matchConstructor: ErrorConstructor
                | new (...args: any[]) => Error;
                matchMessage: string | RegExp;
            },
        >,
        failureMessage?: string,
    ) => asserts actual is Error

    Asserts that a value is an instance of the built-in Error class and compares it to the +

    isError: (
        this: void,
        actual: unknown,
        matchOptions?: PartialWithNullable<
            {
                matchConstructor: ErrorConstructor
                | new (...args: any[]) => Error;
                matchMessage: string | RegExp;
            },
        >,
        failureMessage?: string,
    ) => asserts actual is Error

    Asserts that a value is an instance of the built-in Error class and compares it to the given ErrorMatchOptions, if provided.

    Type guards the input.

    import {assert} from '@augment-vir/assert';

    assert.isError(new Error()); // passes
    assert.isError(new Error(), {matchMessage: 'hi'}); // fails
    assert.isError({message: 'not an error'}); // fails

    AssertionError If the assertion fails.

    -
    isLengthAtLeast: {
        <const Element, const Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
            failureMessage?: string,
        ): asserts actual is readonly [Tuple<Element, Length>, Element];
        (actual: string | AnyObject, length: number, failureMessage?: string): void;
    }

    Asserts that an array or string has at least the given length.

    +
    isLengthAtLeast: {
        <const Element, const Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
            failureMessage?: string,
        ): asserts actual is readonly [Tuple<Element, Length>, Element];
        (actual: string | AnyObject, length: number, failureMessage?: string): void;
    }

    Asserts that an array or string has at least the given length.

    Type guards an array into an AtLeastTuple. Performs no type guarding on a string.

    import {assert} from '@augment-vir/assert';

    assert.isLengthAtLeast(['a', 'b', 'c'], 2); // passes
    assert.isLengthAtLeast(['a', 'b', 'c'], 3); // passes
    assert.isLengthAtLeast(['a', 'b'], 3); // fails
    @@ -141,7 +141,7 @@
    -
    isLengthExactly: {
        <const Element, const Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
            failureMessage?: string,
        ): asserts actual is Tuple<Element, Length>;
        (actual: string | AnyObject, length: number, failureMessage?: string): void;
    }

    Asserts that an array or string has exactly the given length.

    +
    isLengthExactly: {
        <const Element, const Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
            failureMessage?: string,
        ): asserts actual is Tuple<Element, Length>;
        (actual: string | AnyObject, length: number, failureMessage?: string): void;
    }

    Asserts that an array or string has exactly the given length.

    Type guards an array into a Tuple. Performs no type guarding on a string.

    import {assert} from '@augment-vir/assert';

    assert.isLengthExactly(['a', 'b', 'c'], 2); // fails
    assert.isLengthExactly(['a', 'b', 'c'], 3); // passes
    assert.isLengthExactly(['a', 'b'], 3); // fails
    @@ -150,7 +150,7 @@
    -
    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<NoInfer<FunctionToCall>, void>;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<NoInfer<FunctionToCall>, void>;
    }

    Asserts that the output of the given function deeply equals expectations. A custom asserter +

    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<NoInfer<FunctionToCall>, void>;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<NoInfer<FunctionToCall>, void>;
    }

    Asserts that the output of the given function deeply equals expectations. A custom asserter can optionally be provided as the first argument to change the expectation checking from "deeply equals" to whatever you want.

    Performs no type guarding.

    @@ -158,7 +158,7 @@

    AssertionError If the assertion fails.

    -
    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): void;
        (parent: string, child: string, failureMessage?: string): void;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): void;
    }

    Asserts that a parent string or array starts with a specific child. This uses reference +

    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): void;
        (parent: string, child: string, failureMessage?: string): void;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): void;
    }

    Asserts that a parent string or array starts with a specific child. This uses reference equality when the parent is an array.

    Performs no type guarding.

    import {assert} from '@augment-vir/assert';

    assert.startsWith('ab', 'b'); // fails
    assert.startsWith('ab', 'a'); // passes
    assert.startsWith(['a', 'b'], 'b'); // fails
    assert.startsWith(['a', 'b'], 'a'); // passes @@ -169,7 +169,7 @@
  • assert.startsWithout : the opposite assertion.
  • assert.endsWith : assertion on the other end.
  • -
    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): void;
        (parent: string, child: string, failureMessage?: string): void;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): void;
    }

    Asserts that a parent string or array starts with a specific child. This uses reference +

    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): void;
        (parent: string, child: string, failureMessage?: string): void;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): void;
    }

    Asserts that a parent string or array starts with a specific child. This uses reference equality when the parent is an array.

    Performs no type guarding.

    import {assert} from '@augment-vir/assert';

    assert.startsWith('ab', 'b'); // passes
    assert.startsWith('ab', 'a'); // fails
    assert.startsWith(['a', 'b'], 'b'); // passes
    assert.startsWith(['a', 'b'], 'a'); // fails @@ -180,7 +180,7 @@
  • assert.startsWithout : the opposite assertion.
  • assert.endsWith : assertion on the other end.
  • -
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): void;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Promise<void>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): void;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): MaybePromise<void>;
    }

    If a function input is provided:

    +
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): void;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Promise<void>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): void;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): MaybePromise<void>;
    }

    If a function input is provided:

    Calls that function and asserts that the function throw an error, comparing the error with the given ErrorMatchOptions, if provided.

    If a promise is provided:

    @@ -193,7 +193,7 @@

    AssertionError If the assertion fails.

    -
    tsType: {
        <Actual>(input: Actual): AssertTypeOf<Actual>;
        <Actual>(): AssertTypeOf<Actual>;
    }

    Asserts within the TypeScript type system that a given type or value matches type +

    tsType: {
        <Actual>(input: Actual): AssertTypeOf<Actual>;
        <Actual>(): AssertTypeOf<Actual>;
    }

    Asserts within the TypeScript type system that a given type or value matches type expectations (using the expect-type package. Make sure to call a method on the first call to actually assert anything.

    Use this to write type tests. Don't use this in production code. It won't cause issues, but @@ -206,7 +206,7 @@

    Never returns anything.

    Never throws anything.

    -

    Methods

    Methods

    • Asserts that two values are deeply equal using the deep-eql package.

      Note that this check may be expensive, depending on what values it is passed. Whenever possible, use simpler equality checks instead (see the see section below).

      @@ -220,7 +220,7 @@
    • assert.entriesEqual : a less expensive (but less thorough) deep equality assertion.
    • assert.jsonEquals : a less expensive (but less thorough) deep equality assertion.
    -
    • Asserts that two objects are deeply equal by checking only their top-level values for strict (non-deep, reference, using ===) equality.

      @@ -234,7 +234,7 @@
    • assert.jsonEquals : another deep equality assertion.
    • assert.deepEquals : the most thorough (but also slow) deep equality assertion.
    -
    • Asserts that a parent value has the key.

      Type guards the parent value.

      Type Parameters

      • const Key extends PropertyKey
      • const Parent

      Parameters

      • this: void
      • parent: Parent
      • key: Key
      • OptionalfailureMessage: string

      Returns asserts parent is CombineTypeWithKey<Key, Parent>

      import {assert} from '@augment-vir/assert';

      assert.hasKey({a: 0, b: 1}, 'a'); // passes
      assert.hasKey({a: 0, b: 1}, 'c'); // fails
      @@ -244,7 +244,7 @@
    • assert.lacksKey : the opposite assertion.
    • assert.hasKeys : the multi-key assertion.
    -
    • Asserts that a parent value has all the keys.

      Type guards the parent value.

      Type Parameters

      • const Keys extends PropertyKey
      • const Parent

      Parameters

      • this: void
      • parent: Parent
      • keys: readonly Keys[]
      • OptionalfailureMessage: string

      Returns asserts parent is CombineTypeWithKey<Keys, Parent>

      import {assert} from '@augment-vir/assert';

      assert.hasKeys({a: 0, b: 1}, ['a', 'b']); // passes
      assert.hasKeys({a: 0, b: 1}, ['b', 'c']); // fails
      @@ -254,7 +254,7 @@
    • assert.lacksKeys : the opposite assertion.
    • assert.hasKey : the single-key assertion.
    -
    • Asserts that an object/array parent includes a child value through reference equality.

      +
    • Asserts that an object/array parent includes a child value through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • value: unknown
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      const child = {a: 'a'};

      assert.hasValue({child}, child); // passes
      assert.hasValue({child: {a: 'a'}}, child); // fails
      assert.hasValue([child], child); // passes
      @@ -264,7 +264,7 @@
    • assert.lacksValue : the opposite assertion.
    • assert.hasValues : the multi-value assertion.
    -
    • Asserts that an object/array parent includes all child values through reference equality.

      +
    • Asserts that an object/array parent includes all child values through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • values: unknown[]
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      const child = {a: 'a'};
      const child2 = {b: 'b'};

      assert.hasValues({child, child2}, [child, child2]); // passes
      assert.hasValues({child: {a: 'a'}, child2}, [child, child2]); // fails
      assert.hasValues([child], [child, child2]); // passes
      @@ -274,7 +274,7 @@
    • assert.lacksValues : the opposite assertion.
    • assert.hasValue : the single-value assertion.
    -
    • Asserts that a value is an instance of the given class constructor.

      Type guards the value.

      Type Parameters

      • const Instance

      Parameters

      • this: void
      • instance: unknown
      • constructor: Constructor<Instance>

        The constructor that the "instance" input will be checked against.

      • OptionalfailureMessage: string

        Message to include in error message if this assertion fails.

        @@ -286,7 +286,7 @@
        -
    • Asserts that a number is above the expectation (actual > expected).

      +
    • Asserts that a number is above the expectation (actual > expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isAbove(10, 5); // passes
      assert.isAbove(5, 5); // fails
      assert.isAbove(5, 10); // fails
      @@ -296,7 +296,7 @@
    • assert.isBelow : the opposite assertion.
    • assert.isAtLeast : the more lenient assertion.
    -
    • Asserts that a number is within ±delta of the expectation.

      +
    • Asserts that a number is within ±delta of the expectation.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • delta: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isApproximately(10, 8, 4); // passes
      assert.isApproximately(10, 12, 4); // passes
      assert.isApproximately(10, 8, 1); // fails
      assert.isApproximately(10, 12, 1); // fails
      @@ -305,7 +305,7 @@
      -
    • Asserts that a value is an array.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is ArrayNarrow<Actual>

      import {assert} from '@augment-vir/assert';

      assert.isArray([]); // passes
      assert.isArray({length: 4}); // fails
      @@ -314,7 +314,7 @@
      -
    • Asserts that a number is at least the expectation (actual >= expected).

      +
    • Asserts that a number is at least the expectation (actual >= expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isAtLeast(10, 5); // passes
      assert.isAtLeast(5, 5); // passes
      assert.isAtLeast(5, 10); // fails
      @@ -324,7 +324,7 @@
    • assert.isAtMost : the opposite assertion.
    • assert.isAbove : the more restrictive assertion.
    -
    • Asserts that a number is at most the expectation (actual <= expected).

      +
    • Asserts that a number is at most the expectation (actual <= expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isAtMost(10, 5); // fails
      assert.isAtMost(5, 5); // passes
      assert.isAtMost(5, 10); // passes
      @@ -334,7 +334,7 @@
    • assert.isAtLeast : the opposite assertion.
    • assert.isBelow : the more restrictive assertion.
    -
    • Asserts that a number is below the expectation (actual < expected).

      +
    • Asserts that a number is below the expectation (actual < expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isBelow(10, 5); // fails
      assert.isBelow(5, 5); // fails
      assert.isBelow(5, 10); // passes
      @@ -344,7 +344,7 @@
    • assert.isAbove : the opposite assertion.
    • assert.isAtMost : the more lenient assertion.
    -
    • Asserts that a value is a BigInt.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is bigint

      import {assert} from '@augment-vir/assert';

      assert.isBigInt(123n); // passes
      assert.isBigInt(123); // fails
      @@ -353,7 +353,7 @@
      -
    • Asserts that a value is a boolean.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is boolean

      import {assert} from '@augment-vir/assert';

      assert.isBoolean(true); // passes
      assert.isBoolean('true'); // fails
      @@ -362,7 +362,7 @@
      -
    • Asserts that a value is defined (not null and not undefined).

      Type guards the value.

      Type Parameters

      • const Actual

      Parameters

      • this: void
      • input: Actual

        The value to check.

      • OptionalfailureMessage: string

        Message to include in error message if this assertion fails.

        @@ -373,7 +373,7 @@
        -
    • Asserts that a value is empty. Supports strings, Maps, Sets, objects, and arrays.

      Type guards the value.

      Type Parameters

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is NarrowToActual<Actual, Empty>

      import {assert} from '@augment-vir/assert';

      assert.isEmpty({}); // passes
      assert.isEmpty(''); // passes
      assert.isEmpty([]); // passes

      assert.isEmpty('a'); // fails
      assert.isEmpty({a: 'a'}); // fails
      @@ -382,7 +382,7 @@
      -
    • Asserts that a child value is an enum member.

      Type guards the child value.

      Type Parameters

      Parameters

      • this: void
      • child: unknown
      • checkEnum: Expected
      • OptionalfailureMessage: string

      Returns asserts child is Expected[keyof Expected]

      import {assert} from '@augment-vir/assert';

      enum MyEnum {
      A = 'a',
      B = 'b',
      }

      assert.isEnumValue('a', MyEnum); // passes
      assert.isEnumValue('A', MyEnum); // fails
      @@ -391,7 +391,7 @@
      -
    • Asserts that a value is exactly false.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown
      • OptionalfailureMessage: string

      Returns asserts input is false

      import {assert} from '@augment-vir/assert';

      assert.isFalse(true); // fails
      assert.isFalse(false); // passes
      assert.isFalse(1); // fails
      assert.isFalse(0); // fails
      @@ -401,7 +401,7 @@
    • assert.isTrue : the opposite assertion.
    • assert.isFalsy : a less exact assertion.
    -
    • Asserts that a value is falsy.

      Type guards the value when possible.

      Parameters

      • this: void
      • input: unknown
      • OptionalfailureMessage: string

      Returns asserts input is FalsyValue

      import {assert} from '@augment-vir/assert';

      assert.isFalsy(true); // fails
      assert.isFalsy(false); // passes
      assert.isFalsy(1); // fails
      assert.isFalsy(0); // passes
      @@ -411,7 +411,7 @@
    • assert.isTruthy : the opposite assertion.
    • assert.isFalse : a more exact assertion.
    -
    • Asserts that a number is finite: meaning, not NaN and not Infinity or -Infinity.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isFinite(10); // passes
      assert.isFinite(parseInt('invalid')); // fails
      assert.isFinite(Infinity); // fails
      assert.isFinite(-Infinity); // fails
      @@ -421,7 +421,7 @@
    • assert.isNaN : an opposite assertion.
    • assert.isInfinite : an opposite assertion.
    -
    • Asserts that a value is an HttpStatus.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is NarrowToExpected<Actual, HttpStatus>

      import {assert} from '@augment-vir/assert';

      assert.isHttpStatus(400); // passes
      assert.isHttpStatus(500); // passes
      assert.isHttpStatus(99); // fails
      @@ -441,7 +441,7 @@
    • HttpStatus : all included statuses.
    • HttpStatusCategory : all status categories.
    -
    -
    • Asserts that child value is contained within a parent object, array, or string through reference equality.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • child: unknown
      • parent: Parent
      • OptionalfailureMessage: string

      Returns asserts child is Values<Parent>

      import {assert} from '@augment-vir/assert';

      const child = {a: 'a'};

      assert.isIn(child, {child}); // passes
      assert.isIn('a', 'ab'); // passes
      assert.isIn(child, [child]); // passes

      assert.isIn(child, {child: {a: 'a'}}); // fails
      assert.isIn('a', 'bc'); // fails @@ -463,7 +463,7 @@
      -
    • Asserts that a number is inside the provided min and max bounds, inclusive.

      +
    • Asserts that a number is inside the provided min and max bounds, inclusive.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • __namedParameters: MinMax
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isInBounds(5, {min: 1, max: 10}); // passes
      assert.isInBounds(10, {min: 1, max: 10}); // passes
      assert.isInBounds(11, {min: 1, max: 10}); // fails
      assert.isInBounds(0, {min: 1, max: 10}); // fails
      @@ -472,7 +472,7 @@
      -
    • Asserts that a number is either Infinity or -Infinity.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isInfinite(10); // fails
      assert.isInfinite(parseInt('invalid')); // fails
      assert.isInfinite(Infinity); // passes
      assert.isInfinite(-Infinity); // passes
      @@ -482,7 +482,7 @@
    • assert.isNaN : an opposite assertion.
    • assert.isInfinite : an opposite assertion.
    -
    • Asserts that a key is contained within a parent value.

      Type guards the key.

      Type Parameters

      • const Parent

      Parameters

      • this: void
      • key: PropertyKey
      • parent: Parent
      • OptionalfailureMessage: string

      Returns asserts key is keyof Parent

      import {assert} from '@augment-vir/assert';

      assert.isKeyof('a', {a: 0, b: 1}); // passes
      assert.isKeyof('c', {a: 0, b: 1}); // fails
      @@ -501,7 +501,7 @@
      -
    • Asserts that a number is NaN.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isNaN(10); // fails
      assert.isNaN(parseInt('invalid')); // passes
      assert.isNaN(Infinity); // fails @@ -511,7 +511,7 @@
      -
    • Asserts that a number is outside ±delta of the expectation.

      +
    • Asserts that a number is outside ±delta of the expectation.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • delta: number
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isNotApproximately(10, 8, 4); // fails
      assert.isNotApproximately(10, 12, 4); // fails
      assert.isNotApproximately(10, 8, 1); // passes
      assert.isNotApproximately(10, 12, 1); // passes
      @@ -520,7 +520,7 @@
      -
    • Asserts that a value is not an array.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, readonly unknown[]>

      import {assert} from '@augment-vir/assert';

      assert.isNotArray([]); // fails
      assert.isNotArray({length: 4}); // passes
      @@ -529,7 +529,7 @@
      -
    • Asserts that a value is not a BigInt.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, bigint>

      import {assert} from '@augment-vir/assert';

      assert.isNotBigInt(123n); // fails
      assert.isNotBigInt(123); // passes
      @@ -538,7 +538,7 @@
      -
    • Asserts that a value is not a boolean.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, boolean>

      import {assert} from '@augment-vir/assert';

      assert.isNotBoolean(true); // fails
      assert.isNotBoolean('true'); // passes
      @@ -547,7 +547,7 @@
      -
    • Asserts that a value is not empty. Supports strings, Maps, Sets, objects, and arrays.

      Type guards the value.

      Type Parameters

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, Empty>

      import {assert} from '@augment-vir/assert';

      assert.isNotEmpty({}); // fails
      assert.isNotEmpty(''); // fails
      assert.isNotEmpty([]); // fails

      assert.isNotEmpty('a'); // passes
      assert.isNotEmpty({a: 'a'}); // passes
      @@ -556,7 +556,7 @@
      -
    • Asserts that a value is not a function.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, AnyFunction>

      import {assert} from '@augment-vir/assert';

      assert.isNotFunction(() => {}); // fails
      assert.isNotFunction({}); // passes
      @@ -574,7 +574,7 @@
      -
    • Asserts that child value is not contained within a parent object, array, or string through reference equality.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object
      • Child

      Parameters

      • this: void
      • child: Child
      • parent: Parent
      • OptionalfailureMessage: string

      Returns asserts child is Exclude<Child, Values<Parent>>

      import {assert} from '@augment-vir/assert';

      const child = {a: 'a'};

      assert.isNotIn(child, {child}); // fails
      assert.isNotIn('a', 'ab'); // fails
      assert.isNotIn(child, [child]); // fails

      assert.isNotIn(child, {child: {a: 'a'}}); // passes
      assert.isNotIn('a', 'bc'); // passes @@ -584,7 +584,7 @@
      -
    • Asserts that a key is not contained within a parent value.

      Type guards the key.

      Type Parameters

      • const Key extends PropertyKey
      • const Parent

      Parameters

      • this: void
      • key: Key
      • parent: Parent
      • OptionalfailureMessage: string

      Returns asserts key is Exclude<Key, RequiredKeysOf<Parent>>

      import {assert} from '@augment-vir/assert';

      assert.isNotKeyOf('a', {a: 0, b: 1}); // fails
      assert.isNotKeyOf('c', {a: 0, b: 1}); // passes
      @@ -603,7 +603,7 @@
      -
    • Asserts that a value is not exactly null.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, null>

      import {assert} from '@augment-vir/assert';

      assert.isNotNull(null); // fails
      assert.isNotNull(undefined); // passes
      @@ -617,7 +617,7 @@
    -
    • Asserts that a value is not a number. This includes NaN.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, number>

      import {assert} from '@augment-vir/assert';

      assert.isNotNumber(123); // fails
      assert.isNotNumber(123n); // passes
      @@ -626,7 +626,7 @@
      -
    • Asserts that a value is not an object. This includes arrays.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, UnknownObject>

      import {assert} from '@augment-vir/assert';

      assert.isNotObject({}); // fails
      assert.isNotObject([]); // passes
      @@ -635,7 +635,7 @@
      -
    • Asserts that a value is not a JavaScript primitive.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, Primitive>

      import {assert} from '@augment-vir/assert';

      assert.isPrimitive('key'); // fails
      assert.isPrimitive(true); // fails
      assert.isPrimitive({}); // passes @@ -645,7 +645,7 @@
      -
    • Asserts that a value is a not Promise instance.

      Type guards the value.

      Type Parameters

      • const Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, Promise<any>>

      import {assert} from '@augment-vir/assert';

      class CustomThenable {
      constructor(public value: any) {}

      then(onFulfilled?: AnyFunction, onRejected?: AnyFunction) {
      return new CustomThenable(onFulfilled ? onFulfilled(this.value) : this.value);
      }
      }

      assert.isNotPromise(Promise.resolve(5)); // fails
      assert.isNotPromise(new CustomThenable(5)); // passes
      assert.isNotPromise(5); // passes
      @@ -655,7 +655,7 @@
    • assert.isPromise : the opposite assertion.
    • assert.isNotPromiseLike : the more lenient assertion.
    -
    • Asserts that a value is not a PromiseLike.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party promise implementations that aren't instances of the built-in Promise class.

      @@ -668,7 +668,7 @@
    • assert.isPromiseLike : the opposite assertion.
    • assert.isNotPromise : the more precise assertion.
    -
    • Asserts that a value is not a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, PropertyKey>

      import {assert} from '@augment-vir/assert';

      assert.isNotPropertyKey('key'); // fails
      assert.isNotPropertyKey(true); // passes
      assert.isNotPropertyKey({}); // passes @@ -678,7 +678,7 @@
      -
    • Asserts that a value is not a string.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, string>

      import {assert} from '@augment-vir/assert';

      assert.isNotString(''); // fails
      assert.isNotString(5); // passes
      @@ -687,7 +687,7 @@
      -
    • Asserts that a value is not a symbol.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, symbol>

      import {assert} from '@augment-vir/assert';

      assert.isNotSymbol(Symbol('my-symbol')); // fails
      assert.isNotSymbol('my-symbol'); // passes
      @@ -696,7 +696,7 @@
      -
    • Asserts that a value is not exactly undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<Actual, undefined>

      import {assert} from '@augment-vir/assert';

      assert.isNotUndefined(undefined); // fails
      assert.isNotUndefined(null); // passes
      @@ -705,7 +705,7 @@
      -
    • Asserts that a value is not a valid UUID. The nil or max UUIDs are included as not valid.

      +
    • Asserts that a value is not a valid UUID. The nil or max UUIDs are included as not valid.

      Type guards the value.

      Type Parameters

      • const Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns asserts actual is Exclude<
          Actual,
          `${string}-${string}-${string}-${string}-${string}`,
      >

      import {assert} from '@augment-vir/assert';
      import {createUuidV4} from '@augment-vir/common';

      assert.isNotUuid(createUuidV4()); // fails
      assert.isNotUuid('29e0f18e-6115-4982-8342-0afcadf5d611'); // fails
      assert.isNotUuid('00000000-0000-0000-0000-000000000000'); // passes
      assert.isNotUuid('FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'); // passes
      assert.isNotUuid('not-a-uuid'); // passes
      @@ -714,7 +714,7 @@
      -
    • Asserts that a value is exactly null.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is null

      import {assert} from '@augment-vir/assert';

      assert.isNull(null); // passes
      assert.isNull(undefined); // fails
      @@ -723,7 +723,7 @@
      -
    • Asserts that a value is nullish (null or undefined).

      Type guards the value.

      Parameters

      • this: void
      • input: unknown

        The value to check.

      • OptionalfailureMessage: string

        Message to include in error message if this assertion fails.

        @@ -734,7 +734,7 @@
        -
    • Asserts that a value is a number. This excludes NaN.

      +
    • Asserts that a value is a number. This excludes NaN.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is number

      import {assert} from '@augment-vir/assert';

      assert.isNumber(123); // passes
      assert.isNumber(123n); // fails
      @@ -743,7 +743,7 @@
      -
    • Asserts that a value is an object. This excludes arrays.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is UnknownObject

      import {assert} from '@augment-vir/assert';

      assert.isObject({}); // passes
      assert.isObject([]); // fails
      @@ -752,7 +752,7 @@
      -
    • Asserts that a number is outside the provided min and max bounds, exclusive.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • __namedParameters: MinMax
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.isOutBounds(5, {min: 1, max: 10}); // fails
      assert.isOutBounds(10, {min: 1, max: 10}); // fails
      assert.isOutBounds(11, {min: 1, max: 10}); // passes
      assert.isOutBounds(0, {min: 1, max: 10}); // passes
      @@ -761,7 +761,7 @@
      -
    • Asserts that a value is a JavaScript primitive.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is Primitive

      import {assert} from '@augment-vir/assert';

      assert.isPrimitive('key'); // passes
      assert.isPrimitive(true); // passes
      assert.isPrimitive({}); // fails @@ -771,7 +771,7 @@
      -
    • Asserts that a value is a Promise instance.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is Promise<any>

      import {assert} from '@augment-vir/assert';

      class CustomThenable {
      constructor(public value: any) {}

      then(onFulfilled?: AnyFunction, onRejected?: AnyFunction) {
      return new CustomThenable(onFulfilled ? onFulfilled(this.value) : this.value);
      }
      }

      assert.isPromise(Promise.resolve(5)); // passes
      assert.isPromise(new CustomThenable(5)); // fails
      assert.isPromise(5); // fails
      @@ -781,7 +781,7 @@
    • assert.isNotPromise : the opposite assertion.
    • assert.isPromiseLike : the more lenient assertion.
    -
    • Asserts that a value is a PromiseLike.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party promise implementations that aren't instances of the built-in Promise class.

      @@ -794,7 +794,7 @@
    • assert.isNotPromiseLike : the opposite assertion.
    • assert.isPromise : the more precise assertion.
    -
    • Asserts that a value is a valid PropertyKey. PropertyKey is a built-in TypeScript type +

    • Asserts that a value is a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is PropertyKey

      import {assert} from '@augment-vir/assert';

      assert.isPropertyKey('key'); // passes
      assert.isPropertyKey(true); // fails
      assert.isPropertyKey({}); // fails @@ -804,7 +804,7 @@
      -
    • Asserts that a value is a string.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is string

      import {assert} from '@augment-vir/assert';

      assert.isString(''); // passes
      assert.isString(5); // fails
      @@ -813,7 +813,7 @@
      -
    • Asserts that a value is a symbol.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is symbol

      import {assert} from '@augment-vir/assert';

      assert.isSymbol(Symbol('my-symbol')); // passes
      assert.isSymbol('my-symbol'); // fails
      @@ -822,7 +822,7 @@
      -
    • Asserts that a value is exactly true.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown
      • OptionalfailureMessage: string

      Returns asserts input is true

      import {assert} from '@augment-vir/assert';

      assert.isTrue(true); // passes
      assert.isTrue(false); // fails
      assert.isTrue(1); // fails
      assert.isTrue(0); // fails
      @@ -832,7 +832,7 @@
    • assert.isFalse : the opposite assertion.
    • assert.isTruthy : a less exact assertion.
    -
    • Asserts that a value is truthy.

      Type guards the value.

      Type Parameters

      • const Actual

      Parameters

      • this: void
      • input: Actual
      • OptionalfailureMessage: string

      Returns asserts input is Exclude<Actual, FalsyValue>

      import {assert} from '@augment-vir/assert';

      assert.isTruthy(true); // passes
      assert.isTruthy(false); // fails
      assert.isTruthy(1); // passes
      assert.isTruthy(0); // fails
      @@ -842,7 +842,7 @@
    • assert.isFalsy : the opposite assertion.
    • assert.isTrue : a more exact assertion.
    -
    • Asserts that a value is exactly undefined.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is undefined

      import {assert} from '@augment-vir/assert';

      assert.isUndefined(undefined); // passes
      assert.isUndefined(null); // fails
      @@ -851,7 +851,7 @@
      -
    • Asserts that a value is a valid UUID. Does not accept the nil or max UUIDs.

      +
    • Asserts that a value is a valid UUID. Does not accept the nil or max UUIDs.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns asserts actual is `${string}-${string}-${string}-${string}-${string}`

      import {assert} from '@augment-vir/assert';
      import {createUuidV4} from '@augment-vir/common';

      assert.isUuid(createUuidV4()); // passes
      assert.isUuid('29e0f18e-6115-4982-8342-0afcadf5d611'); // passes
      assert.isUuid('00000000-0000-0000-0000-000000000000'); // fails
      assert.isUuid('FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'); // fails
      assert.isUuid('not-a-uuid'); // fails
      @@ -860,7 +860,7 @@
      -
    • Asserts that two values are deeply equal when stringified into JSON. This will fail or may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order.

      Type guards the first value.

      @@ -873,7 +873,7 @@
    • assert.entriesEqual : another deep equality assertion.
    • assert.deepEquals : the most thorough (but also slow) deep equality assertion.
    -
    • Asserts that a parent value does not have the key.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      • this: void
      • parent: Parent
      • key: Key
      • OptionalfailureMessage: string

      Returns asserts parent is Exclude<Parent, Record<Key, any>>

      import {assert} from '@augment-vir/assert';

      assert.lacksKey({a: 0, b: 1}, 'a'); // fails
      assert.lacksKey({a: 0, b: 1}, 'c'); // passes
      @@ -883,7 +883,7 @@
    • assert.hasKey : the opposite assertion.
    • assert.lacksKeys : the multi-key assertion.
    -
    • Asserts that a parent value none of the keys.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      • this: void
      • parent: Parent
      • keys: readonly Key[]
      • OptionalfailureMessage: string

      Returns asserts parent is Exclude<Parent, Partial<Record<Key, any>>>

      import {assert} from '@augment-vir/assert';

      assert.lacksKeys({a: 0, b: 1}, ['b', 'c']); // fails
      assert.lacksKeys({a: 0, b: 1}, ['c', 'd']); // passes
      @@ -893,7 +893,7 @@
    • assert.hasKeys : the opposite assertion.
    • assert.lacksKey : the single-key assertion.
    -
    • Asserts that an object/array parent does not include a child value through reference +

    • Asserts that an object/array parent does not include a child value through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • value: unknown
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      const child = {a: 'a'};

      assert.lacksValue({child}, child); // fails
      assert.lacksValue({child: {a: 'a'}}, child); // passes
      assert.lacksValue([child], child); // fails @@ -904,7 +904,7 @@
    • assert.hasValue : the opposite assertion.
    • assert.lacksValues : the multi-value assertion.
    -
    • Asserts that an object/array parent includes none of the provided child values through +

    • Asserts that an object/array parent includes none of the provided child values through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • values: unknown[]
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      const child = {a: 'a'};
      const child2 = {b: 'b'};

      assert.lacksValues({}, [child, child2]); // passes
      assert.lacksValues({child, child2}, [child, child2]); // fails
      assert.lacksValues({child: {a: 'a'}, child2}, [child, child2]); // fails @@ -915,7 +915,7 @@
    • assert.lacksValues : the opposite assertion.
    • assert.hasValue : the single-value assertion.
    -
    • Asserts that two values are loosely equal (using +

    • Asserts that two values are loosely equal (using ==).

      Type guards the first value.

      Parameters

      • this: void
      • actual: unknown
      • expected: unknown
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.looseEquals('a', 'a'); // passes

      assert.looseEquals('1', 1); // passes

      assert.looseEquals({a: 'a'}, {a: 'a'}); // fails

      const objectExample = {a: 'a'};
      assert.looseEquals(objectExample, objectExample); // passes @@ -926,7 +926,7 @@
    • assert.notLooseEquals : the opposite assertion.
    • assert.strictEquals : the strict equality assertion.
    -
    • Asserts that a string (first input, actual) matches a RegExp (second input, expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.matches('hi', /^h/); // passes
      assert.matches('hi', /^g/); // fails
      @@ -935,7 +935,7 @@
      -
    • Asserts that a string (first input, actual) does not match a RegExp (second input, +

    • Asserts that a string (first input, actual) does not match a RegExp (second input, expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.mismatches('hi', /^h/); // fails
      assert.mismatches('hi', /^g/); // passes @@ -945,7 +945,7 @@
      -
    • Asserts that two values are not deeply equal using the +

    • Asserts that two values are not deeply equal using the deep-eql package.

      Note that this check may be expensive, depending on what values it is passed. Whenever possible, use simpler equality checks instead (see the see section below).

      @@ -959,7 +959,7 @@
    • assert.notEntriesEqual : a less expensive (but less thorough) deep equality assertion.
    • assert.notJsonEquals : a less expensive (but less thorough) deep equality assertion.
    -
    • Asserts that two objects are not deeply equal by checking only their top-level values for strict (non-deep, reference, using ===) equality.

      @@ -973,7 +973,7 @@
    • assert.notJsonEquals : another not deep equality assertion.
    • assert.notDeepEquals : the most thorough (but also slow) not deep equality assertion.
    -
    • Asserts that a value is not an instance of the given class constructor.

      Type guards the value.

      Type Parameters

      • const Actual
      • const Instance

      Parameters

      • this: void
      • instance: Actual
      • constructor: Constructor<Instance>
      • OptionalfailureMessage: string

      Returns asserts instance is Exclude<Actual, Instance>

      import {assert} from '@augment-vir/assert';

      assert.notInstanceOf(/abc/, RegExp); // fails
      assert.notInstanceOf('abc', RegExp); // passes
      @@ -982,7 +982,7 @@
      -
    • Asserts that two values are not deeply equal when stringified into JSON. This may not make +

    • Asserts that two values are not deeply equal when stringified into JSON. This may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order.

      Performs no type guarding.

      @@ -995,7 +995,7 @@
    • assert.entriesEqual : another deep equality assertion.
    • assert.deepEquals : the most thorough (but also slow) deep equality assertion.
    -
    • Asserts that two values are not loosely equal (using ==).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: unknown
      • expected: unknown
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.notLooseEquals('a', 'a'); // fails

      assert.notLooseEquals('1', 1); // fails

      assert.notLooseEquals({a: 'a'}, {a: 'a'}); // passes

      const objectExample = {a: 'a'};
      assert.notLooseEquals(objectExample, objectExample); // fails @@ -1006,7 +1006,7 @@
    • assert.looseEquals : the opposite assertion.
    • assert.strictEquals : the strict equality assertion.
    -
    • Asserts that two values are not strictly equal (using ===).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: unknown
      • expected: unknown
      • OptionalfailureMessage: string

      Returns void

      import {assert} from '@augment-vir/assert';

      assert.notStrictEquals('a', 'a'); // fails

      assert.notStrictEquals('1', 1); // passes

      assert.notStrictEquals({a: 'a'}, {a: 'a'}); // passes

      const objectExample = {a: 'a'};
      assert.notStrictEquals(objectExample, objectExample); // fails @@ -1017,7 +1017,7 @@
    • assert.strictEquals : the opposite assertion.
    • assert.notLooseEquals : the loose equality assertion.
    -
    • Asserts that two values are strictly equal (using ===).

      Type guards the first value.

      Type Parameters

      • const Actual
      • const Expected

      Parameters

      • this: void
      • actual: Actual
      • expected: Expected
      • OptionalfailureMessage: string

      Returns asserts actual is Expected

      import {assert} from '@augment-vir/assert';

      assert.strictEquals('a', 'a'); // passes

      assert.strictEquals('1', 1); // fails

      assert.strictEquals({a: 'a'}, {a: 'a'}); // fails

      const objectExample = {a: 'a'};
      assert.strictEquals(objectExample, objectExample); // passes @@ -1028,4 +1028,4 @@
    • assert.notStrictEquals : the opposite assertion.
    • assert.looseEquals : the loose equality assertion.
    -
    +
    diff --git a/functions/assertSnapshot.html b/functions/assertSnapshot.html index 1be15ef8..ae6ff7bf 100644 --- a/functions/assertSnapshot.html +++ b/functions/assertSnapshot.html @@ -1,7 +1,7 @@ -assertSnapshot | augment-vir - v31.4.0

    Function assertSnapshot

    diff --git a/functions/assertTestContext.html b/functions/assertTestContext.html index 76c80993..b1bcdc9d 100644 --- a/functions/assertTestContext.html +++ b/functions/assertTestContext.html @@ -1,3 +1,3 @@ -assertTestContext | augment-vir - v31.4.0

    Function assertTestContext

    +assertTestContext | augment-vir - v31.5.0

    Function assertTestContext

    diff --git a/functions/assertWrap.html b/functions/assertWrap.html index 47e7a737..028f9901 100644 --- a/functions/assertWrap.html +++ b/functions/assertWrap.html @@ -1,4 +1,4 @@ -assertWrap | augment-vir - v31.4.0

    Function assertWrap

    A group of guard methods that do the following:

    +assertWrap | augment-vir - v31.5.0

    Function assertWrap

    A group of guard methods that do the following:

    1. Run the method's assertion on the given inputs.
    2. If the assertion fails, throws an error.
    3. @@ -12,7 +12,7 @@

    AssertionError When the assertion fails.

    Properties

    Properties

    endsWith endsWithout isLengthAtLeast isLengthExactly @@ -114,7 +114,7 @@
  • assertWrap.endsWithout : the opposite assertion.
  • assertWrap.startsWith : assertion on the other end.
  • -
    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent;
        (parent: string, child: string, failureMessage?: string): typeof parent;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent;
    } = ...

    Asserts that a parent string or array does not end with a specific child. This uses +

    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent;
        (parent: string, child: string, failureMessage?: string): typeof parent;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent;
    } = ...

    Asserts that a parent string or array does not end with a specific child. This uses reference equality when the parent is an array. Returns the parent if the assertion passes.

    Performs no type guarding.

    @@ -127,7 +127,7 @@
  • assertWrap.endsWith : the opposite assertion.
  • assertWrap.startsWithout : assertion on the other end.
  • -
    isLengthAtLeast: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): AtLeastTuple<Element, Length>;
        <Actual extends string | AnyObject>(actual: Actual, length: number): Actual;
    } = ...

    Asserts that an array or string has at least the given length. Returns the value if the +

    isLengthAtLeast: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): AtLeastTuple<Element, Length>;
        <Actual extends string | AnyObject>(actual: Actual, length: number): Actual;
    } = ...

    Asserts that an array or string has at least the given length. Returns the value if the assertion passes.

    Type guards an array into an AtLeastTuple. Performs no type guarding on a string.

    import {assertWrap} from '@augment-vir/assert';

    assertWrap.isLengthAtLeast(['a', 'b', 'c'], 2); // returns `['a', 'b', 'c']`
    assertWrap.isLengthAtLeast(['a', 'b', 'c'], 3); // returns `['a', 'b', 'c']`
    assertWrap.isLengthAtLeast(['a', 'b'], 3); // throws an error @@ -138,7 +138,7 @@
    -
    isLengthExactly: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): Tuple<Element, Length>;
        <Actual extends string | AnyObject>(actual: Actual, length: number): Actual;
    } = ...

    Asserts that an array or string has exactly the given length. Returns the value if the +

    isLengthExactly: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): Tuple<Element, Length>;
        <Actual extends string | AnyObject>(actual: Actual, length: number): Actual;
    } = ...

    Asserts that an array or string has exactly the given length. Returns the value if the assertion passes.

    Type guards an array into a Tuple. Performs no type guarding on a string.

    import {assertWrap} from '@augment-vir/assert';

    assertWrap.isLengthExactly(['a', 'b', 'c'], 2); // throws an error
    assertWrap.isLengthExactly(['a', 'b', 'c'], 3); // returns `['a', 'b', 'c']`
    assertWrap.isLengthExactly(['a', 'b'], 3); // throws an error @@ -149,7 +149,7 @@
    -
    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>,
        >;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>,
        >;
    } = assertWrapOutput

    Asserts that the output of the given function deeply equals expectations. A custom +

    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>,
        >;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>,
        >;
    } = assertWrapOutput

    Asserts that the output of the given function deeply equals expectations. A custom asserter can optionally be provided as the first argument to change the expectation checking from the default "deeply equals" to whatever you want. Returns the output if the assertion passes.

    @@ -159,7 +159,7 @@

    The output if the assertion passes.

    AssertionError If the assertion fails.

    -
    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent;
        (parent: string, child: string, failureMessage?: string): typeof parent;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference +

    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent;
        (parent: string, child: string, failureMessage?: string): typeof parent;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference equality when the parent is an array. Returns the parent if the assertion passes.

    Performs no type guarding.

    import {assertWrap} from '@augment-vir/assert';

    assertWrap.startsWith('ab', 'b'); // throws an error
    assertWrap.startsWith('ab', 'a'); // returns `'ab'`
    assertWrap.startsWith(['a', 'b'], 'b'); // throws an error
    assertWrap.startsWith(['a', 'b'], 'a'); // returns `['a', 'b']` @@ -171,7 +171,7 @@
  • assertWrap.startsWithout : the opposite assertion.
  • assertWrap.endsWith : assertion on the other end.
  • -
    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent;
        (parent: string, child: string, failureMessage?: string): typeof parent;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent;
    } = ...

    Asserts that a parent string or array starts with a specific child. This uses reference +

    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent;
        (parent: string, child: string, failureMessage?: string): typeof parent;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent;
    } = ...

    Asserts that a parent string or array starts with a specific child. This uses reference equality when the parent is an array. Returns the parent if the assertion passes.

    Performs no type guarding.

    import {assertWrap} from '@augment-vir/assert';

    assertWrap.startsWith('ab', 'b'); // returns `'ab'`
    assertWrap.startsWith('ab', 'a'); // throws an error
    assertWrap.startsWith(['a', 'b'], 'b'); // returns `['a', 'b']`
    assertWrap.startsWith(['a', 'b'], 'a'); // throws an error @@ -183,7 +183,7 @@
  • assertWrap.startsWithout : the opposite assertion.
  • assertWrap.endsWith : assertion on the other end.
  • -
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Promise<Error>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): MaybePromise<Error>;
    } = throwsAssertWrap

    If a function input is provided:

    +
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Promise<Error>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): MaybePromise<Error>;
    } = throwsAssertWrap

    If a function input is provided:

    Calls that function and asserts that the function throw an error, comparing the error with the given ErrorMatchOptions, if provided. Returns the Error if the assertion passes.

    @@ -199,7 +199,7 @@

    The Error if the assertion passes.

    AssertionError If the assertion fails.

    -

    Methods

    Methods

    • Asserts that two values are deeply equal using the deep-eql package. Returns the first value if the assertion passes.

      Note that this check may be expensive, depending on what values it is passed. Whenever @@ -214,7 +214,7 @@

    • assertWrap.entriesEqual : a less expensive (but less thorough) deep equality assertion.
    • assertWrap.jsonEquals : a less expensive (but less thorough) deep equality assertion.
    -
    -
    • Asserts that a parent value has the key. Returns the parent if the assertion passes.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      • this: void
      • parent: Parent
      • key: Key
      • OptionalfailureMessage: string

      Returns CombineTypeWithKey<Key, Parent>

      The parent if it has the key.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.hasKey({a: 0, b: 1}, 'a'); // returns `{a: 0, b: 1}`
      assertWrap.hasKey({a: 0, b: 1}, 'c'); // throws an error @@ -240,7 +240,7 @@
    • assertWrap.lacksKey : the opposite assertion.
    • assertWrap.hasKeys : the multi-key assertion.
    -
    • Asserts that a parent value has all the keys. Returns the parent if the assertion passes.

      Type guards the parent value.

      Type Parameters

      • const Keys extends PropertyKey
      • const Parent

      Parameters

      • this: void
      • parent: Parent
      • keys: readonly Keys[]
      • OptionalfailureMessage: string

      Returns CombineTypeWithKey<Keys, Parent>

      The parent if it has all the keys.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.hasKeys({a: 0, b: 1}, ['a', 'b']); // returns `{a: 0, b: 1}`
      assertWrap.hasKeys({a: 0, b: 1}, ['b', 'c']); // throws an error @@ -251,7 +251,7 @@
    • assertWrap.lacksKeys : the opposite assertion.
    • assertWrap.hasKey : the single-key assertion.
    -
    • Asserts that an object/array parent includes a child value through reference equality. Returns the parent value if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • value: unknown
      • OptionalfailureMessage: string

      Returns Parent

      The value if the assertion passes.

      @@ -263,7 +263,7 @@
    • assertWrap.lacksValue : the opposite assertion.
    • assertWrap.hasValues : the multi-value assertion.
    -
    • Asserts that an object/array parent includes all child values through reference equality. Returns the parent value if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • values: unknown[]
      • OptionalfailureMessage: string

      Returns Parent

      The value if the assertion passes.

      @@ -275,7 +275,7 @@
    • assertWrap.lacksValues : the opposite assertion.
    • assertWrap.hasValue : the single-value assertion.
    -
    • Asserts that a value is an instance of the given class constructor. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • const Instance

      Parameters

      • this: void
      • instance: unknown
      • constructor: Constructor<Instance>
      • OptionalfailureMessage: string

      Returns Instance

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.instanceOf(/abc/, RegExp); // returns `/abc/`
      assertWrap.instanceOf('abc', RegExp); // throws an error @@ -286,7 +286,7 @@
      -
    • Asserts that a number is above the expectation (actual > expected). Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -298,7 +298,7 @@
    • assertWrap.isBelow : the opposite assertion.
    • assertWrap.isAtLeast : the more lenient assertion.
    -
    • Asserts that a number is within ±delta of the expectation. Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • delta: number
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -309,7 +309,7 @@
      -
    • Asserts that a value is an array. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns ArrayNarrow<Actual>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isArray([]); // returns `[]`
      assertWrap.isArray({length: 4}); // throws an error @@ -319,7 +319,7 @@
      -
    • Asserts that a number is at least the expectation (actual >= expected). Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -331,7 +331,7 @@
    • assertWrap.isAtMost : the opposite assertion.
    • assertWrap.isAbove : the more restrictive assertion.
    -
    • Asserts that a number is at most the expectation (actual <= expected). Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -343,7 +343,7 @@
    • assertWrap.isAtLeast : the opposite assertion.
    • assertWrap.isBelow : the more restrictive assertion.
    -
    • Asserts that a number is below the expectation (actual < expected). Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -355,7 +355,7 @@
    • assertWrap.isAbove : the opposite assertion.
    • assertWrap.isAtMost : the more lenient assertion.
    -
    • Asserts that a value is defined (not null and not undefined). Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • input: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, undefined | null>

      The value if the assertion passes.

      @@ -386,7 +386,7 @@
      -
    • Asserts that a value is an instance of the built-in Error class and compares it to the +

    • Asserts that a value is an instance of the built-in Error class and compares it to the given ErrorMatchOptions, if provided.

      Type guards the input.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalmatchOptions: PartialWithNullable<
            {
                matchConstructor: ErrorConstructor
                | new (...args: any[]) => Error;
                matchMessage: string | RegExp;
            },
        >
      • OptionalfailureMessage: string

      Returns NarrowToExpected<Actual, Error>

      The value if the assertion passes.

      @@ -416,7 +416,7 @@

      AssertionError If the assertion fails.

      -
    • Asserts that a value is exactly false. Returns the value if the assertion passes.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown
      • OptionalfailureMessage: string

      Returns false

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isFalse(true); // throws an error
      assertWrap.isFalse(false); // returns `false`
      assertWrap.isFalse(1); // throws an error
      assertWrap.isFalse(0); // throws an error @@ -427,7 +427,7 @@
    • assertWrap.isTrue : the opposite assertion.
    • assertWrap.isFalsy : a less exact assertion.
    -
    • Asserts that a value is falsy. Returns the value if the assertion passes.

      Type guards the value when possible.

      Type Parameters

      • T

      Parameters

      • this: void
      • input: T
      • OptionalfailureMessage: string

      Returns NarrowToExpected<T, FalsyValue>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isFalsy(true); // throws an error
      assertWrap.isFalsy(false); // returns `false`
      assertWrap.isFalsy(1); // throws an error
      assertWrap.isFalsy(0); // returns `0` @@ -438,7 +438,7 @@
    • assertWrap.isTruthy : the opposite assertion.
    • assertWrap.isFalse : a more exact assertion.
    -
    • Asserts that a number is finite: meaning, not NaN and not Infinity or -Infinity. Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -450,7 +450,7 @@
    • assertWrap.isNaN : an opposite assertion.
    • assertWrap.isInfinite : an opposite assertion.
    -
    • Asserts that a value is an HttpStatus. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns NarrowToExpected<Actual, HttpStatus>

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isHttpStatus(400); // returns `400`
      assertWrap.isHttpStatus(500); // returns `500`
      assertWrap.isHttpStatus(99); // throws an error
      @@ -471,7 +471,7 @@
    • HttpStatus : all included statuses.
    • HttpStatusCategory : all status categories.
    -
    -
    • Asserts that child value is contained within a parent object, array, or string through reference equality. Returns the child value if the assertion passes.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object
      • Child

      Parameters

      • this: void
      • child: Child
      • parent: Parent
      • OptionalfailureMessage: string

      Returns Extract<Child, Values<Parent>>

      The value if the assertion passes.

      @@ -493,7 +493,7 @@
      -
    • Asserts that a number is inside the provided min and max bounds, inclusive. Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • __namedParameters: MinMax
      • OptionalfailureMessage: string

      Returns Actual

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isInBounds(5, {min: 1, max: 10}); // returns `5`
      assertWrap.isInBounds(10, {min: 1, max: 10}); // returns `10`
      assertWrap.isInBounds(11, {min: 1, max: 10}); // fails
      assertWrap.isInBounds(0, {min: 1, max: 10}); // fails @@ -503,7 +503,7 @@
      -
    • Asserts that a number is either Infinity or -Infinity. Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -515,7 +515,7 @@
    • assertWrap.isNaN : an opposite assertion.
    • assertWrap.isInfinite : an opposite assertion.
    -
    • Asserts that a number is outside ±delta of the expectation. Returns the number if the +

    • Asserts that a number is outside ±delta of the expectation. Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • delta: number
      • OptionalfailureMessage: string

      Returns Actual

      The value if the assertion passes.

      @@ -560,7 +560,7 @@
      -
    • Asserts that a value is not an array. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, readonly unknown[]>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isNotArray([]); // throws an error
      assertWrap.isNotArray({length: 4}); // returns `{length: 4}` @@ -570,7 +570,7 @@
      -
    • Asserts that a value is not a BigInt. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, bigint>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isNotBigInt(123n); // throws an error
      assertWrap.isNotBigInt(123); // returns `123` @@ -580,7 +580,7 @@
      -
    • Asserts that a value is not a boolean. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, boolean>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isNotBoolean(true); // throws an error
      assertWrap.isNotBoolean('true'); // returns `'true'` @@ -590,7 +590,7 @@
      -
    • Asserts that a value is not a function. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, AnyFunction>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isNotFunction(() => {}); // throws an error
      assertWrap.isNotFunction({}); // returns `{}` @@ -622,7 +622,7 @@
      -
    • Asserts that child value is not contained within a parent object, array, or string through reference equality. Returns the child value if the assertion passes.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object
      • Child

      Parameters

      • this: void
      • child: Child
      • parent: Parent
      • OptionalfailureMessage: string

      Returns Exclude<Child, Values<Parent>>

      The value if the assertion passes.

      @@ -633,7 +633,7 @@
      -
    • Asserts that a value is not exactly `null. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, null>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isNotNull(null); // throws an error
      assertWrap.isNotNull(undefined); // returns `undefined` @@ -670,7 +670,7 @@
    -
    • Asserts that a value is not a number. This includes `NaN. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, number>

      The value if the assertion passes.

      @@ -681,7 +681,7 @@
      -
    • Asserts that a value is a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object. Returns the value if the assertion passes.

      Type guards the value.

      @@ -704,7 +704,7 @@
      -
    • Asserts that a value is a not Promise instance. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, Promise<any>>

      The value if the assertion passes.

      @@ -716,7 +716,7 @@
    • assertWrap.isPromise : the opposite assertion.
    • assertWrap.isNotPromiseLike : the more lenient assertion.
    -
    • Asserts that a value is not a PromiseLike. Returns the value if the assertion passes.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party promise implementations that aren't instances of the built-in Promise class.

      @@ -730,7 +730,7 @@
    • assertWrap.isPromiseLike : the opposite assertion.
    • assertWrap.isNotPromise : the more precise assertion.
    -
    • Asserts that a value is not a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object. Returns the value if the assertion passes.

      Type guards the value.

      @@ -742,7 +742,7 @@
      -
    • Asserts that a value is not a string. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, string>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isNotString(''); // throws an error
      assertWrap.isNotString(5); // returns `5` @@ -752,7 +752,7 @@
      -
    • Asserts that a value is not a symbol. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, symbol>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isNotSymbol(Symbol('my-symbol')); // throws an error
      assertWrap.isNotSymbol('my-symbol'); // returns `'my-symbol'` @@ -762,7 +762,7 @@
      -
    • Asserts that a value is not exactly `undefined. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, undefined>

      The value if the assertion passes.

      @@ -773,7 +773,7 @@
      -
    • Asserts that a value is not a valid UUID. The nil or max UUIDs are included as not valid. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • const Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Exclude<Actual, `${string}-${string}-${string}-${string}-${string}`>

      import {assertWrap} from '@augment-vir/assert';
      import {createUuidV4} from '@augment-vir/common';

      assertWrap.isNotUuid(createUuidV4()); // throws an error
      assertWrap.isNotUuid('29e0f18e-6115-4982-8342-0afcadf5d611'); // throws an error
      assertWrap.isNotUuid('00000000-0000-0000-0000-000000000000'); // returns `'00000000-0000-0000-0000-000000000000'`
      assertWrap.isNotUuid('FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'); // returns `'FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'`
      assertWrap.isNotUuid('not-a-uuid'); // returns `'not-a-uuid'` @@ -783,7 +783,7 @@
      -
    • Asserts that a value is nullish (null or undefined). Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • input: Actual
      • OptionalfailureMessage: string

      Returns Extract<Actual, undefined | null>

      The value if the assertion passes.

      @@ -804,7 +804,7 @@
      -
    • Asserts that a number is outside the provided min and max bounds, exclusive. Returns the number if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • __namedParameters: MinMax
      • OptionalfailureMessage: string

      Returns Actual

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isOutBounds(5, {min: 1, max: 10}); // fails
      assertWrap.isOutBounds(10, {min: 1, max: 10}); // fails
      assertWrap.isOutBounds(11, {min: 1, max: 10}); // returns `11`
      assertWrap.isOutBounds(0, {min: 1, max: 10}); // returns `0` @@ -836,7 +836,7 @@
      -
    • Asserts that a value is a Promise instance. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns Extract<Actual, Promise<any>>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      class CustomThenable {
      constructor(public value: any) {}

      then(onFulfilled?: AnyFunction, onRejected?: AnyFunction) {
      return new CustomThenable(
      onFulfilled ? onFulfilled(this.value) : this.value,
      );
      }
      }

      assertWrap.isPromise(Promise.resolve(5)); // returns the `Promise` instance
      assertWrap.isPromise(new CustomThenable(5)); // throws an error
      assertWrap.isPromise(5); // throws an error @@ -859,7 +859,7 @@
    • assertWrap.isNotPromise : the opposite assertion.
    • assertWrap.isPromiseLike : the more lenient assertion.
    -
    • Asserts that a value is a PromiseLike. Returns the value if the assertion passes.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party promise implementations that aren't instances of the built-in Promise class.

      @@ -873,7 +873,7 @@
    • assertWrap.isNotPromiseLike : the opposite assertion.
    • assertWrap.isPromise : the more precise assertion.
    -
    • Asserts that a value is a symbol. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns NarrowToExpected<Actual, symbol>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isSymbol(Symbol('my-symbol')); // returns the created symbol
      assertWrap.isSymbol('my-symbol'); // throws an error @@ -905,7 +905,7 @@
      -
    • Asserts that a value is exactly true. Returns the value if the assertion passes.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown
      • OptionalfailureMessage: string

      Returns true

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isTrue(true); // returns `true`
      assertWrap.isTrue(false); // throws an error
      assertWrap.isTrue(1); // throws an error
      assertWrap.isTrue(0); // throws an error @@ -916,7 +916,7 @@
    • assertWrap.isFalse : the opposite assertion.
    • assertWrap.isTruthy : a less exact assertion.
    -
    • Asserts that a value is truthy. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • T

      Parameters

      • this: void
      • input: T
      • OptionalfailureMessage: string

      Returns Exclude<T, FalsyValue>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isTruthy(true); // returns `true`
      assertWrap.isTruthy(false); // throws an error
      assertWrap.isTruthy(1); // returns `1`
      assertWrap.isTruthy(0); // throws an error @@ -927,7 +927,7 @@
    • assertWrap.isFalsy : the opposite assertion.
    • assertWrap.isTrue : a more exact assertion.
    -
    • Asserts that a value is exactly `undefined. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: Actual
      • OptionalfailureMessage: string

      Returns NarrowToExpected<Actual, undefined>

      The value if the assertion passes.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.isUndefined(undefined); // returns `undefined`
      assertWrap.isUndefined(null); // throws an error @@ -937,7 +937,7 @@
      -
    • Asserts that a value is a valid UUID. Does not accept the nil or max UUIDs. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      • this: void
      • actual: unknown
      • OptionalfailureMessage: string

      Returns NarrowToExpected<Actual, `${string}-${string}-${string}-${string}-${string}`>

      import {assertWrap} from '@augment-vir/assert';
      import {createUuidV4} from '@augment-vir/common';

      assertWrap.isUuid(createUuidV4()); // returns the generated UUID
      assertWrap.isUuid('29e0f18e-6115-4982-8342-0afcadf5d611'); // returns `'29e0f18e-6115-4982-8342-0afcadf5d611'`
      assertWrap.isUuid('00000000-0000-0000-0000-000000000000'); // throws an error
      assertWrap.isUuid('FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'); // throws an error
      assertWrap.isUuid('not-a-uuid'); // throws an error @@ -947,7 +947,7 @@
      -
    • Asserts that two values are deeply equal when stringified into JSON. This will fail or may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order. Returns the first value if the assertion passes.

      @@ -961,7 +961,7 @@
    • assertWrap.entriesEqual : another deep equality assertion.
    • assertWrap.deepEquals : the most thorough (but also slow) deep equality assertion.
    -
    • Asserts that a parent value does not have the key. Returns the parent if the assertion passes.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      • this: void
      • parent: Parent
      • key: Key
      • OptionalfailureMessage: string

      Returns Exclude<Parent, Record<Key, any>>

      The parent if it does not have the key.

      @@ -973,7 +973,7 @@
    • assertWrap.hasKey : the opposite assertion.
    • assertWrap.lacksKeys : the multi-key assertion.
    -
    • Asserts that a parent value none of the keys. Returns the parent if the assertion passes.

      +
    • Asserts that a parent value none of the keys. Returns the parent if the assertion passes.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      • this: void
      • parent: Parent
      • keys: readonly Key[]
      • OptionalfailureMessage: string

      Returns Exclude<Parent, Partial<Record<Key, any>>>

      The parent if it does not have any of the keys.

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.lacksKeys({a: 0, b: 1}, ['b', 'c']); // throws an error
      assertWrap.lacksKeys({a: 0, b: 1}, ['c', 'd']); // returns `{a: 0, b: 1}` @@ -984,7 +984,7 @@
    • assertWrap.hasKeys : the opposite assertion.
    • assertWrap.lacksKey : the single-key assertion.
    -
    • Asserts that an object/array parent does not include a child value through reference equality. Returns the parent value if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • value: unknown
      • OptionalfailureMessage: string

      Returns Parent

      The value if the assertion passes.

      @@ -996,7 +996,7 @@
    • assertWrap.hasValue : the opposite assertion.
    • assertWrap.lacksValues : the multi-value assertion.
    -
    • Asserts that an object/array parent includes none of the provided child values through reference equality. Returns the parent value if the assertion passes.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • values: unknown[]
      • OptionalfailureMessage: string

      Returns Parent

      The value if the assertion passes.

      @@ -1008,7 +1008,7 @@
    • assertWrap.lacksValues : the opposite assertion.
    • assertWrap.hasValue : the single-value assertion.
    -
    • Asserts that two values are loosely equal (using ==). Returns the first value if the assertion passes.

      Type guards the first value.

      @@ -1020,7 +1020,7 @@
    • assertWrap.notLooseEquals : the opposite assertion.
    • assertWrap.strictEquals : the strict equality assertion.
    -
    • Asserts that a string (first input, actual) matches a RegExp (second input, expected). Returns the string if the assertion passes.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp
      • OptionalfailureMessage: string

      Returns string

      The value if the assertion passes.

      @@ -1031,7 +1031,7 @@
      -
    • Asserts that a string (first input, actual) does not match a RegExp (second input, +

    • Asserts that a string (first input, actual) does not match a RegExp (second input, expected). Returns the string if the assertion passes.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp
      • OptionalfailureMessage: string

      Returns string

      The value if the assertion passes.

      @@ -1042,7 +1042,7 @@
      -
    • Asserts that two values are not deeply equal using the deep-eql package. Returns the first value if the assertion passes.

      Note that this check may be expensive, depending on what values it is passed. Whenever @@ -1057,7 +1057,7 @@

    • assertWrap.entriesEqual : a less expensive (but less thorough) deep equality assertion.
    • assertWrap.jsonEquals : a less expensive (but less thorough) deep equality assertion.
    -
    • Asserts that two objects are not deeply equal by checking only their top-level values for strict (non-deep, reference, using ===) equality and, if so, returns the first object.

      @@ -1072,7 +1072,7 @@
    • assertWrap.notJsonEquals : another not deep equality assertion.
    • assertWrap.notDeepEquals : the most thorough (but also slow) not deep equality assertion.
    -
    • Asserts that a value is not an instance of the given class constructor. Returns the value if the assertion passes.

      Type guards the value.

      Type Parameters

      • const Actual
      • const Instance

      Parameters

      • this: void
      • instance: Actual
      • constructor: Constructor<Instance>
      • OptionalfailureMessage: string

      Returns Exclude<Actual, Instance>

      import {assertWrap} from '@augment-vir/assert';

      assertWrap.notInstanceOf(/abc/, RegExp); // throws an error
      assertWrap.notInstanceOf('abc', RegExp); // returns `'abc'` @@ -1083,7 +1083,7 @@
      -
    • Asserts that two values are not deeply equal when stringified into JSON. This may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order. Returns the first value if the assertion passes.

      @@ -1097,7 +1097,7 @@
    • assertWrap.entriesEqual : another deep equality assertion.
    • assertWrap.deepEquals : the most thorough (but also slow) deep equality assertion.
    -
    • Asserts that two values are not loosely equal (using ==). Returns the first value if the assertion passes.

      Performs no type guarding.

      @@ -1109,7 +1109,7 @@
    • assertWrap.looseEquals : the opposite assertion.
    • assertWrap.strictEquals : the strict equality assertion.
    -
    • Asserts that two values are not strictly equal (using ===). Returns the first value if the assertion passes.

      Performs no type guarding.

      @@ -1121,7 +1121,7 @@
    • assertWrap.strictEquals : the opposite assertion.
    • assertWrap.notLooseEquals : the loose equality assertion.
    -
    -
    +
    diff --git a/functions/assertWrapTestContext.html b/functions/assertWrapTestContext.html index 616680b8..a035639d 100644 --- a/functions/assertWrapTestContext.html +++ b/functions/assertWrapTestContext.html @@ -1,4 +1,4 @@ -assertWrapTestContext | augment-vir - v31.4.0

    Function assertWrapTestContext

    diff --git a/functions/awaitedBlockingMap.html b/functions/awaitedBlockingMap.html index 202cf9cf..a8afd539 100644 --- a/functions/awaitedBlockingMap.html +++ b/functions/awaitedBlockingMap.html @@ -1,4 +1,4 @@ -awaitedBlockingMap | augment-vir - v31.4.0

    Function awaitedBlockingMap

    +
    diff --git a/functions/awaitedFilter.html b/functions/awaitedFilter.html index 140a9394..2ec4f57f 100644 --- a/functions/awaitedFilter.html +++ b/functions/awaitedFilter.html @@ -1,4 +1,4 @@ -awaitedFilter | augment-vir - v31.4.0

    Function awaitedFilter

    diff --git a/functions/awaitedForEach.html b/functions/awaitedForEach.html index 61e82374..dc93d6d5 100644 --- a/functions/awaitedForEach.html +++ b/functions/awaitedForEach.html @@ -1,4 +1,4 @@ -awaitedForEach | augment-vir - v31.4.0

    Function awaitedForEach

    +
    diff --git a/functions/calculateTextDimensions.html b/functions/calculateTextDimensions.html index 7649c0ee..55792c2b 100644 --- a/functions/calculateTextDimensions.html +++ b/functions/calculateTextDimensions.html @@ -1,4 +1,4 @@ -calculateTextDimensions | augment-vir - v31.4.0

    Function calculateTextDimensions

    • Calculate the dimensions needed for an element's text. This is a relatively expensive operation, +calculateTextDimensions | augment-vir - v31.5.0

      Function calculateTextDimensions

      • Calculate the dimensions needed for an element's text. This is a relatively expensive operation, so it should not be called excessively.

        Parameters

        • parentElement: Element
        • text: string
        • OptionalcustomOptions: PartialWithUndefined<
              {
                  debug: boolean;
                  errorMessage: string;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >

        Returns Promise<Dimensions>

      +
    diff --git a/functions/callAsynchronously.html b/functions/callAsynchronously.html index bae18d9e..4e47fe5e 100644 --- a/functions/callAsynchronously.html +++ b/functions/callAsynchronously.html @@ -1,7 +1,7 @@ -callAsynchronously | augment-vir - v31.4.0

    Function callAsynchronously

    • Call a function asynchronously without interrupting current synchronous execution, even if the +callAsynchronously | augment-vir - v31.5.0

      Function callAsynchronously

      • Call a function asynchronously without interrupting current synchronous execution, even if the function was originally synchronous.

        Type Parameters

        • T

        Parameters

        Returns Promise<T>

        import {callAsynchronously} from '@augment-vir/common';

        console.info('1');
        const later = callAsynchronously(() => {
        console.info('3');
        });
        console.info('2');
        await later;

        // logs 1,2,3 in numeric order
      +
    diff --git a/functions/callWithRetries.html b/functions/callWithRetries.html index af7769a0..71cb9048 100644 --- a/functions/callWithRetries.html +++ b/functions/callWithRetries.html @@ -1,8 +1,8 @@ -callWithRetries | augment-vir - v31.4.0

    Function callWithRetries

    • Calls callback until it doesn't throw an error or throws an error when maxRetries is reached. +callWithRetries | augment-vir - v31.5.0

      Function callWithRetries

      • Calls callback until it doesn't throw an error or throws an error when maxRetries is reached. Similar to the waitUntil guard from '@augment-vir/assert' but doesn't check the callback's output.

        Type Parameters

        • const T

        Parameters

        • maxRetries: number
        • callback: () => T

        Returns T

        import {callWithRetries} from '@augment-vir/common';

        const result = callWithRetries(5, () => {
        if (Math.random() < 0.5) {
        return 'done';
        } else {
        throw new Error();
        }
        });
      +
    diff --git a/functions/camelCaseToKebabCase.html b/functions/camelCaseToKebabCase.html index b940ed47..9bc35706 100644 --- a/functions/camelCaseToKebabCase.html +++ b/functions/camelCaseToKebabCase.html @@ -1,3 +1,3 @@ -camelCaseToKebabCase | augment-vir - v31.4.0

    Function camelCaseToKebabCase

    • Converts a CamelCase string to kebab-case.

      +camelCaseToKebabCase | augment-vir - v31.5.0

      Function camelCaseToKebabCase

      +
    diff --git a/functions/capitalizeFirstLetter.html b/functions/capitalizeFirstLetter.html index 30598422..d1fde454 100644 --- a/functions/capitalizeFirstLetter.html +++ b/functions/capitalizeFirstLetter.html @@ -1,3 +1,3 @@ -capitalizeFirstLetter | augment-vir - v31.4.0

    Function capitalizeFirstLetter

    diff --git a/functions/check.html b/functions/check.html index e510a851..69fcfc77 100644 --- a/functions/check.html +++ b/functions/check.html @@ -1,4 +1,4 @@ -check | augment-vir - v31.4.0

    Function check

    A group of guard methods that return a boolean type guard rather than an assertion type guard.

    +check | augment-vir - v31.5.0

    Function check

    A group of guard methods that return a boolean type guard rather than an assertion type guard.

    This can also be called as a standalone check function which returns a boolean to indicate whether its input is truthy or not.

    import {check} from '@augment-vir/assert';

    const value: unknown = 'some value' as unknown;
    if (check.isString(value)) {
    // `value` will now be typed as a `string` in here
    } @@ -6,7 +6,7 @@

    Properties

    Properties

    endsWith endsWithout hasKey isEnumValue @@ -106,7 +106,7 @@
  • check.endsWithout : the opposite check.
  • check.startsWith : check on the other end.
  • -
    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): boolean;
        (parent: string, child: string, failureMessage?: string): boolean;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): boolean;
    } = ...

    Checks that a parent string or array does not end with a specific child. This uses +

    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): boolean;
        (parent: string, child: string, failureMessage?: string): boolean;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): boolean;
    } = ...

    Checks that a parent string or array does not end with a specific child. This uses reference equality when the parent is an array.

    Performs no type guarding.

    import {check} from '@augment-vir/assert';

    check.endsWithout('ab', 'b'); // returns `false`
    check.endsWithout('ab', 'a'); // returns `true`
    check.endsWithout(['a', 'b'], 'b'); // returns `false`
    check.endsWithout(['a', 'b'], 'a'); // returns `true` @@ -116,7 +116,7 @@
  • check.endsWith : the opposite check.
  • check.startsWithout : check on the other end.
  • -
    hasKey: <const Key extends PropertyKey, const Parent>(
        this: void,
        parent: Parent,
        key: Key,
    ) => parent is CombineTypeWithKey<Key, Parent>

    Checks that a parent value has the key.

    +
    hasKey: <const Key extends PropertyKey, const Parent>(
        this: void,
        parent: Parent,
        key: Key,
    ) => parent is CombineTypeWithKey<Key, Parent>

    Checks that a parent value has the key.

    Type guards the parent value.

    import {check} from '@augment-vir/assert';

    check.hasKey({a: 0, b: 1}, 'a'); // returns `true`
    check.hasKey({a: 0, b: 1}, 'c'); // returns `false`
    @@ -125,7 +125,7 @@
  • check.lacksKey : the opposite check.
  • check.hasKeys : the multi-key check.
  • -
    isEnumValue: <const Expected extends EnumBaseType>(
        this: void,
        child: unknown,
        checkEnum: Expected,
    ) => child is Expected[keyof Expected]

    Checks that a child value is an enum member.

    +
    isEnumValue: <const Expected extends EnumBaseType>(
        this: void,
        child: unknown,
        checkEnum: Expected,
    ) => child is Expected[keyof Expected]

    Checks that a child value is an enum member.

    Type guards the child value.

    import {check} from '@augment-vir/assert';

    enum MyEnum {
    A = 'a',
    B = 'b',
    }

    check.isEnumValue('a', MyEnum); // returns `true`
    check.isEnumValue('A', MyEnum); // returns `false`
    @@ -133,7 +133,7 @@
    -
    isLengthAtLeast: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): actual is readonly [Tuple<Element, Length>, Element];
        (actual: string | AnyObject, length: number): boolean;
    } = ...

    Checks that an array or string has at least the given length.

    +
    isLengthAtLeast: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): actual is readonly [Tuple<Element, Length>, Element];
        (actual: string | AnyObject, length: number): boolean;
    } = ...

    Checks that an array or string has at least the given length.

    Type guards an array into an AtLeastTuple. Performs no type guarding on a string.

    import {check} from '@augment-vir/assert';

    check.isLengthAtLeast(['a', 'b', 'c'], 2); // returns `true`
    check.isLengthAtLeast(['a', 'b', 'c'], 3); // returns `true`
    check.isLengthAtLeast(['a', 'b'], 3); // returns `false`
    @@ -141,7 +141,7 @@
    -
    isLengthExactly: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): actual is Tuple<Element, Length>;
        (actual: string | AnyObject, length: number): boolean;
    } = ...

    Checks that an array or string has exactly the given length.

    +
    isLengthExactly: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): actual is Tuple<Element, Length>;
        (actual: string | AnyObject, length: number): boolean;
    } = ...

    Checks that an array or string has exactly the given length.

    Type guards an array into a Tuple. Performs no type guarding on a string.

    import {check} from '@augment-vir/assert';

    check.isLengthExactly(['a', 'b', 'c'], 2); // fails
    check.isLengthExactly(['a', 'b', 'c'], 3); // passes
    check.isLengthExactly(['a', 'b'], 3); // fails
    @@ -149,14 +149,14 @@
    -
    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<FunctionToCall, boolean>;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<FunctionToCall, boolean>;
    } = checkOutput

    Checks that the output of the given function deeply equals expectations. A custom +

    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<FunctionToCall, boolean>;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<FunctionToCall, boolean>;
    } = checkOutput

    Checks that the output of the given function deeply equals expectations. A custom asserter can optionally be provided as the first argument to change the expectation checking from the default "deeply equals" to whatever you want.

    Performs no type guarding.

    import {check} from '@augment-vir/assert';

    check.output((input: number) => String(input), [5], '5'); // returns `true`
    check.output((input: number) => String(input), [10], '5'); // returns `false`

    check.output(assert.isLengthAtLeast, (input: number) => String(input), [5], 2); // returns `false`
    check.output(assert.isLengthAtLeast, (input: number) => String(input), [10], 2); // returns `true`
    -
    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): boolean;
        (parent: string, child: string, failureMessage?: string): boolean;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): boolean;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference +

    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): boolean;
        (parent: string, child: string, failureMessage?: string): boolean;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): boolean;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference equality when the parent is an array.

    Performs no type guarding.

    import {check} from '@augment-vir/assert';

    check.startsWith('ab', 'b'); // returns `false`
    check.startsWith('ab', 'a'); // returns `true`
    check.startsWith(['a', 'b'], 'b'); // returns `false`
    check.startsWith(['a', 'b'], 'a'); // returns `true` @@ -166,7 +166,7 @@
  • check.startsWithout : the opposite check.
  • check.endsWith : check on the other end.
  • -
    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): boolean;
        (parent: string, child: string, failureMessage?: string): boolean;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): boolean;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference +

    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): boolean;
        (parent: string, child: string, failureMessage?: string): boolean;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): boolean;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference equality when the parent is an array.

    Performs no type guarding.

    import {check} from '@augment-vir/assert';

    check.startsWith('ab', 'b'); // returns `false`
    check.startsWith('ab', 'a'); // returns `true`
    check.startsWith(['a', 'b'], 'b'); // returns `false`
    check.startsWith(['a', 'b'], 'a'); // returns `true` @@ -176,7 +176,7 @@
  • check.startsWithout : the opposite check.
  • check.endsWith : check on the other end.
  • -
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): boolean;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): Promise<boolean>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): boolean;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): MaybePromise<boolean>;
    } = throwsCheck

    If a function input is provided:

    +
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): boolean;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): Promise<boolean>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): boolean;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        ): MaybePromise<boolean>;
    } = throwsCheck

    If a function input is provided:

    Calls that function and checks that the function throw an error, comparing the error with the given ErrorMatchOptions, if provided.

    If a promise is provided:

    @@ -188,7 +188,7 @@
    import {check} from '@augment-vir/assert';

    check.throws(() => {
    throw new Error();
    }); // returns `true`
    check.throws(
    () => {
    throw new Error();
    },
    {matchMessage: 'hi'},
    ); // returns `false`
    await check.throws(Promise.reject()); // returns `true`
    check.throws(() => {}); // returns `false`
    -

    Methods

    Methods

    • Checks that two values are deeply equal using the deep-eql package.

      Note that this check may be expensive, depending on what values it is passed. Whenever possible, use simpler equality checks instead (see the see section below).

      @@ -201,7 +201,7 @@
    • check.entriesEqual : a less expensive (but less thorough) deep equality check.
    • check.jsonEquals : a less expensive (but less thorough) deep equality check.
    -
    -
    • Checks that a parent value has all the keys.

      Type guards the parent value.

      Type Parameters

      • const Keys extends PropertyKey
      • const Parent

      Parameters

      Returns parent is CombineTypeWithKey<Keys, Parent>

      import {check} from '@augment-vir/assert';

      check.hasKeys({a: 0, b: 1}, ['a', 'b']); // returns `true`
      check.hasKeys({a: 0, b: 1}, ['b', 'c']); // returns `false`
      @@ -223,7 +223,7 @@
    • check.lacksKeys : the opposite check.
    • check.hasKey : the single-key check.
    -
    • Checks that an object/array parent includes a child value through reference equality.

      +
    • Checks that an object/array parent includes a child value through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • value: unknown

      Returns boolean

      import {check} from '@augment-vir/assert';

      const child = {a: 'a'};

      check.hasValue({child}, child); // returns `true`
      check.hasValue({child: {a: 'a'}}, child); // returns `false`
      check.hasValue([child], child); // returns `true`
      @@ -232,7 +232,7 @@
    • check.lacksValue : the opposite check.
    • check.hasValues : the multi-value check.
    -
    • Checks that an object/array parent includes all child values through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • values: unknown[]

      Returns boolean

      import {check} from '@augment-vir/assert';

      const child = {a: 'a'};
      const child2 = {b: 'b'};

      check.hasValues({child, child2}, [child, child2]); // returns `true`
      check.hasValues({child: {a: 'a'}, child2}, [child, child2]); // returns `false`
      check.hasValues([child], [child, child2]); // returns `true`
      @@ -241,7 +241,7 @@
    • check.lacksValues : the opposite check.
    • check.hasValue : the single-value check.
    -
    • Checks that a value is an instance of the given class constructor.

      Type guards the value.

      Type Parameters

      • const Instance

      Parameters

      • this: void
      • instance: unknown
      • constructor: Constructor<Instance>

      Returns instance is Instance

      import {check} from '@augment-vir/assert';

      check.instanceOf(/abc/, RegExp); // returns `true`
      check.instanceOf('abc', RegExp); // returns `false`
      @@ -249,7 +249,7 @@
      -
    • Checks that a number is above the expectation (actual > expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isAbove(10, 5); // returns `true`
      check.isAbove(5, 5); // returns `false`
      check.isAbove(5, 10); // returns `false`
      @@ -258,7 +258,7 @@
    • check.isBelow : the opposite check.
    • check.isAtLeast : the more lenient check.
    -
    • Checks that a number is within ±delta of the expectation.

      +
    • Checks that a number is within ±delta of the expectation.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • delta: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isApproximately(10, 8, 4); // returns `true`
      check.isApproximately(10, 12, 4); // returns `true`
      check.isApproximately(10, 8, 1); // returns `false`
      check.isApproximately(10, 12, 1); // returns `false`
      @@ -266,7 +266,7 @@
      -
    • Checks that a value is an array.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is ArrayNarrow<Actual>

      import {check} from '@augment-vir/assert';

      check.isArray([]); // returns `true`
      check.isArray({length: 4}); // returns `false`
      @@ -274,7 +274,7 @@
      -
    • Checks that a number is at least the expectation (actual >= expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isAtLeast(10, 5); // returns `true`
      check.isAtLeast(5, 5); // returns `true`
      check.isAtLeast(5, 10); // returns `false`
      @@ -283,7 +283,7 @@
    • check.isAtMost : the opposite check.
    • check.isAbove : the more restrictive check.
    -
    • Checks that a number is at most the expectation (actual <= expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isAtMost(10, 5); // returns `false`
      check.isAtMost(5, 5); // returns `true`
      check.isAtMost(5, 10); // returns `true`
      @@ -292,7 +292,7 @@
    • check.isAtLeast : the opposite check.
    • check.isBelow : the more restrictive check.
    -
    • Checks that a number is below the expectation (actual < expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isBelow(10, 5); // returns `false`
      check.isBelow(5, 5); // returns `false`
      check.isBelow(5, 10); // returns `true`
      @@ -301,7 +301,7 @@
    • check.isAbove : the opposite check.
    • check.isAtMost : the more lenient check.
    -
    • Checks that a value is defined (not null and not undefined).

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns input is Exclude<Actual, undefined | null>

      import {check} from '@augment-vir/assert';

      check.isDefined(0); // returns `true`
      check.isDefined(''); // returns `true`
      check.isDefined(null); // returns `false`
      check.isDefined(undefined); // returns `false`
      @@ -325,7 +325,7 @@
      -
    • Checks that a value is an instance of the built-in Error class and compares it to the +

    • Checks that a value is an instance of the built-in Error class and compares it to the given ErrorMatchOptions, if provided.

      Type guards the input.

      Parameters

      • this: void
      • actual: unknown
      • OptionalmatchOptions: PartialWithNullable<
            {
                matchConstructor: ErrorConstructor
                | new (...args: any[]) => Error;
                matchMessage: string | RegExp;
            },
        >

      Returns actual is Error

      import {check} from '@augment-vir/assert';

      check.isError(new Error()); // returns `true`
      check.isError(new Error(), {matchMessage: 'hi'}); // returns `false`
      check.isError({message: 'not an error'}); // returns `false`
      -
    • Checks that a value is exactly false.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown

      Returns input is false

      import {check} from '@augment-vir/assert';

      check.isFalse(true); // returns `false`
      check.isFalse(false); // returns `true`
      check.isFalse(1); // returns `false`
      check.isFalse(0); // returns `false`
      @@ -348,7 +348,7 @@
    • check.isTrue : the opposite check.
    • check.isFalsy : a less exact check.
    -
    • Checks that a value is falsy.

      Type guards the value when possible.

      Parameters

      • this: void
      • input: unknown

      Returns input is FalsyValue

      import {check} from '@augment-vir/assert';

      check.isFalsy(true); // returns `false`
      check.isFalsy(false); // returns `true`
      check.isFalsy(1); // returns `false`
      check.isFalsy(0); // returns `true`
      @@ -357,7 +357,7 @@
    • check.isTruthy : the opposite check.
    • check.isFalse : a more exact check.
    -
    • Checks that a number is finite: meaning, not NaN and not Infinity or -Infinity.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isFinite(10); // returns `true`
      check.isFinite(parseInt('invalid')); // returns `false`
      check.isFinite(Infinity); // returns `false`
      check.isFinite(-Infinity); // returns `false`
      @@ -366,7 +366,7 @@
    • check.isNaN : an opposite check.
    • check.isInfinite : an opposite check.
    -
    -
    -
    • Checks that child value is contained within a parent object, array, or string through reference equality.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • child: unknown
      • parent: Parent

      Returns child is Values<Parent>

      import {check} from '@augment-vir/assert';

      const child = {a: 'a'};

      check.isIn(child, {child}); // returns `true`
      check.isIn('a', 'ab'); // returns `true`
      check.isIn(child, [child]); // returns `true`

      check.isIn(child, {child: {a: 'a'}}); // returns `false`
      check.isIn('a', 'bc'); // returns `false` @@ -403,7 +403,7 @@
      -
    • Checks that a number is inside the provided min and max bounds, inclusive.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • __namedParameters: MinMax

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isInBounds(5, {min: 1, max: 10}); // passes
      check.isInBounds(10, {min: 1, max: 10}); // passes
      check.isInBounds(11, {min: 1, max: 10}); // fails
      check.isInBounds(0, {min: 1, max: 10}); // fails
      @@ -411,7 +411,7 @@
      -
    • Checks that a number is either Infinity or -Infinity.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isInfinite(10); // returns `false`
      check.isInfinite(parseInt('invalid')); // returns `false`
      check.isInfinite(Infinity); // returns `true`
      check.isInfinite(-Infinity); // returns `true`
      @@ -420,7 +420,7 @@
    • check.isNaN : an opposite check.
    • check.isInfinite : an opposite check.
    -
    • Checks that a key is contained within a parent value.

      Type guards the key.

      Type Parameters

      • const Parent

      Parameters

      • this: void
      • key: PropertyKey
      • parent: Parent

      Returns key is keyof Parent

      import {check} from '@augment-vir/assert';

      check.isKeyof('a', {a: 0, b: 1}); // returns `true`
      check.isKeyof('c', {a: 0, b: 1}); // returns `false`
      @@ -437,7 +437,7 @@
      -
    • Checks that a number is NaN.

      Performs no type guarding.

      Parameters

      • this: void
      • input: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isNaN(10); // returns `false`
      check.isNaN(parseInt('invalid')); // returns `true`
      check.isNaN(Infinity); // returns `false` @@ -446,7 +446,7 @@
      -
    • Checks that a number is outside ±delta of the expectation.

      +
    • Checks that a number is outside ±delta of the expectation.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • expected: number
      • delta: number

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isNotApproximately(10, 8, 4); // returns `false`
      check.isNotApproximately(10, 12, 4); // returns `false`
      check.isNotApproximately(10, 8, 1); // returns `true`
      check.isNotApproximately(10, 12, 1); // returns `true`
      @@ -454,7 +454,7 @@
      -
    • Checks that a value is not an array.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, readonly unknown[]>

      import {check} from '@augment-vir/assert';

      check.isNotArray([]); // returns `false`
      check.isNotArray({length: 4}); // returns `true`
      @@ -462,7 +462,7 @@
      -
    • Checks that a value is not a BigInt.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, bigint>

      import {check} from '@augment-vir/assert';

      check.isNotBigInt(123n); // returns `false`
      check.isNotBigInt(123); // returns `true`
      @@ -470,7 +470,7 @@
      -
    • Checks that a value is not a boolean.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, boolean>

      import {check} from '@augment-vir/assert';

      check.isNotBoolean(true); // returns `false`
      check.isNotBoolean('true'); // returns `true`
      @@ -478,7 +478,7 @@
      -
    • Checks that a value is not empty. Supports strings, Maps, Sets, objects, and arrays.

      Type guards the value.

      Type Parameters

      Parameters

      Returns actual is Exclude<Actual, Empty>

      import {check} from '@augment-vir/assert';

      check.isNotEmpty({}); // returns `false`
      check.isNotEmpty(''); // returns `false`
      check.isNotEmpty([]); // returns `false`

      check.isNotEmpty('a'); // returns `true`
      check.isNotEmpty({a: 'a'}); // returns `true`
      @@ -486,7 +486,7 @@
      -
    • Checks that child value is not contained within a parent object, array, or string through reference equality.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object
      • Child

      Parameters

      Returns child is Exclude<Child, Values<Parent>>

      import {check} from '@augment-vir/assert';

      const child = {a: 'a'};

      check.isNotIn(child, {child}); // returns `false`
      check.isNotIn('a', 'ab'); // returns `false`
      check.isNotIn(child, [child]); // returns `false`

      check.isNotIn(child, {child: {a: 'a'}}); // returns `true`
      check.isNotIn('a', 'bc'); // returns `true` @@ -511,7 +511,7 @@
      -
    • Checks that a key is not contained within a parent value.

      Type guards the key.

      Type Parameters

      • const Key extends PropertyKey
      • const Parent

      Parameters

      Returns key is Exclude<Key, RequiredKeysOf<Parent>>

      import {check} from '@augment-vir/assert';

      check.isNotKeyOf('a', {a: 0, b: 1}); // returns `false`
      check.isNotKeyOf('c', {a: 0, b: 1}); // returns `true`
      @@ -528,7 +528,7 @@
      -
    • Checks that a value is not exactly null.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, null>

      import {check} from '@augment-vir/assert';

      check.isNotNull(null); // returns `false`
      check.isNotNull(undefined); // returns `true`
      @@ -536,7 +536,7 @@
      -
    • Checks that a value is not a number. This includes NaN.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, number>

      import {check} from '@augment-vir/assert';

      check.isNotNumber(123); // returns `false`
      check.isNotNumber(123n); // returns `true`
      @@ -544,7 +544,7 @@
      -
    • Checks that a value is a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, Primitive>

      import {check} from '@augment-vir/assert';

      check.isNotPrimitive('key'); // returns `false`
      check.isNotPrimitive(true); // returns `false`
      check.isNotPrimitive({}); // returns `true` @@ -561,7 +561,7 @@
      -
    • Checks that a value is a not Promise instance.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, Promise<any>>

      import {check} from '@augment-vir/assert';

      class CustomThenable {
      constructor(public value: any) {}

      then(onFulfilled?: AnyFunction, onRejected?: AnyFunction) {
      return new CustomThenable(
      onFulfilled ? onFulfilled(this.value) : this.value,
      );
      }
      }

      check.isNotPromise(Promise.resolve(5)); // returns `false`
      check.isNotPromise(new CustomThenable(5)); // returns `true`
      check.isNotPromise(5); // returns `true`
      @@ -570,7 +570,7 @@
    • check.isPromise : the opposite check.
    • check.isNotPromiseLike : the more lenient check.
    -
    • Checks that a value is not a PromiseLike.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party promise implementations that aren't instances of the built-in Promise class.

      @@ -582,7 +582,7 @@
    • check.isPromiseLike : the opposite check.
    • check.isNotPromise : the more precise check.
    -
    • Checks that a value is not a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, PropertyKey>

      import {check} from '@augment-vir/assert';

      check.isNotPropertyKey('key'); // returns `false`
      check.isNotPropertyKey(true); // returns `true`
      check.isNotPropertyKey({}); // returns `true` @@ -591,7 +591,7 @@
      -
    • Checks that a value is not a string.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, string>

      import {check} from '@augment-vir/assert';

      check.isNotString(''); // returns `false`
      check.isNotString(5); // returns `true`
      @@ -599,7 +599,7 @@
      -
    • Checks that a value is not a symbol.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, symbol>

      import {check} from '@augment-vir/assert';

      check.isNotSymbol(Symbol('my-symbol')); // returns `false`
      check.isNotSymbol('my-symbol'); // returns `true`
      @@ -607,7 +607,7 @@
      -
    • Checks that a value is not exactly undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, undefined>

      import {check} from '@augment-vir/assert';

      check.isNotUndefined(undefined); // returns `false`
      check.isNotUndefined(null); // returns `true`
      @@ -615,7 +615,7 @@
      -
    • Checks that a value is not a valid UUID. The nil or max UUIDs are included as not valid.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Exclude<Actual, `${string}-${string}-${string}-${string}-${string}`>

      import {check} from '@augment-vir/assert';
      import {createUuidV4} from '@augment-vir/common';

      check.isNotUuid(createUuidV4()); // returns `false`
      check.isNotUuid('29e0f18e-6115-4982-8342-0afcadf5d611'); // returns `false`
      check.isNotUuid('00000000-0000-0000-0000-000000000000'); // returns `true`
      check.isNotUuid('FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'); // returns `true`
      check.isNotUuid('not-a-uuid'); // returns `true` @@ -624,7 +624,7 @@
      -
    • Checks that a value is nullish (null or undefined).

      Type guards the value.

      Parameters

      • this: void
      • input: unknown

        The value to check.

      Returns input is undefined | null

      import {check} from '@augment-vir/assert';

      check.isNullish(0); // returns `false`
      check.isNullish(''); // returns `false`
      check.isNullish(null); // returns `true`
      check.isNullish(undefined); // returns `true` @@ -641,7 +641,7 @@
      -
    • Checks that a number is outside the provided min and max bounds, exclusive.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: number
      • __namedParameters: MinMax

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.isOutBounds(5, {min: 1, max: 10}); // fails
      check.isOutBounds(10, {min: 1, max: 10}); // fails
      check.isOutBounds(11, {min: 1, max: 10}); // passes
      check.isOutBounds(0, {min: 1, max: 10}); // passes
      @@ -665,7 +665,7 @@
      -
    • Checks that a value is a JavaScript primitive.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown

      Returns actual is Primitive

      import {check} from '@augment-vir/assert';

      check.isPrimitive('key'); // returns `true`
      check.isPrimitive(true); // returns `true`
      check.isPrimitive({}); // returns `false` @@ -674,7 +674,7 @@
      -
    • Checks that a value is a Promise instance.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is Extract<Actual, Promise<any>>

      import {check} from '@augment-vir/assert';

      class CustomThenable {
      constructor(public value: any) {}

      then(onFulfilled?: AnyFunction, onRejected?: AnyFunction) {
      return new CustomThenable(
      onFulfilled ? onFulfilled(this.value) : this.value,
      );
      }
      }

      check.isPromise(Promise.resolve(5)); // returns `true`
      check.isPromise(new CustomThenable(5)); // returns `false`
      check.isPromise(5); // returns `false`
      @@ -683,7 +683,7 @@
    • check.isNotPromise : the opposite check.
    • check.isPromiseLike : the more lenient check.
    -
    • Checks that a value is a PromiseLike.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party promise implementations that aren't instances of the built-in Promise class.

      @@ -695,7 +695,7 @@
    • check.isNotPromiseLike : the opposite check.
    • check.isPromise : the more precise check.
    -
    • Checks that a value is not a JavaScript primitive.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns actual is
          | Extract<string, Actual>
          | Extract<number, Actual>
          | Extract<symbol, Actual>

      import {check} from '@augment-vir/assert';

      check.isPropertyKey('key'); // returns `true`
      check.isPropertyKey(true); // returns `false`
      check.isPropertyKey({}); // returns `false` @@ -704,7 +704,7 @@
      -
    • Checks that a value is exactly true.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown

      Returns input is true

      import {check} from '@augment-vir/assert';

      check.isTrue(true); // returns `true`
      check.isTrue(false); // returns `false`
      check.isTrue(1); // returns `false`
      check.isTrue(0); // returns `false`
      @@ -729,7 +729,7 @@
    • check.isFalse : the opposite check.
    • check.isTruthy : a less exact check.
    -
    • Checks that a value is truthy.

      Type guards the value.

      Type Parameters

      • T

      Parameters

      • this: void
      • input: T

      Returns input is Exclude<T, FalsyValue>

      import {check} from '@augment-vir/assert';

      check.isTruthy(true); // passes
      check.isTruthy(false); // fails
      check.isTruthy(1); // passes
      check.isTruthy(0); // fails
      @@ -738,7 +738,7 @@
    • check.isFalsy : the opposite check.
    • check.isTrue : a more exact check.
    -
    • Checks that a value is a valid UUID. Does not accept the nil or max UUIDs.

      +
    • Checks that a value is a valid UUID. Does not accept the nil or max UUIDs.

      Type guards the value.

      Parameters

      • this: void
      • actual: unknown

      Returns actual is `${string}-${string}-${string}-${string}-${string}`

      import {check} from '@augment-vir/assert';
      import {createUuidV4} from '@augment-vir/common';

      check.isUuid(createUuidV4()); // returns `true`
      check.isUuid('29e0f18e-6115-4982-8342-0afcadf5d611'); // returns `true`
      check.isUuid('00000000-0000-0000-0000-000000000000'); // returns `false`
      check.isUuid('FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'); // returns `false`
      check.isUuid('not-a-uuid'); // returns `false`
      @@ -754,7 +754,7 @@
      -
    • Checks that two values are deeply equal when stringified into JSON. This will fail or may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order.

      Type guards the first value.

      @@ -766,7 +766,7 @@
    • check.entriesEqual : another deep equality check.
    • check.deepEquals : the most thorough (but also slow) deep equality check.
    -
    • Checks that a parent value does not have the key.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      Returns parent is Exclude<Parent, Record<Key, any>>

      import {check} from '@augment-vir/assert';

      check.lacksKey({a: 0, b: 1}, 'a'); // returns `false`
      check.lacksKey({a: 0, b: 1}, 'c'); // returns `true`
      @@ -775,7 +775,7 @@
    • check.hasKey : the opposite check.
    • check.lacksKeys : the multi-key check.
    -
    • Checks that a parent value none of the keys.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      Returns parent is Exclude<Parent, Partial<Record<Key, any>>>

      import {check} from '@augment-vir/assert';

      check.lacksKeys({a: 0, b: 1}, ['b', 'c']); // returns `false`
      check.lacksKeys({a: 0, b: 1}, ['c', 'd']); // returns `true`
      @@ -784,7 +784,7 @@
    • check.hasKeys : the opposite check.
    • check.lacksKey : the single-key check.
    -
    • Checks that an object/array parent does not include a child value through reference +

    • Checks that an object/array parent does not include a child value through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • value: unknown

      Returns boolean

      import {check} from '@augment-vir/assert';

      const child = {a: 'a'};

      check.lacksValue({child}, child); // returns `false`
      check.lacksValue({child: {a: 'a'}}, child); // returns `true`
      check.lacksValue([child], child); // returns `false` @@ -794,7 +794,7 @@
    • check.hasValue : the opposite check.
    • check.lacksValues : the multi-value check.
    -
    • Checks that an object/array parent includes none of the provided child values through reference equality.

      Performs no type guarding.

      Parameters

      • this: void
      • parent: string | object
      • values: unknown[]

      Returns boolean

      import {check} from '@augment-vir/assert';

      const child = {a: 'a'};
      const child2 = {b: 'b'};

      check.lacksValues({}, [child, child2]); // returns `true`
      check.lacksValues({child, child2}, [child, child2]); // returns `false`
      check.lacksValues({child: {a: 'a'}, child2}, [child, child2]); // returns `false` @@ -804,7 +804,7 @@
    • check.lacksValues : the opposite check.
    • check.hasValue : the single-value check.
    -
    • Checks that two values are loosely equal (using ==).

      Type guards the first value.

      Parameters

      • this: void
      • actual: unknown
      • expected: unknown

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.looseEquals('a', 'a'); // true

      check.looseEquals('1', 1); // true

      check.looseEquals({a: 'a'}, {a: 'a'}); // false

      const objectExample = {a: 'a'};
      check.looseEquals(objectExample, objectExample); // true @@ -814,7 +814,7 @@
    • check.notLooseEquals : the opposite check.
    • check.strictEquals : the strict equality check.
    -
    • Checks that a string (first input, actual) matches a RegExp (second input, expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.matches('hi', /^h/); // returns `true`
      check.matches('hi', /^g/); // returns `false`
      @@ -822,7 +822,7 @@
      -
    • Checks that a string (first input, actual) does not match a RegExp (second input, expected).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.mismatches('hi', /^h/); // returns `false`
      check.mismatches('hi', /^g/); // returns `true` @@ -831,7 +831,7 @@
      -
    • Checks that two values are not deeply equal using the deep-eql package.

      Note that this check may be expensive, depending on what values it is passed. Whenever possible, use simpler equality checks instead (see the see section below).

      @@ -844,7 +844,7 @@
    • check.entriesEqual : a less expensive (but less thorough) deep equality check.
    • check.jsonEquals : a less expensive (but less thorough) deep equality check.
    -
    • Checks that two objects are not deeply equal by checking only their top-level values for strict (non-deep, reference, using ===) equality.

      @@ -857,7 +857,7 @@
    • check.notJsonEquals : another not deep equality check.
    • check.notDeepEquals : the most thorough (but also slow) not deep equality check.
    -
    • Checks that a value is not an instance of the given class constructor.

      Type guards the value.

      Type Parameters

      • const Actual
      • const Instance

      Parameters

      Returns instance is Exclude<Actual, Instance>

      import {check} from '@augment-vir/assert';

      check.notInstanceOf(/abc/, RegExp); // returns `false`
      check.notInstanceOf('abc', RegExp); // returns `true`
      @@ -865,7 +865,7 @@
      -
    • Checks that two values are not deeply equal when stringified into JSON. This may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order.

      Performs no type guarding.

      @@ -877,7 +877,7 @@
    • check.entriesEqual : another deep equality check.
    • check.deepEquals : the most thorough (but also slow) deep equality check.
    -
    • Checks that two values are not loosely equal (using ==).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: unknown
      • expected: unknown

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.notLooseEquals('a', 'a'); // false

      check.notLooseEquals('1', 1); // false

      check.notLooseEquals({a: 'a'}, {a: 'a'}); // true

      const objectExample = {a: 'a'};
      check.notLooseEquals(objectExample, objectExample); // false @@ -887,7 +887,7 @@
    • check.looseEquals : the opposite check.
    • check.strictEquals : the strict equality check.
    -
    • Checks that two values are not strictly equal (using ===).

      Performs no type guarding.

      Parameters

      • this: void
      • actual: unknown
      • expected: unknown

      Returns boolean

      import {check} from '@augment-vir/assert';

      check.notStrictEquals('a', 'a'); // false

      check.notStrictEquals('1', 1); // true

      check.notStrictEquals({a: 'a'}, {a: 'a'}); // true

      const objectExample = {a: 'a'};
      check.notStrictEquals(objectExample, objectExample); // false @@ -897,7 +897,7 @@
    • check.strictEquals : the opposite check.
    • check.notLooseEquals : the loose equality check.
    -
    • Checks that two values are strictly equal (using ===).

      Type guards the first value.

      Type Parameters

      • Actual
      • Expected

      Parameters

      Returns actual is NarrowToExpected<Actual, Expected>

      import {check} from '@augment-vir/assert';

      check.strictEquals('a', 'a'); // true

      check.strictEquals('1', 1); // false

      check.strictEquals({a: 'a'}, {a: 'a'}); // false

      const objectExample = {a: 'a'};
      check.strictEquals(objectExample, objectExample); // true @@ -907,4 +907,4 @@
    • check.notStrictEquals : the opposite check.
    • check.looseEquals : the loose equality check.
    -
    +
    diff --git a/functions/checkCustomDeepQuality.html b/functions/checkCustomDeepQuality.html index 7b9568d8..c314bf43 100644 --- a/functions/checkCustomDeepQuality.html +++ b/functions/checkCustomDeepQuality.html @@ -1,13 +1,13 @@ -checkCustomDeepQuality | augment-vir - v31.4.0

    Function checkCustomDeepQuality

    Deeply checks inputs for equality with a custom checker callback. All objects are recursed into +checkCustomDeepQuality | augment-vir - v31.5.0

    Function checkCustomDeepQuality

    Deeply checks inputs for equality with a custom checker callback. All objects are recursed into and the custom checker is only run on primitives. This function automatically handles async custom checkers and circular references.

    • Deeply checks inputs for equality with a custom checker callback. All objects are recursed into and the custom checker is only run on primitives. This function automatically handles async custom checkers and circular references.

      -

      Parameters

      • a: unknown
      • b: unknown
      • customChecker: (a: unknown, b: unknown) => boolean

      Returns boolean

    • Deeply checks inputs for equality with a custom checker callback. All objects are recursed into +

      Parameters

      • a: unknown
      • b: unknown
      • customChecker: (a: unknown, b: unknown) => boolean

      Returns boolean

    • Deeply checks inputs for equality with a custom checker callback. All objects are recursed into and the custom checker is only run on primitives. This function automatically handles async custom checkers and circular references.

      -

      Parameters

      • a: unknown
      • b: unknown
      • customChecker: (a: unknown, b: unknown) => Promise<boolean>

      Returns Promise<boolean>

    • Deeply checks inputs for equality with a custom checker callback. All objects are recursed into +

      Parameters

      • a: unknown
      • b: unknown
      • customChecker: (a: unknown, b: unknown) => Promise<boolean>

      Returns Promise<boolean>

    • Deeply checks inputs for equality with a custom checker callback. All objects are recursed into and the custom checker is only run on primitives. This function automatically handles async custom checkers and circular references.

      -

      Parameters

      • a: unknown
      • b: unknown
      • customChecker: (a: unknown, b: unknown) => MaybePromise<boolean>

      Returns MaybePromise<boolean>

    +

    Parameters

    • a: unknown
    • b: unknown
    • customChecker: (a: unknown, b: unknown) => MaybePromise<boolean>

    Returns MaybePromise<boolean>

    diff --git a/functions/checkIfEntirelyInScrollView.html b/functions/checkIfEntirelyInScrollView.html index 9de8c808..cb25f177 100644 --- a/functions/checkIfEntirelyInScrollView.html +++ b/functions/checkIfEntirelyInScrollView.html @@ -1,3 +1,3 @@ -checkIfEntirelyInScrollView | augment-vir - v31.4.0

    Function checkIfEntirelyInScrollView

    • Checks if the current element is completely visible in its scroll view.

      +checkIfEntirelyInScrollView | augment-vir - v31.5.0

      Function checkIfEntirelyInScrollView

      +
    diff --git a/functions/checkIfInScrollView.html b/functions/checkIfInScrollView.html index 6263f32e..790a17d4 100644 --- a/functions/checkIfInScrollView.html +++ b/functions/checkIfInScrollView.html @@ -1,4 +1,4 @@ -checkIfInScrollView | augment-vir - v31.4.0

    Function checkIfInScrollView

    • Check if the given element is visible in its scroll container to the degree of the given ratio.

      +checkIfInScrollView | augment-vir - v31.5.0

      Function checkIfInScrollView

      • Check if the given element is visible in its scroll container to the degree of the given ratio.

        Parameters

        • element: Element
        • ratio: number

          A number from 0-1, representing 0% to 100%.

        Returns Promise<unknown>

      +
    diff --git a/functions/checkWrap.html b/functions/checkWrap.html index c1dde6b6..53e21a4a 100644 --- a/functions/checkWrap.html +++ b/functions/checkWrap.html @@ -1,4 +1,4 @@ -checkWrap | augment-vir - v31.4.0

    Function checkWrap

    A group of guard methods that do the following:

    +checkWrap | augment-vir - v31.5.0

    Function checkWrap

    A group of guard methods that do the following:

    1. Run the method's assertion on the given inputs.
    2. If the assertion fails, return undefined.
    3. @@ -12,7 +12,7 @@

    Properties

    Properties

    endsWith endsWithout isDefined isLengthAtLeast @@ -112,7 +112,7 @@
  • checkWrap.endsWithout : the opposite check.
  • checkWrap.startsWith : check on the other end.
  • -
    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string,
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
    } = ...

    Checks that a parent string or array does not end with a specific child. This uses +

    endsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string,
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
    } = ...

    Checks that a parent string or array does not end with a specific child. This uses reference equality when the parent is an array. Returns the value if the check passes, otherwise undefined.

    Performs no type guarding.

    @@ -124,7 +124,7 @@
  • checkWrap.endsWith : the opposite check.
  • checkWrap.startsWithout : check on the other end.
  • -
    isDefined: undefined = undefined
    isLengthAtLeast: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): AtLeastTuple<Element, Length> | undefined;
        <Actual extends string | AnyObject>(
            actual: Actual,
            length: number,
        ): Actual | undefined;
    } = ...

    Checks that an array or string has at least the given length. Returns the value if the +

    isDefined: undefined = undefined
    isLengthAtLeast: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): AtLeastTuple<Element, Length> | undefined;
        <Actual extends string | AnyObject>(
            actual: Actual,
            length: number,
        ): Actual | undefined;
    } = ...

    Checks that an array or string has at least the given length. Returns the value if the check passes, otherwise undefined.

    Type guards an array into an AtLeastTuple. Performs no type guarding on a string.

    import {checkWrap} from '@augment-vir/assert';

    checkWrap.isLengthAtLeast(['a', 'b', 'c'], 2); // returns `['a', 'b', 'c']`
    checkWrap.isLengthAtLeast(['a', 'b', 'c'], 3); // returns `['a', 'b', 'c']`
    checkWrap.isLengthAtLeast(['a', 'b'], 3); // returns `undefined` @@ -134,7 +134,7 @@
    -
    isLengthExactly: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): Tuple<Element, Length> | undefined;
        <Actual extends string | AnyObject>(
            actual: Actual,
            length: number,
        ): Actual | undefined;
    } = ...

    Checks that an array or string has exactly the given length. Returns the value if the +

    isLengthExactly: {
        <Element, Length extends number>(
            actual: readonly (undefined | Element)[],
            length: Length,
        ): Tuple<Element, Length> | undefined;
        <Actual extends string | AnyObject>(
            actual: Actual,
            length: number,
        ): Actual | undefined;
    } = ...

    Checks that an array or string has exactly the given length. Returns the value if the check passes, otherwise undefined.

    Type guards an array into a Tuple. Performs no type guarding on a string.

    import {checkWrap} from '@augment-vir/assert';

    checkWrap.isLengthExactly(['a', 'b', 'c'], 2); // returns `undefined`
    checkWrap.isLengthExactly(['a', 'b', 'c'], 3); // returns `['a', 'b', 'c']`
    checkWrap.isLengthExactly(['a', 'b'], 3); // returns `undefined` @@ -144,7 +144,7 @@
    -
    isNullish: undefined = undefined
    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>
            | undefined,
        >;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>
            | undefined,
        >;
    } = checkWrapOutput

    Asserts that the output of the given function deeply equals expectations. A custom +

    isNullish: undefined = undefined
    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>
            | undefined,
        >;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            failureMessage?: string,
        ): OutputReturn<
            FunctionToCall,
            Awaited<ReturnType<NoInfer<FunctionToCall>>>
            | undefined,
        >;
    } = checkWrapOutput

    Asserts that the output of the given function deeply equals expectations. A custom asserter can optionally be provided as the first argument to change the expectation checking from the default "deeply equals" to whatever you want. Returns the output if the check passes, otherwise undefined.

    @@ -153,7 +153,7 @@

    The output if the assertion passes, otherwise undefined.

    -
    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string,
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference +

    startsWith: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string,
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference equality when the parent is an array. Returns the value if the check passes, otherwise undefined.

    Performs no type guarding.

    @@ -165,7 +165,7 @@
  • checkWrap.startsWithout : the opposite check.
  • checkWrap.endsWith : check on the other end.
  • -
    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string,
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference +

    startsWithout: {
        <const ArrayElement>(
            parent: readonly ArrayElement[],
            child: ArrayElement,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string,
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
        (
            parent: string | readonly string[],
            child: string,
            failureMessage?: string,
        ): typeof parent | undefined;
    } = ...

    Checks that a parent string or array starts with a specific child. This uses reference equality when the parent is an array. Returns the value if the check passes, otherwise undefined.

    Performs no type guarding.

    @@ -177,7 +177,7 @@
  • checkWrap.startsWithout : the opposite check.
  • checkWrap.endsWith : check on the other end.
  • -
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error | undefined;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Promise<Error | undefined>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error | undefined;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): MaybePromise<Error | undefined>;
    } = throwsCheckWrap

    If a function input is provided:

    +
    throws: {
        (
            this: void,
            callbackOrPromise: () => never,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error | undefined;
        (
            this: void,
            callbackOrPromise: Promise<any> | () => Promise<any>,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Promise<Error | undefined>;
        (
            this: void,
            callback: () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): Error | undefined;
        (
            this: void,
            callback: Promise<any> | () => any,
            matchOptions?: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            failureMessage?: string,
        ): MaybePromise<Error | undefined>;
    } = throwsCheckWrap

    If a function input is provided:

    Calls that function and checks that the function throw an error, comparing the error with the given ErrorMatchOptions, if provided. Returns the error if the check passes, otherwise undefined.

    @@ -192,7 +192,7 @@

    The Error if the check passes, otherwise undefined.

    -

    Methods

    Methods

    -
    • Checks that two objects are deeply equal by checking only their top-level values for strict (non-deep, reference, using ===) equality. If the check passes the first object is returned. If not, undefined is @@ -222,7 +222,7 @@

    • checkWrap.jsonEquals : another deep equality check.
    • checkWrap.deepEquals : the most thorough (but also slow) deep equality check.
    -
    • Checks that a parent value has the key. Returns the parent value if the check passes, otherwise undefined.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      Returns undefined | CombineTypeWithKey<Key, Parent>

      The parent value if the check passes, otherwise undefined.

      @@ -233,7 +233,7 @@
    • checkWrap.lacksKey : the opposite check.
    • checkWrap.hasKeys : the multi-key check.
    -
    • Checks that a parent value has all the keys. Returns the parent value if the check passes, otherwise undefined.

      Type guards the parent value.

      Type Parameters

      • const Keys extends PropertyKey
      • const Parent

      Parameters

      Returns undefined | CombineTypeWithKey<Keys, Parent>

      The parent value if the check passes, otherwise undefined.

      @@ -244,7 +244,7 @@
    • checkWrap.lacksKeys : the opposite check.
    • checkWrap.hasKey : the single-key check.
    -
    • Checks that an object/array parent includes a child value through reference equality.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • value: unknown

      Returns undefined | Parent

      import {checkWrap} from '@augment-vir/assert';

      const child = {a: 'a'};

      checkWrap.hasValue({child}, child); // returns `{child}`
      checkWrap.hasValue({child: {a: 'a'}}, child); // returns `undefined`
      checkWrap.hasValue([child], child); // returns `[child]`
      @@ -253,7 +253,7 @@
    • checkWrap.lacksValue : the opposite check.
    • checkWrap.hasValues : the multi-value check.
    -
    • Checks that an object/array parent includes all child values through reference equality.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • values: unknown[]

      Returns undefined | Parent

      import {checkWrap} from '@augment-vir/assert';

      const child = {a: 'a'};
      const child2 = {b: 'b'};

      checkWrap.hasValues({child, child2}, [child, child2]); // returns `{child, child2}`
      checkWrap.hasValues({child: {a: 'a'}, child2}, [child, child2]); // returns `undefined`
      checkWrap.hasValues([child], [child, child2]); // returns `[child]`
      @@ -262,7 +262,7 @@
    • checkWrap.lacksValues : the opposite check.
    • checkWrap.hasValue : the single-value check.
    -
    • Checks that a value is an instance of the given class constructor. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • const Instance

      Parameters

      • this: void
      • instance: unknown
      • constructor: Constructor<Instance>

      Returns undefined | Instance

      The value if the check passes, otherwise undefined.

      @@ -272,7 +272,7 @@
      -
    • Checks that a number is above the expectation (actual > expected). Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -283,7 +283,7 @@
    • checkWrap.isBelow : the opposite check.
    • checkWrap.isAtLeast : the more lenient check.
    -
    • Checks that a number is within ±delta of the expectation. Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • delta: number

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -293,7 +293,7 @@
      -
    • Checks that a number is at least the expectation (actual >= expected). Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -314,7 +314,7 @@
    • checkWrap.isAtMost : the opposite check.
    • checkWrap.isAbove : the more restrictive check.
    -
    • Checks that a number is at most the expectation (actual <= expected). Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -325,7 +325,7 @@
    • checkWrap.isAtLeast : the opposite check.
    • checkWrap.isBelow : the more restrictive check.
    -
    • Checks that a number is below the expectation (actual < expected). Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -336,7 +336,7 @@
    • checkWrap.isAbove : the opposite check.
    • checkWrap.isAtMost : the more lenient check.
    -
    • Checks that a value is an instance of the built-in Error class and compares it to the +

    • Checks that a value is an instance of the built-in Error class and compares it to the given ErrorMatchOptions, if provided. Returns the error if the check passes, otherwise undefined.

      Type guards the input.

      @@ -382,7 +382,7 @@
      import {checkWrap} from '@augment-vir/assert';

      checkWrap.isError(new Error()); // returns the Error
      checkWrap.isError(new Error(), {matchMessage: 'hi'}); // returns `undefined`
      checkWrap.isError({message: 'not an error'}); // returns `undefined`
      -
    • Checks that a value is exactly false. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown

      Returns undefined | false

      The value if the check passes, otherwise undefined.

      @@ -393,7 +393,7 @@
    • checkWrap.isTrue : the opposite check.
    • checkWrap.isFalsy : a less exact check.
    -
    -
    • Checks that a number is finite: meaning, not NaN and not Infinity or -Infinity. Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -415,7 +415,7 @@
    • checkWrap.isNaN : an opposite check.
    • checkWrap.isInfinite : an opposite check.
    -
    -
    -
    • Checks that child value is contained within a parent object, array, or string through reference equality.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object
      • Child

      Parameters

      Returns undefined | Extract<Child, Values<Parent>>

      import {checkWrap} from '@augment-vir/assert';

      const child = {a: 'a'};

      checkWrap.isIn(child, {child}); // returns `child`
      checkWrap.isIn('a', 'ab'); // returns `'a'`
      checkWrap.isIn(child, [child]); // returns `child`

      checkWrap.isIn(child, {child: {a: 'a'}}); // returns `undefined`
      checkWrap.isIn('a', 'bc'); // returns `undefined` @@ -457,7 +457,7 @@
      -
    • Checks that a number is inside the provided min and max bounds, inclusive. Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      Returns undefined | Actual

      import {checkWrap} from '@augment-vir/assert';

      checkWrap.isInBounds(5, {min: 1, max: 10}); // returns `5`
      checkWrap.isInBounds(10, {min: 1, max: 10}); // returns `10`
      checkWrap.isInBounds(11, {min: 1, max: 10}); // returns `undefined`
      checkWrap.isInBounds(0, {min: 1, max: 10}); // returns `undefined` @@ -466,7 +466,7 @@
      -
    • Checks that a number is either Infinity or -Infinity. Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -477,7 +477,7 @@
    • checkWrap.isNaN : an opposite check.
    • checkWrap.isInfinite : an opposite check.
    -
    • Checks that a number is outside ±delta of the expectation. Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      • this: void
      • actual: Actual
      • expected: number
      • delta: number

      Returns undefined | Actual

      The value if the check passes, otherwise undefined.

      @@ -518,7 +518,7 @@
      -
    • Checks that a value is not an array. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Exclude<Actual, readonly unknown[]>

      The value if the check passes. Otherwise, undefined.

      @@ -528,7 +528,7 @@
      -
    • Checks that a value is not a BigInt. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Exclude<Actual, bigint>

      The value if the check passes. Otherwise, undefined.

      @@ -538,7 +538,7 @@
      -
    • Checks that a value is not a boolean. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Exclude<Actual, boolean>

      The value if the check passes. Otherwise, undefined.

      @@ -548,7 +548,7 @@
      -
    • Checks that a value is not empty. Supports strings, Maps, Sets, objects, and arrays.

      Type guards the value.

      Type Parameters

      Parameters

      Returns undefined | Exclude<Actual, Empty>

      import {checkWrap} from '@augment-vir/assert';

      checkWrap.isNotEmpty({}); // returns `undefined`
      checkWrap.isNotEmpty(''); // returns `undefined`
      checkWrap.isNotEmpty([]); // returns `undefined`

      checkWrap.isNotEmpty('a'); // returns `'a'`
      checkWrap.isNotEmpty({a: 'a'}); // returns `{a: 'a'}`
      @@ -556,7 +556,7 @@
      -
    • Checks that child value is not contained within a parent object, array, or string through reference equality.

      Type guards the child when possible.

      Type Parameters

      • Parent extends string | object
      • Child

      Parameters

      Returns undefined | Exclude<Child, Values<Parent>>

      import {checkWrap} from '@augment-vir/assert';

      const child = {a: 'a'};

      checkWrap.isNotIn(child, {child}); // returns `undefined`
      checkWrap.isNotIn('a', 'ab'); // returns `undefined`
      checkWrap.isNotIn(child, [child]); // returns `undefined`

      checkWrap.isNotIn(child, {child: {a: 'a'}}); // returns `child`
      checkWrap.isNotIn('a', 'bc'); // returns `'a'` @@ -585,7 +585,7 @@
      -
    • Checks that a value is not exactly null. Returns the value if the check passes, otherwise undefined`.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Exclude<Actual, null>

      The value if the check passes. Otherwise, undefined.

      import {checkWrap} from '@augment-vir/assert';

      checkWrap.isNotNull(null); // returns `undefined`
      checkWrap.isNotNull(undefined); // returns `undefined` @@ -614,7 +614,7 @@
      -
    • Checks that a value is not a number. This includes NaN. Returns the value if the check passes, otherwise undefined`.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Exclude<Actual, number>

      The value if the check passes. Otherwise, undefined.

      import {checkWrap} from '@augment-vir/assert';

      checkWrap.isNotNumber(123); // returns `undefined`
      checkWrap.isNotNumber(123n); // returns `123n` @@ -623,7 +623,7 @@
      -
    • Checks that a value is a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      @@ -644,7 +644,7 @@
      -
    • Checks that a value is a not Promise instance. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Exclude<Actual, Promise<any>>

      import {checkWrap} from '@augment-vir/assert';

      class CustomThenable {
      constructor(public value: any) {}

      then(onFulfilled?: AnyFunction, onRejected?: AnyFunction) {
      return new CustomThenable(
      onFulfilled ? onFulfilled(this.value) : this.value,
      );
      }
      }

      checkWrap.isNotPromise(Promise.resolve(5)); // returns `false`
      checkWrap.isNotPromise(new CustomThenable(5)); // returns `true`
      checkWrap.isNotPromise(5); // returns `true` @@ -654,7 +654,7 @@
    • checkWrap.isPromise : the opposite check.
    • checkWrap.isNotPromiseLike : the more lenient check.
    -
    • Checks that a value is not a PromiseLike. Returns the value if the check passes, otherwise undefined.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party @@ -667,7 +667,7 @@

    • checkWrap.isPromiseLike : the opposite check.
    • checkWrap.isNotPromise : the more precise check.
    -
    • Checks that a value is not a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      @@ -678,7 +678,7 @@
      -
    • Checks that a value is not a valid UUID. The nil or max UUIDs are included as not valid. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Exclude<Actual, `${string}-${string}-${string}-${string}-${string}`>

      The value if the check passes, otherwise undefined.

      @@ -708,7 +708,7 @@
      -
    • Checks that a value is a number. This excludes NaN. Returns the value if the check passes, otherwise undefined`.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | NarrowToActual<Actual, number>

      The value if the check passes. Otherwise, undefined.

      import {checkWrap} from '@augment-vir/assert';

      checkWrap.isNumber(123); // returns `123`
      checkWrap.isNumber(123n); // returns `undefined` @@ -726,7 +726,7 @@
      -
    • Checks that a number is outside the provided min and max bounds, exclusive. Returns the number if the check passes, otherwise undefined.

      Performs no type guarding.

      Type Parameters

      • Actual extends number

      Parameters

      Returns undefined | Actual

      import {checkWrap} from '@augment-vir/assert';

      checkWrap.isOutBounds(5, {min: 1, max: 10}); // returns `undefined`
      checkWrap.isOutBounds(10, {min: 1, max: 10}); // returns `undefined`
      checkWrap.isOutBounds(11, {min: 1, max: 10}); // returns `11`
      checkWrap.isOutBounds(0, {min: 1, max: 10}); // returns `0` @@ -745,7 +745,7 @@
      -
    • Checks that a value is a Promise instance. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns undefined | Extract<Actual, Promise<any>>

      import {checkWrap} from '@augment-vir/assert';

      class CustomThenable {
      constructor(public value: any) {}

      then(onFulfilled?: AnyFunction, onRejected?: AnyFunction) {
      return new CustomThenable(
      onFulfilled ? onFulfilled(this.value) : this.value,
      );
      }
      }

      checkWrap.isPromise(Promise.resolve(5)); // returns `true`
      checkWrap.isPromise(new CustomThenable(5)); // returns `false`
      checkWrap.isPromise(5); // returns `false` @@ -766,7 +766,7 @@
    • checkWrap.isNotPromise : the opposite check.
    • checkWrap.isPromiseLike : the more lenient check.
    -
    • Checks that a value is a PromiseLike. Returns the value if the check passes, otherwise undefined.

      PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party @@ -779,7 +779,7 @@

    • checkWrap.isNotPromiseLike : the opposite check.
    • checkWrap.isPromise : the more precise check.
    -
    • Checks that a value is exactly true. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Parameters

      • this: void
      • input: unknown

      Returns undefined | true

      The value if the check passes, otherwise undefined.

      @@ -821,7 +821,7 @@
    • checkWrap.isFalse : the opposite check.
    • checkWrap.isTruthy : a less exact check.
    -
    • Checks that a value is truthy. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • T

      Parameters

      • this: void
      • input: T

      Returns undefined | Exclude<T, FalsyValue>

      The value if the check passes, otherwise undefined.

      @@ -832,7 +832,7 @@
    • checkWrap.isFalsy : the opposite check.
    • checkWrap.isTrue : a more exact check.
    -
    • Checks that a value is a valid UUID. Does not accept the nil or max UUIDs. Returns the value if the check passes, otherwise undefined.

      Type guards the value.

      Type Parameters

      • Actual

      Parameters

      Returns
          | undefined
          | NarrowToExpected<
              Actual,
              `${string}-${string}-${string}-${string}-${string}`,
          >

      The value if the check passes, otherwise undefined.

      @@ -842,7 +842,7 @@
      -
    • Checks that two values are deeply equal when stringified into JSON. This will fail or may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order. Returns the first value if the check passes.

      @@ -855,7 +855,7 @@
    • checkWrap.entriesEqual : another deep equality check.
    • checkWrap.deepEquals : the most thorough (but also slow) deep equality check.
    -
    • Checks that a parent value does not have the key. Returns the parent value if the check passes, otherwise undefined.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      Returns undefined | Exclude<Parent, Record<Key, any>>

      The parent value if the check passes, otherwise undefined.

      @@ -866,7 +866,7 @@
    • checkWrap.hasKey : the opposite check.
    • checkWrap.lacksKeys : the multi-key check.
    -
    • Checks that a parent value none of the keys. Returns the parent value if the check passes, otherwise undefined.

      Type guards the parent value.

      Type Parameters

      • const Parent
      • const Key extends PropertyKey

      Parameters

      Returns undefined | Exclude<Parent, Partial<Record<Key, any>>>

      The parent value if the check passes, otherwise undefined.

      @@ -877,7 +877,7 @@
    • checkWrap.hasKeys : the opposite check.
    • checkWrap.lacksKey : the single-key check.
    -
    • Checks that an object/array parent does not include a child value through reference equality.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • value: unknown

      Returns undefined | Parent

      import {checkWrap} from '@augment-vir/assert';

      const child = {a: 'a'};

      checkWrap.lacksValue({child}, child); // returns `undefined`
      checkWrap.lacksValue({child: {a: 'a'}}, child); // returns `{child: {a: 'a'}}`
      checkWrap.lacksValue([child], child); // returns `undefined` @@ -887,7 +887,7 @@
    • checkWrap.hasValue : the opposite check.
    • checkWrap.lacksValues : the multi-value check.
    -
    • Checks that an object/array parent includes none of the provided child values through reference equality.

      Performs no type guarding.

      Type Parameters

      • Parent extends string | object

      Parameters

      • this: void
      • parent: Parent
      • values: unknown[]

      Returns undefined | Parent

      import {checkWrap} from '@augment-vir/assert';

      const child = {a: 'a'};
      const child2 = {b: 'b'};

      checkWrap.lacksValues({}, [child, child2]); // returns `{}`
      checkWrap.lacksValues({child, child2}, [child, child2]); // returns `undefined`
      checkWrap.lacksValues({child: {a: 'a'}, child2}, [child, child2]); // returns `undefined` @@ -897,7 +897,7 @@
    • checkWrap.lacksValues : the opposite check.
    • checkWrap.hasValue : the single-value check.
    -
    • Checks that two values are loosely equal (using ==). Returns the first value if the check passes, otherwise undefined.

      Type guards the first value.

      @@ -909,7 +909,7 @@
    • checkWrap.notLooseEquals : the opposite check.
    • checkWrap.strictEquals : the strict equality check.
    -
    • Checks that a string (first input, actual) matches a RegExp (second input, expected). Returns the string if the check passes, otherwise undefined.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp

      Returns undefined | string

      The value if the check passes, otherwise undefined.

      @@ -919,7 +919,7 @@
      -
    • Checks that a string (first input, actual) does not match a RegExp (second input, expected). Returns the string if the check passes, otherwise undefined.

      Performs no type guarding.

      Parameters

      • this: void
      • actual: string
      • expected: RegExp

      Returns undefined | string

      The value if the check passes, otherwise undefined.

      @@ -929,7 +929,7 @@
      -
    • Checks that two values are not deeply equal using the deep-eql package. Returns the first value if the check passes.

      Note that this check may be expensive, depending on what values it is passed. Whenever @@ -944,7 +944,7 @@

    • checkWrap.entriesEqual : a less expensive (but less thorough) deep equality check.
    • checkWrap.jsonEquals : a less expensive (but less thorough) deep equality check.
    -
    • Checks that two objects are not deeply equal by checking only their top-level values for strict (non-deep, reference, using ===) equality. If the check passes the first object is returned. If not, undefined is @@ -959,7 +959,7 @@

    • checkWrap.notJsonEquals : another not deep equality check.
    • checkWrap.notDeepEquals : the most thorough (but also slow) not deep equality check.
    -
    • Checks that two values are not deeply equal when stringified into JSON. This may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order. Returns the first value if the check passes.

      @@ -982,7 +982,7 @@
    • checkWrap.entriesEqual : another deep equality check.
    • checkWrap.deepEquals : the most thorough (but also slow) deep equality check.
    -
    • Checks that two values are not loosely equal (using ==). Returns the first value if the check passes, otherwise undefined.

      Performs no type guarding.

      @@ -994,7 +994,7 @@
    • checkWrap.looseEquals : the opposite check.
    • checkWrap.strictEquals : the strict equality check.
    -
    • Checks that two values are not strictly equal (using ===). Returns the first value if the check passes, otherwise undefined.

      Performs no type guarding.

      @@ -1006,7 +1006,7 @@
    • checkWrap.strictEquals : the opposite check.
    • checkWrap.notLooseEquals : the loose equality check.
    -
    -
    +
    diff --git a/functions/clamp.html b/functions/clamp.html index b0ccb263..92d1ab57 100644 --- a/functions/clamp.html +++ b/functions/clamp.html @@ -1,6 +1,6 @@ -clamp | augment-vir - v31.4.0

    Function clamp

    • Clamp's the given value to within the min and max bounds, inclusive.

      +clamp | augment-vir - v31.5.0

      Function clamp

      • Clamp's the given value to within the min and max bounds, inclusive.

        Parameters

        • value: number
        • __namedParameters: Readonly<MinMax>

        Returns number

        import {clamp} from '@augment-vir/common';

        // `result` will be `40`
        const result = clamp(42, {min: 30, max: 40});
      +
    diff --git a/functions/collapseWhiteSpace.html b/functions/collapseWhiteSpace.html index c1fe2db3..bac3e17c 100644 --- a/functions/collapseWhiteSpace.html +++ b/functions/collapseWhiteSpace.html @@ -1,4 +1,4 @@ -collapseWhiteSpace | augment-vir - v31.4.0

    Function collapseWhiteSpace

    • Collapse all consecutive white space into just one space and trim surrounding whitespace. +collapseWhiteSpace | augment-vir - v31.5.0

      Function collapseWhiteSpace

      +
    diff --git a/functions/combineErrorMessages.html b/functions/combineErrorMessages.html index cc84714a..5c2f2699 100644 --- a/functions/combineErrorMessages.html +++ b/functions/combineErrorMessages.html @@ -1,3 +1,3 @@ -combineErrorMessages | augment-vir - v31.4.0

    Function combineErrorMessages

    Combines multiple error messages into a single error message.

    +combineErrorMessages | augment-vir - v31.5.0

    Function combineErrorMessages

    Combines multiple error messages into a single error message.

    +
    diff --git a/functions/combineErrors.html b/functions/combineErrors.html index 5c9025c3..9697e4b9 100644 --- a/functions/combineErrors.html +++ b/functions/combineErrors.html @@ -1,4 +1,4 @@ -combineErrors | augment-vir - v31.4.0

    Function combineErrors

    • Combines an array of errors into a single array.

      +combineErrors | augment-vir - v31.5.0

      Function combineErrors

      • Combines an array of errors into a single array.

        • If no errors are in the given array, a new Error with an empty message is returned.
        • If only one error is in the given array, it is directly returned without modification.
        • @@ -8,4 +8,4 @@
    +
    diff --git a/functions/copyThroughJson.html b/functions/copyThroughJson.html index f2f61308..3700e1a0 100644 --- a/functions/copyThroughJson.html +++ b/functions/copyThroughJson.html @@ -1,7 +1,7 @@ -copyThroughJson | augment-vir - v31.4.0

    Function copyThroughJson

    • Deeply copy an object through JSON. This is the fastest deep copy, but the input must already be +copyThroughJson | augment-vir - v31.5.0

      Function copyThroughJson

      • Deeply copy an object through JSON. This is the fastest deep copy, but the input must already be JSON serializable otherwise the copy will not match the original.

        Type Parameters

        • const T

        Parameters

        • input: T

        Returns Writable<Jsonify<T>>

        import {copyThroughJson} from '@augment-vir/common';

        // `copy1` will be `{a: 'a', b: 'b'}`
        const copy1 = copyThroughJson({a: 'a', b: 'b'});
        // `copy2` will be `{map: {}, b: 'b'}`
        const copy2 = copyThroughJson({
        map: new Map([
        ['q', 'r'],
        ['s', 't'],
        ]),
        b: 'b',
        });
      +
    diff --git a/functions/createArray.html b/functions/createArray.html index b534dd7f..dc08cd37 100644 --- a/functions/createArray.html +++ b/functions/createArray.html @@ -1,4 +1,4 @@ -createArray | augment-vir - v31.4.0

    Function createArray

    • Creates an array of size size and calls the given callback for each entry in the array and +createArray | augment-vir - v31.5.0

      Function createArray

      • Creates an array of size size and calls the given callback for each entry in the array and fills the array with the results. The returned array is typed to exactly fit the given size.

        This function automatically awaits async callbacks.

        Type Parameters

        • Size extends number
        • T

        Parameters

        • size: Size
        • callback: (index: number) => T

        Returns Extract<T, Promise<any>> extends never
            ? Tuple<T, Size>
            : Promise<Tuple<Awaited<T>, Size>>

        A new array filled with the results of the given callback typed as a Tuple, @@ -7,4 +7,4 @@

    +
    diff --git a/functions/createArrayLogger.html b/functions/createArrayLogger.html index 2c869b1e..9ca8d4e9 100644 --- a/functions/createArrayLogger.html +++ b/functions/createArrayLogger.html @@ -1,7 +1,7 @@ -createArrayLogger | augment-vir - v31.4.0

    Function createArrayLogger

    • Creates a custom logger that doesn't actually log but stores the logs into a object for later +createArrayLogger | augment-vir - v31.5.0

      Function createArrayLogger

      +
    diff --git a/functions/createLogger.html b/functions/createLogger.html index 438981c3..3cd1b4c2 100644 --- a/functions/createLogger.html +++ b/functions/createLogger.html @@ -1,3 +1,3 @@ -createLogger | augment-vir - v31.4.0

    Function createLogger

    diff --git a/functions/createSymlink.html b/functions/createSymlink.html index 15184d10..70e37f1d 100644 --- a/functions/createSymlink.html +++ b/functions/createSymlink.html @@ -1,6 +1,6 @@ -createSymlink | augment-vir - v31.4.0

    Function createSymlink

    • Creates a symlink.

      +createSymlink | augment-vir - v31.5.0

      Function createSymlink

      • Creates a symlink.

        Parameters

        • __namedParameters: { linkTo: string; symlinkPath: string }
          • linkTo: string

            Path that the symlink will link to. If relative, it will be linked relative to the symlink location.

          • symlinkPath: string

            The location and name the symlink file to be created.

        Returns Promise<void>

      +
    diff --git a/functions/createUuidV4.html b/functions/createUuidV4.html index 904d5032..3eb2390a 100644 --- a/functions/createUuidV4.html +++ b/functions/createUuidV4.html @@ -1,4 +1,4 @@ -createUuidV4 | augment-vir - v31.4.0

    Function createUuidV4

    • Creates a cryptographically secure random v4 UUID using +createUuidV4 | augment-vir - v31.5.0

      Function createUuidV4

      +
    diff --git a/functions/describe.html b/functions/describe.html index 90bc0560..800907dd 100644 --- a/functions/describe.html +++ b/functions/describe.html @@ -1,4 +1,4 @@ -describe | augment-vir - v31.4.0

    Function describe

    A test suite declaration. This can be used in both web tests and node tests, so you only have +describe | augment-vir - v31.5.0

    Function describe

    A test suite declaration. This can be used in both web tests and node tests, so you only have import from a single place and learn a single interface.

    This should be passed a noun (preferably a single word, when possible) of what is going to be tested inside the test suite. Its callback should call it from this same package.

    @@ -9,6 +9,6 @@

    Properties

    Properties

    Properties

    +

    Properties

    diff --git a/functions/determineRuntimeEnv.html b/functions/determineRuntimeEnv.html index ca282928..5d1f48da 100644 --- a/functions/determineRuntimeEnv.html +++ b/functions/determineRuntimeEnv.html @@ -1,4 +1,4 @@ -determineRuntimeEnv | augment-vir - v31.4.0

    Function determineRuntimeEnv

    diff --git a/functions/determineTestContextEnv.html b/functions/determineTestContextEnv.html index dd88c033..fc9f0500 100644 --- a/functions/determineTestContextEnv.html +++ b/functions/determineTestContextEnv.html @@ -1,3 +1,3 @@ -determineTestContextEnv | augment-vir - v31.4.0

    Function determineTestContextEnv

    +determineTestContextEnv | augment-vir - v31.5.0

    Function determineTestContextEnv

    diff --git a/functions/diffArrays.html b/functions/diffArrays.html index 06476d6e..7133c952 100644 --- a/functions/diffArrays.html +++ b/functions/diffArrays.html @@ -1,5 +1,5 @@ -diffArrays | augment-vir - v31.4.0

    Function diffArrays

    • Extract all entries in the given arrays that are not equal.

      +diffArrays | augment-vir - v31.5.0

      Function diffArrays

      • Extract all entries in the given arrays that are not equal.

        Type Parameters

        • T0
        • T1

        Parameters

        • array0: readonly T0[]
        • array1: readonly T1[]

        Returns [T0[], T1[]] | []

        An empty tuple if the values are equal. Otherwise, the first tuple entry contains the changes in the first value, second entry contains the changes in the second value.

      +
    diff --git a/functions/diffBasic.html b/functions/diffBasic.html index a47fa60a..fa368692 100644 --- a/functions/diffBasic.html +++ b/functions/diffBasic.html @@ -1,6 +1,6 @@ -diffBasic | augment-vir - v31.4.0

    Function diffBasic

    • Simple diff check that is useful simply to return the same format as the other diff functions.

      +diffBasic | augment-vir - v31.5.0

      Function diffBasic

      • Simple diff check that is useful simply to return the same format as the other diff functions.

        Type Parameters

        • T0
        • T1

        Parameters

        • value0: T0
        • value1: T1
        • areEqual: AreEqualCallback<T0, T1> = ...

          A custom equality checker. Defaults to a strict equality check (===).

        Returns [T0, T1] | []

        An empty tuple if the values are equal. Otherwise, the first tuple entry contains the changes in the first value, second entry contains the changes in the second value.

      +
    diff --git a/functions/diffObjects.html b/functions/diffObjects.html index ad95d5d8..a85b1de3 100644 --- a/functions/diffObjects.html +++ b/functions/diffObjects.html @@ -1,5 +1,5 @@ -diffObjects | augment-vir - v31.4.0

    Function diffObjects

    • Extract all nested object keys and values that are different between the two given objects.

      +diffObjects | augment-vir - v31.5.0

      Function diffObjects

      • Extract all nested object keys and values that are different between the two given objects.

        Type Parameters

        • T0 extends Readonly<Record<PropertyKey, unknown>>
        • T1 extends Readonly<Record<PropertyKey, unknown>>

        Parameters

        • object0: T0
        • object1: T1

        Returns [PartialDeep<T0>, PartialDeep<T1>] | []

        An empty tuple if the values are equal. Otherwise, the first tuple entry contains the changes in the first value, second entry contains the changes in the second value.

      +
    diff --git a/functions/diffValues.html b/functions/diffValues.html index 04791400..5ab5a5b4 100644 --- a/functions/diffValues.html +++ b/functions/diffValues.html @@ -1,5 +1,5 @@ -diffValues | augment-vir - v31.4.0

    Function diffValues

    • Diff any values. For diffing objects, use diffObjects to get better types.

      +diffValues | augment-vir - v31.5.0

      Function diffValues

      • Diff any values. For diffing objects, use diffObjects to get better types.

        Type Parameters

        • T0
        • T1

        Parameters

        • value0: T0
        • value1: T1

        Returns [T0, T1] | []

        An empty tuple if the values are equal. Otherwise, the first tuple entry contains the changes in the first value, second entry contains the changes in the second value.

      +
    diff --git a/functions/downloadFile.html b/functions/downloadFile.html index 33e43bd3..677c9b39 100644 --- a/functions/downloadFile.html +++ b/functions/downloadFile.html @@ -1,3 +1,3 @@ -downloadFile | augment-vir - v31.4.0

    Function downloadFile

    • Download a file.

      +downloadFile | augment-vir - v31.5.0

      Function downloadFile

      +
    diff --git a/functions/ensureError.html b/functions/ensureError.html index b596cea5..ac5a366e 100644 --- a/functions/ensureError.html +++ b/functions/ensureError.html @@ -1,3 +1,3 @@ -ensureError | augment-vir - v31.4.0

    Function ensureError

    • Either returns the input if it's already an Error instance or converts it into an Error instance.

      +ensureError | augment-vir - v31.5.0

      Function ensureError

      +
    diff --git a/functions/ensureErrorAndPrependMessage.html b/functions/ensureErrorAndPrependMessage.html index 787b7585..21c192b1 100644 --- a/functions/ensureErrorAndPrependMessage.html +++ b/functions/ensureErrorAndPrependMessage.html @@ -1,4 +1,4 @@ -ensureErrorAndPrependMessage | augment-vir - v31.4.0

    Function ensureErrorAndPrependMessage

    • Ensures that the given input is an error and prepends the given message to the ensured Error +ensureErrorAndPrependMessage | augment-vir - v31.5.0

      Function ensureErrorAndPrependMessage

      +
    diff --git a/functions/ensureMinMax.html b/functions/ensureMinMax.html index 7e0ac4a7..c54a79d9 100644 --- a/functions/ensureMinMax.html +++ b/functions/ensureMinMax.html @@ -1,4 +1,4 @@ -ensureMinMax | augment-vir - v31.4.0

    Function ensureMinMax

    • Given a min and max, ensures that they are in correct order. Meaning, min is less than max. If +ensureMinMax | augment-vir - v31.5.0

      Function ensureMinMax

      +
    diff --git a/functions/ensureType.html b/functions/ensureType.html index c0004c8f..8f19d107 100644 --- a/functions/ensureType.html +++ b/functions/ensureType.html @@ -1,7 +1,7 @@ -ensureType | augment-vir - v31.4.0

    Function ensureType

    • This is a type helper that ensures the given input matches the given generic type. The generic is +ensureType | augment-vir - v31.5.0

      Function ensureType

      • This is a type helper that ensures the given input matches the given generic type. The generic is setup in such a way that if it is omitted (which is typically allowed in TypeScript, resulting in the generic being inferred from the inputs), there will actually be a type error. This forces each usage of this function to explicitly specify the generic, thus giving us type safety for the input.

        Type Parameters

        • ExpectedType = never

        Parameters

        Returns NoInfer<ExpectedType>

      +
    diff --git a/functions/escapeStringForRegExp.html b/functions/escapeStringForRegExp.html index 78a20cde..54c01df4 100644 --- a/functions/escapeStringForRegExp.html +++ b/functions/escapeStringForRegExp.html @@ -1,4 +1,4 @@ -escapeStringForRegExp | augment-vir - v31.4.0

    Function escapeStringForRegExp

    • Escapes characters from the given string so that it can be used within a RegExp without being +escapeStringForRegExp | augment-vir - v31.5.0

      Function escapeStringForRegExp

      +
    diff --git a/functions/extractElementText.html b/functions/extractElementText.html index 7ca86bf5..d845159f 100644 --- a/functions/extractElementText.html +++ b/functions/extractElementText.html @@ -1,3 +1,3 @@ -extractElementText | augment-vir - v31.4.0

    Function extractElementText

    • Extracts the text content of the given element or shadow root.

      +extractElementText | augment-vir - v31.5.0

      Function extractElementText

      +
    diff --git a/functions/extractErrorMessage.html b/functions/extractErrorMessage.html index 11024121..acc3fb89 100644 --- a/functions/extractErrorMessage.html +++ b/functions/extractErrorMessage.html @@ -1,4 +1,4 @@ -extractErrorMessage | augment-vir - v31.4.0

    Function extractErrorMessage

    • Tries its hardest to extract an error message from the input, which may be anything (not even an +extractErrorMessage | augment-vir - v31.5.0

      Function extractErrorMessage

      +
    diff --git a/functions/extractEventTarget.html b/functions/extractEventTarget.html index e08fba2c..36e0ff99 100644 --- a/functions/extractEventTarget.html +++ b/functions/extractEventTarget.html @@ -1,6 +1,6 @@ -extractEventTarget | augment-vir - v31.4.0

    Function extractEventTarget

    diff --git a/functions/extractRelevantArgs.html b/functions/extractRelevantArgs.html index 5697f336..1a9d68c5 100644 --- a/functions/extractRelevantArgs.html +++ b/functions/extractRelevantArgs.html @@ -1,7 +1,7 @@ -extractRelevantArgs | augment-vir - v31.4.0

    Function extractRelevantArgs

    • Trims arguments list to remove all arguments that take place before the script's file name or +extractRelevantArgs | augment-vir - v31.5.0

      Function extractRelevantArgs

      • Trims arguments list to remove all arguments that take place before the script's file name or executable bin name.

        Parameters

        Returns string[]

        extractRelevantArgs({
        rawArgs: ['npx', 'ts-node', './my-script.ts', 'arg1', '--arg2'], // typically will be process.argv
        binName: 'my-script', // should be your package.json "bin" property name, can be undefined
        fileName: 'my-script.ts', // should be __filename from the script that will be executed
        });
        // will output ['arg1', '--arg2']
      +
    diff --git a/functions/filterMap.html b/functions/filterMap.html index 16e1a6f6..629f6ac0 100644 --- a/functions/filterMap.html +++ b/functions/filterMap.html @@ -1,4 +1,4 @@ -filterMap | augment-vir - v31.4.0

    Function filterMap

    Performs +filterMap | augment-vir - v31.5.0

    Function filterMap

    Performs [].map() and [].filter() @@ -8,5 +8,5 @@

    +

    Type Parameters

    • ElementType
    • MappedEntry
    • TypeGuarded

    Parameters

    Returns TypeGuarded[]

  • Performs a regular filterMap.

    +

    Type Parameters

    • ElementType
    • MappedEntry

    Parameters

    Returns MappedEntry[]

  • diff --git a/functions/filterObject.html b/functions/filterObject.html index 0382fd24..3a9b876f 100644 --- a/functions/filterObject.html +++ b/functions/filterObject.html @@ -1,8 +1,8 @@ -filterObject | augment-vir - v31.4.0

    Function filterObject

    diff --git a/functions/filterOutIndexes.html b/functions/filterOutIndexes.html index 265f7941..c99a33f4 100644 --- a/functions/filterOutIndexes.html +++ b/functions/filterOutIndexes.html @@ -1,7 +1,7 @@ -filterOutIndexes | augment-vir - v31.4.0

    Function filterOutIndexes

    • Removes all given indexes from the given array.

      +filterOutIndexes | augment-vir - v31.5.0

      Function filterOutIndexes

      • Removes all given indexes from the given array.

        Type Parameters

        • T

        Parameters

        • array: readonly T[]
        • indexes: readonly number[]

        Returns T[]

        A new array (does not mutate).

        import {filterOutIndexes} from '@augment-vir/common';

        const result = filterOutIndexes(['a', 'b', ''], [0, 2]);
        // result is `['b']`
      +
    diff --git a/functions/filterToEnumValues.html b/functions/filterToEnumValues.html index 8013813d..23ea982b 100644 --- a/functions/filterToEnumValues.html +++ b/functions/filterToEnumValues.html @@ -1,7 +1,7 @@ -filterToEnumValues | augment-vir - v31.4.0

    Function filterToEnumValues

    • Filters the input array to all valid values from the given enum.

      +filterToEnumValues | augment-vir - v31.5.0

      Function filterToEnumValues

      • Filters the input array to all valid values from the given enum.

        Type Parameters

        Parameters

        • inputs: readonly unknown[]
        • checkEnum: T

        Returns T[keyof T][]

        A new array (does not mutate).

        enum MyEnum {
        A = 'a',
        B = 'b',
        }

        const result = filterToEnumValues([1, 2, 3, 'a', 'b', MyEnum.A], MyEnum); // result is `[MyEnum.A, MyEnum.B, MyEnum.A]`
      +
    diff --git a/functions/findAncestor.html b/functions/findAncestor.html index 4b4270d4..3ab19bf6 100644 --- a/functions/findAncestor.html +++ b/functions/findAncestor.html @@ -1,4 +1,4 @@ -findAncestor | augment-vir - v31.4.0

    Function findAncestor

    Find an ancestor file path that matches the given callback. If no matches are found all the way +findAncestor | augment-vir - v31.5.0

    Function findAncestor

    Find an ancestor file path that matches the given callback. If no matches are found all the way up until the system root, this returns undefined.

    undefined if no matches are found.

    @augment-vir/node

    @@ -6,12 +6,12 @@ up until the system root, this returns undefined.

    Parameters

    • currentPath: string
    • callback: (path: string) => Promise<boolean>

    Returns Promise<string | undefined>

    undefined if no matches are found.

  • Find an ancestor file path that matches the given callback. If no matches are found all the way +

  • Find an ancestor file path that matches the given callback. If no matches are found all the way up until the system root, this returns undefined.

    Parameters

    • currentPath: string
    • callback: (path: string) => boolean

    Returns string | undefined

    undefined if no matches are found.

  • Find an ancestor file path that matches the given callback. If no matches are found all the way +

  • Find an ancestor file path that matches the given callback. If no matches are found all the way up until the system root, this returns undefined.

    Parameters

    • currentPath: string
    • callback: (path: string) => MaybePromise<boolean>

    Returns MaybePromise<string | undefined>

    undefined if no matches are found.

  • +
    diff --git a/functions/findMatchingAncestor.html b/functions/findMatchingAncestor.html index bd737e3e..da480c13 100644 --- a/functions/findMatchingAncestor.html +++ b/functions/findMatchingAncestor.html @@ -1,3 +1,3 @@ -findMatchingAncestor | augment-vir - v31.4.0

    Function findMatchingAncestor

    • Recursively search for an ancestor of the starting element that passes the given callback.

      +findMatchingAncestor | augment-vir - v31.5.0

      Function findMatchingAncestor

      • Recursively search for an ancestor of the starting element that passes the given callback.

        Parameters

        • start: Element
        • testParent: (parent: Element) => boolean

        Returns Element | undefined

      +
    diff --git a/functions/findNpmBinPath.html b/functions/findNpmBinPath.html index fcc8638e..c1009767 100644 --- a/functions/findNpmBinPath.html +++ b/functions/findNpmBinPath.html @@ -1,4 +1,4 @@ -findNpmBinPath | augment-vir - v31.4.0

    Function findNpmBinPath

    • Finds the path to an npm package executable bin by searching in all ancestor node_modules/.bin +findNpmBinPath | augment-vir - v31.5.0

      Function findNpmBinPath

      • Finds the path to an npm package executable bin by searching in all ancestor node_modules/.bin folders, starting at the given startPath.

        Parameters

        • __namedParameters: { binName: string; startPath: string }

        Returns string | undefined

      +
    diff --git a/functions/findOverflowAncestor.html b/functions/findOverflowAncestor.html index 032f022e..13ddbc7f 100644 --- a/functions/findOverflowAncestor.html +++ b/functions/findOverflowAncestor.html @@ -1,3 +1,3 @@ -findOverflowAncestor | augment-vir - v31.4.0

    Function findOverflowAncestor

    • Finds the given element's ancestor which allows Y overflow.

      +findOverflowAncestor | augment-vir - v31.5.0

      Function findOverflowAncestor

      +
    diff --git a/functions/findSubstringIndexes.html b/functions/findSubstringIndexes.html index 0bdf0740..99e7d8b2 100644 --- a/functions/findSubstringIndexes.html +++ b/functions/findSubstringIndexes.html @@ -1,6 +1,6 @@ -findSubstringIndexes | augment-vir - v31.4.0

    Function findSubstringIndexes

    • Finds all indexes of a searchFor string or RegExp in searchIn. Ths is similar to +findSubstringIndexes | augment-vir - v31.5.0

      Function findSubstringIndexes

      • Finds all indexes of a searchFor string or RegExp in searchIn. Ths is similar to ''.indexOf except that it finds all indexes of.

        Type Parameters

        • IncludeLength extends undefined | boolean

        Parameters

        • __namedParameters: {
              caseSensitive: boolean;
              includeLength?: IncludeLength;
              searchFor: string | RegExp;
              searchIn: string;
          }
          • caseSensitive: boolean
          • OptionalincludeLength?: IncludeLength

            Set to true to get an array of objects with the found indexes and their lengths.

          • searchFor: string | RegExp
          • searchIn: string

        Returns IncludeLength extends true ? { index: number; length: number }[] : number[]

      +
    diff --git a/functions/getCenterOfElement.html b/functions/getCenterOfElement.html index fa099859..d139a60c 100644 --- a/functions/getCenterOfElement.html +++ b/functions/getCenterOfElement.html @@ -1,5 +1,5 @@ -getCenterOfElement | augment-vir - v31.4.0

    Function getCenterOfElement

    • Get the center of the current element. This is a relatively expensive operation as it uses +getCenterOfElement | augment-vir - v31.5.0

      Function getCenterOfElement

      +
    diff --git a/functions/getDirectChildren.html b/functions/getDirectChildren.html index 7259a244..b729fac5 100644 --- a/functions/getDirectChildren.html +++ b/functions/getDirectChildren.html @@ -1,7 +1,7 @@ -getDirectChildren | augment-vir - v31.4.0

    Function getDirectChildren

    • Gets an element's direct children. Includes slotted elements, direct <slot> children +getDirectChildren | augment-vir - v31.5.0

      Function getDirectChildren

      • Gets an element's direct children. Includes slotted elements, direct <slot> children themselves, and all direct children of a shadow DOM. Default <slot> children are not included (since they're not "direct" children as they are nested under <slot>).

        Note that that slotted elements and light dom elements will always be shown above shadow dom elements. Besides that, the order of children is preserved.

        Parameters

        • startingElement: Readonly<Element>

        Returns Element[]

      +
    diff --git a/functions/getEntriesSortedByKey.html b/functions/getEntriesSortedByKey.html index 3674243a..ac7ff1cb 100644 --- a/functions/getEntriesSortedByKey.html +++ b/functions/getEntriesSortedByKey.html @@ -1,5 +1,5 @@ -getEntriesSortedByKey | augment-vir - v31.4.0

    Function getEntriesSortedByKey

    diff --git a/functions/getEnumValues.html b/functions/getEnumValues.html index ab7b6d0d..fba70909 100644 --- a/functions/getEnumValues.html +++ b/functions/getEnumValues.html @@ -1,3 +1,3 @@ -getEnumValues | augment-vir - v31.4.0

    Function getEnumValues

    diff --git a/functions/getEsmPath.html b/functions/getEsmPath.html index 020c206f..dfc95981 100644 --- a/functions/getEsmPath.html +++ b/functions/getEsmPath.html @@ -1,4 +1,4 @@ -getEsmPath | augment-vir - v31.4.0

    Function getEsmPath

    • Creates the equivalent of CJS's +getEsmPath | augment-vir - v31.5.0

      Function getEsmPath

      • Creates the equivalent of CJS's __dirname and __filename for ESM modules.

        This is the equivalent of @@ -9,4 +9,4 @@

    +
    diff --git a/functions/getNestedChildren.html b/functions/getNestedChildren.html index 3132c067..da8ddbd6 100644 --- a/functions/getNestedChildren.html +++ b/functions/getNestedChildren.html @@ -1,7 +1,7 @@ -getNestedChildren | augment-vir - v31.4.0

    Function getNestedChildren

    • Gets all deeply nested elements contained within the given element. Shadow DOMs are traversed.

      +getNestedChildren | augment-vir - v31.5.0

      Function getNestedChildren

      • Gets all deeply nested elements contained within the given element. Shadow DOMs are traversed.

        Note that <slot> elements are included, as well as their nested elements (even if a slot filler is provided by the parent) and the slot filler itself (if provided).

        Optionally define a second "depth" input to control how far nestings should be pursued. Leave depth out or set it to undefined or any value <= 0 to allow full depth search.

        Parameters

        • startingElement: Readonly<Element>
        • Optionaldepth: number

        Returns Element[]

      +
    diff --git a/functions/getObjectTypedEntries.html b/functions/getObjectTypedEntries.html index 9b47ae46..10b40730 100644 --- a/functions/getObjectTypedEntries.html +++ b/functions/getObjectTypedEntries.html @@ -1,5 +1,5 @@ -getObjectTypedEntries | augment-vir - v31.4.0

    Function getObjectTypedEntries

    diff --git a/functions/getObjectTypedKeys.html b/functions/getObjectTypedKeys.html index 5bd4e49f..3ca298ec 100644 --- a/functions/getObjectTypedKeys.html +++ b/functions/getObjectTypedKeys.html @@ -1,5 +1,5 @@ -getObjectTypedKeys | augment-vir - v31.4.0

    Function getObjectTypedKeys

    diff --git a/functions/getObjectTypedValues.html b/functions/getObjectTypedValues.html index deed390e..9a8c4eb5 100644 --- a/functions/getObjectTypedValues.html +++ b/functions/getObjectTypedValues.html @@ -1,5 +1,5 @@ -getObjectTypedValues | augment-vir - v31.4.0

    Function getObjectTypedValues

    diff --git a/functions/getOrSet.html b/functions/getOrSet.html index 23131ac0..7c88e209 100644 --- a/functions/getOrSet.html +++ b/functions/getOrSet.html @@ -1,8 +1,8 @@ -getOrSet | augment-vir - v31.4.0

    Function getOrSet

    Given an object, tries to get the given key in that object. If the key is not in that object, +getOrSet | augment-vir - v31.5.0

    Function getOrSet

    Given an object, tries to get the given key in that object. If the key is not in that object, then the given createCallback is used to create a new value which is then stored in the given object and returned. Automatically handles an async createCallback.

    // instead of doing this
    if (!myObject[myKey]) {
    myObject[myKey] = {};
    }
    myObject[myKey]![nextKey] = 'some value';

    // do this
    getOrSetInObject(myObject, myKey, () => {
    return {};
    });
    +
    diff --git a/functions/getOrSetFromMap.html b/functions/getOrSetFromMap.html index cb5e6397..a11b58f4 100644 --- a/functions/getOrSetFromMap.html +++ b/functions/getOrSetFromMap.html @@ -1,8 +1,8 @@ -getOrSetFromMap | augment-vir - v31.4.0

    Function getOrSetFromMap

    Given an map, tries to get the given key in that map. If the key is not in that map, then the +getOrSetFromMap | augment-vir - v31.5.0

    Function getOrSetFromMap

    Given an map, tries to get the given key in that map. If the key is not in that map, then the given createCallback is used to create a new value which is then stored in the given map and returned. Automatically handles an async createCallback.

    // instead of doing this
    if (!myMap.get(myKey)) {
    myMap.set(myKey, {});
    }
    myMap.get(myKey)![nextKey] = 'some value';

    // do this
    getOrSetInObject(myMap, myKey, () => {
    return {};
    });
    +
    diff --git a/functions/getParentElement.html b/functions/getParentElement.html index 8dce3c45..662cb693 100644 --- a/functions/getParentElement.html +++ b/functions/getParentElement.html @@ -1,3 +1,3 @@ -getParentElement | augment-vir - v31.4.0

    Function getParentElement

    • Gets the parent element of the current element, even if the current element is a ShadowRoot.

      +getParentElement | augment-vir - v31.5.0

      Function getParentElement

      +
    diff --git a/functions/groupArrayBy.html b/functions/groupArrayBy.html index b5288fb0..54704c2f 100644 --- a/functions/groupArrayBy.html +++ b/functions/groupArrayBy.html @@ -1,6 +1,6 @@ -groupArrayBy | augment-vir - v31.4.0

    Function groupArrayBy

    diff --git a/functions/hasCase.html b/functions/hasCase.html index 67e9a129..2c48c682 100644 --- a/functions/hasCase.html +++ b/functions/hasCase.html @@ -1,4 +1,4 @@ -hasCase | augment-vir - v31.4.0

    Function hasCase

    • Indicates whether the given string has different lower and upper case variants. (Some strings +hasCase | augment-vir - v31.5.0

      Function hasCase

      +
    diff --git a/functions/ifTruthy.html b/functions/ifTruthy.html index be370f57..e0ab6bdf 100644 --- a/functions/ifTruthy.html +++ b/functions/ifTruthy.html @@ -1,8 +1,8 @@ -ifTruthy | augment-vir - v31.4.0

    Function ifTruthy

    diff --git a/functions/interpolationSafeWindowsPath.html b/functions/interpolationSafeWindowsPath.html index d5f06cc3..153d3de7 100644 --- a/functions/interpolationSafeWindowsPath.html +++ b/functions/interpolationSafeWindowsPath.html @@ -1,4 +1,4 @@ -interpolationSafeWindowsPath | augment-vir - v31.4.0

    Function interpolationSafeWindowsPath

    • Use this to interpolate paths into bash commands. If the given path is not a Windows path, the +interpolationSafeWindowsPath | augment-vir - v31.5.0

      Function interpolationSafeWindowsPath

      +
    diff --git a/functions/isCase.html b/functions/isCase.html index 05251135..c3dee9a1 100644 --- a/functions/isCase.html +++ b/functions/isCase.html @@ -1,7 +1,7 @@ -isCase | augment-vir - v31.4.0

    Function isCase

    • Checks if the given string is exclusively of the specific case.

      +isCase | augment-vir - v31.5.0

      Function isCase

      +
    diff --git a/functions/isElementFocused.html b/functions/isElementFocused.html index 7d7baba6..d94c52fe 100644 --- a/functions/isElementFocused.html +++ b/functions/isElementFocused.html @@ -1,3 +1,3 @@ -isElementFocused | augment-vir - v31.4.0

    Function isElementFocused

    • Detects whether the given element is currently focused.

      +isElementFocused | augment-vir - v31.5.0

      Function isElementFocused

      +
    diff --git a/functions/isElementVisible.html b/functions/isElementVisible.html index 0f4ceb2a..137ebba4 100644 --- a/functions/isElementVisible.html +++ b/functions/isElementVisible.html @@ -1,3 +1,3 @@ -isElementVisible | augment-vir - v31.4.0

    Function isElementVisible

    • Detects display: none and only works if the element does not have position: fixed;.

      +isElementVisible | augment-vir - v31.5.0

      Function isElementVisible

      +
    diff --git a/functions/isOperatingSystem.html b/functions/isOperatingSystem.html index 37af574f..3722d773 100644 --- a/functions/isOperatingSystem.html +++ b/functions/isOperatingSystem.html @@ -1,6 +1,6 @@ -isOperatingSystem | augment-vir - v31.4.0

    Function isOperatingSystem

    • Checks if the current operating system is the requested one.

      +isOperatingSystem | augment-vir - v31.5.0

      Function isOperatingSystem

      +
    diff --git a/functions/isRuntimeEnv.html b/functions/isRuntimeEnv.html index 99d7d29d..0cf3a1f0 100644 --- a/functions/isRuntimeEnv.html +++ b/functions/isRuntimeEnv.html @@ -1,4 +1,4 @@ -isRuntimeEnv | augment-vir - v31.4.0

    Function isRuntimeEnv

    diff --git a/functions/isTestContext.html b/functions/isTestContext.html index e5117de5..4c87d229 100644 --- a/functions/isTestContext.html +++ b/functions/isTestContext.html @@ -1,3 +1,3 @@ -isTestContext | augment-vir - v31.4.0

    Function isTestContext

    +isTestContext | augment-vir - v31.5.0

    Function isTestContext

    diff --git a/functions/it.html b/functions/it.html index 57da1f2b..f42420f7 100644 --- a/functions/it.html +++ b/functions/it.html @@ -1,4 +1,4 @@ -it | augment-vir - v31.4.0

    Function it

    A single test declaration. This can be used in both web tests and node tests, so you only have +it | augment-vir - v31.5.0

    Function it

    A single test declaration. This can be used in both web tests and node tests, so you only have import from a single place and learn a single interface.

    This should be nested within a describe call. The it name should form a sentence fragment that is attached to the parent describe's input. The sentence should ultimately read like this: @@ -10,6 +10,6 @@

    Properties

    Properties

    Properties

    +

    Properties

    diff --git a/functions/itCases.html b/functions/itCases.html index d87643e0..61179b5e 100644 --- a/functions/itCases.html +++ b/functions/itCases.html @@ -1,4 +1,4 @@ -itCases | augment-vir - v31.4.0

    Function itCases

    Succinctly run many input / output tests for a pure function without repeating it boilerplate. +itCases | augment-vir - v31.5.0

    Function itCases

    Succinctly run many input / output tests for a pure function without repeating it boilerplate. Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    @@ -6,20 +6,20 @@
  • Succinctly run many input / output tests for a pure function without repeating it boilerplate. Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    -

    Type Parameters

    Parameters

    Returns unknown[]

    import {itCases, describe} from '@augment-vir/test';

    function myFunctionToTest(a: number, b: number) {
    return a + b;
    }

    describe(myFunctionToTest.name, () => {
    itCases(myFunctionToTest, [
    {
    it: 'handles negative numbers',
    inputs: [-1, -2],
    expect: -3,
    },
    {
    it: 'handles 0',
    inputs: [0, 0],
    expect: 0,
    },
    {
    it: 'adds',
    inputs: [3, 5],
    expect: 8,
    },
    ]);
    }); +

    Type Parameters

    Parameters

    Returns unknown[]

    import {itCases, describe} from '@augment-vir/test';

    function myFunctionToTest(a: number, b: number) {
    return a + b;
    }

    describe(myFunctionToTest.name, () => {
    itCases(myFunctionToTest, [
    {
    it: 'handles negative numbers',
    inputs: [-1, -2],
    expect: -3,
    },
    {
    it: 'handles 0',
    inputs: [0, 0],
    expect: 0,
    },
    {
    it: 'adds',
    inputs: [3, 5],
    expect: 8,
    },
    ]);
    });
  • +
    diff --git a/functions/itCasesWithContext.html b/functions/itCasesWithContext.html new file mode 100644 index 00000000..b4edad7c --- /dev/null +++ b/functions/itCasesWithContext.html @@ -0,0 +1,25 @@ +itCasesWithContext | augment-vir - v31.5.0

    Function itCasesWithContext

    Succinctly run many input / output tests for a pure function without repeating it boilerplate. +Compatible with both Node.js's test runner and +web-test-runner or other Mocha-style test +runners.

    +
    import {itCases, describe} from '@augment-vir/test';

    function myFunctionToTest(a: number, b: number) {
    return a + b;
    }

    describe(myFunctionToTest.name, () => {
    itCases(myFunctionToTest, [
    {
    it: 'handles negative numbers',
    inputs: [-1, -2],
    expect: -3,
    },
    {
    it: 'handles 0',
    inputs: [0, 0],
    expect: 0,
    },
    {
    it: 'adds',
    inputs: [3, 5],
    expect: 8,
    },
    ]);
    }); +
    + +
    diff --git a/functions/joinFilesToDir.html b/functions/joinFilesToDir.html index ba2833ec..24847edb 100644 --- a/functions/joinFilesToDir.html +++ b/functions/joinFilesToDir.html @@ -1,8 +1,8 @@ -joinFilesToDir | augment-vir - v31.4.0

    Function joinFilesToDir

    • Join a list of paths to the given parentDirPath. This is particularly useful for getting full +joinFilesToDir | augment-vir - v31.5.0

      Function joinFilesToDir

      • Join a list of paths to the given parentDirPath. This is particularly useful for getting full paths from the output of readdir.

        Parameters

        • parentDirPath: string
        • childNames: readonly string[]

        Returns string[]

        import {readdir} from 'node:fs/promises';
        import {join} from 'node:path';

        const parentDir = join('my', 'path');
        const dirs = joinFilesToDir(parentDir, await readdir(parentDir));
      +
    diff --git a/functions/joinWithFinalConjunction.html b/functions/joinWithFinalConjunction.html index d9134bc8..ecfb4415 100644 --- a/functions/joinWithFinalConjunction.html +++ b/functions/joinWithFinalConjunction.html @@ -1,4 +1,4 @@ -joinWithFinalConjunction | augment-vir - v31.4.0

    Function joinWithFinalConjunction

    • Join elements into a string with commas separating each value. Add a conjunction before the final +joinWithFinalConjunction | augment-vir - v31.5.0

      Function joinWithFinalConjunction

      • Join elements into a string with commas separating each value. Add a conjunction before the final item in the list. If the array has a length < 2, the conjunction is not added. If the list is only of length 2, then no commas are added.

        Parameters

        • list: readonly any[]

          Array of items to be converted into strings. Works best if these are simply strings to begin @@ -8,4 +8,4 @@

      Returns string

    +
    diff --git a/functions/jsonify.html b/functions/jsonify.html index 1675b202..65dba62a 100644 --- a/functions/jsonify.html +++ b/functions/jsonify.html @@ -1,7 +1,7 @@ -jsonify | augment-vir - v31.4.0

    Function jsonify

    • Creates a JSON compatible version of the value given. Under the hood this is actually the same as +jsonify | augment-vir - v31.5.0

      Function jsonify

      • Creates a JSON compatible version of the value given. Under the hood this is actually the same as copyThroughJson.

        Type Parameters

        • T

        Parameters

        • value: T

        Returns Jsonify<T>

        import {jsonify} from '@augment-vir/common';

        // `result` is `{b: 'b'}`
        const result = jsonify({
        map: new Map([
        ['q', 'r'],
        ['s', 't'],
        ]),
        b: 'b',
        });
      +
    diff --git a/functions/kebabCaseToCamelCase.html b/functions/kebabCaseToCamelCase.html index 040c8a65..d933ef08 100644 --- a/functions/kebabCaseToCamelCase.html +++ b/functions/kebabCaseToCamelCase.html @@ -1,3 +1,3 @@ -kebabCaseToCamelCase | augment-vir - v31.4.0

    Function kebabCaseToCamelCase

    • Converts a kebab-case string to CamelCase.

      +kebabCaseToCamelCase | augment-vir - v31.5.0

      Function kebabCaseToCamelCase

      +
    diff --git a/functions/loadImage.html b/functions/loadImage.html index 08c115ee..6388bcf1 100644 --- a/functions/loadImage.html +++ b/functions/loadImage.html @@ -1,3 +1,3 @@ -loadImage | augment-vir - v31.4.0

    Function loadImage

    • Load an image from a URL and wait for it to be totally loaded.

      +loadImage | augment-vir - v31.5.0

      Function loadImage

      +
    diff --git a/functions/loadVideo.html b/functions/loadVideo.html index 5bb9178b..31085109 100644 --- a/functions/loadVideo.html +++ b/functions/loadVideo.html @@ -1,3 +1,3 @@ -loadVideo | augment-vir - v31.4.0

    Function loadVideo

    • Load a video from a URL and wait for it to be totally loaded.

      +loadVideo | augment-vir - v31.5.0

      Function loadVideo

      +
    diff --git a/functions/logShellOutput.html b/functions/logShellOutput.html index 68ac76b7..841b27b4 100644 --- a/functions/logShellOutput.html +++ b/functions/logShellOutput.html @@ -1,3 +1,3 @@ -logShellOutput | augment-vir - v31.4.0

    Function logShellOutput

    diff --git a/functions/makeReadonly.html b/functions/makeReadonly.html index c297209e..df2593ed 100644 --- a/functions/makeReadonly.html +++ b/functions/makeReadonly.html @@ -1,3 +1,3 @@ -makeReadonly | augment-vir - v31.4.0

    Function makeReadonly

    • This function does nothing but return the input as a readonly typed version of itself.

      +makeReadonly | augment-vir - v31.5.0

      Function makeReadonly

      +
    diff --git a/functions/makeWritable.html b/functions/makeWritable.html index f30089f2..3ee91e4d 100644 --- a/functions/makeWritable.html +++ b/functions/makeWritable.html @@ -1,3 +1,3 @@ -makeWritable | augment-vir - v31.4.0

    Function makeWritable

    • This function does nothing but return the input as a writable typed version of itself.

      +makeWritable | augment-vir - v31.5.0

      Function makeWritable

      +
    diff --git a/functions/mapEnumToObject.html b/functions/mapEnumToObject.html index 7bf83c74..4c6ddd94 100644 --- a/functions/mapEnumToObject.html +++ b/functions/mapEnumToObject.html @@ -1,7 +1,7 @@ -mapEnumToObject | augment-vir - v31.4.0

    Function mapEnumToObject

    Maps all values of an enum as keys in an object where each value is the callback's output for +mapEnumToObject | augment-vir - v31.5.0

    Function mapEnumToObject

    Maps all values of an enum as keys in an object where each value is the callback's output for that key.

    import {mapEnumToObject} from '@augment-vir/common';

    enum MyEnum {
    A = 'a',
    B = 'b',
    }

    mapEnumToObject(MyEnum, (enumValue) => {
    return `value-${enumValue}`;
    });
    // output is `{[MyEnum.A]: 'value-a', [MyEnum.B]: 'value-b'}`
    +
    diff --git a/functions/mapObject.html b/functions/mapObject.html index 6a0b43d0..7b95f6e9 100644 --- a/functions/mapObject.html +++ b/functions/mapObject.html @@ -1,4 +1,4 @@ -mapObject | augment-vir - v31.4.0

    Function mapObject

    Maps an object. The callback must return a key and value.

    +mapObject | augment-vir - v31.5.0

    Function mapObject

    Maps an object. The callback must return a key and value.

    import {mapObject} from '@augment-vir/common';

    mapObject({a: 1, b: 2}, (key, value) => {
    return {
    key: `key-${key}`,
    value: `value-${value}`,
    };
    });
    // output is `{'key-a': 'value-1', 'key-b': 'value-2'}`
    @@ -6,4 +6,4 @@
    -
    +
    diff --git a/functions/mapObjectValues.html b/functions/mapObjectValues.html index 9bed955f..1be69ba0 100644 --- a/functions/mapObjectValues.html +++ b/functions/mapObjectValues.html @@ -1,7 +1,7 @@ -mapObjectValues | augment-vir - v31.4.0

    Function mapObjectValues

    diff --git a/functions/mapObjectValuesSync.html b/functions/mapObjectValuesSync.html index 0ea91346..9cd2c484 100644 --- a/functions/mapObjectValuesSync.html +++ b/functions/mapObjectValuesSync.html @@ -1,5 +1,5 @@ -mapObjectValuesSync | augment-vir - v31.4.0

    Function mapObjectValuesSync

    diff --git a/functions/maybeCapitalize.html b/functions/maybeCapitalize.html index a2f380d5..3071a1de 100644 --- a/functions/maybeCapitalize.html +++ b/functions/maybeCapitalize.html @@ -1,3 +1,3 @@ -maybeCapitalize | augment-vir - v31.4.0

    Function maybeCapitalize

    • Capitalize the first letter of the input only if the given options specifies doing so.

      +maybeCapitalize | augment-vir - v31.5.0

      Function maybeCapitalize

      +
    diff --git a/functions/measureExecutionDuration.html b/functions/measureExecutionDuration.html index 17c144ea..16d6b480 100644 --- a/functions/measureExecutionDuration.html +++ b/functions/measureExecutionDuration.html @@ -1,8 +1,8 @@ -measureExecutionDuration | augment-vir - v31.4.0

    Function measureExecutionDuration

    • Measures how long (in milliseconds) the given callback takes to run to completion. By default +measureExecutionDuration | augment-vir - v31.5.0

      Function measureExecutionDuration

      • Measures how long (in milliseconds) the given callback takes to run to completion. By default this is synchronous, but it will automatically switch to async and await the callback if it returns a promise.

        Type Parameters

        • T

        Parameters

        • callback: () => T

        Returns T extends Promise<any>
            ? Promise<Duration<DurationUnit.Milliseconds>>
            : Duration<DurationUnit.Milliseconds>

        import {measureExecutionDuration} from '@augment-vir/common';

        const duration1 = measureExecutionDuration(() => {});
        const duration2 = await measureExecutionDuration(async () => {});
      +
    diff --git a/functions/mergeDeep.html b/functions/mergeDeep.html index 469a9c8f..84800fba 100644 --- a/functions/mergeDeep.html +++ b/functions/mergeDeep.html @@ -1,5 +1,5 @@ -mergeDeep | augment-vir - v31.4.0

    Function mergeDeep

    • Accepts multiple objects and merges their key-value pairs recursively. Any values set to +mergeDeep | augment-vir - v31.5.0

      Function mergeDeep

      • Accepts multiple objects and merges their key-value pairs recursively. Any values set to undefined will be removed.

        Note that order matters! Each input object will overwrite the properties of the previous objects.

        Type Parameters

        • const T extends object

        Parameters

        • ...inputs: (
              | Readonly<T>
              | Readonly<PartialDeep<T, { recurseIntoArrays: true }>>
              | Readonly<Partial<T>>
          )[]

        Returns T

      +
    diff --git a/functions/mergeDefinedProperties.html b/functions/mergeDefinedProperties.html index 653d014a..a7719d35 100644 --- a/functions/mergeDefinedProperties.html +++ b/functions/mergeDefinedProperties.html @@ -1,7 +1,7 @@ -mergeDefinedProperties | augment-vir - v31.4.0

    Function mergeDefinedProperties

    • Merge all objects together but ignore any override values that are undefined or null or +mergeDefinedProperties | augment-vir - v31.5.0

      Function mergeDefinedProperties

      • Merge all objects together but ignore any override values that are undefined or null or missing. This only merges objects at the top level, it is not a deep merge.

        Type Parameters

        Parameters

        Returns T

        import {mergeDefinedProperties} from '@augment-vir/common';

        mergeDefinedProperties({a: 'default', b: 'default'}, {a: 'override', b: undefined});
        // output is `{a: 'override', b: 'default'}`
      +
    diff --git a/functions/mergePropertyArrays.html b/functions/mergePropertyArrays.html index cb400675..39edb3e9 100644 --- a/functions/mergePropertyArrays.html +++ b/functions/mergePropertyArrays.html @@ -1,6 +1,6 @@ -mergePropertyArrays | augment-vir - v31.4.0

    Function mergePropertyArrays

    • Merges all arrays by their property in the given objects.

      +mergePropertyArrays | augment-vir - v31.5.0

      Function mergePropertyArrays

      • Merges all arrays by their property in the given objects.

        Type Parameters

        • T extends Record<PropertyKey, unknown[]>

        Parameters

        • ...inputs: readonly Readonly<T>[]

        Returns T

        import {mergePropertyArrays} from '@augment-vir/common';

        mergePropertyArrays(
        {
        a: ['a', 'b'],
        },
        {
        a: ['c', 'd'],
        },
        ); // output is `{a: ['a', 'b', 'c', 'd']}`
      +
    diff --git a/functions/omitObjectKeys.html b/functions/omitObjectKeys.html index 86352d5c..de7f5352 100644 --- a/functions/omitObjectKeys.html +++ b/functions/omitObjectKeys.html @@ -1,6 +1,6 @@ -omitObjectKeys | augment-vir - v31.4.0

    Function omitObjectKeys

    diff --git a/functions/perEnv.html b/functions/perEnv.html index 27bc069d..db378dc6 100644 --- a/functions/perEnv.html +++ b/functions/perEnv.html @@ -1,4 +1,4 @@ -perEnv | augment-vir - v31.4.0

    Function perEnv

    diff --git a/functions/pickObjectKeys.html b/functions/pickObjectKeys.html index a64caf43..2d538521 100644 --- a/functions/pickObjectKeys.html +++ b/functions/pickObjectKeys.html @@ -1,6 +1,6 @@ -pickObjectKeys | augment-vir - v31.4.0

    Function pickObjectKeys

    diff --git a/functions/queryNpmWorkspace.html b/functions/queryNpmWorkspace.html index b0dffc8a..2dd27927 100644 --- a/functions/queryNpmWorkspace.html +++ b/functions/queryNpmWorkspace.html @@ -1,3 +1,3 @@ -queryNpmWorkspace | augment-vir - v31.4.0

    Function queryNpmWorkspace

    • Get a list of all NPM workspaces in the given mono-repo directory using npm's CLI.

      +queryNpmWorkspace | augment-vir - v31.5.0

      Function queryNpmWorkspace

      +
    diff --git a/functions/queryThroughShadow.html b/functions/queryThroughShadow.html index 05cadd9e..74d762d0 100644 --- a/functions/queryThroughShadow.html +++ b/functions/queryThroughShadow.html @@ -1,4 +1,4 @@ -queryThroughShadow | augment-vir - v31.4.0

    Function queryThroughShadow

    Perform .querySelector() +queryThroughShadow | augment-vir - v31.5.0

    Function queryThroughShadow

    Perform .querySelector() on the given element with support for elements that contain an open Shadow Root.

    • Parameters

      • element: Element | ShadowRoot
      • query: string | { tagName: string }
      • options: { all: true }

      Returns Element[]

    • Parameters

      • element: Element | ShadowRoot
      • query: string | { tagName: string }
      • Optionaloptions: { all?: false }

      Returns Element | undefined

    • Parameters

      • element: Element | ShadowRoot
      • query: string | { tagName: string }
      • Optionaloptions: PartialWithUndefined<{ all: boolean }>

      Returns Element | Element[] | undefined

    +
    • Parameters

      • element: Element | ShadowRoot
      • query: string | { tagName: string }
      • options: { all: true }

      Returns Element[]

    • Parameters

      • element: Element | ShadowRoot
      • query: string | { tagName: string }
      • Optionaloptions: { all?: false }

      Returns Element | undefined

    • Parameters

      • element: Element | ShadowRoot
      • query: string | { tagName: string }
      • Optionaloptions: PartialWithUndefined<{ all: boolean }>

      Returns Element | Element[] | undefined

    diff --git a/functions/randomBoolean.html b/functions/randomBoolean.html index 76196b73..ece8b015 100644 --- a/functions/randomBoolean.html +++ b/functions/randomBoolean.html @@ -1,4 +1,4 @@ -randomBoolean | augment-vir - v31.4.0

    Function randomBoolean

    • Returns true at rate of the percentLikelyToBeTrue input. Inputs should be whole numbers which +randomBoolean | augment-vir - v31.5.0

      Function randomBoolean

      • Returns true at rate of the percentLikelyToBeTrue input. Inputs should be whole numbers which will be treated like percents. Anything outside of 0-100 inclusively will be clamped. An input 0 will always return true. An input of 100 will always return true. Decimals on the input will be chopped off, use whole numbers.

        @@ -7,4 +7,4 @@
    +
    diff --git a/functions/randomInteger.html b/functions/randomInteger.html index cc1cb609..6252ffbb 100644 --- a/functions/randomInteger.html +++ b/functions/randomInteger.html @@ -1,5 +1,5 @@ -randomInteger | augment-vir - v31.4.0

    Function randomInteger

    • Creates a random integer (no decimal points are included) between the given min and max values +randomInteger | augment-vir - v31.5.0

      Function randomInteger

      • Creates a random integer (no decimal points are included) between the given min and max values (inclusive).

        This function uses cryptographically secure randomness.

        Parameters

        • __namedParameters: { max: number; min: number }

        Returns number

      +
    diff --git a/functions/randomString.html b/functions/randomString.html index a6740729..7735068d 100644 --- a/functions/randomString.html +++ b/functions/randomString.html @@ -1,4 +1,4 @@ -randomString | augment-vir - v31.4.0

    Function randomString

    • Creates a random string (including letters and numbers) of a given length.

      +randomString | augment-vir - v31.5.0

      Function randomString

      +
    diff --git a/functions/readAllDirContents.html b/functions/readAllDirContents.html index c537f993..e5bb9313 100644 --- a/functions/readAllDirContents.html +++ b/functions/readAllDirContents.html @@ -1,3 +1,3 @@ -readAllDirContents | augment-vir - v31.4.0

    Function readAllDirContents

    • Read all contents within a directory and store them in an object. Optionally recursive.

      +readAllDirContents | augment-vir - v31.5.0

      Function readAllDirContents

      • Read all contents within a directory and store them in an object. Optionally recursive.

        Parameters

        • dir: string
        • __namedParameters: { excludeList?: readonly (string | RegExp)[]; recursive?: boolean }

        Returns Promise<DirContents>

      +
    diff --git a/functions/readDirFilesByExtension.html b/functions/readDirFilesByExtension.html index 42bd7032..936198e4 100644 --- a/functions/readDirFilesByExtension.html +++ b/functions/readDirFilesByExtension.html @@ -1,4 +1,4 @@ -readDirFilesByExtension | augment-vir - v31.4.0

    Function readDirFilesByExtension

    • Reads all files within a single directory and filters them by the given extension or extensions.

      +readDirFilesByExtension | augment-vir - v31.5.0

      Function readDirFilesByExtension

      • Reads all files within a single directory and filters them by the given extension or extensions.

        Parameters

        • __namedParameters: { dirPath: string } & RequireExactlyOne<
              { extension: string; extensions: readonly string[] },
          >

        Returns Promise<string[]>

        That filtered list of paths.

      +
    diff --git a/functions/readDirRecursive.html b/functions/readDirRecursive.html index 119df348..00726bad 100644 --- a/functions/readDirRecursive.html +++ b/functions/readDirRecursive.html @@ -1,4 +1,4 @@ -readDirRecursive | augment-vir - v31.4.0

    Function readDirRecursive

    • Gets all files within a directory and its subdirectories, recursively. Returns an array of paths +readDirRecursive | augment-vir - v31.5.0

      Function readDirRecursive

      • Gets all files within a directory and its subdirectories, recursively. Returns an array of paths relative to the given input path.

        Parameters

        • dirPath: string

        Returns Promise<string[]>

      +
    diff --git a/functions/readFileIfExists.html b/functions/readFileIfExists.html index 2d7cf66e..a6906ed2 100644 --- a/functions/readFileIfExists.html +++ b/functions/readFileIfExists.html @@ -1,4 +1,4 @@ -readFileIfExists | augment-vir - v31.4.0

    Function readFileIfExists

    • Reads a file if it exists, or just return undefined.

      +readFileIfExists | augment-vir - v31.5.0

      Function readFileIfExists

      • Reads a file if it exists, or just return undefined.

        Parameters

        • path: string

        Returns Promise<string | undefined>

        The file contents as a string if the file exists, otherwise undefined.

      +
    diff --git a/functions/readJsonFile.html b/functions/readJsonFile.html index e3a622a0..8ea8a841 100644 --- a/functions/readJsonFile.html +++ b/functions/readJsonFile.html @@ -1,7 +1,7 @@ -readJsonFile | augment-vir - v31.4.0

    Function readJsonFile

    diff --git a/functions/readPackageJson.html b/functions/readPackageJson.html index ffff2634..3290824a 100644 --- a/functions/readPackageJson.html +++ b/functions/readPackageJson.html @@ -1,5 +1,5 @@ -readPackageJson | augment-vir - v31.4.0

    Function readPackageJson

    • Read the package.json file contained within the given directory.

      +readPackageJson | augment-vir - v31.5.0

      Function readPackageJson

      +
    diff --git a/functions/readTsconfig.html b/functions/readTsconfig.html index 842af2af..16ef368e 100644 --- a/functions/readTsconfig.html +++ b/functions/readTsconfig.html @@ -1,4 +1,4 @@ -readTsconfig | augment-vir - v31.4.0

    Function readTsconfig

    • Finds the closest tsconfig.json file and parses it.

      +readTsconfig | augment-vir - v31.5.0

      Function readTsconfig

      • Finds the closest tsconfig.json file and parses it.

        Parameters

        • startingPath: string

        Returns undefined | { path: string; tsconfig: ParsedCommandLine }

        undefined if no tsconfig was found or if a found tsconfig fails to parse.

      +
    diff --git a/functions/removeAnsiEscapeCodes.html b/functions/removeAnsiEscapeCodes.html index 3de1b495..2609d770 100644 --- a/functions/removeAnsiEscapeCodes.html +++ b/functions/removeAnsiEscapeCodes.html @@ -1,3 +1,3 @@ -removeAnsiEscapeCodes | augment-vir - v31.4.0

    Function removeAnsiEscapeCodes

    • Removes ansi escape codes (such as terminal colors) within the given string.

      +removeAnsiEscapeCodes | augment-vir - v31.5.0

      Function removeAnsiEscapeCodes

      +
    diff --git a/functions/removeColor.html b/functions/removeColor.html index 3254687c..17d5c4ad 100644 --- a/functions/removeColor.html +++ b/functions/removeColor.html @@ -1,4 +1,4 @@ -removeColor | augment-vir - v31.4.0

    Function removeColor

    Removes ansi escape codes (such as terminal colors) within the given string.

    +removeColor | augment-vir - v31.5.0

    Function removeColor

    Removes ansi escape codes (such as terminal colors) within the given string.

    +
    diff --git a/functions/removeCommas.html b/functions/removeCommas.html index 5e66c119..6a7adf89 100644 --- a/functions/removeCommas.html +++ b/functions/removeCommas.html @@ -1,3 +1,3 @@ -removeCommas | augment-vir - v31.4.0

    Function removeCommas

    • Removes all commas from the given string.

      +removeCommas | augment-vir - v31.5.0

      Function removeCommas

      +
    diff --git a/functions/removeDuplicateCharacters.html b/functions/removeDuplicateCharacters.html index 27049978..34323383 100644 --- a/functions/removeDuplicateCharacters.html +++ b/functions/removeDuplicateCharacters.html @@ -1,6 +1,6 @@ -removeDuplicateCharacters | augment-vir - v31.4.0

    Function removeDuplicateCharacters

    • Removes duplicate characters from any number of strings.

      +removeDuplicateCharacters | augment-vir - v31.5.0

      Function removeDuplicateCharacters

      +
    diff --git a/functions/removeDuplicates.html b/functions/removeDuplicates.html index ae0c9f04..39bfe2f2 100644 --- a/functions/removeDuplicates.html +++ b/functions/removeDuplicates.html @@ -1,4 +1,4 @@ -removeDuplicates | augment-vir - v31.4.0

    Function removeDuplicates

    • Removes duplicates from an array. Optionally provide a callback for calculating a unique id for +removeDuplicates | augment-vir - v31.5.0

      Function removeDuplicates

      • Removes duplicates from an array. Optionally provide a callback for calculating a unique id for entries.

        Type Parameters

        • const Entry

        Parameters

        • originalArray: readonly Entry[]
        • calculateUniqueId: (entry: Readonly<Entry>) => unknown = ...

        Returns Entry[]

        A new array (does not mutate).

        import {removeDuplicates} from '@augment-vir/common';

        const result = removeDuplicates([1, 1, 1, 1, 1, 2, 4]);
        // result is `[1, 2, 4]`

        const exampleEntry = {id: 5};

        const result2 = removeDuplicates([
        {id: 1},
        // this entry will not get filtered out because it's a new object reference
        {id: 1},
        exampleEntry,
        // this `exampleEntry` will get filtered out because it's the same reference as the one above
        exampleEntry,
        {id: 4},
        ]);
        // result2 is `[{id: 1}, {id: 1}, exampleEntry, {id: 4}]` @@ -8,4 +8,4 @@
      +
    diff --git a/functions/removeEndingPunctuation.html b/functions/removeEndingPunctuation.html index 2f4a29cd..616d2ec0 100644 --- a/functions/removeEndingPunctuation.html +++ b/functions/removeEndingPunctuation.html @@ -1,3 +1,3 @@ -removeEndingPunctuation | augment-vir - v31.4.0

    Function removeEndingPunctuation

    • Removes any punctuation at the end of the given string.

      +removeEndingPunctuation | augment-vir - v31.5.0

      Function removeEndingPunctuation

      +
    diff --git a/functions/removePercent.html b/functions/removePercent.html index 8dbfe484..7ad46f7c 100644 --- a/functions/removePercent.html +++ b/functions/removePercent.html @@ -1,4 +1,4 @@ -removePercent | augment-vir - v31.4.0

    Function removePercent

    • Removes the '%' suffix from a string if it exists.

      +removePercent | augment-vir - v31.5.0

      Function removePercent

      +
    diff --git a/functions/removePrefix.html b/functions/removePrefix.html index 54f0c5c2..7b09960b 100644 --- a/functions/removePrefix.html +++ b/functions/removePrefix.html @@ -1,3 +1,3 @@ -removePrefix | augment-vir - v31.4.0

    Function removePrefix

    • Removes a prefix from a string if it exists.

      +removePrefix | augment-vir - v31.5.0

      Function removePrefix

      +
    diff --git a/functions/removePx.html b/functions/removePx.html index 3f487771..455578a8 100644 --- a/functions/removePx.html +++ b/functions/removePx.html @@ -1,4 +1,4 @@ -removePx | augment-vir - v31.4.0

    Function removePx

    • Removes the 'px' suffix from a string if it exists.

      +removePx | augment-vir - v31.5.0

      Function removePx

      +
    diff --git a/functions/removeSuffix.html b/functions/removeSuffix.html index 5dbc20f8..c0d1632a 100644 --- a/functions/removeSuffix.html +++ b/functions/removeSuffix.html @@ -1,3 +1,3 @@ -removeSuffix | augment-vir - v31.4.0

    Function removeSuffix

    • Removes a suffix from a string if it exists.

      +removeSuffix | augment-vir - v31.5.0

      Function removeSuffix

      +
    diff --git a/functions/repeatArray.html b/functions/repeatArray.html index 6ea3d76f..28332061 100644 --- a/functions/repeatArray.html +++ b/functions/repeatArray.html @@ -1,8 +1,8 @@ -repeatArray | augment-vir - v31.4.0

    Function repeatArray

    • Repeats an array. Constructs a new array with the entries from the original repeated the given +repeatArray | augment-vir - v31.5.0

      Function repeatArray

      • Repeats an array. Constructs a new array with the entries from the original repeated the given number of times.

        Type Parameters

        • T

        Parameters

        • repeatCount: number
        • array: T[]

        Returns T[]

        A new array (does not mutate).

        import {repeatArray} from '@augment-vir/common';

        const result = repeatArray(3, ['a', 'b', 'c']);
        // result is `['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']`
      +
    diff --git a/functions/replaceStringAtIndex.html b/functions/replaceStringAtIndex.html index 2d45d59b..981cd2fc 100644 --- a/functions/replaceStringAtIndex.html +++ b/functions/replaceStringAtIndex.html @@ -1,7 +1,7 @@ -replaceStringAtIndex | augment-vir - v31.4.0

    Function replaceStringAtIndex

    • Replaces whatever substring is at the given index in the original string with the new string. +replaceStringAtIndex | augment-vir - v31.5.0

      Function replaceStringAtIndex

      • Replaces whatever substring is at the given index in the original string with the new string. Optionally, provide a length of the substring to get replaced.

        Parameters

        • originalString: string
        • start: number
        • newString: string
        • length: number = newString.length

        Returns string

        import {replaceStringAtIndex} from '@augment-vir/common';

        replaceStringAtIndex('eat the waffles', 4, 'his'); // outputs `'eat his waffles'`
        replaceStringAtIndex('eat the waffles', 4, 'my', 3); // outputs `'eat my waffles'`
      +
    diff --git a/functions/replaceWithWindowsPathIfNeeded.html b/functions/replaceWithWindowsPathIfNeeded.html index 8c28d43f..4ac1f8e9 100644 --- a/functions/replaceWithWindowsPathIfNeeded.html +++ b/functions/replaceWithWindowsPathIfNeeded.html @@ -1,3 +1,3 @@ -replaceWithWindowsPathIfNeeded | augment-vir - v31.4.0

    Function replaceWithWindowsPathIfNeeded

    • Convert a given path to a windows path if the current system doesn't use /.

      +replaceWithWindowsPathIfNeeded | augment-vir - v31.5.0

      Function replaceWithWindowsPathIfNeeded

      +
    diff --git a/functions/requiresScientificNotation.html b/functions/requiresScientificNotation.html index f99896c1..adf8548a 100644 --- a/functions/requiresScientificNotation.html +++ b/functions/requiresScientificNotation.html @@ -1,7 +1,7 @@ -requiresScientificNotation | augment-vir - v31.4.0

    Function requiresScientificNotation

    • Determines if the given number is so large that it requires scientific notation (e) when +requiresScientificNotation | augment-vir - v31.5.0

      Function requiresScientificNotation

      • Determines if the given number is so large that it requires scientific notation (e) when represented as a string.

        Parameters

        • input: number

        Returns boolean

        import {requiresScientificNotation} from '@augment-vir/common';

        requiresScientificNotation(5); // false
        requiresScientificNotation(999999999999999999999); // true
      +
    diff --git a/functions/resetDirContents.html b/functions/resetDirContents.html index a283ab26..7e3f5b7f 100644 --- a/functions/resetDirContents.html +++ b/functions/resetDirContents.html @@ -1,3 +1,3 @@ -resetDirContents | augment-vir - v31.4.0

    Function resetDirContents

    • Deletes and entire directory and resets it to the given contents.

      +resetDirContents | augment-vir - v31.5.0

      Function resetDirContents

      +
    diff --git a/functions/resolveImportPath.html b/functions/resolveImportPath.html index 409e353c..85b14cef 100644 --- a/functions/resolveImportPath.html +++ b/functions/resolveImportPath.html @@ -1,6 +1,6 @@ -resolveImportPath | augment-vir - v31.4.0

    Function resolveImportPath

    • Determines the path that will be imported into the given startingPoint from the given +resolveImportPath | augment-vir - v31.5.0

      Function resolveImportPath

      • Determines the path that will be imported into the given startingPoint from the given importPath. Resolves symlinks, tries to map .js extensions to .ts extensions when needed, and tries to find the best node_modules import for package imports.

        Parameters

        • importerFilePath: string
        • importPath: string

        Returns string | undefined

        undefined if no matches are found.

      +
    diff --git a/functions/round.html b/functions/round.html index c87fb4b4..d496d236 100644 --- a/functions/round.html +++ b/functions/round.html @@ -1,7 +1,7 @@ -round | augment-vir - v31.4.0

    Function round

    • Round a value to the given number of decimal digits. If no decimal value is present, no rounding +round | augment-vir - v31.5.0

      Function round

      • Round a value to the given number of decimal digits. If no decimal value is present, no rounding occurs.

        Parameters

        • value: number
        • __namedParameters: { digits: number }

        Returns number

        import {round} from '@augment-vir/common';

        // `result1` is `5.13`
        const result1 = round(5.125, {digits: 2});
        // `result2` is `5`
        const result2 = round(25, {digits: 2});
      +
    diff --git a/functions/runCliScript.html b/functions/runCliScript.html index 6a073f8e..6610a1d9 100644 --- a/functions/runCliScript.html +++ b/functions/runCliScript.html @@ -1,6 +1,6 @@ -runCliScript | augment-vir - v31.4.0

    Function runCliScript

    • Runs a script path as if it had been run directly, as much as possible.

      +runCliScript | augment-vir - v31.5.0

      Function runCliScript

      • Runs a script path as if it had been run directly, as much as possible.

        Parameters

        • scriptPath: string
        • cliScriptFilePath: string

          This should just be __filename (for CJS) or import.meta.filename (for ESM).

        • binName: undefined | string

          This should be the bin name of the package that is calling this function. Set to undefined if there isn't one.

        Returns Promise<void>

      +
    diff --git a/functions/runShellCommand.html b/functions/runShellCommand.html index 56434d80..82efb5c5 100644 --- a/functions/runShellCommand.html +++ b/functions/runShellCommand.html @@ -1,6 +1,6 @@ -runShellCommand | augment-vir - v31.4.0

    Function runShellCommand

    diff --git a/functions/safeMatch.html b/functions/safeMatch.html index 81957279..0de32272 100644 --- a/functions/safeMatch.html +++ b/functions/safeMatch.html @@ -1,5 +1,5 @@ -safeMatch | augment-vir - v31.4.0

    Function safeMatch

    • Performs +safeMatch | augment-vir - v31.5.0

      Function safeMatch

      +
    diff --git a/functions/safeSplit.html b/functions/safeSplit.html index ec9b5e75..d45b4c46 100644 --- a/functions/safeSplit.html +++ b/functions/safeSplit.html @@ -1,5 +1,5 @@ -safeSplit | augment-vir - v31.4.0

    Function safeSplit

    diff --git a/functions/selectCollapsedFrom.html b/functions/selectCollapsedFrom.html index b24d4f81..9da494c7 100644 --- a/functions/selectCollapsedFrom.html +++ b/functions/selectCollapsedFrom.html @@ -1,7 +1,7 @@ -selectCollapsedFrom | augment-vir - v31.4.0

    Function selectCollapsedFrom

    diff --git a/functions/selectFrom-1.html b/functions/selectFrom-1.html index 2a1fe2c6..00f38fbd 100644 --- a/functions/selectFrom-1.html +++ b/functions/selectFrom-1.html @@ -1,6 +1,6 @@ -selectFrom | augment-vir - v31.4.0

    Function selectFrom

    • Performs a SQL-like nested selection on an object, extracting the selected values.

      +selectFrom | augment-vir - v31.5.0

      Function selectFrom

      +
    diff --git a/functions/setRegExpCaseSensitivity.html b/functions/setRegExpCaseSensitivity.html index 03153dcb..604dbcb7 100644 --- a/functions/setRegExpCaseSensitivity.html +++ b/functions/setRegExpCaseSensitivity.html @@ -1,8 +1,8 @@ -setRegExpCaseSensitivity | augment-vir - v31.4.0

    Function setRegExpCaseSensitivity

    • Creates a new RegExp by adding or removing the case insensitivity flag 'i', based on the given +setRegExpCaseSensitivity | augment-vir - v31.5.0

      Function setRegExpCaseSensitivity

      • Creates a new RegExp by adding or removing the case insensitivity flag 'i', based on the given caseSensitive input. The first input can also be a string and it will be converted into a RegExp.

        Parameters

        • originalRegExpOrString: string | RegExp
        • __namedParameters: { caseSensitive: boolean }

        Returns RegExp

        import {setRegExpCaseSensitivity} from '@augment-vir/common';

        setRegExpCaseSensitivity(/abc/i, {caseSensitive: true}); // output is `/abc/`
        setRegExpCaseSensitivity(/abc/, {caseSensitive: false}); // output is `/abc/i`
        setRegExpCaseSensitivity('abc', {caseSensitive: true}); // output is `/abc/i`
      +
    diff --git a/functions/setRegExpFlags.html b/functions/setRegExpFlags.html index 02b71190..0e2682ec 100644 --- a/functions/setRegExpFlags.html +++ b/functions/setRegExpFlags.html @@ -1,6 +1,6 @@ -setRegExpFlags | augment-vir - v31.4.0

    Function setRegExpFlags

    • Creates a new RegExp with the given flags.

      +setRegExpFlags | augment-vir - v31.5.0

      Function setRegExpFlags

      • Creates a new RegExp with the given flags.

        Parameters

        • originalRegExpOrString: string | RegExp
        • flags: string

        Returns RegExp

        import {setRegExpFlags} from '@augment-vir/common';

        setRegExpFlags(/a/i, 'gm');
        // output is `/a/gm`
      +
    diff --git a/functions/shuffleArray.html b/functions/shuffleArray.html index e05bbe32..4d992e86 100644 --- a/functions/shuffleArray.html +++ b/functions/shuffleArray.html @@ -1,4 +1,4 @@ -shuffleArray | augment-vir - v31.4.0

    Function shuffleArray

    diff --git a/functions/snapshotCases.html b/functions/snapshotCases.html index 6f7c1f92..4d065956 100644 --- a/functions/snapshotCases.html +++ b/functions/snapshotCases.html @@ -1,8 +1,8 @@ -snapshotCases | augment-vir - v31.4.0

    Function snapshotCases

    • Similar to itCases but instead of defining expectation in each test case, each test case is a +snapshotCases | augment-vir - v31.5.0

      Function snapshotCases

      • Similar to itCases but instead of defining expectation in each test case, each test case is a snapshot test.

        In order to generate or update the snapshot files, run tests in update mode.

        -

        Type Parameters

        Parameters

        Returns void[]

        import {snapshotCases, describe} from '@augment-vir/test';

        function myFunctionToTest(a: number, b: number) {
        return a + b;
        }

        describe(myFunctionToTest.name, () => {
        snapshotCases(myFunctionToTest, [
        {
        it: 'handles negative numbers',
        inputs: [-1, -2],
        },
        {
        it: 'handles 0',
        inputs: [0, 0],
        },
        {
        it: 'adds',
        inputs: [3, 5],
        },
        ]);
        }); +

        Type Parameters

        Parameters

        Returns void[]

        import {snapshotCases, describe} from '@augment-vir/test';

        function myFunctionToTest(a: number, b: number) {
        return a + b;
        }

        describe(myFunctionToTest.name, () => {
        snapshotCases(myFunctionToTest, [
        {
        it: 'handles negative numbers',
        inputs: [-1, -2],
        },
        {
        it: 'handles 0',
        inputs: [0, 0],
        },
        {
        it: 'adds',
        inputs: [3, 5],
        },
        ]);
        });
      +
    diff --git a/functions/snapshotCasesWithContext.html b/functions/snapshotCasesWithContext.html new file mode 100644 index 00000000..52879df2 --- /dev/null +++ b/functions/snapshotCasesWithContext.html @@ -0,0 +1,8 @@ +snapshotCasesWithContext | augment-vir - v31.5.0

    Function snapshotCasesWithContext

    • Same as snapshotCases but passes the test context as the first parameter to the function under +test.

      +

      In order to generate or update the snapshot files, run tests in update mode.

      +

      Type Parameters

      Parameters

      Returns void[]

      import {
      snapshotCasesWithContext,
      RuntimeEnv,
      describe,
      UniversalTestContext,
      assertTestContext,
      } from '@augment-vir/test';

      function myFunctionToTest(testContext: UniversalTestContext, a: number, b: number) {
      assertTestContext(testContext, RuntimeEnv.Node);
      return testContext.name;
      }

      describe(myFunctionToTest.name, () => {
      snapshotCasesWithContext(myFunctionToTest, [
      {
      it: 'handles negative numbers',
      inputs: [-1, -2],
      },
      {
      it: 'handles 0',
      inputs: [0, 0],
      },
      {
      it: 'adds',
      inputs: [3, 5],
      },
      ]);
      }); +
      + +
    diff --git a/functions/splitIncludeSplit.html b/functions/splitIncludeSplit.html index 067e3770..61c23529 100644 --- a/functions/splitIncludeSplit.html +++ b/functions/splitIncludeSplit.html @@ -1,8 +1,8 @@ -splitIncludeSplit | augment-vir - v31.4.0

    Function splitIncludeSplit

    • Same as * +splitIncludeSplit | augment-vir - v31.5.0

      Function splitIncludeSplit

      • Same as * ''.split but includes the split delimiter in the output array.

        Parameters

        • original: string
        • splitDelimiter: string | RegExp
        • __namedParameters: { caseSensitive: boolean }

        Returns readonly string[]

        import {splitIncludeSplit} from '@augment-vir/common';

        splitIncludeSplit('1,2,3', ',', {caseSensitive: false}); // outputs `['1', ',', '2', ',', '3']`
      +
    diff --git a/functions/streamShellCommand.html b/functions/streamShellCommand.html index 0ec83487..d9c2bef9 100644 --- a/functions/streamShellCommand.html +++ b/functions/streamShellCommand.html @@ -1,8 +1,8 @@ -streamShellCommand | augment-vir - v31.4.0

    Function streamShellCommand

    • Runs a shell command and returns a ShellTarget instance for directly hooking into shell +streamShellCommand | augment-vir - v31.5.0

      Function streamShellCommand

      • Runs a shell command and returns a ShellTarget instance for directly hooking into shell events. This allows instant reactions to shell events but in a less convenient API compared to runShellCommand.

        Parameters

        • command: string
        • Optionalcwd: string
        • shell: string = 'bash'
        • env: ProcessEnv = process.env
        • hookUpToConsole: boolean = false

        Returns ShellTarget

        • runShellCommand: a higher level and more succinct way of running a shell command.
        -
      +
    diff --git a/functions/stringify.html b/functions/stringify.html index 50a12711..45ea7745 100644 --- a/functions/stringify.html +++ b/functions/stringify.html @@ -1,4 +1,4 @@ -stringify | augment-vir - v31.4.0

    Function stringify

    • Converts the input into a string. Tries first with JSON5 and, if that fails, falls back to a +stringify | augment-vir - v31.5.0

      Function stringify

      +
    diff --git a/functions/toEnsuredNumber.html b/functions/toEnsuredNumber.html index f99d40b9..6a4a1af3 100644 --- a/functions/toEnsuredNumber.html +++ b/functions/toEnsuredNumber.html @@ -1,5 +1,5 @@ -toEnsuredNumber | augment-vir - v31.4.0

    Function toEnsuredNumber

    • Converts the input into a number and throws an error if the conversion fails.

      +toEnsuredNumber | augment-vir - v31.5.0

      Function toEnsuredNumber

      +
    diff --git a/functions/toLogString.html b/functions/toLogString.html index c71105ff..a24abb33 100644 --- a/functions/toLogString.html +++ b/functions/toLogString.html @@ -1,3 +1,3 @@ -toLogString | augment-vir - v31.4.0

    Function toLogString

    Converts log arguments into a single LogWriterParams.

    +toLogString | augment-vir - v31.5.0

    Function toLogString

    Converts log arguments into a single LogWriterParams.

    +
    diff --git a/functions/toMaybeNumber.html b/functions/toMaybeNumber.html index 143251d8..9cd1b6e1 100644 --- a/functions/toMaybeNumber.html +++ b/functions/toMaybeNumber.html @@ -1,4 +1,4 @@ -toMaybeNumber | augment-vir - v31.4.0

    Function toMaybeNumber

    • Converts the input into a number and returns undefined if the conversion fails.

      +toMaybeNumber | augment-vir - v31.5.0

      Function toMaybeNumber

      +
    diff --git a/functions/toNumber.html b/functions/toNumber.html index ca5fba1f..28ad1c75 100644 --- a/functions/toNumber.html +++ b/functions/toNumber.html @@ -1,5 +1,5 @@ -toNumber | augment-vir - v31.4.0

    Function toNumber

    • Converts the input into a number and returns NaN if the conversion fails. This handles more +toNumber | augment-vir - v31.5.0

      Function toNumber

      +
    diff --git a/functions/toPosixPath.html b/functions/toPosixPath.html index 9cd4cd17..50cfd0c7 100644 --- a/functions/toPosixPath.html +++ b/functions/toPosixPath.html @@ -1,3 +1,3 @@ -toPosixPath | augment-vir - v31.4.0

    Function toPosixPath

    • Convert a Windows path to a posix path.

      +toPosixPath | augment-vir - v31.5.0

      Function toPosixPath

      +
    diff --git a/functions/toTagOrDefinition.html b/functions/toTagOrDefinition.html index 14d3267a..37873843 100644 --- a/functions/toTagOrDefinition.html +++ b/functions/toTagOrDefinition.html @@ -1,5 +1,5 @@ -toTagOrDefinition | augment-vir - v31.4.0

    Function toTagOrDefinition

    • Reduce an element down to its tag name or its element definition if it's a custom element defined +toTagOrDefinition | augment-vir - v31.5.0

      Function toTagOrDefinition

      • Reduce an element down to its tag name or its element definition if it's a custom element defined by element-vir. Note that the types for this won't work in your project if you use custom element tag names that aren't generated via element-vir.

        Parameters

        • element: Element

        Returns DeclarativeElementDefinition | SpecTagName

      +
    diff --git a/functions/trimArrayStrings.html b/functions/trimArrayStrings.html index d4c71449..4c672c6a 100644 --- a/functions/trimArrayStrings.html +++ b/functions/trimArrayStrings.html @@ -1,4 +1,4 @@ -trimArrayStrings | augment-vir - v31.4.0

    Function trimArrayStrings

    • Trims all entries in an array.

      +trimArrayStrings | augment-vir - v31.5.0

      Function trimArrayStrings

      +
    diff --git a/functions/truncateNumber.html b/functions/truncateNumber.html index 2c4f2d9c..c15f9bcb 100644 --- a/functions/truncateNumber.html +++ b/functions/truncateNumber.html @@ -1,4 +1,4 @@ -truncateNumber | augment-vir - v31.4.0

    Function truncateNumber

    • Truncates a number such that is will at a max have 6 (customizable) characters including suffix, +truncateNumber | augment-vir - v31.5.0

      Function truncateNumber

      • Truncates a number such that is will at a max have 6 (customizable) characters including suffix, decimal point, or comma.

        Default suffixes are in defaultTruncationSuffixes:

        'k', // thousand
        @@ -14,4 +14,4 @@
         
    +
    diff --git a/functions/typedMap.html b/functions/typedMap.html index d27e858b..ee6aeab7 100644 --- a/functions/typedMap.html +++ b/functions/typedMap.html @@ -1,4 +1,4 @@ -typedMap | augment-vir - v31.4.0

    Function typedMap

    +
    diff --git a/functions/typedObjectFromEntries.html b/functions/typedObjectFromEntries.html index 7b2772f5..caf27421 100644 --- a/functions/typedObjectFromEntries.html +++ b/functions/typedObjectFromEntries.html @@ -1,5 +1,5 @@ -typedObjectFromEntries | augment-vir - v31.4.0

    Function typedObjectFromEntries

    diff --git a/functions/wait.html b/functions/wait.html index e7085f5e..d7a08f4c 100644 --- a/functions/wait.html +++ b/functions/wait.html @@ -1,6 +1,6 @@ -wait | augment-vir - v31.4.0

    Function wait

    • An async pause for the given duration.

      +wait | augment-vir - v31.5.0

      Function wait

      • An async pause for the given duration.

        Parameters

        • duration: Readonly<Partial<Record<DurationUnit, undefined | number>>>

        Returns Promise<void>

        • waitValue : return a value after the wait finishes.
        -
      +
    diff --git a/functions/waitForAnimationFrame.html b/functions/waitForAnimationFrame.html index 21343511..360c9097 100644 --- a/functions/waitForAnimationFrame.html +++ b/functions/waitForAnimationFrame.html @@ -1,4 +1,4 @@ -waitForAnimationFrame | augment-vir - v31.4.0

    Function waitForAnimationFrame

    • Wait for an animation frame's duration. Optionally, wait for multiple frames by providing a +waitForAnimationFrame | augment-vir - v31.5.0

      Function waitForAnimationFrame

      +
    diff --git a/functions/waitUntil.html b/functions/waitUntil.html index 2668419d..decda85f 100644 --- a/functions/waitUntil.html +++ b/functions/waitUntil.html @@ -1,4 +1,4 @@ -waitUntil | augment-vir - v31.4.0

    Function waitUntil

    A group of guard methods that run the given callback multiple times until its return value +waitUntil | augment-vir - v31.5.0

    Function waitUntil

    A group of guard methods that run the given callback multiple times until its return value matches expectations. Callback interval and timeout can be customized with WaitUntilOptions.

    This can also be called as a standalone wait until function which waits until the callback's @@ -9,7 +9,7 @@

    AssertionError When the assertion fails.

    • Type Parameters

      • T

      Parameters

      • callback: () => T
      • Optionaloptions: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >
      • OptionalfailureMessage: string

      Returns Promise<T>

      The successful callback return value.

      -

    Properties

    Properties

    deepEquals endsWith endsWithout entriesEqual @@ -115,7 +115,7 @@
  • waitUntil.entriesEqual : a less expensive (but less thorough) deep equality assertion.
  • waitUntil.jsonEquals : a less expensive (but less thorough) deep equality assertion.
  • -
    endsWith: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array ends with the first input +

    endsWith: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array ends with the first input child value. This uses reference equality when the parent is an array. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -128,7 +128,7 @@
  • waitUntil.endsWithout : the opposite assertion.
  • waitUntil.startsWith : assertion on the other end.
  • -
    endsWithout: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array does not end with the first +

    endsWithout: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array does not end with the first input child value. This uses reference equality when the parent is an array. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -141,7 +141,7 @@
  • waitUntil.endsWith : the opposite assertion.
  • waitUntil.startsWithout : assertion on the other end.
  • -
    entriesEqual: <Actual extends AnyObject, Expected extends AnyObject>(
        this: void,
        expected: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected>> = ...

    Repeatedly calls a callback until its output is deeply equal to the first input by +

    entriesEqual: <Actual extends AnyObject, Expected extends AnyObject>(
        this: void,
        expected: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected>> = ...

    Repeatedly calls a callback until its output is deeply equal to the first input by checking only their top-level values for strict (non-deep, reference, using ===) equality. Once the callback output passes, it is returned. If the attempts time out, an @@ -156,7 +156,7 @@

  • waitUntil.jsonEquals : another deep equality assertion.
  • waitUntil.deepEquals : the most thorough (but also slow) deep equality assertion.
  • -
    hasKey: <const Parent, const Key extends PropertyKey>(
        this: void,
        key: Key,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<CombineTypeWithKey<Key, Parent>> = ...

    Repeatedly calls a callback until its output is a parent value that has the first, key +

    hasKey: <const Parent, const Key extends PropertyKey>(
        this: void,
        key: Key,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<CombineTypeWithKey<Key, Parent>> = ...

    Repeatedly calls a callback until its output is a parent value that has the first, key input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the parent value.

    @@ -169,7 +169,7 @@
  • waitUntil.lacksKey : the opposite assertion.
  • waitUntil.hasKeys : the multi-key assertion.
  • -
    hasKeys: <const Keys extends PropertyKey, const Parent>(
        this: void,
        keys: readonly Keys[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<CombineTypeWithKey<Keys, Parent>> = ...

    Repeatedly calls a callback until its output is a parent value that has all of the first, +

    hasKeys: <const Keys extends PropertyKey, const Parent>(
        this: void,
        keys: readonly Keys[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<CombineTypeWithKey<Keys, Parent>> = ...

    Repeatedly calls a callback until its output is a parent value that has all of the first, keys input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the parent value.

    @@ -182,7 +182,7 @@
  • waitUntil.lacksKeys : the opposite assertion.
  • waitUntil.hasKey : the single-key assertion.
  • -
    hasValue: <Parent extends string | object>(
        this: void,
        value: unknown,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent includes a child +

    hasValue: <Parent extends string | object>(
        this: void,
        value: unknown,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent includes a child value through reference equality. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -195,7 +195,7 @@
  • waitUntil.lacksValue : the opposite assertion.
  • waitUntil.hasValues : the multi-value assertion.
  • -
    hasValues: <Parent extends string | object>(
        this: void,
        value: unknown[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent includes all child +

    hasValues: <Parent extends string | object>(
        this: void,
        value: unknown[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent includes all child values through reference equality. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -208,7 +208,7 @@
  • waitUntil.lacksValues : the opposite assertion.
  • waitUntil.hasValue : the single-value assertion.
  • -
    instanceOf: <const Instance>(
        this: void,
        constructor: Constructor<Instance>,
        callback: () => unknown,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Instance> = ...

    Repeatedly calls a callback until its output is an instance of the given class +

    instanceOf: <const Instance>(
        this: void,
        constructor: Constructor<Instance>,
        callback: () => unknown,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Instance> = ...

    Repeatedly calls a callback until its output is an instance of the given class constructor. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -220,7 +220,7 @@
    -
    isAbove: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is above the expectation +

    isAbove: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is above the expectation (actual > expected). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -233,7 +233,7 @@
  • waitUntil.isBelow : the opposite assertion.
  • waitUntil.isAtLeast : the more lenient assertion.
  • -
    isApproximately: <Actual extends number>(
        this: void,
        expected: number,
        delta: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is within ±delta of the +

    isApproximately: <Actual extends number>(
        this: void,
        expected: number,
        delta: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is within ±delta of the expectation. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -245,7 +245,7 @@
    -
    isArray: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<ArrayNarrow<Actual>> = ...

    Repeatedly calls a callback until its output is an array. Once the callback output +

    isArray: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<ArrayNarrow<Actual>> = ...

    Repeatedly calls a callback until its output is an array. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isArray(() => []); // passes
    await waitUntil.isArray(() => {
    return {length: 4};
    }); // throws an error @@ -255,7 +255,7 @@
    -
    isAtLeast: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is at least the expectation +

    isAtLeast: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is at least the expectation (actual >= expected). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -268,7 +268,7 @@
  • waitUntil.isAtMost : the opposite assertion.
  • waitUntil.isAbove : the more restrictive assertion.
  • -
    isAtMost: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is at most the expectation +

    isAtMost: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is at most the expectation (actual <= expected). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -281,7 +281,7 @@
  • waitUntil.isAtLeast : the opposite assertion.
  • waitUntil.isBelow : the more restrictive assertion.
  • -
    isBelow: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is below the expectation +

    isBelow: <Actual extends number>(
        this: void,
        expected: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is below the expectation (actual < expected). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -294,7 +294,7 @@
  • waitUntil.isAbove : the opposite assertion.
  • waitUntil.isAtMost : the more lenient assertion.
  • -
    isBigInt: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, bigint>> = ...

    Repeatedly calls a callback until its output is a BigInt. Once the callback output +

    isBigInt: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, bigint>> = ...

    Repeatedly calls a callback until its output is a BigInt. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isBigInt(() => 123n); // returns `123n`
    await waitUntil.isBigInt(() => 123); // throws an error @@ -304,7 +304,7 @@
    -
    isBoolean: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, boolean>> = ...

    Repeatedly calls a callback until its output is a boolean. Once the callback output +

    isBoolean: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, boolean>> = ...

    Repeatedly calls a callback until its output is a boolean. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isBoolean(() => true); // returns `true`
    await waitUntil.isBoolean(() => 'true'); // throws an error @@ -314,7 +314,7 @@
    -
    isDefined: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, undefined | null>> = ...

    Repeatedly calls a callback until its output is a value that is defined (not null and +

    isDefined: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, undefined | null>> = ...

    Repeatedly calls a callback until its output is a value that is defined (not null and not undefined). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -326,7 +326,7 @@
    -
    isEmpty: <Actual extends CanBeEmpty>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToActual<Actual, Empty>> = ...

    Repeatedly calls a callback until its output is a value is empty. Supports strings, Maps, +

    isEmpty: <Actual extends CanBeEmpty>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToActual<Actual, Empty>> = ...

    Repeatedly calls a callback until its output is a value is empty. Supports strings, Maps, Sets, objects, and arrays. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -338,7 +338,7 @@
    -
    isEnumValue: <const Actual, const Expected extends EnumBaseType>(
        this: void,
        checkEnum: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected[keyof Expected]>> = ...

    Repeatedly calls a callback until its output is an enum member. Once the callback output +

    isEnumValue: <const Actual, const Expected extends EnumBaseType>(
        this: void,
        checkEnum: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected[keyof Expected]>> = ...

    Repeatedly calls a callback until its output is an enum member. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    Type declaration

    -
    isError: <Actual>(
        this: void,
        matchOptions:
            | undefined
            | PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Error>> = ...

    Repeatedly calls a callback until is output is an instance of the built-in Error class +

    isError: <Actual>(
        this: void,
        matchOptions:
            | undefined
            | PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Error>> = ...

    Repeatedly calls a callback until is output is an instance of the built-in Error class and compares it to the given ErrorMatchOptions, if provided. Once the callback output passes, that Error is returned. If the attempts time out, an error is thrown.

    Type guards the input.

    @@ -358,7 +358,7 @@

    AssertionError On timeout.

    -
    isFalse: (
        this: void,
        callback: () => unknown,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<false> = ...

    Repeatedly calls a callback until its output is exactly false. Once the callback output +

    isFalse: (
        this: void,
        callback: () => unknown,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<false> = ...

    Repeatedly calls a callback until its output is exactly false. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    Type declaration

      • (
            this: void,
            callback: () => unknown,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<false>
      • Parameters

        • this: void
        • callback: () => unknown
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<false>

        The callback output once it passes.

        @@ -370,7 +370,7 @@
      • waitUntil.isTrue : the opposite assertion.
      • waitUntil.isFalsy : a less exact assertion.
      -
    isFalsy: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, FalsyValue>> = ...

    Repeatedly calls a callback until its output is falsy. Once the callback output passes, +

    isFalsy: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, FalsyValue>> = ...

    Repeatedly calls a callback until its output is falsy. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    Type declaration

      • <Actual>(
            this: void,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<NarrowToExpected<Actual, FalsyValue>>
      • Type Parameters

        • Actual

        Parameters

        • this: void
        • callback: () => MaybePromise<Actual>
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<NarrowToExpected<Actual, FalsyValue>>

        The callback output once it passes.

        @@ -382,7 +382,7 @@
      • waitUntil.isTruthy : the opposite assertion.
      • waitUntil.isFalse : a more exact assertion.
      -
    isFinite: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is finite: meaning, not +

    isFinite: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is finite: meaning, not NaN and not Infinity or -Infinity. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -395,7 +395,7 @@
  • waitUntil.isNaN : an opposite assertion.
  • waitUntil.isInfinite : an opposite assertion.
  • -
    isFunction: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToActual<Actual, AnyFunction>> = ...

    Repeatedly calls a callback until its output is a function. Once the callback output +

    isFunction: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToActual<Actual, AnyFunction>> = ...

    Repeatedly calls a callback until its output is a function. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isFunction(() => () => {
    return {};
    }); // returns `{}`
    await waitUntil.isFunction(() => {
    return {};
    }); // throws an error @@ -405,7 +405,7 @@
    -
    isHttpStatus: <const Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, HttpStatus>> = ...

    Repeatedly calls a callback until its output is an HttpStatus. Once the callback +

    isHttpStatus: <const Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, HttpStatus>> = ...

    Repeatedly calls a callback until its output is an HttpStatus. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    Type declaration

      • <const Actual>(
            this: void,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<NarrowToExpected<Actual, HttpStatus>>
      • Type Parameters

        • const Actual

        Parameters

        • this: void
        • callback: () => MaybePromise<Actual>
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<NarrowToExpected<Actual, HttpStatus>>

        The callback output once it passes.

        @@ -418,7 +418,7 @@
      • HttpStatus : all included statuses.
      • HttpStatusCategory : all status categories.
      -
    isHttpStatusCategory: <const Actual, const Category extends HttpStatusCategory>(
        this: void,
        category: Category,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, HttpStatusByCategory<Category>>> = ...

    Repeatedly calls a callback until its output is an HttpStatus within a specific +

    isHttpStatusCategory: <const Actual, const Category extends HttpStatusCategory>(
        this: void,
        category: Category,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, HttpStatusByCategory<Category>>> = ...

    Repeatedly calls a callback until its output is an HttpStatus within a specific HttpStatusCategory. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -432,7 +432,7 @@
  • HttpStatus : all included statuses.
  • HttpStatusCategory : all status categories.
  • -
    isIn: <Child, Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Child>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Child, Values<Parent>>> = ...

    Repeatedly calls a callback until its output is child value is contained within a parent +

    isIn: <Child, Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Child>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Child, Values<Parent>>> = ...

    Repeatedly calls a callback until its output is child value is contained within a parent object, array, or string through reference equality. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the child when possible.

    @@ -444,7 +444,7 @@
    -
    isInBounds: <Actual extends number>(
        this: void,
        __namedParameters: MinMax,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number is inside the provided min and +

    isInBounds: <Actual extends number>(
        this: void,
        __namedParameters: MinMax,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number is inside the provided min and max bounds, inclusive. If the attempts time out, an error is thrown.

    Performs no type guarding.

    import {waitUntil} from '@augment-vir/assert';

    waitUntil.isInBounds(5, {min: 1, max: 10}); // passes
    waitUntil.isInBounds(10, {min: 1, max: 10}); // passes
    waitUntil.isInBounds(11, {min: 1, max: 10}); // fails
    waitUntil.isInBounds(0, {min: 1, max: 10}); // fails @@ -454,7 +454,7 @@
    -
    isInfinite: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is either Infinity or +

    isInfinite: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is either Infinity or -Infinity. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -467,7 +467,7 @@
  • waitUntil.isNaN : an opposite assertion.
  • waitUntil.isInfinite : an opposite assertion.
  • -
    isInteger: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is an integer. This has the same limitations +

    isInteger: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is an integer. This has the same limitations as https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger. If the attempts time out, an error is thrown.

    @@ -479,7 +479,7 @@
    -
    isKeyOf: <const Key extends PropertyKey, const Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Key>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Key, keyof Parent>> = ...

    Repeatedly calls a callback until its output is a key that is contained within the first, +

    isKeyOf: <const Key extends PropertyKey, const Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Key>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Key, keyof Parent>> = ...

    Repeatedly calls a callback until its output is a key that is contained within the first, parent value. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the key.

    @@ -491,7 +491,7 @@
    -
    isLengthAtLeast: {
        <Element, Length extends number>(
            length: Length,
            callback: () => MaybePromise<readonly (undefined | Element)[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<AtLeastTuple<Element, Length>>;
        <Actual extends string | AnyObject>(
            length: number,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Actual>;
    } = ...

    Repeatedly calls a callback until its output is an array or string that has at least the +

    isLengthAtLeast: {
        <Element, Length extends number>(
            length: Length,
            callback: () => MaybePromise<readonly (undefined | Element)[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<AtLeastTuple<Element, Length>>;
        <Actual extends string | AnyObject>(
            length: number,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Actual>;
    } = ...

    Repeatedly calls a callback until its output is an array or string that has at least the given length. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards an array into an AtLeastTuple. Performs no type guarding on a string.

    @@ -503,7 +503,7 @@
    -
    isLengthExactly: {
        <Element, Length extends number>(
            length: Length,
            callback: () => MaybePromise<readonly (undefined | Element)[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Tuple<Element, Length>>;
        <Actual extends string | AnyObject>(
            length: number,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Actual>;
    } = ...

    Repeatedly calls a callback until its output is an array or string that has exactly the +

    isLengthExactly: {
        <Element, Length extends number>(
            length: Length,
            callback: () => MaybePromise<readonly (undefined | Element)[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Tuple<Element, Length>>;
        <Actual extends string | AnyObject>(
            length: number,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Actual>;
    } = ...

    Repeatedly calls a callback until its output is an array or string that has exactly the given length. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards an array into a Tuple. Performs no type guarding on a string.

    @@ -515,7 +515,7 @@
    -
    isNaN: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is +

    isNaN: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is NaN. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -528,7 +528,7 @@
    -
    isNotApproximately: <Actual extends number>(
        this: void,
        expected: number,
        delta: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is outside ±delta of the +

    isNotApproximately: <Actual extends number>(
        this: void,
        expected: number,
        delta: number,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is a number that is outside ±delta of the expectation. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -540,7 +540,7 @@
    -
    isNotArray: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, readonly unknown[]>> = ...

    Repeatedly calls a callback until its output is not an array. Once the callback output +

    isNotArray: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, readonly unknown[]>> = ...

    Repeatedly calls a callback until its output is not an array. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotArray(() => []); // throws an error
    await waitUntil.isNotArray(() => {
    return {length: 4};
    }); // returns `{length: 4}` @@ -550,7 +550,7 @@
    -
    isNotBigInt: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, bigint>> = ...

    Repeatedly calls a callback until its output is not a BigInt. Once the callback output +

    isNotBigInt: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, bigint>> = ...

    Repeatedly calls a callback until its output is not a BigInt. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotBigInt(() => 123n); // throws an error
    await waitUntil.isNotBigInt(() => 123); // returns `123` @@ -560,7 +560,7 @@
    -
    isNotBoolean: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, boolean>> = ...

    Repeatedly calls a callback until its output is not a boolean. Once the callback output +

    isNotBoolean: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, boolean>> = ...

    Repeatedly calls a callback until its output is not a boolean. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotBoolean(() => true); // throws an error
    await waitUntil.isNotBoolean(() => 'true'); // returns `'true'` @@ -570,7 +570,7 @@
    -
    isNotEmpty: <Actual extends CanBeEmpty>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Empty>> = ...

    Repeatedly calls a callback until its output is a value is not empty. Supports strings, +

    isNotEmpty: <Actual extends CanBeEmpty>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Empty>> = ...

    Repeatedly calls a callback until its output is a value is not empty. Supports strings, Maps, Sets, objects, and arrays. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -582,7 +582,7 @@
    -
    isNotEnumValue: <const Actual, const Expected extends EnumBaseType>(
        this: void,
        checkEnum: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<
        Exclude<
            Actual,
            Expected[keyof Expected]
            | `${Expected[keyof Expected]}`,
        >,
    > = ...

    Repeatedly calls a callback until its output is not an enum member. Once the callback +

    isNotEnumValue: <const Actual, const Expected extends EnumBaseType>(
        this: void,
        checkEnum: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<
        Exclude<
            Actual,
            Expected[keyof Expected]
            | `${Expected[keyof Expected]}`,
        >,
    > = ...

    Repeatedly calls a callback until its output is not an enum member. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    Type declaration

      • <const Actual, const Expected extends EnumBaseType>(
            this: void,
            checkEnum: Expected,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<
            Exclude<
                Actual,
                Expected[keyof Expected]
                | `${Expected[keyof Expected]}`,
            >,
        >
      • Type Parameters

        Parameters

        • this: void
        • checkEnum: Expected
        • callback: () => MaybePromise<Actual>
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<
            Exclude<
                Actual,
                Expected[keyof Expected]
                | `${Expected[keyof Expected]}`,
            >,
        >

        The callback output once it passes.

        @@ -593,7 +593,7 @@
    -
    isNotFunction: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, AnyFunction>> = ...

    Repeatedly calls a callback until its output is not a function. Once the callback +

    isNotFunction: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, AnyFunction>> = ...

    Repeatedly calls a callback until its output is not a function. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotFunction(() => () => {
    return {};
    }); // throws an error
    await waitUntil.isNotFunction(() => {
    return {};
    }); // returns `{}` @@ -603,7 +603,7 @@
    -
    isNotIn: <Child, Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Child>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Child, Values<Parent>>> = ...

    Repeatedly calls a callback until its output is child value is not contained within a +

    isNotIn: <Child, Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Child>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Child, Values<Parent>>> = ...

    Repeatedly calls a callback until its output is child value is not contained within a parent object, array, or string through reference equality. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the child when possible.

    @@ -615,7 +615,7 @@
    -
    isNotInteger: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is not an integer. This has the same +

    isNotInteger: <Actual extends number>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is not an integer. This has the same limitations, as https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger. If the attempts time out, an error is thrown.

    @@ -627,7 +627,7 @@
    -
    isNotKeyOf: <const Key extends PropertyKey, const Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Key>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Key, RequiredKeysOf<Parent>>> = ...

    Repeatedly calls a callback until its output is a key that is not contained within the +

    isNotKeyOf: <const Key extends PropertyKey, const Parent>(
        this: void,
        parent: Parent,
        callback: () => MaybePromise<Key>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Key, RequiredKeysOf<Parent>>> = ...

    Repeatedly calls a callback until its output is a key that is not contained within the first, parent value. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the key.

    @@ -639,7 +639,7 @@
    -
    isNotNull: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, null>> = ...

    Repeatedly calls a callback until its output is not exactly null. Once the callback +

    isNotNull: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, null>> = ...

    Repeatedly calls a callback until its output is not exactly null. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotNull(() => null); // throws an error
    await waitUntil.isNotNull(() => undefined); // returns `undefined` @@ -654,7 +654,7 @@ -
    isNotNumber: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, number>> = ...

    Repeatedly calls a callback until its output is not a number. This includes NaN. Once +

    isNotNumber: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, number>> = ...

    Repeatedly calls a callback until its output is not a number. This includes NaN. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -665,7 +665,7 @@
    -
    isNotObject: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, UnknownObject>> = ...

    Repeatedly calls a callback until its output is not an object. This includes arrays. +

    isNotObject: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, UnknownObject>> = ...

    Repeatedly calls a callback until its output is not an object. This includes arrays. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -676,7 +676,7 @@
    -
    isNotPrimitive: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Primitive>> = ...

    Repeatedly calls a callback until its output is a valid PropertyKey. PropertyKey is a +

    isNotPrimitive: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Primitive>> = ...

    Repeatedly calls a callback until its output is a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -689,7 +689,7 @@
    -
    isNotPromise: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Promise<any>>> = ...

    Repeatedly calls a callback until its output is a not Promise instance. Once the +

    isNotPromise: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Promise<any>>> = ...

    Repeatedly calls a callback until its output is a not Promise instance. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    Type declaration

      • <const Actual>(
            this: void,
            callback: () => Actual,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Exclude<Actual, Promise<any>>>
      • Type Parameters

        • const Actual

        Parameters

        • this: void
        • callback: () => Actual
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<Exclude<Actual, Promise<any>>>

        The callback output once it passes.

        @@ -701,7 +701,7 @@
      • waitUntil.isPromise : the opposite assertion.
      • waitUntil.isNotPromiseLike : the more lenient assertion.
      -
    isNotPromiseLike: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, PromiseLike<any>>> = ...

    Repeatedly calls a callback until its output is not a PromiseLike. Once the callback +

    isNotPromiseLike: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, PromiseLike<any>>> = ...

    Repeatedly calls a callback until its output is not a PromiseLike. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party @@ -716,7 +716,7 @@

  • waitUntil.isPromiseLike : the opposite assertion.
  • waitUntil.isNotPromise : the more precise assertion.
  • -
    isNotPropertyKey: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, PropertyKey>> = ...

    Repeatedly calls a callback until its output is not a valid PropertyKey. +

    isNotPropertyKey: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, PropertyKey>> = ...

    Repeatedly calls a callback until its output is not a valid PropertyKey. PropertyKey is a built-in TypeScript type which refers to all possible key types for a JavaScript object. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -729,7 +729,7 @@
    -
    isNotString: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, string>> = ...

    Repeatedly calls a callback until its output is not a string. Once the callback output +

    isNotString: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, string>> = ...

    Repeatedly calls a callback until its output is not a string. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotString(() => ''); // throws an error
    await waitUntil.isNotString(() => 5); // returns `5` @@ -739,7 +739,7 @@
    -
    isNotSymbol: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, symbol>> = ...

    Repeatedly calls a callback until its output is not a symbol. Once the callback output +

    isNotSymbol: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, symbol>> = ...

    Repeatedly calls a callback until its output is not a symbol. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotSymbol(() => Symbol('my-symbol')); // throws an error
    await waitUntil.isNotSymbol(() => 'my-symbol'); // returns `'my-symbol'` @@ -749,7 +749,7 @@
    -
    isNotUndefined: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, undefined>> = ...

    Repeatedly calls a callback until its output is not exactly undefined. Once the +

    isNotUndefined: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, undefined>> = ...

    Repeatedly calls a callback until its output is not exactly undefined. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNotUndefined(() => undefined); // throws an error
    await waitUntil.isNotUndefined(() => null); // returns `null` @@ -759,7 +759,7 @@
    -
    isNotUuid: <const Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<
        Exclude<Actual, `${string}-${string}-${string}-${string}-${string}`>,
    > = ...

    Repeatedly calls a callback until its output is not a valid UUID. The nil or max UUIDs +

    isNotUuid: <const Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<
        Exclude<Actual, `${string}-${string}-${string}-${string}-${string}`>,
    > = ...

    Repeatedly calls a callback until its output is not a valid UUID. The nil or max UUIDs are included as not valid. Returns the value if the assertion passes. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -771,7 +771,7 @@
    -
    isNull: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, null>> = ...

    Repeatedly calls a callback until its output is exactly null. Once the callback output +

    isNull: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, null>> = ...

    Repeatedly calls a callback until its output is exactly null. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNull(() => null); // returns `null`
    await waitUntil.isNull(() => undefined); // throws an error @@ -781,7 +781,7 @@
    -
    isNullish: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, undefined | null>> = ...

    Repeatedly calls a callback until its output is a value that is nullish (null or +

    isNullish: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, undefined | null>> = ...

    Repeatedly calls a callback until its output is a value that is nullish (null or undefined). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -793,7 +793,7 @@
    -
    isNumber: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, number>> = ...

    Repeatedly calls a callback until its output is a number. This excludes NaN. Once the +

    isNumber: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, number>> = ...

    Repeatedly calls a callback until its output is a number. This excludes NaN. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isNumber(() => 123); // returns `123`
    await waitUntil.isNumber(() => 123n); // throws an error @@ -803,7 +803,7 @@
    -
    isObject: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, UnknownObject>> = ...

    Repeatedly calls a callback until its output is an object. This excludes arrays. Once the +

    isObject: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, UnknownObject>> = ...

    Repeatedly calls a callback until its output is an object. This excludes arrays. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isObject(() => {
    return {};
    }); // returns `{}`
    await waitUntil.isObject(() => []); // throws an error @@ -813,7 +813,7 @@
    -
    isOutBounds: <Actual extends number>(
        this: void,
        __namedParameters: MinMax,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is outside the provided min and max bounds, +

    isOutBounds: <Actual extends number>(
        this: void,
        __namedParameters: MinMax,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is outside the provided min and max bounds, exclusive. If the attempts time out, an error is thrown.

    Performs no type guarding.

    import {waitUntil} from '@augment-vir/assert';

    waitUntil.isOutBounds(5, {min: 1, max: 10}); // fails
    waitUntil.isOutBounds(10, {min: 1, max: 10}); // fails
    waitUntil.isOutBounds(11, {min: 1, max: 10}); // passes
    waitUntil.isOutBounds(0, {min: 1, max: 10}); // passes @@ -823,7 +823,7 @@
    -
    isPrimitive: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, Primitive>> = ...

    Repeatedly calls a callback until its output is a JavaScript +

    isPrimitive: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, Primitive>> = ...

    Repeatedly calls a callback until its output is a JavaScript primitive. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -835,7 +835,7 @@
    -
    isPromise: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, Promise<any>>> = ...

    Repeatedly calls a callback until its output is a Promise instance. Once the callback +

    isPromise: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, Promise<any>>> = ...

    Repeatedly calls a callback until its output is a Promise instance. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    Type declaration

      • <const Actual>(
            this: void,
            callback: () => Actual,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Extract<Actual, Promise<any>>>
      • Type Parameters

        • const Actual

        Parameters

        • this: void
        • callback: () => Actual
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<Extract<Actual, Promise<any>>>

        The callback output once it passes.

        @@ -847,7 +847,7 @@
      • waitUntil.isNotPromise : the opposite assertion.
      • waitUntil.isPromiseLike : the more lenient assertion.
      -
    isPromiseLike: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, PromiseLike<any>>> = ...

    Repeatedly calls a callback until its output is a PromiseLike. Once the callback output +

    isPromiseLike: <const Actual>(
        this: void,
        callback: () => Actual,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, PromiseLike<any>>> = ...

    Repeatedly calls a callback until its output is a PromiseLike. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    PromiseLike is TypeScript built-in type that has a .then method and thus behaves like a promise. This is also referred to as a "thenable". This enables the use of third-party @@ -862,7 +862,7 @@

  • waitUntil.isNotPromiseLike : the opposite assertion.
  • waitUntil.isPromise : the more precise assertion.
  • -
    isPropertyKey: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, PropertyKey>> = ...

    Repeatedly calls a callback until its output is not a JavaScript +

    isPropertyKey: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Extract<Actual, PropertyKey>> = ...

    Repeatedly calls a callback until its output is not a JavaScript primitive. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -874,7 +874,7 @@
    -
    isString: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, string>> = ...

    Repeatedly calls a callback until its output is a string. Once the callback output +

    isString: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, string>> = ...

    Repeatedly calls a callback until its output is a string. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isString(() => ''); // returns `''`
    await waitUntil.isString(() => 5); // throws an error @@ -884,7 +884,7 @@
    -
    isSymbol: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, symbol>> = ...

    Repeatedly calls a callback until its output is a symbol. Once the callback output +

    isSymbol: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, symbol>> = ...

    Repeatedly calls a callback until its output is a symbol. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isSymbol(() => Symbol('my-symbol')); // returns the created symbol
    await waitUntil.isSymbol(() => 'my-symbol'); // throws an error @@ -894,7 +894,7 @@
    -
    isTrue: (
        this: void,
        callback: () => unknown,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<true> = ...

    Repeatedly calls a callback until its output is exactly true. Once the callback output +

    isTrue: (
        this: void,
        callback: () => unknown,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<true> = ...

    Repeatedly calls a callback until its output is exactly true. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    Type declaration

      • (
            this: void,
            callback: () => unknown,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<true>
      • Parameters

        • this: void
        • callback: () => unknown
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<true>

        The callback output once it passes.

        @@ -906,7 +906,7 @@
      • waitUntil.isFalse : the opposite assertion.
      • waitUntil.isTruthy : a less exact assertion.
      -
    isTruthy: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, FalsyValue>> = ...

    Repeatedly calls a callback until its output is truthy. Once the callback output passes, +

    isTruthy: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, FalsyValue>> = ...

    Repeatedly calls a callback until its output is truthy. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    Type declaration

      • <Actual>(
            this: void,
            callback: () => MaybePromise<Actual>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Exclude<Actual, FalsyValue>>
      • Type Parameters

        • Actual

        Parameters

        • this: void
        • callback: () => MaybePromise<Actual>
        • Optionaloptions: PartialWithUndefined<
              {
                  interval: Partial<Record<DurationUnit, undefined | number>>;
                  timeout: Partial<Record<DurationUnit, undefined | number>>;
              },
          >
        • OptionalfailureMessage: string

        Returns Promise<Exclude<Actual, FalsyValue>>

        The callback output once it passes.

        @@ -918,7 +918,7 @@
      • waitUntil.isFalsy : the opposite assertion.
      • waitUntil.isTrue : a more exact assertion.
      -
    isUndefined: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, undefined>> = ...

    Repeatedly calls a callback until its output is exactly undefined. Once the callback +

    isUndefined: <Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, undefined>> = ...

    Repeatedly calls a callback until its output is exactly undefined. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    import {waitUntil} from '@augment-vir/assert';

    await waitUntil.isUndefined(() => undefined); // returns `undefined`
    await waitUntil.isUndefined(() => null); // throws an error @@ -928,7 +928,7 @@
    -
    isUuid: <const Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<
        NarrowToExpected<
            Actual,
            `${string}-${string}-${string}-${string}-${string}`,
        >,
    > = ...

    Repeatedly calls a callback until its output is a valid UUID. Does not accept the nil or +

    isUuid: <const Actual>(
        this: void,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<
        NarrowToExpected<
            Actual,
            `${string}-${string}-${string}-${string}-${string}`,
        >,
    > = ...

    Repeatedly calls a callback until its output is a valid UUID. Does not accept the nil or max UUIDs. Returns the value if the assertion passes. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -940,7 +940,7 @@
    -
    jsonEquals: <Actual, Expected>(
        this: void,
        expected: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected>> = ...

    Repeatedly calls a callback until its output is deeply equal to the first input when +

    jsonEquals: <Actual, Expected>(
        this: void,
        expected: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected>> = ...

    Repeatedly calls a callback until its output is deeply equal to the first input when stringified into JSON. This may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -955,7 +955,7 @@
  • waitUntil.entriesEqual : another deep equality assertion.
  • waitUntil.deepEquals : the most thorough (but also slow) deep equality assertion.
  • -
    lacksKey: <const Parent, const Key extends PropertyKey>(
        this: void,
        key: Key,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Parent, Record<Key, any>>> = ...

    Repeatedly calls a callback until its output is a parent value that does not have the +

    lacksKey: <const Parent, const Key extends PropertyKey>(
        this: void,
        key: Key,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Parent, Record<Key, any>>> = ...

    Repeatedly calls a callback until its output is a parent value that does not have the first, key input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the parent value.

    @@ -968,7 +968,7 @@
  • waitUntil.hasKey : the opposite assertion.
  • waitUntil.lacksKeys : the multi-key assertion.
  • -
    lacksKeys: <const Parent, const Keys extends PropertyKey>(
        this: void,
        keys: readonly Keys[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Parent, Partial<Record<Keys, any>>>> = ...

    Repeatedly calls a callback until its output is a parent value that does not have any of +

    lacksKeys: <const Parent, const Keys extends PropertyKey>(
        this: void,
        keys: readonly Keys[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Parent, Partial<Record<Keys, any>>>> = ...

    Repeatedly calls a callback until its output is a parent value that does not have any of the first, keys input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the parent value.

    @@ -981,7 +981,7 @@
  • waitUntil.hasKeys : the opposite assertion.
  • waitUntil.lacksKey : the single-key assertion.
  • -
    lacksValue: <Parent extends string | object>(
        this: void,
        value: unknown,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent does not include +

    lacksValue: <Parent extends string | object>(
        this: void,
        value: unknown,
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent does not include a child value through reference equality. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -994,7 +994,7 @@
  • waitUntil.hasValue : the opposite assertion.
  • waitUntil.lacksValues : the multi-value assertion.
  • -
    lacksValues: <Parent extends string | object>(
        this: void,
        value: unknown[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent includes none of +

    lacksValues: <Parent extends string | object>(
        this: void,
        value: unknown[],
        callback: () => MaybePromise<Parent>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Parent> = ...

    Repeatedly calls a callback until its output is an object/array parent includes none of the provided child values through reference equality. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -1007,7 +1007,7 @@
  • waitUntil.lacksValues : the opposite assertion.
  • waitUntil.hasValue : the single-value assertion.
  • -
    looseEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output loosely equals (using +

    looseEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output loosely equals (using ==) the first input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -1021,7 +1021,7 @@
  • waitUntil.notLooseEquals : the opposite assertion.
  • waitUntil.strictEquals : the strict equality assertion.
  • -
    matches: (
        this: void,
        expected: RegExp,
        callback: () => MaybePromise<string>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<string> = ...

    Repeatedly calls a callback until its output is a string that matches a RegExp (first +

    matches: (
        this: void,
        expected: RegExp,
        callback: () => MaybePromise<string>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<string> = ...

    Repeatedly calls a callback until its output is a string that matches a RegExp (first input, expected). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -1033,7 +1033,7 @@
    -
    mismatches: (
        this: void,
        expected: RegExp,
        callback: () => MaybePromise<string>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<string> = ...

    Repeatedly calls a callback until its output is a string that does not match a RegExp +

    mismatches: (
        this: void,
        expected: RegExp,
        callback: () => MaybePromise<string>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<string> = ...

    Repeatedly calls a callback until its output is a string that does not match a RegExp (first input, expected). Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -1045,7 +1045,7 @@
    -
    notDeepEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output does not deeply equal (using the +

    notDeepEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output does not deeply equal (using the deep-eql package) the first input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Note that this check may be expensive, depending on what values it is passed. Whenever @@ -1061,7 +1061,7 @@

  • waitUntil.entriesEqual : a less expensive (but less thorough) deep equality assertion.
  • waitUntil.jsonEquals : a less expensive (but less thorough) deep equality assertion.
  • -
    notEntriesEqual: <Actual extends AnyObject>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is not deeply equal to the first input by +

    notEntriesEqual: <Actual extends AnyObject>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is not deeply equal to the first input by checking only their top-level values for strict (non-deep, reference, using ===) equality. Once the callback output passes, it is returned. If the attempts time out, an @@ -1077,7 +1077,7 @@

  • waitUntil.notJsonEquals : another not deep equality assertion.
  • waitUntil.notDeepEquals : the most thorough (but also slow) not deep equality assertion.
  • -
    notInstanceOf: <const Actual, const Instance>(
        this: void,
        constructor: Constructor<Instance>,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Instance>> = ...

    Repeatedly calls a callback until its output is not an instance of the given class +

    notInstanceOf: <const Actual, const Instance>(
        this: void,
        constructor: Constructor<Instance>,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Exclude<Actual, Instance>> = ...

    Repeatedly calls a callback until its output is not an instance of the given class constructor. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Type guards the value.

    @@ -1089,7 +1089,7 @@
    -
    notJsonEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is not deeply equal to the first input +

    notJsonEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output is not deeply equal to the first input when stringified into JSON. This may not make any sense if the values are not valid JSON. This internally sorts all given object keys so it is insensitive to object key order. Once the callback output passes, it is returned. If the attempts time out, an error is @@ -1105,7 +1105,7 @@

  • waitUntil.entriesEqual : another not deep equality assertion.
  • waitUntil.deepEquals : the most thorough (but also slow) not deep equality assertion.
  • -
    notLooseEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output does not loosely equal (using +

    notLooseEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output does not loosely equal (using ==) the first input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -1119,7 +1119,7 @@
  • waitUntil.looseEquals : the opposite assertion.
  • waitUntil.notStrictEquals : the strict equality assertion.
  • -
    notStrictEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output does not strictly equal (using +

    notStrictEquals: <Actual>(
        this: void,
        expected: unknown,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<Actual> = ...

    Repeatedly calls a callback until its output does not strictly equal (using ===) the first input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -1133,7 +1133,7 @@
  • waitUntil.strictEquals : the opposite assertion.
  • waitUntil.notLooseEquals : the loose equality assertion.
  • -
    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Awaited<ReturnType<NoInfer<FunctionToCall>>>>;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Awaited<ReturnType<NoInfer<FunctionToCall>>>>;
    } = waitUntilOutput

    Repeatedly calls a callback until its output deeply equals expectations. A custom +

    output: {
        <const FunctionToCall extends AnyFunction>(
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Awaited<ReturnType<NoInfer<FunctionToCall>>>>;
        <const FunctionToCall extends AnyFunction>(
            asserter: CustomOutputAsserter<NoInfer<FunctionToCall>>,
            functionToCall: FunctionToCall,
            inputs: Parameters<NoInfer<FunctionToCall>>,
            expectedOutput: Awaited<ReturnType<NoInfer<FunctionToCall>>>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Awaited<ReturnType<NoInfer<FunctionToCall>>>>;
    } = waitUntilOutput

    Repeatedly calls a callback until its output deeply equals expectations. A custom asserter can optionally be provided as the first argument to change the expectation checking from the default "deeply equals" to whatever you want.

    Performs no type guarding.

    @@ -1141,7 +1141,7 @@

    AssertionError If the assertion fails.

    -
    startsWith: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array starts with the first input +

    startsWith: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array starts with the first input child value. This uses reference equality when the parent is an array. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    Performs no type guarding.

    @@ -1154,7 +1154,7 @@
  • waitUntil.startsWithout : the opposite assertion.
  • waitUntil.endsWith : assertion on the other end.
  • -
    startsWithout: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array does not start with the +

    startsWithout: {
        <const ArrayElement>(
            child: ArrayElement,
            callback: () => MaybePromise<readonly ArrayElement[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<ReadonlyArray<ArrayElement>>;
        (
            child: string,
            callback: () => MaybePromise<string>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string>;
        (
            child: string,
            callback: () => MaybePromise<string | readonly string[]>,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<string | ReadonlyArray<string>>;
    } = ...

    Repeatedly calls a callback until its output string or array does not start with the first input child value. This uses reference equality when the parent is an array. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -1168,7 +1168,7 @@
  • waitUntil.startsWith : the opposite assertion.
  • waitUntil.endsWithout : assertion on the other end.
  • -
    strictEquals: <Actual, Expected>(
        this: void,
        expected: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected>> = ...

    Repeatedly calls a callback until its output strictly equals (using +

    strictEquals: <Actual, Expected>(
        this: void,
        expected: Expected,
        callback: () => MaybePromise<Actual>,
        options?: PartialWithUndefined<
            {
                interval: Partial<Record<DurationUnit, undefined | number>>;
                timeout: Partial<Record<DurationUnit, undefined | number>>;
            },
        >,
        failureMessage?: string,
    ) => Promise<NarrowToExpected<Actual, Expected>> = ...

    Repeatedly calls a callback until its output strictly equals (using ===) the first input. Once the callback output passes, it is returned. If the attempts time out, an error is thrown.

    @@ -1182,7 +1182,7 @@
  • waitUntil.notStrictEquals : the opposite assertion.
  • waitUntil.looseEquals : the loose equality assertion.
  • -
    throws: {
        (
            this: void,
            callback: () => any,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Error>;
        (
            this: void,
            matchOptions: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            callback: () => any,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Error>;
    } = throwsWaitUntil

    Repeatedly calls a callback until it throws an error, comparing the error with the given +

    throws: {
        (
            this: void,
            callback: () => any,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Error>;
        (
            this: void,
            matchOptions: PartialWithNullable<
                {
                    matchConstructor: ErrorConstructor
                    | new (...args: any[]) => Error;
                    matchMessage: string | RegExp;
                },
            >,
            callback: () => any,
            options?: PartialWithUndefined<
                {
                    interval: Partial<Record<DurationUnit, undefined | number>>;
                    timeout: Partial<Record<DurationUnit, undefined | number>>;
                },
            >,
            failureMessage?: string,
        ): Promise<Error>;
    } = throwsWaitUntil

    Repeatedly calls a callback until it throws an error, comparing the error with the given ErrorMatchOptions, if provided (as the first input). Once the callback throws an Error, that Error is returned. If the attempts time out, an error is thrown.

    This assertion will automatically type itself as async vs async based on the input. (A @@ -1195,4 +1195,4 @@

    The Error once it passes.

    AssertionError On timeout.

    -
    +
    diff --git a/functions/waitValue.html b/functions/waitValue.html index b8836eeb..0c328bfd 100644 --- a/functions/waitValue.html +++ b/functions/waitValue.html @@ -1,6 +1,6 @@ -waitValue | augment-vir - v31.4.0

    Function waitValue

    • An async pause for the given duration that then returns the given value.

      +waitValue | augment-vir - v31.5.0

      Function waitValue

      +
    diff --git a/functions/wrapInTry.html b/functions/wrapInTry.html index 6ae201f4..df9bec2c 100644 --- a/functions/wrapInTry.html +++ b/functions/wrapInTry.html @@ -1,4 +1,4 @@ -wrapInTry | augment-vir - v31.4.0

    Function wrapInTry

    Calls the callback and returns its output. If the callback throws an error, it is handled in the +wrapInTry | augment-vir - v31.5.0

    Function wrapInTry

    Calls the callback and returns its output. If the callback throws an error, it is handled in the following ways:

    • If a handleError function is provided in options, it is passed the thrown error. The output @@ -10,4 +10,4 @@
    +
    diff --git a/functions/wrapNumber.html b/functions/wrapNumber.html index 90ddcfa1..3e808241 100644 --- a/functions/wrapNumber.html +++ b/functions/wrapNumber.html @@ -1,7 +1,7 @@ -wrapNumber | augment-vir - v31.4.0

    Function wrapNumber

    • If the given value is outside the given min/max bounds, instead of clamping the number (as the +wrapNumber | augment-vir - v31.5.0

      Function wrapNumber

      • If the given value is outside the given min/max bounds, instead of clamping the number (as the clamp function does), this function wraps the value around to the next bound (inclusive).

        Parameters

        • value: number
        • minMax: Readonly<MinMax>

        Returns number

        import {wrapNumber} from '@augment-vir/common';

        wrapNumber({min: 0, max: 100, value: 101}); // 0
        wrapNumber({min: 0, max: 100, value: -1}); // 100
      +
    diff --git a/functions/wrapPromiseInTimeout.html b/functions/wrapPromiseInTimeout.html index 004e60ca..35a0c052 100644 --- a/functions/wrapPromiseInTimeout.html +++ b/functions/wrapPromiseInTimeout.html @@ -1,4 +1,4 @@ -wrapPromiseInTimeout | augment-vir - v31.4.0

    Function wrapPromiseInTimeout

    • Wraps an already-created Promise in a timeout, causing a rejection if the original Promise isn't +wrapPromiseInTimeout | augment-vir - v31.5.0

      Function wrapPromiseInTimeout

      • Wraps an already-created Promise in a timeout, causing a rejection if the original Promise isn't resolved by then.

        Type Parameters

        • T

        Parameters

        • duration: Readonly<Partial<Record<DurationUnit, undefined | number>>>
        • originalPromise: MaybePromise<T>
        • OptionalfailureMessage: string

        Returns Promise<T>

      +
    diff --git a/functions/wrapString.html b/functions/wrapString.html index 4e91f37a..27cc8821 100644 --- a/functions/wrapString.html +++ b/functions/wrapString.html @@ -1,6 +1,6 @@ -wrapString | augment-vir - v31.4.0

    Function wrapString

    • Wraps a string in another string.

      +wrapString | augment-vir - v31.5.0

      Function wrapString

      • Wraps a string in another string.

        Parameters

        • __namedParameters: { value: string; wrapper: string }

        Returns string

        import {wrapString} from '@augment-vir/common';

        wrapString({value: 'some words', wrapper: '"'}); // outputs `'"some words"'`
      +
    diff --git a/functions/writeDirContents.html b/functions/writeDirContents.html index d12aecac..8dd8703a 100644 --- a/functions/writeDirContents.html +++ b/functions/writeDirContents.html @@ -1,3 +1,3 @@ -writeDirContents | augment-vir - v31.4.0

    Function writeDirContents

    diff --git a/functions/writeFileAndDir.html b/functions/writeFileAndDir.html index de8bdd22..fba1f99e 100644 --- a/functions/writeFileAndDir.html +++ b/functions/writeFileAndDir.html @@ -1,4 +1,4 @@ -writeFileAndDir | augment-vir - v31.4.0

    Function writeFileAndDir

    • Writes to the given file path and always ensures that the path's parent directories are all +writeFileAndDir | augment-vir - v31.5.0

      Function writeFileAndDir

      • Writes to the given file path and always ensures that the path's parent directories are all created.

        Parameters

        • path: string
        • contents: string | ArrayBufferView<ArrayBufferLike>

        Returns Promise<void>

      +
    diff --git a/functions/writeJsonFile.html b/functions/writeJsonFile.html index 50df26d8..8b4e3d56 100644 --- a/functions/writeJsonFile.html +++ b/functions/writeJsonFile.html @@ -1,7 +1,7 @@ -writeJsonFile | augment-vir - v31.4.0

    Function writeJsonFile

    diff --git a/index.html b/index.html index 185f5395..e72b941a 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ -augment-vir - v31.4.0

    augment-vir - v31.4.0

    augment-vir

    Documentation and code for all the latest @augment-vir packages.

    +augment-vir - v31.5.0

    augment-vir - v31.5.0

    augment-vir

    Documentation and code for all the latest @augment-vir packages.

    • @augment-vir/assert: A collection of assertions for test and production code alike. These main exports are the following:
        @@ -42,4 +42,4 @@
    -
    +
    diff --git a/modules.html b/modules.html index e1af8d38..30dc4736 100644 --- a/modules.html +++ b/modules.html @@ -1 +1 @@ -augment-vir - v31.4.0

    augment-vir - v31.4.0

    Array

    ArrayElement
    AtLeastTuple
    MappedTuple
    MaybeArray
    MaybeReadonlyArray
    MaybeTuple
    RemoveFirstTupleEntry
    RemoveLastTupleEntry
    Tuple
    arrayToObject
    awaitedBlockingMap
    awaitedFilter
    awaitedForEach
    combineErrors
    createArray
    filterMap
    filterOutIndexes
    filterToEnumValues
    groupArrayBy
    removeDuplicates
    repeatArray
    shuffleArray
    trimArrayStrings
    typedMap

    Assert

    assert
    assertWrap
    check
    checkCustomDeepQuality
    checkWrap
    waitUntil

    Assert : Util

    AssertionError
    CanBeEmpty
    CustomOutputAsserter
    Empty
    ErrorMatchOptions
    Falsy
    FalsyValue
    IfEquals
    IfExtends
    Truthy
    WaitUntilOptions

    Copy

    copyThroughJson

    Enum

    EnumBaseType
    filterToEnumValues
    getEnumValues

    Env

    RuntimeEnv
    RuntimeEnvError
    currentRuntimeEnv
    determineRuntimeEnv
    isRuntimeEnv
    perEnv

    Error

    combineErrorMessages
    combineErrors
    ensureError
    ensureErrorAndPrependMessage
    extractErrorMessage

    Function

    DebounceStyle
    Debounce
    AnyFunction
    NoInputsFunction
    TypedFunction
    WrapInTryOptions
    callAsynchronously
    callWithRetries
    ifTruthy
    measureExecutionDuration
    wrapInTry

    HTTP

    HttpStatus
    HttpStatusCategory
    HttpStatusByCategory
    httpStatusByCategory

    JSON : Common

    JsonCompatibleArray
    JsonCompatibleObject
    JsonCompatiblePrimitive
    JsonCompatibleValue
    appendJson
    copyThroughJson
    jsonify

    JSON : Node

    WriteJsonOptions
    appendJsonFile
    readJsonFile
    writeJsonFile

    Log

    emptyLog
    log
    createArrayLogger
    createLogger

    Log : Util

    LogColorKey
    LogOutputType
    LogColorConfig
    Logger
    LoggerLogs
    LoggerOptions
    LogWriter
    LogWriterParams
    LogWriters
    ToLogStringParams
    defaultLogColorConfig
    defaultLoggerOptions
    defaultLogWriters
    logColors
    toLogString

    Number

    Coords
    Coords3d
    Digit
    Dimensions
    Dimensions3d
    MinMax
    defaultTruncationSuffixes
    addCommasToNumber
    clamp
    ensureMinMax
    requiresScientificNotation
    round
    toEnsuredNumber
    toMaybeNumber
    toNumber
    truncateNumber
    wrapNumber

    Object

    AnyObject
    AreEqualCallback
    CompleteRequire
    CompleteValues
    EnumMap
    ExcludeEmpty
    ExcludeKeysWithMatchingValues
    ExtractKeysWithMatchingValues
    KeyCount
    PartialWithNullable
    PartialWithUndefined
    RequiredAndNotNull
    RequiredKeysOf
    SetOptionalAndNullable
    SetRequiredAndNotNull
    UnknownObject
    ValueAtRequiredKey
    Values
    arrayToObject
    diffArrays
    diffBasic
    diffObjects
    diffValues
    filterObject
    getEntriesSortedByKey
    getObjectTypedEntries
    getObjectTypedKeys
    getObjectTypedValues
    getOrSet
    getOrSetFromMap
    groupArrayBy
    mapEnumToObject
    mapObject
    mapObjectValues
    mapObjectValuesSync
    omitObjectKeys
    pickObjectKeys
    stringify
    typedObjectFromEntries

    Object : Merge

    mergeDeep
    mergeDefinedProperties
    mergePropertyArrays

    Path : Common

    getEsmPath

    Path : Node

    systemRootPath
    findAncestor
    interpolationSafeWindowsPath
    joinFilesToDir
    readTsconfig
    replaceWithWindowsPathIfNeeded
    resolveImportPath
    toPosixPath

    Prisma : Common

    BasePrismaClient
    BasePrismaPayload
    PrismaAllBasicModels
    PrismaAllModelsCreate
    PrismaBasicModel
    PrismaFullModel
    PrismaKeyedModelCreate
    PrismaModelCreate
    PrismaModelName
    prismaModelCreateExclude
    prismaModelCreateOmitId

    Prisma : Common : Util

    ExpandPotentialArrayPrismaTypeMapPayload
    ExpandPrismaTypeMapPayload

    Prisma : Node

    PrismaAddModelData
    PrismaDataDumpOptions
    prisma

    Prisma : Node : Util

    PrismaMigrationNeededError
    PrismaResetNeededError
    PrismaSchemaError
    PrismaMigrationStatus

    Promise

    DeferredPromise
    PromiseQueue
    PromiseTimeoutError
    MaybePromise
    wait
    waitValue
    wrapPromiseInTimeout

    Promise : Util

    PromiseQueueUpdateEvent
    PromiseQueueItem
    PromiseQueueUpdate

    Random

    randomBoolean
    randomInteger
    randomString

    Random : Util

    allowedRandomStringLetters

    RegExp

    ansiRegExp
    endsWithPunctuationRegExp
    punctuationRegExp
    addRegExpFlags
    escapeStringForRegExp
    safeMatch
    setRegExpCaseSensitivity
    setRegExpFlags

    Selection

    GenericSelectionSet
    PickCollapsedSelection
    SelectFrom
    SelectionSet
    selectCollapsedFrom
    selectFrom

    String

    StringCase
    CasingOptions
    IsCaseOptions
    PunctuationLetter
    Uuid
    WithPercent
    WithPrefix
    WithPx
    WithSuffix
    ansiRegExp
    defaultCasingOptions
    endsWithPunctuationRegExp
    percentSuffix
    punctuationLetters
    punctuationRegExp
    pxSuffix
    addCommasToNumber
    addPercent
    addPrefix
    addPx
    addSuffix
    camelCaseToKebabCase
    capitalizeFirstLetter
    collapseWhiteSpace
    createUuidV4
    findSubstringIndexes
    hasCase
    isCase
    joinWithFinalConjunction
    kebabCaseToCamelCase
    maybeCapitalize
    removeAnsiEscapeCodes
    removeColor
    removeCommas
    removeDuplicateCharacters
    removeEndingPunctuation
    removePercent
    removePrefix
    removePx
    removeSuffix
    replaceStringAtIndex
    safeSplit
    splitIncludeSplit
    stringify
    wrapString

    Test

    testWeb
    assertSnapshot
    describe
    it
    itCases
    snapshotCases

    Test : Util

    SnapshotFileMissingError
    BaseTestCase
    ContextByEnv
    FunctionTestCase
    FunctionTestCaseMultipleInputs
    FunctionTestCaseSingleInput
    MochaNode
    MochaRoot
    MochaSuite
    MochaTest
    MochaTestContext
    NodeTestContext
    UniversalBareDescribe
    UniversalBareIt
    UniversalDescribe
    UniversalIt
    UniversalItCallback
    UniversalTestContext
    assertTestContext
    assertWrapTestContext
    determineTestContextEnv
    isTestContext

    Type

    NarrowToActual
    NarrowToExpected
    Overwrite
    PartialWithNullable
    PartialWithUndefined
    RequireNonVoid
    TsRecurse
    TsRecursionStart
    TsRecursionTracker
    TsTooMuchRecursion
    ensureType
    makeReadonly
    makeWritable

    UUID

    Uuid
    createUuidV4

    Web

    loadImage
    loadVideo
    waitForAnimationFrame

    Web : Elements

    QueryThroughShadowOptions
    appendPositionDebugDiv
    calculateTextDimensions
    checkIfEntirelyInScrollView
    checkIfInScrollView
    extractElementText
    extractEventTarget
    findMatchingAncestor
    findOverflowAncestor
    getCenterOfElement
    getDirectChildren
    getNestedChildren
    getParentElement
    isElementFocused
    isElementVisible
    queryThroughShadow
    toTagOrDefinition

    Node : Docker

    docker

    Node : Docker : Util

    DockerContainerStatus
    DockerVolumeMappingType
    CopyToDockerContainerParams
    DockerContainerInfo
    DockerContainerInfoState
    DockerEnvMap
    DockerPortMap
    DockerVolumeMap
    RunDockerContainerCommandParams
    RunDockerContainerParams
    exitedDockerContainerStatuses

    Node : File

    DirContents
    WriteJsonOptions
    appendJsonFile
    createSymlink
    downloadFile
    readAllDirContents
    readDirFilesByExtension
    readDirRecursive
    readFileIfExists
    readJsonFile
    resetDirContents
    writeDirContents
    writeFileAndDir
    writeJsonFile

    Node : Npm

    NpmWorkspace
    findNpmBinPath
    queryNpmWorkspace
    readPackageJson

    Node : OS

    OperatingSystem
    currentOperatingSystem
    isOperatingSystem

    Node : Terminal

    askQuestion
    askQuestionUntilConditionMet
    extractRelevantArgs
    runShellCommand
    streamShellCommand

    Node : Terminal : Util

    ShellDoneEvent
    ShellErrorEvent
    ShellStderrEvent
    ShellStdoutEvent
    ShellTarget
    AskQuestionOptions
    LogShellOutputOptions
    QuestionUntilConditionMetOptions
    RelevantArgsInput
    RunShellCommandOptions
    ShellOutput
    ExtensionToRunner
    logShellOutput
    runCliScript

    Package : @augment-vir/common

    DebounceStyle
    HttpStatus
    HttpStatusCategory
    LogColorKey
    LogOutputType
    RuntimeEnv
    StringCase
    Debounce
    DeferredPromise
    PromiseQueue
    PromiseQueueUpdateEvent
    PromiseTimeoutError
    RuntimeEnvError
    AnyFunction
    AnyObject
    AreEqualCallback
    ArrayElement
    AtLeastTuple
    BasePrismaClient
    BasePrismaPayload
    CasingOptions
    CompleteRequire
    CompleteValues
    Coords
    Coords3d
    Digit
    Dimensions
    Dimensions3d
    EnumBaseType
    EnumMap
    ExcludeEmpty
    ExcludeKeysWithMatchingValues
    ExpandPotentialArrayPrismaTypeMapPayload
    ExpandPrismaTypeMapPayload
    ExtractKeysWithMatchingValues
    GenericSelectionSet
    HttpStatusByCategory
    IsCaseOptions
    JsonCompatibleArray
    JsonCompatibleObject
    JsonCompatiblePrimitive
    JsonCompatibleValue
    KeyCount
    LogColorConfig
    Logger
    LoggerLogs
    LoggerOptions
    LogWriter
    LogWriterParams
    LogWriters
    MappedTuple
    MaybeArray
    MaybePromise
    MaybeReadonlyArray
    MaybeTuple
    MinMax
    NarrowToActual
    NarrowToExpected
    NoInputsFunction
    Overwrite
    PartialWithNullable
    PartialWithUndefined
    PickCollapsedSelection
    PrismaAllBasicModels
    PrismaAllModelsCreate
    PrismaBasicModel
    PrismaFullModel
    PrismaKeyedModelCreate
    PrismaModelCreate
    PrismaModelName
    PromiseQueueItem
    PromiseQueueUpdate
    PunctuationLetter
    RemoveFirstTupleEntry
    RemoveLastTupleEntry
    RequiredAndNotNull
    RequiredKeysOf
    RequireNonVoid
    SelectFrom
    SelectionSet
    SetOptionalAndNullable
    SetRequiredAndNotNull
    ToLogStringParams
    TsRecurse
    TsRecursionStart
    TsRecursionTracker
    TsTooMuchRecursion
    Tuple
    TypedFunction
    UnknownObject
    Uuid
    ValueAtRequiredKey
    Values
    WithPercent
    WithPrefix
    WithPx
    WithSuffix
    WrapInTryOptions
    allowedRandomStringLetters
    ansiRegExp
    currentRuntimeEnv
    defaultCasingOptions
    defaultLogColorConfig
    defaultLoggerOptions
    defaultLogWriters
    defaultTruncationSuffixes
    emptyLog
    endsWithPunctuationRegExp
    httpStatusByCategory
    log
    logColors
    percentSuffix
    prismaModelCreateExclude
    prismaModelCreateOmitId
    punctuationLetters
    punctuationRegExp
    pxSuffix
    addCommasToNumber
    addPercent
    addPrefix
    addPx
    addRegExpFlags
    addSuffix
    appendJson
    arrayToObject
    awaitedBlockingMap
    awaitedFilter
    awaitedForEach
    callAsynchronously
    callWithRetries
    camelCaseToKebabCase
    capitalizeFirstLetter
    clamp
    collapseWhiteSpace
    combineErrorMessages
    combineErrors
    copyThroughJson
    createArray
    createArrayLogger
    createLogger
    createUuidV4
    determineRuntimeEnv
    diffArrays
    diffBasic
    diffObjects
    diffValues
    ensureError
    ensureErrorAndPrependMessage
    ensureMinMax
    ensureType
    escapeStringForRegExp
    extractErrorMessage
    filterMap
    filterObject
    filterOutIndexes
    filterToEnumValues
    findSubstringIndexes
    getEntriesSortedByKey
    getEnumValues
    getEsmPath
    getObjectTypedEntries
    getObjectTypedKeys
    getObjectTypedValues
    getOrSet
    getOrSetFromMap
    hasCase
    ifTruthy
    isCase
    isRuntimeEnv
    joinWithFinalConjunction
    jsonify
    kebabCaseToCamelCase
    makeReadonly
    makeWritable
    mapEnumToObject
    mapObject
    mapObjectValues
    mapObjectValuesSync
    maybeCapitalize
    measureExecutionDuration
    mergeDeep
    mergeDefinedProperties
    mergePropertyArrays
    omitObjectKeys
    perEnv
    pickObjectKeys
    randomBoolean
    randomInteger
    randomString
    removeAnsiEscapeCodes
    removeColor
    removeCommas
    removeDuplicateCharacters
    removeDuplicates
    removeEndingPunctuation
    removePercent
    removePrefix
    removePx
    removeSuffix
    repeatArray
    replaceStringAtIndex
    requiresScientificNotation
    round
    safeMatch
    safeSplit
    selectCollapsedFrom
    selectFrom
    setRegExpCaseSensitivity
    setRegExpFlags
    shuffleArray
    splitIncludeSplit
    stringify
    toEnsuredNumber
    toLogString
    toMaybeNumber
    toNumber
    trimArrayStrings
    truncateNumber
    typedMap
    typedObjectFromEntries
    wait
    waitValue
    wrapInTry
    wrapNumber
    wrapPromiseInTimeout
    wrapString

    Package : @augment-vir/assert

    AssertionError
    CanBeEmpty
    CustomOutputAsserter
    Empty
    ErrorMatchOptions
    Falsy
    FalsyValue
    IfEquals
    IfExtends
    Truthy
    WaitUntilOptions
    assert
    assertWrap
    check
    checkWrap
    waitUntil

    Package : @augment-vir/test

    SnapshotFileMissingError
    BaseTestCase
    ContextByEnv
    FunctionTestCase
    FunctionTestCaseMultipleInputs
    FunctionTestCaseSingleInput
    MochaNode
    MochaRoot
    MochaSuite
    MochaTest
    MochaTestContext
    NodeTestContext
    UniversalBareDescribe
    UniversalBareIt
    UniversalDescribe
    UniversalIt
    UniversalItCallback
    UniversalTestContext
    testWeb
    assertSnapshot
    assertTestContext
    assertWrapTestContext
    describe
    determineTestContextEnv
    isTestContext
    it
    itCases
    snapshotCases

    Package : @augment-vir/web

    QueryThroughShadowOptions
    appendPositionDebugDiv
    calculateTextDimensions
    checkIfEntirelyInScrollView
    checkIfInScrollView
    extractElementText
    extractEventTarget
    findMatchingAncestor
    findOverflowAncestor
    getCenterOfElement
    getDirectChildren
    getNestedChildren
    getParentElement
    isElementFocused
    isElementVisible
    loadImage
    loadVideo
    queryThroughShadow
    toTagOrDefinition
    waitForAnimationFrame

    Package : @augment-vir/node

    DockerContainerStatus
    DockerVolumeMappingType
    OperatingSystem
    PrismaMigrationNeededError
    PrismaResetNeededError
    PrismaSchemaError
    ShellDoneEvent
    ShellErrorEvent
    ShellStderrEvent
    ShellStdoutEvent
    ShellTarget
    AskQuestionOptions
    CopyToDockerContainerParams
    DirContents
    DockerContainerInfo
    DockerContainerInfoState
    DockerEnvMap
    DockerPortMap
    DockerVolumeMap
    LogShellOutputOptions
    NpmWorkspace
    PrismaAddModelData
    PrismaDataDumpOptions
    PrismaMigrationStatus
    QuestionUntilConditionMetOptions
    RelevantArgsInput
    RunDockerContainerCommandParams
    RunDockerContainerParams
    RunShellCommandOptions
    ShellOutput
    WriteJsonOptions
    currentOperatingSystem
    docker
    exitedDockerContainerStatuses
    ExtensionToRunner
    prisma
    systemRootPath
    appendJsonFile
    askQuestion
    askQuestionUntilConditionMet
    createSymlink
    downloadFile
    extractRelevantArgs
    findAncestor
    findNpmBinPath
    interpolationSafeWindowsPath
    isOperatingSystem
    joinFilesToDir
    logShellOutput
    queryNpmWorkspace
    readAllDirContents
    readDirFilesByExtension
    readDirRecursive
    readFileIfExists
    readJsonFile
    readPackageJson
    readTsconfig
    replaceWithWindowsPathIfNeeded
    resetDirContents
    resolveImportPath
    runCliScript
    runShellCommand
    streamShellCommand
    toPosixPath
    writeDirContents
    writeFileAndDir
    writeJsonFile
    +augment-vir - v31.5.0

    augment-vir - v31.5.0

    Array

    ArrayElement
    AtLeastTuple
    MappedTuple
    MaybeArray
    MaybeReadonlyArray
    MaybeTuple
    RemoveFirstTupleEntry
    RemoveLastTupleEntry
    Tuple
    arrayToObject
    awaitedBlockingMap
    awaitedFilter
    awaitedForEach
    combineErrors
    createArray
    filterMap
    filterOutIndexes
    filterToEnumValues
    groupArrayBy
    removeDuplicates
    repeatArray
    shuffleArray
    trimArrayStrings
    typedMap

    Assert

    assert
    assertWrap
    check
    checkCustomDeepQuality
    checkWrap
    waitUntil

    Assert : Util

    AssertionError
    CanBeEmpty
    CustomOutputAsserter
    Empty
    ErrorMatchOptions
    Falsy
    FalsyValue
    IfEquals
    IfExtends
    Truthy
    WaitUntilOptions

    Copy

    copyThroughJson

    Enum

    EnumBaseType
    filterToEnumValues
    getEnumValues

    Env

    RuntimeEnv
    RuntimeEnvError
    currentRuntimeEnv
    determineRuntimeEnv
    isRuntimeEnv
    perEnv

    Error

    combineErrorMessages
    combineErrors
    ensureError
    ensureErrorAndPrependMessage
    extractErrorMessage

    Function

    DebounceStyle
    Debounce
    AnyFunction
    NoInputsFunction
    TypedFunction
    WrapInTryOptions
    callAsynchronously
    callWithRetries
    ifTruthy
    measureExecutionDuration
    wrapInTry

    HTTP

    HttpStatus
    HttpStatusCategory
    HttpStatusByCategory
    httpStatusByCategory

    JSON : Common

    JsonCompatibleArray
    JsonCompatibleObject
    JsonCompatiblePrimitive
    JsonCompatibleValue
    appendJson
    copyThroughJson
    jsonify

    JSON : Node

    WriteJsonOptions
    appendJsonFile
    readJsonFile
    writeJsonFile

    Log

    emptyLog
    log
    createArrayLogger
    createLogger

    Log : Util

    LogColorKey
    LogOutputType
    LogColorConfig
    Logger
    LoggerLogs
    LoggerOptions
    LogWriter
    LogWriterParams
    LogWriters
    ToLogStringParams
    defaultLogColorConfig
    defaultLoggerOptions
    defaultLogWriters
    logColors
    toLogString

    Number

    Coords
    Coords3d
    Digit
    Dimensions
    Dimensions3d
    MinMax
    defaultTruncationSuffixes
    addCommasToNumber
    clamp
    ensureMinMax
    requiresScientificNotation
    round
    toEnsuredNumber
    toMaybeNumber
    toNumber
    truncateNumber
    wrapNumber

    Object

    AnyObject
    AreEqualCallback
    CompleteRequire
    CompleteValues
    EnumMap
    ExcludeEmpty
    ExcludeKeysWithMatchingValues
    ExtractKeysWithMatchingValues
    KeyCount
    PartialWithNullable
    PartialWithUndefined
    RequiredAndNotNull
    RequiredKeysOf
    SetOptionalAndNullable
    SetRequiredAndNotNull
    UnknownObject
    ValueAtRequiredKey
    Values
    arrayToObject
    diffArrays
    diffBasic
    diffObjects
    diffValues
    filterObject
    getEntriesSortedByKey
    getObjectTypedEntries
    getObjectTypedKeys
    getObjectTypedValues
    getOrSet
    getOrSetFromMap
    groupArrayBy
    mapEnumToObject
    mapObject
    mapObjectValues
    mapObjectValuesSync
    omitObjectKeys
    pickObjectKeys
    stringify
    typedObjectFromEntries

    Object : Merge

    mergeDeep
    mergeDefinedProperties
    mergePropertyArrays

    Path : Common

    getEsmPath

    Path : Node

    systemRootPath
    findAncestor
    interpolationSafeWindowsPath
    joinFilesToDir
    readTsconfig
    replaceWithWindowsPathIfNeeded
    resolveImportPath
    toPosixPath

    Prisma : Common

    BasePrismaClient
    BasePrismaPayload
    PrismaAllBasicModels
    PrismaAllModelsCreate
    PrismaBasicModel
    PrismaFullModel
    PrismaKeyedModelCreate
    PrismaModelCreate
    PrismaModelName
    prismaModelCreateExclude
    prismaModelCreateOmitId

    Prisma : Common : Util

    ExpandPotentialArrayPrismaTypeMapPayload
    ExpandPrismaTypeMapPayload

    Prisma : Node

    PrismaAddModelData
    PrismaDataDumpOptions
    prisma

    Prisma : Node : Util

    PrismaMigrationNeededError
    PrismaResetNeededError
    PrismaSchemaError
    PrismaMigrationStatus

    Promise

    DeferredPromise
    PromiseQueue
    PromiseTimeoutError
    MaybePromise
    wait
    waitValue
    wrapPromiseInTimeout

    Promise : Util

    PromiseQueueUpdateEvent
    PromiseQueueItem
    PromiseQueueUpdate

    Random

    randomBoolean
    randomInteger
    randomString

    Random : Util

    allowedRandomStringLetters

    RegExp

    ansiRegExp
    endsWithPunctuationRegExp
    punctuationRegExp
    addRegExpFlags
    escapeStringForRegExp
    safeMatch
    setRegExpCaseSensitivity
    setRegExpFlags

    Selection

    GenericSelectionSet
    PickCollapsedSelection
    SelectFrom
    SelectionSet
    selectCollapsedFrom
    selectFrom

    String

    StringCase
    CasingOptions
    IsCaseOptions
    PunctuationLetter
    Uuid
    WithPercent
    WithPrefix
    WithPx
    WithSuffix
    ansiRegExp
    defaultCasingOptions
    endsWithPunctuationRegExp
    percentSuffix
    punctuationLetters
    punctuationRegExp
    pxSuffix
    addCommasToNumber
    addPercent
    addPrefix
    addPx
    addSuffix
    camelCaseToKebabCase
    capitalizeFirstLetter
    collapseWhiteSpace
    createUuidV4
    findSubstringIndexes
    hasCase
    isCase
    joinWithFinalConjunction
    kebabCaseToCamelCase
    maybeCapitalize
    removeAnsiEscapeCodes
    removeColor
    removeCommas
    removeDuplicateCharacters
    removeEndingPunctuation
    removePercent
    removePrefix
    removePx
    removeSuffix
    replaceStringAtIndex
    safeSplit
    splitIncludeSplit
    stringify
    wrapString

    Test

    testWeb
    assertSnapshot
    describe
    it
    itCases
    itCasesWithContext
    snapshotCases
    snapshotCasesWithContext

    Test : Util

    SnapshotFileMissingError
    BaseFunctionWithContext
    BaseTestCase
    ContextByEnv
    FunctionTestCase
    FunctionTestCaseMultipleInputs
    FunctionTestCaseSingleInput
    FunctionWithContextTestCase
    FunctionWithContextTestCaseMultipleInputs
    FunctionWithContextTestCaseSingleInput
    MochaNode
    MochaRoot
    MochaSuite
    MochaTest
    MochaTestContext
    NodeTestContext
    UniversalBareDescribe
    UniversalBareIt
    UniversalDescribe
    UniversalIt
    UniversalItCallback
    UniversalTestContext
    assertTestContext
    assertWrapTestContext
    determineTestContextEnv
    isTestContext

    Type

    NarrowToActual
    NarrowToExpected
    Overwrite
    PartialWithNullable
    PartialWithUndefined
    RequireNonVoid
    TsRecurse
    TsRecursionStart
    TsRecursionTracker
    TsTooMuchRecursion
    ensureType
    makeReadonly
    makeWritable

    UUID

    Uuid
    createUuidV4

    Web

    loadImage
    loadVideo
    waitForAnimationFrame

    Web : Elements

    QueryThroughShadowOptions
    appendPositionDebugDiv
    calculateTextDimensions
    checkIfEntirelyInScrollView
    checkIfInScrollView
    extractElementText
    extractEventTarget
    findMatchingAncestor
    findOverflowAncestor
    getCenterOfElement
    getDirectChildren
    getNestedChildren
    getParentElement
    isElementFocused
    isElementVisible
    queryThroughShadow
    toTagOrDefinition

    Node : Docker

    docker

    Node : Docker : Util

    DockerContainerStatus
    DockerVolumeMappingType
    CopyToDockerContainerParams
    DockerContainerInfo
    DockerContainerInfoState
    DockerEnvMap
    DockerPortMap
    DockerVolumeMap
    RunDockerContainerCommandParams
    RunDockerContainerParams
    exitedDockerContainerStatuses

    Node : File

    DirContents
    WriteJsonOptions
    appendJsonFile
    createSymlink
    downloadFile
    readAllDirContents
    readDirFilesByExtension
    readDirRecursive
    readFileIfExists
    readJsonFile
    resetDirContents
    writeDirContents
    writeFileAndDir
    writeJsonFile

    Node : Npm

    NpmWorkspace
    findNpmBinPath
    queryNpmWorkspace
    readPackageJson

    Node : OS

    OperatingSystem
    currentOperatingSystem
    isOperatingSystem

    Node : Terminal

    askQuestion
    askQuestionUntilConditionMet
    extractRelevantArgs
    runShellCommand
    streamShellCommand

    Node : Terminal : Util

    ShellDoneEvent
    ShellErrorEvent
    ShellStderrEvent
    ShellStdoutEvent
    ShellTarget
    AskQuestionOptions
    LogShellOutputOptions
    QuestionUntilConditionMetOptions
    RelevantArgsInput
    RunShellCommandOptions
    ShellOutput
    ExtensionToRunner
    logShellOutput
    runCliScript

    Package : @augment-vir/common

    DebounceStyle
    HttpStatus
    HttpStatusCategory
    LogColorKey
    LogOutputType
    RuntimeEnv
    StringCase
    Debounce
    DeferredPromise
    PromiseQueue
    PromiseQueueUpdateEvent
    PromiseTimeoutError
    RuntimeEnvError
    AnyFunction
    AnyObject
    AreEqualCallback
    ArrayElement
    AtLeastTuple
    BasePrismaClient
    BasePrismaPayload
    CasingOptions
    CompleteRequire
    CompleteValues
    Coords
    Coords3d
    Digit
    Dimensions
    Dimensions3d
    EnumBaseType
    EnumMap
    ExcludeEmpty
    ExcludeKeysWithMatchingValues
    ExpandPotentialArrayPrismaTypeMapPayload
    ExpandPrismaTypeMapPayload
    ExtractKeysWithMatchingValues
    GenericSelectionSet
    HttpStatusByCategory
    IsCaseOptions
    JsonCompatibleArray
    JsonCompatibleObject
    JsonCompatiblePrimitive
    JsonCompatibleValue
    KeyCount
    LogColorConfig
    Logger
    LoggerLogs
    LoggerOptions
    LogWriter
    LogWriterParams
    LogWriters
    MappedTuple
    MaybeArray
    MaybePromise
    MaybeReadonlyArray
    MaybeTuple
    MinMax
    NarrowToActual
    NarrowToExpected
    NoInputsFunction
    Overwrite
    PartialWithNullable
    PartialWithUndefined
    PickCollapsedSelection
    PrismaAllBasicModels
    PrismaAllModelsCreate
    PrismaBasicModel
    PrismaFullModel
    PrismaKeyedModelCreate
    PrismaModelCreate
    PrismaModelName
    PromiseQueueItem
    PromiseQueueUpdate
    PunctuationLetter
    RemoveFirstTupleEntry
    RemoveLastTupleEntry
    RequiredAndNotNull
    RequiredKeysOf
    RequireNonVoid
    SelectFrom
    SelectionSet
    SetOptionalAndNullable
    SetRequiredAndNotNull
    ToLogStringParams
    TsRecurse
    TsRecursionStart
    TsRecursionTracker
    TsTooMuchRecursion
    Tuple
    TypedFunction
    UnknownObject
    Uuid
    ValueAtRequiredKey
    Values
    WithPercent
    WithPrefix
    WithPx
    WithSuffix
    WrapInTryOptions
    allowedRandomStringLetters
    ansiRegExp
    currentRuntimeEnv
    defaultCasingOptions
    defaultLogColorConfig
    defaultLoggerOptions
    defaultLogWriters
    defaultTruncationSuffixes
    emptyLog
    endsWithPunctuationRegExp
    httpStatusByCategory
    log
    logColors
    percentSuffix
    prismaModelCreateExclude
    prismaModelCreateOmitId
    punctuationLetters
    punctuationRegExp
    pxSuffix
    addCommasToNumber
    addPercent
    addPrefix
    addPx
    addRegExpFlags
    addSuffix
    appendJson
    arrayToObject
    awaitedBlockingMap
    awaitedFilter
    awaitedForEach
    callAsynchronously
    callWithRetries
    camelCaseToKebabCase
    capitalizeFirstLetter
    clamp
    collapseWhiteSpace
    combineErrorMessages
    combineErrors
    copyThroughJson
    createArray
    createArrayLogger
    createLogger
    createUuidV4
    determineRuntimeEnv
    diffArrays
    diffBasic
    diffObjects
    diffValues
    ensureError
    ensureErrorAndPrependMessage
    ensureMinMax
    ensureType
    escapeStringForRegExp
    extractErrorMessage
    filterMap
    filterObject
    filterOutIndexes
    filterToEnumValues
    findSubstringIndexes
    getEntriesSortedByKey
    getEnumValues
    getEsmPath
    getObjectTypedEntries
    getObjectTypedKeys
    getObjectTypedValues
    getOrSet
    getOrSetFromMap
    hasCase
    ifTruthy
    isCase
    isRuntimeEnv
    joinWithFinalConjunction
    jsonify
    kebabCaseToCamelCase
    makeReadonly
    makeWritable
    mapEnumToObject
    mapObject
    mapObjectValues
    mapObjectValuesSync
    maybeCapitalize
    measureExecutionDuration
    mergeDeep
    mergeDefinedProperties
    mergePropertyArrays
    omitObjectKeys
    perEnv
    pickObjectKeys
    randomBoolean
    randomInteger
    randomString
    removeAnsiEscapeCodes
    removeColor
    removeCommas
    removeDuplicateCharacters
    removeDuplicates
    removeEndingPunctuation
    removePercent
    removePrefix
    removePx
    removeSuffix
    repeatArray
    replaceStringAtIndex
    requiresScientificNotation
    round
    safeMatch
    safeSplit
    selectCollapsedFrom
    selectFrom
    setRegExpCaseSensitivity
    setRegExpFlags
    shuffleArray
    splitIncludeSplit
    stringify
    toEnsuredNumber
    toLogString
    toMaybeNumber
    toNumber
    trimArrayStrings
    truncateNumber
    typedMap
    typedObjectFromEntries
    wait
    waitValue
    wrapInTry
    wrapNumber
    wrapPromiseInTimeout
    wrapString

    Package : @augment-vir/assert

    AssertionError
    CanBeEmpty
    CustomOutputAsserter
    Empty
    ErrorMatchOptions
    Falsy
    FalsyValue
    IfEquals
    IfExtends
    Truthy
    WaitUntilOptions
    assert
    assertWrap
    check
    checkWrap
    waitUntil

    Package : @augment-vir/test

    SnapshotFileMissingError
    BaseFunctionWithContext
    BaseTestCase
    ContextByEnv
    FunctionTestCase
    FunctionTestCaseMultipleInputs
    FunctionTestCaseSingleInput
    FunctionWithContextTestCase
    FunctionWithContextTestCaseMultipleInputs
    FunctionWithContextTestCaseSingleInput
    MochaNode
    MochaRoot
    MochaSuite
    MochaTest
    MochaTestContext
    NodeTestContext
    UniversalBareDescribe
    UniversalBareIt
    UniversalDescribe
    UniversalIt
    UniversalItCallback
    UniversalTestContext
    testWeb
    assertSnapshot
    assertTestContext
    assertWrapTestContext
    describe
    determineTestContextEnv
    isTestContext
    it
    itCases
    itCasesWithContext
    snapshotCases
    snapshotCasesWithContext

    Package : @augment-vir/web

    QueryThroughShadowOptions
    appendPositionDebugDiv
    calculateTextDimensions
    checkIfEntirelyInScrollView
    checkIfInScrollView
    extractElementText
    extractEventTarget
    findMatchingAncestor
    findOverflowAncestor
    getCenterOfElement
    getDirectChildren
    getNestedChildren
    getParentElement
    isElementFocused
    isElementVisible
    loadImage
    loadVideo
    queryThroughShadow
    toTagOrDefinition
    waitForAnimationFrame

    Package : @augment-vir/node

    DockerContainerStatus
    DockerVolumeMappingType
    OperatingSystem
    PrismaMigrationNeededError
    PrismaResetNeededError
    PrismaSchemaError
    ShellDoneEvent
    ShellErrorEvent
    ShellStderrEvent
    ShellStdoutEvent
    ShellTarget
    AskQuestionOptions
    CopyToDockerContainerParams
    DirContents
    DockerContainerInfo
    DockerContainerInfoState
    DockerEnvMap
    DockerPortMap
    DockerVolumeMap
    LogShellOutputOptions
    NpmWorkspace
    PrismaAddModelData
    PrismaDataDumpOptions
    PrismaMigrationStatus
    QuestionUntilConditionMetOptions
    RelevantArgsInput
    RunDockerContainerCommandParams
    RunDockerContainerParams
    RunShellCommandOptions
    ShellOutput
    WriteJsonOptions
    currentOperatingSystem
    docker
    exitedDockerContainerStatuses
    ExtensionToRunner
    prisma
    systemRootPath
    appendJsonFile
    askQuestion
    askQuestionUntilConditionMet
    createSymlink
    downloadFile
    extractRelevantArgs
    findAncestor
    findNpmBinPath
    interpolationSafeWindowsPath
    isOperatingSystem
    joinFilesToDir
    logShellOutput
    queryNpmWorkspace
    readAllDirContents
    readDirFilesByExtension
    readDirRecursive
    readFileIfExists
    readJsonFile
    readPackageJson
    readTsconfig
    replaceWithWindowsPathIfNeeded
    resetDirContents
    resolveImportPath
    runCliScript
    runShellCommand
    streamShellCommand
    toPosixPath
    writeDirContents
    writeFileAndDir
    writeJsonFile
    diff --git a/types/AnyFunction.html b/types/AnyFunction.html index 74002d85..e2c95225 100644 --- a/types/AnyFunction.html +++ b/types/AnyFunction.html @@ -1,3 +1,3 @@ -AnyFunction | augment-vir - v31.4.0

    Type Alias AnyFunction<Return>

    AnyFunction: (...args: any[]) => Return

    A Function with any inputs and a return type of Return (which defaults to any).

    +AnyFunction | augment-vir - v31.5.0

    Type Alias AnyFunction<Return>

    AnyFunction: (...args: any[]) => Return

    A Function with any inputs and a return type of Return (which defaults to any).

    Type Parameters

    • Return = any

    Type declaration

      • (...args: any[]): Return
      • Parameters

        • ...args: any[]

        Returns Return

    +
    diff --git a/types/AnyObject.html b/types/AnyObject.html index 55d31b08..10ad56ef 100644 --- a/types/AnyObject.html +++ b/types/AnyObject.html @@ -1,3 +1,3 @@ -AnyObject | augment-vir - v31.4.0

    Type Alias AnyObject

    AnyObject: Record<PropertyKey, any>

    Any object with any allowed key and any values.

    +AnyObject | augment-vir - v31.5.0

    Type Alias AnyObject

    AnyObject: Record<PropertyKey, any>

    Any object with any allowed key and any values.

    +
    diff --git a/types/AreEqualCallback.html b/types/AreEqualCallback.html index abe70d4c..d2f67f09 100644 --- a/types/AreEqualCallback.html +++ b/types/AreEqualCallback.html @@ -1,3 +1,3 @@ -AreEqualCallback | augment-vir - v31.4.0

    Type Alias AreEqualCallback<T0, T1>

    AreEqualCallback: (value0: T0, value1: T1) => boolean

    Callback for checking equality between two values that can be of different types.

    +AreEqualCallback | augment-vir - v31.5.0

    Type Alias AreEqualCallback<T0, T1>

    AreEqualCallback: (value0: T0, value1: T1) => boolean

    Callback for checking equality between two values that can be of different types.

    Type Parameters

    • T0
    • T1

    Type declaration

      • (value0: T0, value1: T1): boolean
      • Parameters

        • value0: T0
        • value1: T1

        Returns boolean

    +
    diff --git a/types/ArrayElement.html b/types/ArrayElement.html index 81284918..2a269494 100644 --- a/types/ArrayElement.html +++ b/types/ArrayElement.html @@ -1,3 +1,3 @@ -ArrayElement | augment-vir - v31.4.0

    Type Alias ArrayElement<ArrayType>

    ArrayElement: ArrayType[number]

    Extract the type of the elements in an array.

    +ArrayElement | augment-vir - v31.5.0

    Type Alias ArrayElement<ArrayType>

    ArrayElement: ArrayType[number]

    Extract the type of the elements in an array.

    Type Parameters

    • ArrayType extends ReadonlyArray<any>
    +
    diff --git a/types/AskQuestionOptions.html b/types/AskQuestionOptions.html index 458a968f..023b3074 100644 --- a/types/AskQuestionOptions.html +++ b/types/AskQuestionOptions.html @@ -1,3 +1,3 @@ -AskQuestionOptions | augment-vir - v31.4.0

    Type Alias AskQuestionOptions

    AskQuestionOptions: { hideUserInput: boolean; timeout: AnyDuration }

    Options for askQuestion.

    +AskQuestionOptions | augment-vir - v31.5.0

    Type Alias AskQuestionOptions

    AskQuestionOptions: { hideUserInput: boolean; timeout: AnyDuration }

    Options for askQuestion.

    Type declaration

    • hideUserInput: boolean
    • timeout: AnyDuration
    +
    diff --git a/types/AtLeastTuple.html b/types/AtLeastTuple.html index 978f153e..60607e77 100644 --- a/types/AtLeastTuple.html +++ b/types/AtLeastTuple.html @@ -1,3 +1,3 @@ -AtLeastTuple | augment-vir - v31.4.0

    Type Alias AtLeastTuple<Element, Length>

    AtLeastTuple: readonly [...Tuple<Element, Length>, ...Element[]]

    Creates a tuple that is at least of length Length.

    +AtLeastTuple | augment-vir - v31.5.0

    Type Alias AtLeastTuple<Element, Length>

    AtLeastTuple: readonly [...Tuple<Element, Length>, ...Element[]]

    Creates a tuple that is at least of length Length.

    Type Parameters

    • Element
    • Length extends number
    +
    diff --git a/types/BaseFunctionWithContext.html b/types/BaseFunctionWithContext.html new file mode 100644 index 00000000..ac4f6054 --- /dev/null +++ b/types/BaseFunctionWithContext.html @@ -0,0 +1,3 @@ +BaseFunctionWithContext | augment-vir - v31.5.0

    Type Alias BaseFunctionWithContext

    BaseFunctionWithContext: (
        testContext: UniversalTestContext,
        ...args: any[],
    ) => any

    Base function under test type for all test cases that pass in the test context.

    +

    Type declaration

    diff --git a/types/BasePrismaClient.html b/types/BasePrismaClient.html index ca65c143..3d2939c9 100644 --- a/types/BasePrismaClient.html +++ b/types/BasePrismaClient.html @@ -1,4 +1,4 @@ -BasePrismaClient | augment-vir - v31.4.0

    Type Alias BasePrismaClient

    BasePrismaClient: {
        $connect: AnyFunction;
        $disconnect: AnyFunction;
        $executeRaw: AnyFunction;
        $executeRawUnsafe: AnyFunction;
        $extends: AnyFunction;
        $on: AnyFunction;
        $queryRaw: AnyFunction;
        $queryRawUnsafe: AnyFunction;
        $transaction: AnyFunction;
    } & { [ModelName in string]: any }

    Base Prisma client type that all PrismaClient instances should be able to match, with enough +BasePrismaClient | augment-vir - v31.5.0

    Type Alias BasePrismaClient

    BasePrismaClient: {
        $connect: AnyFunction;
        $disconnect: AnyFunction;
        $executeRaw: AnyFunction;
        $executeRawUnsafe: AnyFunction;
        $extends: AnyFunction;
        $on: AnyFunction;
        $queryRaw: AnyFunction;
        $queryRawUnsafe: AnyFunction;
        $transaction: AnyFunction;
    } & { [ModelName in string]: any }

    Base Prisma client type that all PrismaClient instances should be able to match, with enough data that it'll omit random accidental objects.

    +
    diff --git a/types/BasePrismaPayload.html b/types/BasePrismaPayload.html index 37bfdb55..07f521f3 100644 --- a/types/BasePrismaPayload.html +++ b/types/BasePrismaPayload.html @@ -1,6 +1,6 @@ -BasePrismaPayload | augment-vir - v31.4.0

    Type Alias BasePrismaPayload

    BasePrismaPayload: {
        name: string;
        objects: Record<string, BasePrismaPayload | BasePrismaPayload[] | null>;
        scalars: AnyObject;
    }

    A base type for Prisma model payloads because Prisma doesn't give us one. This currently only +BasePrismaPayload | augment-vir - v31.5.0

    Type Alias BasePrismaPayload

    BasePrismaPayload: {
        name: string;
        objects: Record<string, BasePrismaPayload | BasePrismaPayload[] | null>;
        scalars: AnyObject;
    }

    A base type for Prisma model payloads because Prisma doesn't give us one. This currently only includes the properties that are used within this package.

    Note: this omits the composites property because I don't have any examples of what those actually are.

    Type declaration

    +
    diff --git a/types/BaseTestCase.html b/types/BaseTestCase.html index 954862d1..c43f6a40 100644 --- a/types/BaseTestCase.html +++ b/types/BaseTestCase.html @@ -1,3 +1,3 @@ -BaseTestCase | augment-vir - v31.4.0

    Type Alias BaseTestCase<OutputGeneric>

    BaseTestCase: { it: string; only?: boolean; skip?: boolean } & (
        { expect: OutputGeneric }
        | { throws: ErrorMatchOptions | undefined }
    )

    Base test case for itCases.

    +BaseTestCase | augment-vir - v31.5.0

    Type Alias BaseTestCase<OutputGeneric>

    BaseTestCase: { it: string; only?: boolean; skip?: boolean } & RequireExactlyOne<
        { expect: OutputGeneric; throws: ErrorMatchOptions
        | undefined },
    >

    Base test case for itCases.

    Type Parameters

    • OutputGeneric
    +
    diff --git a/types/CanBeEmpty.html b/types/CanBeEmpty.html index 0b3eff45..54c90c9a 100644 --- a/types/CanBeEmpty.html +++ b/types/CanBeEmpty.html @@ -1,4 +1,4 @@ -CanBeEmpty | augment-vir - v31.4.0

    Type Alias CanBeEmpty

    CanBeEmpty: string | Map<any, any> | Set<any> | AnyObject | any[]

    All types that can be checked for emptiness. The empty variants of these types are represented in +CanBeEmpty | augment-vir - v31.5.0

    Type Alias CanBeEmpty

    CanBeEmpty: string | Map<any, any> | Set<any> | AnyObject | any[]

    All types that can be checked for emptiness. The empty variants of these types are represented in Empty.

    +
    diff --git a/types/CasingOptions.html b/types/CasingOptions.html index 6dc527d0..7217047b 100644 --- a/types/CasingOptions.html +++ b/types/CasingOptions.html @@ -1,7 +1,7 @@ -CasingOptions | augment-vir - v31.4.0

    Type Alias CasingOptions

    CasingOptions: { capitalizeFirstLetter: boolean }

    Options for casing functions in @augment-vir/common.

    +CasingOptions | augment-vir - v31.5.0

    Type Alias CasingOptions

    CasingOptions: { capitalizeFirstLetter: boolean }

    Options for casing functions in @augment-vir/common.

    Type declaration

    • capitalizeFirstLetter: boolean

      Capitalize the first letter of the string.

      false
       
    +
    diff --git a/types/CompleteRequire.html b/types/CompleteRequire.html index 9f11e508..f67b74e3 100644 --- a/types/CompleteRequire.html +++ b/types/CompleteRequire.html @@ -1,5 +1,5 @@ -CompleteRequire | augment-vir - v31.4.0

    Type Alias CompleteRequire<Parent>

    CompleteRequire: {
        [Prop in keyof Parent]-?: Parent extends Partial<Record<Prop, infer V>>
            ? V
            : never
    }

    Requires every part of an object, even the indexed keys. This is needed because +CompleteRequire | augment-vir - v31.5.0

    Type Alias CompleteRequire<Parent>

    CompleteRequire: {
        [Prop in keyof Parent]-?: Parent extends Partial<Record<Prop, infer V>>
            ? V
            : never
    }

    Requires every part of an object, even the indexed keys. This is needed because Required<Partial<T>> doesn't fully remove | undefined from indexed keys when the noUncheckedIndexedAccess TSConfig compiler option is enabled.

    Type Parameters

    • Parent
    +
    diff --git a/types/CompleteValues.html b/types/CompleteValues.html index c86700a4..97d233bf 100644 --- a/types/CompleteValues.html +++ b/types/CompleteValues.html @@ -1,3 +1,3 @@ -CompleteValues | augment-vir - v31.4.0

    Type Alias CompleteValues<T>

    CompleteValues: CompleteRequire<T>[keyof T]

    Gets the value types of an object with all parts of that object required.

    +CompleteValues | augment-vir - v31.5.0

    Type Alias CompleteValues<T>

    CompleteValues: CompleteRequire<T>[keyof T]

    Gets the value types of an object with all parts of that object required.

    Type Parameters

    • T
    +
    diff --git a/types/ContextByEnv.html b/types/ContextByEnv.html index f2a703a4..617b25e1 100644 --- a/types/ContextByEnv.html +++ b/types/ContextByEnv.html @@ -1,5 +1,5 @@ -ContextByEnv | augment-vir - v31.4.0

    Type Alias ContextByEnv

    ContextByEnv: { node: NodeTestContext; web: MochaTestContext }

    Test context by runtime env when Node.js's test runner is +ContextByEnv | augment-vir - v31.5.0

    Type Alias ContextByEnv

    ContextByEnv: { node: NodeTestContext; web: MochaTestContext }

    Test context by runtime env when Node.js's test runner is used for Node tests and web-test-runner is used for web tests.

    Type declaration

    +
    diff --git a/types/Coords.html b/types/Coords.html index 7a65f70f..e75543d4 100644 --- a/types/Coords.html +++ b/types/Coords.html @@ -1,3 +1,3 @@ -Coords | augment-vir - v31.4.0

    Type Alias Coords

    Coords: { x: number; y: number }

    A simple type for storing 2D coordinates.

    +Coords | augment-vir - v31.5.0

    Type Alias Coords

    Coords: { x: number; y: number }

    A simple type for storing 2D coordinates.

    Type declaration

    • x: number
    • y: number
    +
    diff --git a/types/Coords3d.html b/types/Coords3d.html index 3081d3bc..9ffd8b38 100644 --- a/types/Coords3d.html +++ b/types/Coords3d.html @@ -1,3 +1,3 @@ -Coords3d | augment-vir - v31.4.0

    Type Alias Coords3d

    Coords3d: { x: number; y: number; z: number }

    A simple type for storing 3D coordinates.

    +Coords3d | augment-vir - v31.5.0

    Type Alias Coords3d

    Coords3d: { x: number; y: number; z: number }

    A simple type for storing 3D coordinates.

    Type declaration

    • x: number
    • y: number
    • z: number
    +
    diff --git a/types/CopyToDockerContainerParams.html b/types/CopyToDockerContainerParams.html index 1e501c34..92cb681a 100644 --- a/types/CopyToDockerContainerParams.html +++ b/types/CopyToDockerContainerParams.html @@ -1,3 +1,3 @@ -CopyToDockerContainerParams | augment-vir - v31.4.0

    Type Alias CopyToDockerContainerParams

    CopyToDockerContainerParams: {
        containerAbsolutePath: string;
        containerNameOrId: string;
        dockerFlags?: ReadonlyArray<string>;
        hostPath: string;
    }

    Parameters for docker.container.copyTo.

    +CopyToDockerContainerParams | augment-vir - v31.5.0

    Type Alias CopyToDockerContainerParams

    CopyToDockerContainerParams: {
        containerAbsolutePath: string;
        containerNameOrId: string;
        dockerFlags?: ReadonlyArray<string>;
        hostPath: string;
    }

    Parameters for docker.container.copyTo.

    Type declaration

    • containerAbsolutePath: string
    • containerNameOrId: string
    • OptionaldockerFlags?: ReadonlyArray<string>
    • hostPath: string
    +
    diff --git a/types/CustomOutputAsserter.html b/types/CustomOutputAsserter.html index 185a38ae..ca47652a 100644 --- a/types/CustomOutputAsserter.html +++ b/types/CustomOutputAsserter.html @@ -1,8 +1,8 @@ -CustomOutputAsserter | augment-vir - v31.4.0

    Type Alias CustomOutputAsserter<FunctionToCall>

    CustomOutputAsserter: (
        actual: Awaited<ReturnType<FunctionToCall>>,
        expected: Awaited<ReturnType<FunctionToCall>>,
        failureMessage?: string,
    ) => void

    A custom asserter for .output guards (assert.output, check.output, etc.). This is typically +CustomOutputAsserter | augment-vir - v31.5.0

    Type Alias CustomOutputAsserter<FunctionToCall>

    CustomOutputAsserter: (
        actual: Awaited<ReturnType<FunctionToCall>>,
        expected: Awaited<ReturnType<FunctionToCall>>,
        failureMessage?: string,
    ) => void

    A custom asserter for .output guards (assert.output, check.output, etc.). This is typically not necessary, as the .output guards already perform deep equality checks by default.

    Type Parameters

    • FunctionToCall extends AnyFunction

      The function type that your custom asserter will be run on.

    Type declaration

      • (
            actual: Awaited<ReturnType<FunctionToCall>>,
            expected: Awaited<ReturnType<FunctionToCall>>,
            failureMessage?: string,
        ): void
      • Parameters

        Returns void

    import {assert, AssertionError, CustomOutputAsserter} from '@augment-vir/assert';

    function myFunctionToTest(name: string) {
    return `Hello there ${name}`;
    }

    const myCustomAsserter: CustomOutputAsserter<typeof myFunctionToTest> = (
    actual,
    expected,
    failureMessage,
    ) => {
    // Write your assertion in an `if`.
    if (!actual.startsWith('hello there') || actual.endsWith(expected)) {
    // Throw an `AssertionError` if the `if` fails.
    throw new AssertionError('', failureMessage);
    }
    };
    // Use your custom asserter as the first input to any `.output` guard.
    assert.output(myCustomAsserter, myFunctionToTest, ['John'], 'John', 'Name insertion failed');
    +
    diff --git a/types/Digit.html b/types/Digit.html index 0410aef7..06d5c33c 100644 --- a/types/Digit.html +++ b/types/Digit.html @@ -1,3 +1,3 @@ -Digit | augment-vir - v31.4.0

    Type Alias Digit

    Digit: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

    A union of all single digits in base 10.

    +Digit | augment-vir - v31.5.0

    Type Alias Digit

    Digit: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

    A union of all single digits in base 10.

    +
    diff --git a/types/Dimensions.html b/types/Dimensions.html index b896c62b..2db9e5de 100644 --- a/types/Dimensions.html +++ b/types/Dimensions.html @@ -1,3 +1,3 @@ -Dimensions | augment-vir - v31.4.0

    Type Alias Dimensions

    Dimensions: { height: number; width: number }

    A simple type for storing 2D dimensions.

    +Dimensions | augment-vir - v31.5.0

    Type Alias Dimensions

    Dimensions: { height: number; width: number }

    A simple type for storing 2D dimensions.

    Type declaration

    • height: number
    • width: number
    +
    diff --git a/types/Dimensions3d.html b/types/Dimensions3d.html index 84f620b6..42664155 100644 --- a/types/Dimensions3d.html +++ b/types/Dimensions3d.html @@ -1,3 +1,3 @@ -Dimensions3d | augment-vir - v31.4.0

    Type Alias Dimensions3d

    Dimensions3d: { depth: number; height: number; width: number }

    A simple type for storing 3D dimensions.

    +Dimensions3d | augment-vir - v31.5.0

    Type Alias Dimensions3d

    Dimensions3d: { depth: number; height: number; width: number }

    A simple type for storing 3D dimensions.

    Type declaration

    • depth: number
    • height: number
    • width: number
    +
    diff --git a/types/DirContents.html b/types/DirContents.html index 016350b1..53d60dd3 100644 --- a/types/DirContents.html +++ b/types/DirContents.html @@ -1,3 +1,3 @@ -DirContents | augment-vir - v31.4.0

    Type Alias DirContents

    DirContents: { [Path in string]: string | DirContents }

    Nested contents read from a file system directory.

    +DirContents | augment-vir - v31.5.0

    Type Alias DirContents

    DirContents: { [Path in string]: string | DirContents }

    Nested contents read from a file system directory.

    +
    diff --git a/types/DockerContainerInfo.html b/types/DockerContainerInfo.html index 1806aa28..453afb23 100644 --- a/types/DockerContainerInfo.html +++ b/types/DockerContainerInfo.html @@ -1,4 +1,4 @@ -DockerContainerInfo | augment-vir - v31.4.0

    Type Alias DockerContainerInfo

    DockerContainerInfo: Readonly<
        {
            AppArmorProfile: string;
            Args: ReadonlyArray<string>;
            Config: JsonCompatibleObject;
            Created: string;
            Driver: string;
            ExecIDs: unknown;
            GraphDriver: JsonCompatibleObject;
            HostConfig: JsonCompatibleObject;
            HostnamePath: string;
            HostsPath: string;
            Id: string;
            Image: string;
            LogPath: string;
            MountLabel: string;
            Mounts: JsonCompatibleArray;
            Name: string;
            NetworkSettings: JsonCompatibleObject;
            Path: string;
            Platform: string;
            ProcessLabel: string;
            ResolvConfPath: string;
            RestartCount: number;
            State: DockerContainerInfoState;
        },
    >

    Properties on the output from docker.container.getInfo(). Not all these properties are filled +DockerContainerInfo | augment-vir - v31.5.0

    Type Alias DockerContainerInfo

    DockerContainerInfo: Readonly<
        {
            AppArmorProfile: string;
            Args: ReadonlyArray<string>;
            Config: JsonCompatibleObject;
            Created: string;
            Driver: string;
            ExecIDs: unknown;
            GraphDriver: JsonCompatibleObject;
            HostConfig: JsonCompatibleObject;
            HostnamePath: string;
            HostsPath: string;
            Id: string;
            Image: string;
            LogPath: string;
            MountLabel: string;
            Mounts: JsonCompatibleArray;
            Name: string;
            NetworkSettings: JsonCompatibleObject;
            Path: string;
            Platform: string;
            ProcessLabel: string;
            ResolvConfPath: string;
            RestartCount: number;
            State: DockerContainerInfoState;
        },
    >

    Properties on the output from docker.container.getInfo(). Not all these properties are filled in all the way, particularly most of properties with nested objects.

    +
    diff --git a/types/DockerContainerInfoState.html b/types/DockerContainerInfoState.html index 4cac8d00..5950803b 100644 --- a/types/DockerContainerInfoState.html +++ b/types/DockerContainerInfoState.html @@ -1,3 +1,3 @@ -DockerContainerInfoState | augment-vir - v31.4.0

    Type Alias DockerContainerInfoState

    DockerContainerInfoState: {
        Dead: boolean;
        Error: string;
        ExitCode: number;
        FinishedAt: string;
        OOMKilled: boolean;
        Paused: boolean;
        Pid: number;
        Restarting: boolean;
        Running: boolean;
        StartedAt: string;
        Status: DockerContainerStatus;
    }

    Properties on DockerContainerInfo.State, retrieved from docker.container.getInfo().

    +DockerContainerInfoState | augment-vir - v31.5.0

    Type Alias DockerContainerInfoState

    DockerContainerInfoState: {
        Dead: boolean;
        Error: string;
        ExitCode: number;
        FinishedAt: string;
        OOMKilled: boolean;
        Paused: boolean;
        Pid: number;
        Restarting: boolean;
        Running: boolean;
        StartedAt: string;
        Status: DockerContainerStatus;
    }

    Properties on DockerContainerInfo.State, retrieved from docker.container.getInfo().

    Type declaration

    • Dead: boolean
    • Error: string
    • ExitCode: number
    • FinishedAt: string
    • OOMKilled: boolean
    • Paused: boolean
    • Pid: number
    • Restarting: boolean
    • Running: boolean
    • StartedAt: string
    • Status: DockerContainerStatus
    +
    diff --git a/types/DockerEnvMap.html b/types/DockerEnvMap.html index 11e81081..ea3f0ae9 100644 --- a/types/DockerEnvMap.html +++ b/types/DockerEnvMap.html @@ -1,4 +1,4 @@ -DockerEnvMap | augment-vir - v31.4.0

    Type Alias DockerEnvMap<RequiredKeys>

    DockerEnvMap: Readonly<
        Record<
            RequiredKeys
            | string,
            { allowInterpolation: boolean; value: string },
        >,
    >

    A set of environment mappings for a docker container.

    +DockerEnvMap | augment-vir - v31.5.0

    Type Alias DockerEnvMap<RequiredKeys>

    DockerEnvMap: Readonly<
        Record<
            RequiredKeys
            | string,
            { allowInterpolation: boolean; value: string },
        >,
    >

    A set of environment mappings for a docker container.

    • Each key in this object represents the env var name within the Docker container.
    • Each value property can be either the value that the env var should be set to or an existing @@ -10,4 +10,4 @@
    +
    diff --git a/types/DockerPortMap.html b/types/DockerPortMap.html index 3a981d4b..4bf7fb3b 100644 --- a/types/DockerPortMap.html +++ b/types/DockerPortMap.html @@ -1,3 +1,3 @@ -DockerPortMap | augment-vir - v31.4.0

    Type Alias DockerPortMap

    DockerPortMap: { containerPort: number; hostPort: number }

    A single docker container port mapping. This is usually used in an array.

    +DockerPortMap | augment-vir - v31.5.0

    Type Alias DockerPortMap

    DockerPortMap: { containerPort: number; hostPort: number }

    A single docker container port mapping. This is usually used in an array.

    Type declaration

    • containerPort: number
    • hostPort: number
    +
    diff --git a/types/DockerVolumeMap.html b/types/DockerVolumeMap.html index cb81c428..030e06eb 100644 --- a/types/DockerVolumeMap.html +++ b/types/DockerVolumeMap.html @@ -1,3 +1,3 @@ -DockerVolumeMap | augment-vir - v31.4.0

    Type Alias DockerVolumeMap

    DockerVolumeMap: {
        containerAbsolutePath: string;
        hostAbsolutePath: string;
        type?: DockerVolumeMappingType;
    }

    A mapping of a single docker volume for mounting host files to a container.

    +DockerVolumeMap | augment-vir - v31.5.0

    Type Alias DockerVolumeMap

    DockerVolumeMap: {
        containerAbsolutePath: string;
        hostAbsolutePath: string;
        type?: DockerVolumeMappingType;
    }

    A mapping of a single docker volume for mounting host files to a container.

    Type declaration

    +
    diff --git a/types/Empty.html b/types/Empty.html index cc84763d..590ecb6d 100644 --- a/types/Empty.html +++ b/types/Empty.html @@ -1,5 +1,5 @@ -Empty | augment-vir - v31.4.0

    Type Alias Empty

    Empty: "" | EmptyObject | [] | Map<any, any> | Set<any>

    Empty versions of CanBeEmpty. Note that there is no way to distinguish an empty Set or +Empty | augment-vir - v31.5.0

    Type Alias Empty

    Empty: "" | EmptyObject | [] | Map<any, any> | Set<any>

    Empty versions of CanBeEmpty. Note that there is no way to distinguish an empty Set or Map from their non-empty counterparts in TypeScript (so you will get no emptiness type safety for them.)

    +
    diff --git a/types/EnumBaseType.html b/types/EnumBaseType.html index b5ce1c4d..d604a1a6 100644 --- a/types/EnumBaseType.html +++ b/types/EnumBaseType.html @@ -1,3 +1,3 @@ -EnumBaseType | augment-vir - v31.4.0

    Type Alias EnumBaseType

    EnumBaseType: Record<string, number | string>

    A base enum type, useful for enum type parameter baselines.

    +EnumBaseType | augment-vir - v31.5.0

    Type Alias EnumBaseType

    EnumBaseType: Record<string, number | string>

    A base enum type, useful for enum type parameter baselines.

    +
    diff --git a/types/EnumMap.html b/types/EnumMap.html index d364b0cb..8d0d5ed3 100644 --- a/types/EnumMap.html +++ b/types/EnumMap.html @@ -1,3 +1,3 @@ -EnumMap | augment-vir - v31.4.0

    Type Alias EnumMap<Enum, Value>

    EnumMap: Values<Enum> extends PropertyKey
        ? Record<Values<Enum>, Value>
        : "ERROR: invalid enum"

    Creates an object that maps all values of an enum to the provided Values type.

    +EnumMap | augment-vir - v31.5.0

    Type Alias EnumMap<Enum, Value>

    EnumMap: Values<Enum> extends PropertyKey
        ? Record<Values<Enum>, Value>
        : "ERROR: invalid enum"

    Creates an object that maps all values of an enum to the provided Values type.

    Type Parameters

    +
    diff --git a/types/ErrorMatchOptions.html b/types/ErrorMatchOptions.html index e2dc2093..91dc1763 100644 --- a/types/ErrorMatchOptions.html +++ b/types/ErrorMatchOptions.html @@ -1,8 +1,8 @@ -ErrorMatchOptions | augment-vir - v31.4.0

    Type Alias ErrorMatchOptions

    ErrorMatchOptions: PartialWithNullable<
        {
            matchConstructor: ErrorConstructor
            | new (...args: any[]) => Error;
            matchMessage: string | RegExp;
        },
    >

    A type that represents possible error matching patterns. This is used by the .throws and +ErrorMatchOptions | augment-vir - v31.5.0

    Type Alias ErrorMatchOptions

    ErrorMatchOptions: PartialWithNullable<
        {
            matchConstructor: ErrorConstructor
            | new (...args: any[]) => Error;
            matchMessage: string | RegExp;
        },
    >

    A type that represents possible error matching patterns. This is used by the .throws and isError, guards in @augment-vir/assert as well as itCases in @augment-vir/test. Each property is optional, and whichever properties are provided will be checked.

    import {assert, type ErrorMatchOptions} from '@augment-vir/assert';

    // define the options
    const matchOptions: ErrorMatchOptions = {
    matchConstructor: Error,
    matchMessage: 'some error',
    };

    assert.throws(
    () => {
    throw new Error('some error');
    },
    // use the options
    matchOptions,
    ); // this assertion will pass
    +
    diff --git a/types/ExcludeEmpty.html b/types/ExcludeEmpty.html index 391b55f6..7df942e0 100644 --- a/types/ExcludeEmpty.html +++ b/types/ExcludeEmpty.html @@ -1,3 +1,3 @@ -ExcludeEmpty | augment-vir - v31.4.0

    Type Alias ExcludeEmpty<T>

    ExcludeEmpty: IsEmptyObject<T> extends true ? never : T

    Excludes empty objects from a union.

    +ExcludeEmpty | augment-vir - v31.5.0

    Type Alias ExcludeEmpty<T>

    ExcludeEmpty: IsEmptyObject<T> extends true ? never : T

    Excludes empty objects from a union.

    Type Parameters

    • T
    +
    diff --git a/types/ExcludeKeysWithMatchingValues.html b/types/ExcludeKeysWithMatchingValues.html index 31457d5a..9f2e4705 100644 --- a/types/ExcludeKeysWithMatchingValues.html +++ b/types/ExcludeKeysWithMatchingValues.html @@ -1,7 +1,7 @@ -ExcludeKeysWithMatchingValues | augment-vir - v31.4.0

    Type Alias ExcludeKeysWithMatchingValues<OriginalObject, Matcher>

    ExcludeKeysWithMatchingValues: keyof {
        [Prop in keyof OriginalObject as OriginalObject[Prop] extends Matcher
            ? never
            : Prop]: Prop
    }

    Performs keyof on all keys within the OriginalObject that have values not matching the +ExcludeKeysWithMatchingValues | augment-vir - v31.5.0

    Type Alias ExcludeKeysWithMatchingValues<OriginalObject, Matcher>

    ExcludeKeysWithMatchingValues: keyof {
        [Prop in keyof OriginalObject as OriginalObject[Prop] extends Matcher
            ? never
            : Prop]: Prop
    }

    Performs keyof on all keys within the OriginalObject that have values not matching the given Matcher.

    Type Parameters

    • OriginalObject extends object
    • Matcher
    import {ExcludeKeysWithMatchingValues} from '@augment-vir/common';

    type ExcludedKeys = ExcludeKeysWithMatchingValues<{a: RegExp; b: string}, string>;
    // `ExcludedKeys` is `'a'`
    +
    diff --git a/types/ExpandPotentialArrayPrismaTypeMapPayload.html b/types/ExpandPotentialArrayPrismaTypeMapPayload.html index 50cae57c..b24f38d2 100644 --- a/types/ExpandPotentialArrayPrismaTypeMapPayload.html +++ b/types/ExpandPotentialArrayPrismaTypeMapPayload.html @@ -1,3 +1,3 @@ -ExpandPotentialArrayPrismaTypeMapPayload | augment-vir - v31.4.0

    Type Alias ExpandPotentialArrayPrismaTypeMapPayload<PayloadWrapper>

    ExpandPotentialArrayPrismaTypeMapPayload: PayloadWrapper extends (
        infer ActualPayload extends BasePrismaPayload
    )[]
        ? ExpandPrismaTypeMapPayload<ActualPayload>[]
        : PayloadWrapper extends BasePrismaPayload
            ? ExpandPrismaTypeMapPayload<PayloadWrapper>
            : never

    Expand a payload that might be inside of an array, keeping it inside of an array if it is.

    +ExpandPotentialArrayPrismaTypeMapPayload | augment-vir - v31.5.0

    Type Alias ExpandPotentialArrayPrismaTypeMapPayload<PayloadWrapper>

    ExpandPotentialArrayPrismaTypeMapPayload: PayloadWrapper extends (
        infer ActualPayload extends BasePrismaPayload
    )[]
        ? ExpandPrismaTypeMapPayload<ActualPayload>[]
        : PayloadWrapper extends BasePrismaPayload
            ? ExpandPrismaTypeMapPayload<PayloadWrapper>
            : never

    Expand a payload that might be inside of an array, keeping it inside of an array if it is.

    Type Parameters

    +
    diff --git a/types/ExpandPrismaTypeMapPayload.html b/types/ExpandPrismaTypeMapPayload.html index 5bc9d054..4618d384 100644 --- a/types/ExpandPrismaTypeMapPayload.html +++ b/types/ExpandPrismaTypeMapPayload.html @@ -1,3 +1,3 @@ -ExpandPrismaTypeMapPayload | augment-vir - v31.4.0

    Type Alias ExpandPrismaTypeMapPayload<Payload>

    ExpandPrismaTypeMapPayload: Payload["scalars"] & {
        [Key in keyof Payload["objects"]]:
            | ExpandPotentialArrayPrismaTypeMapPayload<
                NonNullable<Payload["objects"][Key]>,
            >
            | (null extends Payload["objects"][Key] ? null : never)
    }

    Expand a Prisma payload into its scalars and recursive relations.

    +ExpandPrismaTypeMapPayload | augment-vir - v31.5.0

    Type Alias ExpandPrismaTypeMapPayload<Payload>

    ExpandPrismaTypeMapPayload: Payload["scalars"] & {
        [Key in keyof Payload["objects"]]:
            | ExpandPotentialArrayPrismaTypeMapPayload<
                NonNullable<Payload["objects"][Key]>,
            >
            | (null extends Payload["objects"][Key] ? null : never)
    }

    Expand a Prisma payload into its scalars and recursive relations.

    Type Parameters

    +
    diff --git a/types/ExtractKeysWithMatchingValues.html b/types/ExtractKeysWithMatchingValues.html index a341bd0f..e48ff07a 100644 --- a/types/ExtractKeysWithMatchingValues.html +++ b/types/ExtractKeysWithMatchingValues.html @@ -1,7 +1,7 @@ -ExtractKeysWithMatchingValues | augment-vir - v31.4.0

    Type Alias ExtractKeysWithMatchingValues<OriginalObject, Matcher>

    ExtractKeysWithMatchingValues: keyof {
        [Prop in keyof OriginalObject as OriginalObject[Prop] extends Matcher
            ? Prop
            : never]: Prop
    }

    Performs keyof on all keys within the OriginalObject that have values matching the given +ExtractKeysWithMatchingValues | augment-vir - v31.5.0

    Type Alias ExtractKeysWithMatchingValues<OriginalObject, Matcher>

    ExtractKeysWithMatchingValues: keyof {
        [Prop in keyof OriginalObject as OriginalObject[Prop] extends Matcher
            ? Prop
            : never]: Prop
    }

    Performs keyof on all keys within the OriginalObject that have values matching the given Matcher.

    Type Parameters

    • OriginalObject extends object
    • Matcher
    import {ExtractKeysWithMatchingValues} from '@augment-vir/common';

    type ExtractedKeys = ExtractKeysWithMatchingValues<{a: RegExp; b: string}, string>;
    // `ExtractedKeys` is `'b'`
    +
    diff --git a/types/Falsy.html b/types/Falsy.html index 15ba85b4..a845e232 100644 --- a/types/Falsy.html +++ b/types/Falsy.html @@ -1,7 +1,7 @@ -Falsy | augment-vir - v31.4.0

    Type Alias Falsy<T>

    Narrows the given type parameter T to all its falsy sub-types.

    +Falsy | augment-vir - v31.5.0

    Type Alias Falsy<T>

    Narrows the given type parameter T to all its falsy sub-types.

    Type Parameters

    • T

      The original type to narrow.

    import type {Falsy} from '@augment-vir/assert';

    type MyFalsy = Falsy<string | number>; // "" | 0
    +
    diff --git a/types/FalsyValue.html b/types/FalsyValue.html index 4cd4901b..2dfd1e2b 100644 --- a/types/FalsyValue.html +++ b/types/FalsyValue.html @@ -1,7 +1,7 @@ -FalsyValue | augment-vir - v31.4.0

    Type Alias FalsyValue

    FalsyValue: undefined | null | false | 0 | "" | 0 | 0n

    All falsy values in JavaScript. This does not include NaN because there is no dedicated type +FalsyValue | augment-vir - v31.5.0

    Type Alias FalsyValue

    FalsyValue: undefined | null | false | 0 | "" | 0 | 0n

    All falsy values in JavaScript. This does not include NaN because there is no dedicated type for it in TypeScript.

    import type {FalsyValue} from '@augment-vir/assert';

    const falsy: FalsyValue = 0;
    +
    diff --git a/types/FunctionTestCase.html b/types/FunctionTestCase.html index db32e683..2cb2d69b 100644 --- a/types/FunctionTestCase.html +++ b/types/FunctionTestCase.html @@ -1,3 +1,3 @@ -FunctionTestCase | augment-vir - v31.4.0

    Type Alias FunctionTestCase<FunctionToTest>

    FunctionTestCase: 1 extends Parameters<FunctionToTest>["length"]
        ? Parameters<FunctionToTest>["length"] extends 0 | 1
            ? FunctionTestCaseSingleInput<FunctionToTest>
            : FunctionTestCaseMultipleInputs<FunctionToTest>
        : 0 extends Parameters<FunctionToTest>["length"]
            ? BaseTestCase<Awaited<ReturnType<FunctionToTest>>>
            : FunctionTestCaseMultipleInputs<FunctionToTest>

    A function test case used for itCases.

    +FunctionTestCase | augment-vir - v31.5.0

    Type Alias FunctionTestCase<FunctionToTest>

    FunctionTestCase: 1 extends Parameters<FunctionToTest>["length"]
        ? Parameters<FunctionToTest>["length"] extends 0 | 1
            ? FunctionTestCaseSingleInput<FunctionToTest>
            : FunctionTestCaseMultipleInputs<FunctionToTest>
        : 0 extends Parameters<FunctionToTest>["length"]
            ? BaseTestCase<Awaited<ReturnType<FunctionToTest>>>
            : FunctionTestCaseMultipleInputs<FunctionToTest>

    A function test case used for itCases.

    Type Parameters

    +
    diff --git a/types/FunctionTestCaseMultipleInputs.html b/types/FunctionTestCaseMultipleInputs.html index e45eb9b5..81049832 100644 --- a/types/FunctionTestCaseMultipleInputs.html +++ b/types/FunctionTestCaseMultipleInputs.html @@ -1,3 +1,3 @@ -FunctionTestCaseMultipleInputs | augment-vir - v31.4.0

    Type Alias FunctionTestCaseMultipleInputs<FunctionToTest>

    FunctionTestCaseMultipleInputs: {
        inputs: Parameters<FunctionToTest>["length"] extends never
            ? FunctionToTest extends TypedFunction<[infer ArgumentsType], any>
                ? ArgumentsType[]
                : never
            : Parameters<FunctionToTest>;
    } & BaseTestCase<Awaited<ReturnType<FunctionToTest>>>

    Input for a function test that has multiple inputs.

    +FunctionTestCaseMultipleInputs | augment-vir - v31.5.0

    Type Alias FunctionTestCaseMultipleInputs<FunctionToTest>

    FunctionTestCaseMultipleInputs: {
        inputs: Parameters<FunctionToTest>["length"] extends never
            ? FunctionToTest extends TypedFunction<[infer ArgumentsType], any>
                ? ArgumentsType[]
                : never
            : Parameters<FunctionToTest>;
    } & BaseTestCase<Awaited<ReturnType<FunctionToTest>>>

    Input for a function test that has multiple inputs.

    Type Parameters

    +
    diff --git a/types/FunctionTestCaseSingleInput.html b/types/FunctionTestCaseSingleInput.html index 25e7b146..4d36cd1c 100644 --- a/types/FunctionTestCaseSingleInput.html +++ b/types/FunctionTestCaseSingleInput.html @@ -1,3 +1,3 @@ -FunctionTestCaseSingleInput | augment-vir - v31.4.0

    Type Alias FunctionTestCaseSingleInput<FunctionToTest>

    FunctionTestCaseSingleInput: { input: Parameters<FunctionToTest>[0] } & BaseTestCase<
        Awaited<ReturnType<FunctionToTest>>,
    >

    Input for a function test that only has a single input.

    +FunctionTestCaseSingleInput | augment-vir - v31.5.0

    Type Alias FunctionTestCaseSingleInput<FunctionToTest>

    FunctionTestCaseSingleInput: { input: Parameters<FunctionToTest>[0] } & BaseTestCase<
        Awaited<ReturnType<FunctionToTest>>,
    >

    Input for a function test that only has a single input.

    Type Parameters

    +
    diff --git a/types/FunctionWithContextTestCase.html b/types/FunctionWithContextTestCase.html new file mode 100644 index 00000000..33a535ba --- /dev/null +++ b/types/FunctionWithContextTestCase.html @@ -0,0 +1,3 @@ +FunctionWithContextTestCase | augment-vir - v31.5.0

    Type Alias FunctionWithContextTestCase<FunctionToTest>

    FunctionWithContextTestCase: 2 extends Parameters<FunctionToTest>["length"]
        ? Parameters<FunctionToTest>["length"] extends 1 | 2
            ? FunctionWithContextTestCaseSingleInput<FunctionToTest>
            : FunctionWithContextTestCaseMultipleInputs<FunctionToTest>
        : 1 extends Parameters<FunctionToTest>["length"]
            ? BaseTestCase<Awaited<ReturnType<FunctionToTest>>>
            : FunctionWithContextTestCaseMultipleInputs<FunctionToTest>

    A function test case used for itCasesWithContext.

    +

    Type Parameters

    diff --git a/types/FunctionWithContextTestCaseMultipleInputs.html b/types/FunctionWithContextTestCaseMultipleInputs.html new file mode 100644 index 00000000..f004838c --- /dev/null +++ b/types/FunctionWithContextTestCaseMultipleInputs.html @@ -0,0 +1,3 @@ +FunctionWithContextTestCaseMultipleInputs | augment-vir - v31.5.0

    Type Alias FunctionWithContextTestCaseMultipleInputs<FunctionToTest>

    FunctionWithContextTestCaseMultipleInputs: {
        inputs: Parameters<FunctionToTest>["length"] extends never
            ? FunctionToTest extends TypedFunction<
                [UniversalTestContext, ...(infer ArgumentsType)],
                any,
            >
                ? ArgumentsType[]
                : never
            : RemoveFirstTupleEntry<Parameters<FunctionToTest>>;
    } & BaseTestCase<Awaited<ReturnType<FunctionToTest>>>

    Input for a function test that has multiple inputs.

    +

    Type Parameters

    diff --git a/types/FunctionWithContextTestCaseSingleInput.html b/types/FunctionWithContextTestCaseSingleInput.html new file mode 100644 index 00000000..c871b4dc --- /dev/null +++ b/types/FunctionWithContextTestCaseSingleInput.html @@ -0,0 +1,3 @@ +FunctionWithContextTestCaseSingleInput | augment-vir - v31.5.0

    Type Alias FunctionWithContextTestCaseSingleInput<FunctionToTest>

    FunctionWithContextTestCaseSingleInput: { input: Parameters<FunctionToTest>[1] } & BaseTestCase<
        Awaited<ReturnType<FunctionToTest>>,
    >

    Input for a test function with context that only has a single input.

    +

    Type Parameters

    diff --git a/types/GenericSelectionSet.html b/types/GenericSelectionSet.html index 70baaaf7..e7928a6a 100644 --- a/types/GenericSelectionSet.html +++ b/types/GenericSelectionSet.html @@ -1,3 +1,3 @@ -GenericSelectionSet | augment-vir - v31.4.0

    Type Alias GenericSelectionSet

    GenericSelectionSet: { [Key in PropertyKey]: unknown }

    A generic selection set without specific keys. Useful for type parameter baselines.

    +GenericSelectionSet | augment-vir - v31.5.0

    Type Alias GenericSelectionSet

    GenericSelectionSet: { [Key in PropertyKey]: unknown }

    A generic selection set without specific keys. Useful for type parameter baselines.

    +
    diff --git a/types/HttpStatusByCategory.html b/types/HttpStatusByCategory.html index 8f5bdf1f..830f6c9f 100644 --- a/types/HttpStatusByCategory.html +++ b/types/HttpStatusByCategory.html @@ -1,3 +1,3 @@ -HttpStatusByCategory | augment-vir - v31.4.0

    Type Alias HttpStatusByCategory<Category>

    HttpStatusByCategory: ArrayElement<typeof httpStatusByCategory[Category]>

    All possible HTTP status codes for the given HttpStatusCategory.

    +HttpStatusByCategory | augment-vir - v31.5.0

    Type Alias HttpStatusByCategory<Category>

    HttpStatusByCategory: ArrayElement<typeof httpStatusByCategory[Category]>

    All possible HTTP status codes for the given HttpStatusCategory.

    Type Parameters

    +
    diff --git a/types/IfEquals.html b/types/IfEquals.html index 094ed129..38271360 100644 --- a/types/IfEquals.html +++ b/types/IfEquals.html @@ -1,4 +1,4 @@ -IfEquals | augment-vir - v31.4.0

    Type Alias IfEquals<Actual, Expected, Yes, No>

    IfEquals: IsEqual<Actual, Expected> extends true ? Yes : No

    A helper type that resolves to the given Yes type parameter if Actual === Expected. +IfEquals | augment-vir - v31.5.0

    Type Alias IfEquals<Actual, Expected, Yes, No>

    IfEquals: IsEqual<Actual, Expected> extends true ? Yes : No

    A helper type that resolves to the given Yes type parameter if Actual === Expected. Otherwise it resolves to the given No type parameter.

    Type Parameters

    • Actual
    • Expected
    • Yes = unknown
    • No = never
    +
    diff --git a/types/IfExtends.html b/types/IfExtends.html index cc4c7f0b..633442fd 100644 --- a/types/IfExtends.html +++ b/types/IfExtends.html @@ -1,4 +1,4 @@ -IfExtends | augment-vir - v31.4.0

    Type Alias IfExtends<Actual, Expected, Yes, No>

    IfExtends: Actual extends Expected ? Yes : No

    A helper type that resolves to the given Yes type parameter if Actual extends Expected. +IfExtends | augment-vir - v31.5.0

    Type Alias IfExtends<Actual, Expected, Yes, No>

    IfExtends: Actual extends Expected ? Yes : No

    A helper type that resolves to the given Yes type parameter if Actual extends Expected. Otherwise it resolves to the given No type parameter.

    Type Parameters

    • Actual
    • Expected
    • Yes = unknown
    • No = never
    +
    diff --git a/types/IsCaseOptions.html b/types/IsCaseOptions.html index e2db0727..776db422 100644 --- a/types/IsCaseOptions.html +++ b/types/IsCaseOptions.html @@ -1,8 +1,8 @@ -IsCaseOptions | augment-vir - v31.4.0

    Type Alias IsCaseOptions

    IsCaseOptions: { rejectNoCaseCharacters: boolean }

    Options for isCase.

    +IsCaseOptions | augment-vir - v31.5.0

    Type Alias IsCaseOptions

    IsCaseOptions: { rejectNoCaseCharacters: boolean }

    Options for isCase.

    Type declaration

    • rejectNoCaseCharacters: boolean

      Set to true to fail on characters that don't have different upper and lower case versions (such as punctuation, like '.' or symbols, like '√').

      false
       
    +
    diff --git a/types/JsonCompatibleArray.html b/types/JsonCompatibleArray.html index 51aeeaff..187b96ed 100644 --- a/types/JsonCompatibleArray.html +++ b/types/JsonCompatibleArray.html @@ -1,3 +1,3 @@ -JsonCompatibleArray | augment-vir - v31.4.0

    Type Alias JsonCompatibleArray

    JsonCompatibleArray: JsonCompatibleValue[] | ReadonlyArray<JsonCompatibleValue>

    An array that only contains JSON compatible values.

    +JsonCompatibleArray | augment-vir - v31.5.0

    Type Alias JsonCompatibleArray

    JsonCompatibleArray: JsonCompatibleValue[] | ReadonlyArray<JsonCompatibleValue>

    An array that only contains JSON compatible values.

    +
    diff --git a/types/JsonCompatibleObject.html b/types/JsonCompatibleObject.html index 256130b9..0fc99dd3 100644 --- a/types/JsonCompatibleObject.html +++ b/types/JsonCompatibleObject.html @@ -1,3 +1,3 @@ -JsonCompatibleObject | augment-vir - v31.4.0

    Type Alias JsonCompatibleObject

    JsonCompatibleObject:
        | Partial<
            {
                readonly [key: string
                | number]:
                    | undefined
                    | null
                    | string
                    | number
                    | boolean
                    | Partial<
                        {
                            readonly [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | Partial<
                        {
                            [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | JsonCompatibleValue[]
                    | readonly JsonCompatibleValue[]
                    | Readonly<
                        Partial<
                            {
                                readonly [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | Readonly<
                        Partial<
                            {
                                [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | readonly JsonCompatibleValue[];
            },
        >
        | Partial<
            {
                [key: string
                | number]:
                    | undefined
                    | null
                    | string
                    | number
                    | boolean
                    | Partial<
                        {
                            readonly [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | Partial<
                        {
                            [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | JsonCompatibleValue[]
                    | readonly JsonCompatibleValue[]
                    | Readonly<
                        Partial<
                            {
                                readonly [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | Readonly<
                        Partial<
                            {
                                [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | readonly JsonCompatibleValue[];
            },
        >

    An object that only contains JSON compatible values.

    +JsonCompatibleObject | augment-vir - v31.5.0

    Type Alias JsonCompatibleObject

    JsonCompatibleObject:
        | Partial<
            {
                readonly [key: string
                | number]:
                    | undefined
                    | null
                    | string
                    | number
                    | boolean
                    | Partial<
                        {
                            readonly [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | Partial<
                        {
                            [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | JsonCompatibleValue[]
                    | readonly JsonCompatibleValue[]
                    | Readonly<
                        Partial<
                            {
                                readonly [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | Readonly<
                        Partial<
                            {
                                [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | readonly JsonCompatibleValue[];
            },
        >
        | Partial<
            {
                [key: string
                | number]:
                    | undefined
                    | null
                    | string
                    | number
                    | boolean
                    | Partial<
                        {
                            readonly [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | Partial<
                        {
                            [key: string
                            | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                        },
                    >
                    | JsonCompatibleValue[]
                    | readonly JsonCompatibleValue[]
                    | Readonly<
                        Partial<
                            {
                                readonly [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | Readonly<
                        Partial<
                            {
                                [key: string
                                | number]: string | number | boolean | Partial<{ readonly [key: string]: string | number | boolean | Partial<...> | Partial<{ [key: string]: string | number | boolean | Partial<...> | Partial<...> | ... 6 more ... | undefined; [key: number]: string | ... 10 more ... | undefined; }> | ... 6 more ... | undefined; readonly [key: ...;
                            },
                        >,
                    >
                    | readonly JsonCompatibleValue[];
            },
        >

    An object that only contains JSON compatible values.

    +
    diff --git a/types/JsonCompatiblePrimitive.html b/types/JsonCompatiblePrimitive.html index 848a99fe..6c763639 100644 --- a/types/JsonCompatiblePrimitive.html +++ b/types/JsonCompatiblePrimitive.html @@ -1,4 +1,4 @@ -JsonCompatiblePrimitive | augment-vir - v31.4.0

    Type Alias JsonCompatiblePrimitive

    JsonCompatiblePrimitive: Jsonify<Primitive> | undefined

    All primitives that are allowed in JSON.

    +JsonCompatiblePrimitive | augment-vir - v31.5.0

    Type Alias JsonCompatiblePrimitive

    JsonCompatiblePrimitive: Jsonify<Primitive> | undefined

    All primitives that are allowed in JSON.

    Note that while undefined is allowed here, it will be behave slightly differently than the others.

      @@ -7,4 +7,4 @@ entirely.
    +
    diff --git a/types/JsonCompatibleValue.html b/types/JsonCompatibleValue.html index e29d01ea..d5a1166a 100644 --- a/types/JsonCompatibleValue.html +++ b/types/JsonCompatibleValue.html @@ -1,3 +1,3 @@ -JsonCompatibleValue | augment-vir - v31.4.0

    Type Alias JsonCompatibleValue

    JsonCompatibleValue:
        | JsonCompatiblePrimitive
        | JsonCompatibleObject
        | JsonCompatibleArray

    Any JSON compatible value.

    +JsonCompatibleValue | augment-vir - v31.5.0

    Type Alias JsonCompatibleValue

    JsonCompatibleValue:
        | JsonCompatiblePrimitive
        | JsonCompatibleObject
        | JsonCompatibleArray

    Any JSON compatible value.

    +
    diff --git a/types/KeyCount.html b/types/KeyCount.html index 2c0c5c10..acb61de7 100644 --- a/types/KeyCount.html +++ b/types/KeyCount.html @@ -1,4 +1,4 @@ -KeyCount | augment-vir - v31.4.0

    Type Alias KeyCount<T>

    KeyCount: UnionToTuple<keyof T>["length"]

    Counts the number of unique keys in an object type. Note that a key of just string will count +KeyCount | augment-vir - v31.5.0

    Type Alias KeyCount<T>

    KeyCount: UnionToTuple<keyof T>["length"]

    Counts the number of unique keys in an object type. Note that a key of just string will count as 1.

    Type Parameters

    • T
    +
    diff --git a/types/LogColorConfig.html b/types/LogColorConfig.html index 488e4fe7..d833df6f 100644 --- a/types/LogColorConfig.html +++ b/types/LogColorConfig.html @@ -1,4 +1,4 @@ -LogColorConfig | augment-vir - v31.4.0

    Type Alias LogColorConfig

    LogColorConfig: Readonly<
        Record<LogColorKey, { colors: string[]; logType: LogOutputType }>,
    >

    Configuration for creating a logger. This is not required, as a default configuration is built-in +LogColorConfig | augment-vir - v31.5.0

    Type Alias LogColorConfig

    LogColorConfig: Readonly<
        Record<LogColorKey, { colors: string[]; logType: LogOutputType }>,
    >

    Configuration for creating a logger. This is not required, as a default configuration is built-in already.

    +
    diff --git a/types/LogShellOutputOptions.html b/types/LogShellOutputOptions.html index ee090bfb..c1c4ca7c 100644 --- a/types/LogShellOutputOptions.html +++ b/types/LogShellOutputOptions.html @@ -1,3 +1,3 @@ -LogShellOutputOptions | augment-vir - v31.4.0

    Type Alias LogShellOutputOptions

    LogShellOutputOptions: PartialWithUndefined<
        { ignoreError: boolean; logger: Logger; withLabels: boolean },
    >

    Options for logShellOutput.

    +LogShellOutputOptions | augment-vir - v31.5.0

    Type Alias LogShellOutputOptions

    LogShellOutputOptions: PartialWithUndefined<
        { ignoreError: boolean; logger: Logger; withLabels: boolean },
    >

    Options for logShellOutput.

    +
    diff --git a/types/LogWriter.html b/types/LogWriter.html index 1b83ef60..b7b8172f 100644 --- a/types/LogWriter.html +++ b/types/LogWriter.html @@ -1,4 +1,4 @@ -LogWriter | augment-vir - v31.4.0

    Type Alias LogWriter

    LogWriter: (params: Readonly<LogWriterParams>) => void

    The final step in writing a log. This will actually perform the logging of text to the console. +LogWriter | augment-vir - v31.5.0

    Type Alias LogWriter

    LogWriter: (params: Readonly<LogWriterParams>) => void

    The final step in writing a log. This will actually perform the logging of text to the console. CSS will be applied if this is called within a browser.

    Type declaration

    +
    diff --git a/types/LogWriterParams.html b/types/LogWriterParams.html index b5938e3d..e940d1c5 100644 --- a/types/LogWriterParams.html +++ b/types/LogWriterParams.html @@ -1,4 +1,4 @@ -LogWriterParams | augment-vir - v31.4.0

    Type Alias LogWriterParams

    LogWriterParams: { css: string | undefined; text: string }

    Params for LogWriter

    +LogWriterParams | augment-vir - v31.5.0

    Type Alias LogWriterParams

    LogWriterParams: { css: string | undefined; text: string }

    Params for LogWriter

    Type declaration

    • css: string | undefined

      Typically this is only relevant in a browser console.

    • text: string
    +
    diff --git a/types/LogWriters.html b/types/LogWriters.html index d52a930d..84262794 100644 --- a/types/LogWriters.html +++ b/types/LogWriters.html @@ -1,3 +1,3 @@ -LogWriters | augment-vir - v31.4.0

    Type Alias LogWriters

    LogWriters: Record<LogOutputType, LogWriter>

    A log writer for each log output type.

    +LogWriters | augment-vir - v31.5.0

    Type Alias LogWriters

    LogWriters: Record<LogOutputType, LogWriter>

    A log writer for each log output type.

    +
    diff --git a/types/Logger.html b/types/Logger.html index 827c4e40..54a3e61c 100644 --- a/types/Logger.html +++ b/types/Logger.html @@ -1,7 +1,7 @@ -Logger | augment-vir - v31.4.0

    Type Alias Logger

    Logger: LoggerLogs & { if: (condition: boolean) => LoggerLogs }

    Type for the log export.

    +Logger | augment-vir - v31.5.0

    Type Alias Logger

    Logger: LoggerLogs & { if: (condition: boolean) => LoggerLogs }

    Type for the log export.

    Type declaration

    • if: (condition: boolean) => LoggerLogs

      Only logs if the given condition is true.

      import {log} from '@augment-vir/common';

      // this will log
      log.if(true).info('hi');
      // this will not log
      log.if(false).info('hi');
    +
    diff --git a/types/LoggerLogs.html b/types/LoggerLogs.html index b0264951..25109468 100644 --- a/types/LoggerLogs.html +++ b/types/LoggerLogs.html @@ -1,3 +1,3 @@ -LoggerLogs | augment-vir - v31.4.0

    Type Alias LoggerLogs

    LoggerLogs: Readonly<
        Record<LogColorKey, (...args: ReadonlyArray<unknown>) => void>,
    >

    The base log methods.

    +LoggerLogs | augment-vir - v31.5.0

    Type Alias LoggerLogs

    LoggerLogs: Readonly<
        Record<LogColorKey, (...args: ReadonlyArray<unknown>) => void>,
    >

    The base log methods.

    +
    diff --git a/types/LoggerOptions.html b/types/LoggerOptions.html index 274bc5ba..b1e0256d 100644 --- a/types/LoggerOptions.html +++ b/types/LoggerOptions.html @@ -1,3 +1,3 @@ -LoggerOptions | augment-vir - v31.4.0

    Type Alias LoggerOptions

    LoggerOptions: { colorConfig: LogColorConfig; omitColors: boolean }

    Options for a custom Logger.

    +LoggerOptions | augment-vir - v31.5.0

    Type Alias LoggerOptions

    LoggerOptions: { colorConfig: LogColorConfig; omitColors: boolean }

    Options for a custom Logger.

    Type declaration

    +
    diff --git a/types/MappedTuple.html b/types/MappedTuple.html index 9d05311b..8825a10d 100644 --- a/types/MappedTuple.html +++ b/types/MappedTuple.html @@ -1,3 +1,3 @@ -MappedTuple | augment-vir - v31.4.0

    Type Alias MappedTuple<OriginalTuple, NewValueType>

    MappedTuple: { [I in keyof OriginalTuple]: NewValueType }

    Creates a tuple with length of OriginalTuple with values of NewValueType.

    +MappedTuple | augment-vir - v31.5.0

    Type Alias MappedTuple<OriginalTuple, NewValueType>

    MappedTuple: { [I in keyof OriginalTuple]: NewValueType }

    Creates a tuple with length of OriginalTuple with values of NewValueType.

    Type Parameters

    • OriginalTuple extends ReadonlyArray<any>
    • NewValueType
    +
    diff --git a/types/MaybeArray.html b/types/MaybeArray.html index b3384eea..dee35c37 100644 --- a/types/MaybeArray.html +++ b/types/MaybeArray.html @@ -1,6 +1,6 @@ -MaybeArray | augment-vir - v31.4.0

    Type Alias MaybeArray<T>

    MaybeArray: T | T[]

    Either an array of T or just T itself.

    +MaybeArray | augment-vir - v31.5.0

    Type Alias MaybeArray<T>

    MaybeArray: T | T[]

    Either an array of T or just T itself.

    Type Parameters

    • T
    -
    +
    diff --git a/types/MaybePromise.html b/types/MaybePromise.html index 054cf7a8..0a9b1400 100644 --- a/types/MaybePromise.html +++ b/types/MaybePromise.html @@ -1,3 +1,3 @@ -MaybePromise | augment-vir - v31.4.0

    Type Alias MaybePromise<T>

    MaybePromise: Promise<T> | T

    Either a Promise of T or just T itself.

    +MaybePromise | augment-vir - v31.5.0

    Type Alias MaybePromise<T>

    MaybePromise: Promise<T> | T

    Either a Promise of T or just T itself.

    Type Parameters

    • T
    +
    diff --git a/types/MaybeReadonlyArray.html b/types/MaybeReadonlyArray.html index f91cf52b..59fc3d85 100644 --- a/types/MaybeReadonlyArray.html +++ b/types/MaybeReadonlyArray.html @@ -1,6 +1,6 @@ -MaybeReadonlyArray | augment-vir - v31.4.0

    Type Alias MaybeReadonlyArray<T>

    MaybeReadonlyArray: T | ReadonlyArray<T>

    Either a readonly array of T or just T itself.

    +MaybeReadonlyArray | augment-vir - v31.5.0

    Type Alias MaybeReadonlyArray<T>

    MaybeReadonlyArray: T | ReadonlyArray<T>

    Either a readonly array of T or just T itself.

    Type Parameters

    • T
    -
    +
    diff --git a/types/MaybeTuple.html b/types/MaybeTuple.html index 19c924b3..7fe42778 100644 --- a/types/MaybeTuple.html +++ b/types/MaybeTuple.html @@ -1,3 +1,3 @@ -MaybeTuple | augment-vir - v31.4.0

    Type Alias MaybeTuple<T>

    MaybeTuple: T | AtLeastTuple<T, 1>

    Either a tuple of T with length at least 1 or just T itself.

    +MaybeTuple | augment-vir - v31.5.0

    Type Alias MaybeTuple<T>

    MaybeTuple: T | AtLeastTuple<T, 1>

    Either a tuple of T with length at least 1 or just T itself.

    Type Parameters

    • T
    +
    diff --git a/types/MinMax.html b/types/MinMax.html index 9f105b27..d6a905c1 100644 --- a/types/MinMax.html +++ b/types/MinMax.html @@ -1,2 +1,2 @@ -MinMax | augment-vir - v31.4.0

    Type Alias MinMax

    MinMax: { max: number; min: number }

    Type declaration

    • max: number
    • min: number
    +MinMax | augment-vir - v31.5.0

    Type Alias MinMax

    MinMax: { max: number; min: number }

    Type declaration

    • max: number
    • min: number
    diff --git a/types/MochaNode.html b/types/MochaNode.html index 608b204e..048cfdc1 100644 --- a/types/MochaNode.html +++ b/types/MochaNode.html @@ -1,3 +1,3 @@ -MochaNode | augment-vir - v31.4.0

    Type Alias MochaNode

    Any Mocha context node inside MochaTestContext.

    +MochaNode | augment-vir - v31.5.0
    +
    diff --git a/types/MochaRoot.html b/types/MochaRoot.html index 9ed3b147..b03d3037 100644 --- a/types/MochaRoot.html +++ b/types/MochaRoot.html @@ -1,3 +1,3 @@ -MochaRoot | augment-vir - v31.4.0

    Type Alias MochaRoot

    MochaRoot: { root: true; title: "" }

    The root context inside MochaTestContext.

    +MochaRoot | augment-vir - v31.5.0

    Type Alias MochaRoot

    MochaRoot: { root: true; title: "" }

    The root context inside MochaTestContext.

    Type declaration

    • root: true
    • title: ""
    +
    diff --git a/types/MochaSuite.html b/types/MochaSuite.html index 18617ce6..2b5c5103 100644 --- a/types/MochaSuite.html +++ b/types/MochaSuite.html @@ -1,3 +1,3 @@ -MochaSuite | augment-vir - v31.4.0

    Type Alias MochaSuite

    MochaSuite: {
        ctx: { test: MochaTest };
        parent: MochaNode;
        root: false;
        suites: MochaSuite[];
        tests: MochaSuite[];
        title: string;
    }

    An individual test suite inside MochaTestContext.

    +MochaSuite | augment-vir - v31.5.0

    Type Alias MochaSuite

    MochaSuite: {
        ctx: { test: MochaTest };
        parent: MochaNode;
        root: false;
        suites: MochaSuite[];
        tests: MochaSuite[];
        title: string;
    }

    An individual test suite inside MochaTestContext.

    Type declaration

    +
    diff --git a/types/MochaTest.html b/types/MochaTest.html index dc97fda6..5b443e96 100644 --- a/types/MochaTest.html +++ b/types/MochaTest.html @@ -1,5 +1,5 @@ -MochaTest | augment-vir - v31.4.0

    Type Alias MochaTest

    MochaTest: {
        ctx: { test: MochaTest };
        fn: AnyFunction;
        id: string;
        parent: MochaNode;
        root?: undefined;
        title: string;
        type: "test";
    }

    An individual test context inside MochaTestContext.

    +MochaTest | augment-vir - v31.5.0

    Type Alias MochaTest

    MochaTest: {
        ctx: { test: MochaTest };
        fn: AnyFunction;
        id: string;
        parent: MochaNode;
        root?: undefined;
        title: string;
        type: "test";
    }

    An individual test context inside MochaTestContext.

    Type declaration

    • ctx: { test: MochaTest }
    • fn: AnyFunction

      The current test callback.

    • id: string
    • parent: MochaNode
    • Optionalroot?: undefined
    • title: string

      The current test name.

    • type: "test"
    +
    diff --git a/types/MochaTestContext.html b/types/MochaTestContext.html index 4ad1bd73..937d06b0 100644 --- a/types/MochaTestContext.html +++ b/types/MochaTestContext.html @@ -1,5 +1,5 @@ -MochaTestContext | augment-vir - v31.4.0

    Type Alias MochaTestContext

    MochaTestContext: Readonly<{ test: MochaTest }> & {
        snapshotCount?: { [TestName in string]: number };
    }

    The test context for web-test-runner or +MochaTestContext | augment-vir - v31.5.0

    Type Alias MochaTestContext

    MochaTestContext: Readonly<{ test: MochaTest }> & {
        snapshotCount?: { [TestName in string]: number };
    }

    The test context for web-test-runner or other Mocha-style test runners.

    Type declaration

    • OptionalsnapshotCount?: { [TestName in string]: number }

      Added for use by assertSnapshot.

    +
    diff --git a/types/NarrowToActual.html b/types/NarrowToActual.html index 600ef837..50acd6c8 100644 --- a/types/NarrowToActual.html +++ b/types/NarrowToActual.html @@ -1,7 +1,7 @@ -NarrowToActual | augment-vir - v31.4.0

    Type Alias NarrowToActual<Actual, Expected>

    NarrowToActual: Extract<Actual, Expected> extends never
        ? Extract<Expected, Actual> extends never
            ? Expected extends Actual ? Expected : never
            : Extract<Expected, Actual>
        : Extract<Actual, Expected>

    Narrows the given Expected type to the given Actual type as much as possible, or falls back +NarrowToActual | augment-vir - v31.5.0

    Type Alias NarrowToActual<Actual, Expected>

    NarrowToActual: Extract<Actual, Expected> extends never
        ? Extract<Expected, Actual> extends never
            ? Expected extends Actual ? Expected : never
            : Extract<Expected, Actual>
        : Extract<Actual, Expected>

    Narrows the given Expected type to the given Actual type as much as possible, or falls back to just Expected itself.

    Type Parameters

    • Actual
    • Expected
    -
    +
    diff --git a/types/NarrowToExpected.html b/types/NarrowToExpected.html index 6f1ad693..f1531b84 100644 --- a/types/NarrowToExpected.html +++ b/types/NarrowToExpected.html @@ -1,7 +1,7 @@ -NarrowToExpected | augment-vir - v31.4.0

    Type Alias NarrowToExpected<Actual, Expected>

    NarrowToExpected: Extract<Expected, Actual> extends never
        ? Extract<Actual, Expected> extends never
            ? Expected extends Actual ? Expected : never
            : Extract<Actual, Expected>
        : Extract<Expected, Actual>

    Narrows the given Actual type to the given Expected type as much as possible, or falls back +NarrowToExpected | augment-vir - v31.5.0

    Type Alias NarrowToExpected<Actual, Expected>

    NarrowToExpected: Extract<Expected, Actual> extends never
        ? Extract<Actual, Expected> extends never
            ? Expected extends Actual ? Expected : never
            : Extract<Actual, Expected>
        : Extract<Expected, Actual>

    Narrows the given Actual type to the given Expected type as much as possible, or falls back to just Expected itself.

    Type Parameters

    • Actual
    • Expected
    -
    +
    diff --git a/types/NoInputsFunction.html b/types/NoInputsFunction.html index 113d432e..71113497 100644 --- a/types/NoInputsFunction.html +++ b/types/NoInputsFunction.html @@ -1,3 +1,3 @@ -NoInputsFunction | augment-vir - v31.4.0

    Type Alias NoInputsFunction<Return>

    NoInputsFunction: () => Return

    A Function with no inputs and a return type of Return (which defaults to any).

    +NoInputsFunction | augment-vir - v31.5.0

    Type Alias NoInputsFunction<Return>

    NoInputsFunction: () => Return

    A Function with no inputs and a return type of Return (which defaults to any).

    Type Parameters

    • Return = any

    Type declaration

    +
    diff --git a/types/NodeTestContext.html b/types/NodeTestContext.html index a98beaa4..51178b98 100644 --- a/types/NodeTestContext.html +++ b/types/NodeTestContext.html @@ -1,4 +1,4 @@ -NodeTestContext | augment-vir - v31.4.0

    Type Alias NodeTestContext

    NodeTestContext: Readonly<NodeTestContextImport> & {
        snapshotCount?: { [TestName in string]: number };
    }

    The test context for Node.js's test runner.

    +NodeTestContext | augment-vir - v31.5.0

    Type Alias NodeTestContext

    NodeTestContext: Readonly<NodeTestContextImport> & {
        snapshotCount?: { [TestName in string]: number };
    }

    The test context for Node.js's test runner.

    Type declaration

    • OptionalsnapshotCount?: { [TestName in string]: number }

      Added for use by assertSnapshot.

    +
    diff --git a/types/NpmWorkspace.html b/types/NpmWorkspace.html index 32b847ff..4ffb5b8e 100644 --- a/types/NpmWorkspace.html +++ b/types/NpmWorkspace.html @@ -1,3 +1,3 @@ -NpmWorkspace | augment-vir - v31.4.0

    Type Alias NpmWorkspace

    NpmWorkspace: PackageJson & {
        _id: string;
        deduped: boolean;
        dev: boolean;
        from: string[];
        inBundle: boolean;
        location: string;
        overridden: boolean;
        path: string;
        pkgid: string;
        queryContext: UnknownObject;
        realpath: string;
        resolved: null;
        to: string[];
    }

    An npm workspace object. This is the return type for queryNpmWorkspace.

    +NpmWorkspace | augment-vir - v31.5.0

    Type Alias NpmWorkspace

    NpmWorkspace: PackageJson & {
        _id: string;
        deduped: boolean;
        dev: boolean;
        from: string[];
        inBundle: boolean;
        location: string;
        overridden: boolean;
        path: string;
        pkgid: string;
        queryContext: UnknownObject;
        realpath: string;
        resolved: null;
        to: string[];
    }

    An npm workspace object. This is the return type for queryNpmWorkspace.

    +
    diff --git a/types/Overwrite.html b/types/Overwrite.html index 8fdf1e6d..4089bf85 100644 --- a/types/Overwrite.html +++ b/types/Overwrite.html @@ -1,3 +1,3 @@ -Overwrite | augment-vir - v31.4.0

    Type Alias Overwrite<T, U>

    Overwrite: Pick<T, Exclude<keyof T, keyof U>> & U

    Replace properties in T with properties in U.

    +Overwrite | augment-vir - v31.5.0

    Type Alias Overwrite<T, U>

    Overwrite: Pick<T, Exclude<keyof T, keyof U>> & U

    Replace properties in T with properties in U.

    Type Parameters

    • T
    • U
    +
    diff --git a/types/PartialWithNullable.html b/types/PartialWithNullable.html index 7bf2d931..5c626565 100644 --- a/types/PartialWithNullable.html +++ b/types/PartialWithNullable.html @@ -1,3 +1,3 @@ -PartialWithNullable | augment-vir - v31.4.0

    Type Alias PartialWithNullable<T>

    PartialWithNullable: { [Prop in keyof T]?: T[Prop] | null }

    Allow T to be partial or have null or undefined as the value for any of its keys.

    +PartialWithNullable | augment-vir - v31.5.0

    Type Alias PartialWithNullable<T>

    PartialWithNullable: { [Prop in keyof T]?: T[Prop] | null }

    Allow T to be partial or have null or undefined as the value for any of its keys.

    Type Parameters

    +
    diff --git a/types/PartialWithUndefined.html b/types/PartialWithUndefined.html index 824f5922..0def2fdf 100644 --- a/types/PartialWithUndefined.html +++ b/types/PartialWithUndefined.html @@ -1,3 +1,3 @@ -PartialWithUndefined | augment-vir - v31.4.0

    Type Alias PartialWithUndefined<T>

    PartialWithUndefined: { [Prop in keyof T]?: T[Prop] }

    Allow T to be partial or have undefined as the value for any of its keys.

    +PartialWithUndefined | augment-vir - v31.5.0

    Type Alias PartialWithUndefined<T>

    PartialWithUndefined: { [Prop in keyof T]?: T[Prop] }

    Allow T to be partial or have undefined as the value for any of its keys.

    Type Parameters

    +
    diff --git a/types/PickCollapsedSelection.html b/types/PickCollapsedSelection.html index 27d9f748..d80f28da 100644 --- a/types/PickCollapsedSelection.html +++ b/types/PickCollapsedSelection.html @@ -1,4 +1,4 @@ -PickCollapsedSelection | augment-vir - v31.4.0

    Type Alias PickCollapsedSelection<Full, Selection, Depth>

    PickCollapsedSelection: Depth extends TsTooMuchRecursion
        ? "Error: recursive object depth is too deep."
        : KeyCount<ExcludeEmpty<NonNullable<SelectFrom<Full, Selection, Depth>>>> extends 1
            ? Selection[keyof SelectFrom<Full, Selection, Depth>] extends GenericSelectionSet
                ?
                    | PickCollapsedSelection<
                        NonNullable<Full[keyof SelectFrom<Full, Selection, Depth>]>,
                        Selection[keyof SelectFrom<Full, Selection, Depth>],
                        TsRecurse<Depth>,
                    >
                    | Extract<
                        Full[keyof SelectFrom<Full, Selection, Depth>],
                        undefined | null,
                    >
                : Values<SelectFrom<Full, Selection, Depth>>
            : SelectFrom<Full, Selection, Depth>

    Collapses a selected value to the first part of the selection that contains more than 1 key or +PickCollapsedSelection | augment-vir - v31.5.0

    Type Alias PickCollapsedSelection<Full, Selection, Depth>

    PickCollapsedSelection: Depth extends TsTooMuchRecursion
        ? "Error: recursive object depth is too deep."
        : KeyCount<ExcludeEmpty<NonNullable<SelectFrom<Full, Selection, Depth>>>> extends 1
            ? Selection[keyof SelectFrom<Full, Selection, Depth>] extends GenericSelectionSet
                ?
                    | PickCollapsedSelection<
                        NonNullable<Full[keyof SelectFrom<Full, Selection, Depth>]>,
                        Selection[keyof SelectFrom<Full, Selection, Depth>],
                        TsRecurse<Depth>,
                    >
                    | Extract<
                        Full[keyof SelectFrom<Full, Selection, Depth>],
                        undefined | null,
                    >
                : Values<SelectFrom<Full, Selection, Depth>>
            : SelectFrom<Full, Selection, Depth>

    Collapses a selected value to the first part of the selection that contains more than 1 key or that is not an object. This produces the output type for selectCollapsedFrom.

    Type Parameters

    +
    diff --git a/types/PrismaAddModelData.html b/types/PrismaAddModelData.html index 9bcc2f2e..2a9c892c 100644 --- a/types/PrismaAddModelData.html +++ b/types/PrismaAddModelData.html @@ -1,7 +1,7 @@ -PrismaAddModelData | augment-vir - v31.4.0

    Type Alias PrismaAddModelData<PrismaClient>

    PrismaAddModelData:
        | Readonly<PrismaAllModelsCreate<PrismaClient>>
        | ReadonlyArray<Readonly<PrismaAllModelsCreate<PrismaClient>>>

    Params for prisma.client.addData(). This is similar to PrismaAllModelsCreate but allows +PrismaAddModelData | augment-vir - v31.5.0

    Type Alias PrismaAddModelData<PrismaClient>

    PrismaAddModelData:
        | Readonly<PrismaAllModelsCreate<PrismaClient>>
        | ReadonlyArray<Readonly<PrismaAllModelsCreate<PrismaClient>>>

    Params for prisma.client.addData(). This is similar to PrismaAllModelsCreate but allows an array of PrismaAllModelsCreate for sequential data creation.

    Type Parameters

    import {PrismaAddModelData} from '@augment-vir/common';
    import type {PrismaClient} from '@prisma/client';

    const mockData: PrismaAddModelData<PrismaClient> = [
    {
    user: {
    mockUser1: {
    first_name: 'one',
    id: 123,
    // etc.
    },
    mockUser2: {
    first_name: 'two',
    id: 124,
    authRole: 'user',
    // etc.
    },
    },
    },
    {
    region: [
    {
    id: 1,
    name: 'North America',
    // etc.
    },
    {
    id: 2,
    name: 'Europe',
    // etc.
    },
    ],
    },
    ];
    +
    diff --git a/types/PrismaAllBasicModels.html b/types/PrismaAllBasicModels.html index 9986dc2d..3a2a371e 100644 --- a/types/PrismaAllBasicModels.html +++ b/types/PrismaAllBasicModels.html @@ -1,3 +1,3 @@ -PrismaAllBasicModels | augment-vir - v31.4.0

    Type Alias PrismaAllBasicModels<PrismaClient>

    PrismaAllBasicModels: Partial<
        {
            [ModelName in PrismaModelName<PrismaClient>]: PrismaBasicModel<
                PrismaClient,
                ModelName,
            >[]
        },
    >

    Basic model entries for all models in the database.

    +PrismaAllBasicModels | augment-vir - v31.5.0

    Type Alias PrismaAllBasicModels<PrismaClient>

    PrismaAllBasicModels: Partial<
        {
            [ModelName in PrismaModelName<PrismaClient>]: PrismaBasicModel<
                PrismaClient,
                ModelName,
            >[]
        },
    >

    Basic model entries for all models in the database.

    Type Parameters

    +
    diff --git a/types/PrismaAllModelsCreate.html b/types/PrismaAllModelsCreate.html index f9f80c66..cef01248 100644 --- a/types/PrismaAllModelsCreate.html +++ b/types/PrismaAllModelsCreate.html @@ -1,7 +1,7 @@ -PrismaAllModelsCreate | augment-vir - v31.4.0

    Type Alias PrismaAllModelsCreate<PrismaClient>

    PrismaAllModelsCreate: Readonly<
        Partial<
            {
                [Model in PrismaModelName<PrismaClient>]:
                    | Readonly<PrismaKeyedModelCreate<PrismaClient, Model>>
                    | ReadonlyArray<Readonly<PrismaModelCreate<PrismaClient, Model>>>
            },
        >,
    >

    Model create data stored by model name in either array or keyed form. Used in +PrismaAllModelsCreate | augment-vir - v31.5.0

    Type Alias PrismaAllModelsCreate<PrismaClient>

    PrismaAllModelsCreate: Readonly<
        Partial<
            {
                [Model in PrismaModelName<PrismaClient>]:
                    | Readonly<PrismaKeyedModelCreate<PrismaClient, Model>>
                    | ReadonlyArray<Readonly<PrismaModelCreate<PrismaClient, Model>>>
            },
        >,
    >

    Model create data stored by model name in either array or keyed form. Used in prisma.client.addData() from @augment-vir/node.

    Type Parameters

    import {PrismaKeyedModelCreate} from '@augment-vir/common';
    import type {PrismaClient} from '@prisma/client';

    const mockData: ModelCreateData<PrismaClient> = {
    user: {
    mockUser1: {
    first_name: 'one',
    id: 123,
    // etc.
    },
    mockUser2: {
    first_name: 'two',
    id: 124,
    auth_role: 'user',
    // etc.
    },
    },
    region: [
    {
    id: 1,
    name: 'North America',
    // etc.
    },
    {
    id: 2,
    name: 'Europe',
    // etc.
    },
    ],
    };
    +
    diff --git a/types/PrismaBasicModel.html b/types/PrismaBasicModel.html index e49992ac..2649d26c 100644 --- a/types/PrismaBasicModel.html +++ b/types/PrismaBasicModel.html @@ -1,6 +1,6 @@ -PrismaBasicModel | augment-vir - v31.4.0

    Type Alias PrismaBasicModel<PrismaClient, Model>

    PrismaBasicModel: PrismaClient["model"][Model]["payload"]["scalars"]

    A basic model entry with only its immediate properties.

    +PrismaBasicModel | augment-vir - v31.5.0

    Type Alias PrismaBasicModel<PrismaClient, Model>

    PrismaBasicModel: PrismaClient["model"][Model]["payload"]["scalars"]

    A basic model entry with only its immediate properties.

    Type Parameters

    import type {PrismaClient} from '@prisma/client';
    import type {PrismaBasicModel} from '@augment-vir/common';

    function doThing(fullModel: PrismaBasicModel<PrismaClient, 'user'>) {}
    +
    diff --git a/types/PrismaDataDumpOptions.html b/types/PrismaDataDumpOptions.html index 748ac85f..30c7ea7f 100644 --- a/types/PrismaDataDumpOptions.html +++ b/types/PrismaDataDumpOptions.html @@ -1,4 +1,4 @@ -PrismaDataDumpOptions | augment-vir - v31.4.0

    Type Alias PrismaDataDumpOptions

    PrismaDataDumpOptions: { limit: number; omitFields: string[] }

    Options for prisma.client.dumpData.

    +PrismaDataDumpOptions | augment-vir - v31.5.0

    Type Alias PrismaDataDumpOptions

    PrismaDataDumpOptions: { limit: number; omitFields: string[] }

    Options for prisma.client.dumpData.

    Type declaration

    • limit: number

      The max number of entries to load per model. Set to 0 to remove this limit altogether (which could be very expensive for your database).

      100
      @@ -7,4 +7,4 @@
       
    • omitFields: string[]

      Strings to omit from the dumped data. For testability, omitting date or UUID id fields is a common practice.

    +
    diff --git a/types/PrismaFullModel.html b/types/PrismaFullModel.html index 84c92e7a..3d511555 100644 --- a/types/PrismaFullModel.html +++ b/types/PrismaFullModel.html @@ -1,6 +1,6 @@ -PrismaFullModel | augment-vir - v31.4.0

    Type Alias PrismaFullModel<PrismaClient, Model>

    PrismaFullModel: ExpandPrismaTypeMapPayload<
        PrismaClient[Model][symbol]["types"]["payload"],
    >

    A full model entry with all relations from the given Prisma type map and model name.

    +PrismaFullModel | augment-vir - v31.5.0

    Type Alias PrismaFullModel<PrismaClient, Model>

    PrismaFullModel: ExpandPrismaTypeMapPayload<
        PrismaClient[Model][symbol]["types"]["payload"],
    >

    A full model entry with all relations from the given Prisma type map and model name.

    Type Parameters

    import type {Prisma} from '@prisma/client';
    import type {FullPrismaModel} from '@augment-vir/common';

    function doThing(fullModel: FullModel<Prisma.TypeMap, 'User'>) {}
    +
    diff --git a/types/PrismaKeyedModelCreate.html b/types/PrismaKeyedModelCreate.html index 1e1a24b3..4a3077ff 100644 --- a/types/PrismaKeyedModelCreate.html +++ b/types/PrismaKeyedModelCreate.html @@ -1,6 +1,6 @@ -PrismaKeyedModelCreate | augment-vir - v31.4.0

    Type Alias PrismaKeyedModelCreate<PrismaClient, Model>

    PrismaKeyedModelCreate: {
        [EntryName in string]: PrismaModelCreate<PrismaClient, Model>
    }

    A type for creating multiple Prisma create mocks that are named for future reference.

    +PrismaKeyedModelCreate | augment-vir - v31.5.0

    Type Alias PrismaKeyedModelCreate<PrismaClient, Model>

    PrismaKeyedModelCreate: {
        [EntryName in string]: PrismaModelCreate<PrismaClient, Model>
    }

    A type for creating multiple Prisma create mocks that are named for future reference.

    Type Parameters

    import {PrismaKeyedModelCreate} from '@augment-vir/common';
    import type {PrismaClient} from '@prisma/client';

    const mockUsers = {
    mockUser1: {
    first_name: 'one',
    id: 123,
    // etc.
    },
    mockUser2: {
    first_name: 'two',
    id: 124,
    auth_role: 'user',
    // etc.
    },
    } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
    +
    diff --git a/types/PrismaMigrationStatus.html b/types/PrismaMigrationStatus.html index 797da72c..2ca18fd0 100644 --- a/types/PrismaMigrationStatus.html +++ b/types/PrismaMigrationStatus.html @@ -1,3 +1,3 @@ -PrismaMigrationStatus | augment-vir - v31.4.0

    Type Alias PrismaMigrationStatus

    PrismaMigrationStatus: {
        totalMigrations: number;
        unappliedMigrations: string[];
    }

    Output of prisma.migration.status.

    +PrismaMigrationStatus | augment-vir - v31.5.0

    Type Alias PrismaMigrationStatus

    PrismaMigrationStatus: {
        totalMigrations: number;
        unappliedMigrations: string[];
    }

    Output of prisma.migration.status.

    Type declaration

    • totalMigrations: number
    • unappliedMigrations: string[]
    +
    diff --git a/types/PrismaModelCreate.html b/types/PrismaModelCreate.html index 2e05938e..faad152f 100644 --- a/types/PrismaModelCreate.html +++ b/types/PrismaModelCreate.html @@ -1,6 +1,6 @@ -PrismaModelCreate | augment-vir - v31.4.0

    Type Alias PrismaModelCreate<PrismaClient, Model>

    PrismaModelCreate: NonNullable<Parameters<PrismaClient[Model]["create"]>[0]> extends {
        data?: infer Data;
    }
        ? NonNullable<Data> & Partial<
            {
                "[prismaModelCreateExclude]": true;
                "[prismaModelCreateOmitId]": true;
            },
        >
        : `ERROR: failed to infer creation entry for model '${Model}'`

    Extracts the creation data for a model from the given PrismaClient type.

    +PrismaModelCreate | augment-vir - v31.5.0

    Type Alias PrismaModelCreate<PrismaClient, Model>

    PrismaModelCreate: NonNullable<Parameters<PrismaClient[Model]["create"]>[0]> extends {
        data?: infer Data;
    }
        ? NonNullable<Data> & Partial<
            {
                "[prismaModelCreateExclude]": true;
                "[prismaModelCreateOmitId]": true;
            },
        >
        : `ERROR: failed to infer creation entry for model '${Model}'`

    Extracts the creation data for a model from the given PrismaClient type.

    Type Parameters

    import type {PrismaClient} from '@prisma/client';
    import type {PrismaModelCreate} from '@augment-vir/common';

    function doThing(entry: PrismaModelCreate<PrismaClient, 'User'>) {}
    +
    diff --git a/types/PrismaModelName.html b/types/PrismaModelName.html index aeade9c7..0d336f6a 100644 --- a/types/PrismaModelName.html +++ b/types/PrismaModelName.html @@ -1,6 +1,6 @@ -PrismaModelName | augment-vir - v31.4.0

    Type Alias PrismaModelName<PrismaClient>

    PrismaModelName: Exclude<keyof PrismaClient, `$${string}` | symbol>

    Extracts all model names from a generated PrismaClient.

    +PrismaModelName | augment-vir - v31.5.0

    Type Alias PrismaModelName<PrismaClient>

    PrismaModelName: Exclude<keyof PrismaClient, `$${string}` | symbol>

    Extracts all model names from a generated PrismaClient.

    Type Parameters

    import type {PrismaClient} from '@prisma/client';
    import type {PrismaModelName} from '@augment-vir/common';

    function doThing(modelName: PrismaModelName<PrismaClient>) {}
    +
    diff --git a/types/PromiseQueueItem.html b/types/PromiseQueueItem.html index d2fedb80..892bf6c1 100644 --- a/types/PromiseQueueItem.html +++ b/types/PromiseQueueItem.html @@ -1,6 +1,6 @@ -PromiseQueueItem | augment-vir - v31.4.0

    Type Alias PromiseQueueItem<T>

    PromiseQueueItem: {
        original: () => MaybePromise<T>;
        wrapper: DeferredPromise<T>;
    }

    An individual item in a PromiseQueue instance.

    +PromiseQueueItem | augment-vir - v31.5.0

    Type Alias PromiseQueueItem<T>

    PromiseQueueItem: {
        original: () => MaybePromise<T>;
        wrapper: DeferredPromise<T>;
    }

    An individual item in a PromiseQueue instance.

    Type Parameters

    • T = void

    Type declaration

    • original: () => MaybePromise<T>

      The original queue item that was added.

    • wrapper: DeferredPromise<T>

      A DeferredPromise instance with a promise that is resolved once this queue item has met its turn and has finished executing.

    +
    diff --git a/types/PromiseQueueUpdate.html b/types/PromiseQueueUpdate.html index 3765e1f8..d453125c 100644 --- a/types/PromiseQueueUpdate.html +++ b/types/PromiseQueueUpdate.html @@ -1,3 +1,3 @@ -PromiseQueueUpdate | augment-vir - v31.4.0

    Type Alias PromiseQueueUpdate<T>

    PromiseQueueUpdate: { queueSize: number } & RequireExactlyOne<
        { addedItem: PromiseQueueItem<T>; finishedItem: PromiseQueueItem<T> },
    >

    Data contained within an instance of PromiseQueueUpdateEvent.

    +PromiseQueueUpdate | augment-vir - v31.5.0

    Type Alias PromiseQueueUpdate<T>

    PromiseQueueUpdate: { queueSize: number } & RequireExactlyOne<
        { addedItem: PromiseQueueItem<T>; finishedItem: PromiseQueueItem<T> },
    >

    Data contained within an instance of PromiseQueueUpdateEvent.

    Type Parameters

    • T = unknown
    +
    diff --git a/types/PunctuationLetter.html b/types/PunctuationLetter.html index 2b69f12e..94526190 100644 --- a/types/PunctuationLetter.html +++ b/types/PunctuationLetter.html @@ -1,3 +1,3 @@ -PunctuationLetter | augment-vir - v31.4.0

    Type Alias PunctuationLetter

    PunctuationLetter: ArrayElement<typeof punctuationLetters>

    All characters that are considered punctuation.

    +PunctuationLetter | augment-vir - v31.5.0

    Type Alias PunctuationLetter

    PunctuationLetter: ArrayElement<typeof punctuationLetters>

    All characters that are considered punctuation.

    +
    diff --git a/types/QueryThroughShadowOptions.html b/types/QueryThroughShadowOptions.html index c7d7e4d2..b1debe46 100644 --- a/types/QueryThroughShadowOptions.html +++ b/types/QueryThroughShadowOptions.html @@ -1,3 +1,3 @@ -QueryThroughShadowOptions | augment-vir - v31.4.0

    Type Alias QueryThroughShadowOptions

    QueryThroughShadowOptions: PartialWithUndefined<{ all: boolean }>

    Options for queryThroughShadow.

    +QueryThroughShadowOptions | augment-vir - v31.5.0

    Type Alias QueryThroughShadowOptions

    QueryThroughShadowOptions: PartialWithUndefined<{ all: boolean }>

    Options for queryThroughShadow.

    +
    diff --git a/types/QuestionUntilConditionMetOptions.html b/types/QuestionUntilConditionMetOptions.html index 32b336c0..23fd63f7 100644 --- a/types/QuestionUntilConditionMetOptions.html +++ b/types/QuestionUntilConditionMetOptions.html @@ -1,4 +1,4 @@ -QuestionUntilConditionMetOptions | augment-vir - v31.4.0

    Type Alias QuestionUntilConditionMetOptions

    QuestionUntilConditionMetOptions: {
        invalidInputMessage: string;
        questionToAsk: string;
        tryCountMax?: number;
        verifyResponseCallback: (response: string) => boolean | Promise<boolean>;
    } & Partial<AskQuestionOptions>

    Options for askQuestionUntilConditionMet.

    +QuestionUntilConditionMetOptions | augment-vir - v31.5.0

    Type Alias QuestionUntilConditionMetOptions

    QuestionUntilConditionMetOptions: {
        invalidInputMessage: string;
        questionToAsk: string;
        tryCountMax?: number;
        verifyResponseCallback: (response: string) => boolean | Promise<boolean>;
    } & Partial<AskQuestionOptions>

    Type declaration

    • invalidInputMessage: string
    • questionToAsk: string
    • OptionaltryCountMax?: number
    • verifyResponseCallback: (response: string) => boolean | Promise<boolean>

      Callback to call with the user's response to verify if their response is valid.

    +
    diff --git a/types/RelevantArgsInput.html b/types/RelevantArgsInput.html index b072b0e4..6ee5439e 100644 --- a/types/RelevantArgsInput.html +++ b/types/RelevantArgsInput.html @@ -1,4 +1,4 @@ -RelevantArgsInput | augment-vir - v31.4.0

    Type Alias RelevantArgsInput

    RelevantArgsInput: {
        binName: string | undefined;
        errorIfNotFound?: boolean;
        fileName: string;
        rawArgs: ReadonlyArray<string>;
    }

    Input for extractRelevantArgs.

    +RelevantArgsInput | augment-vir - v31.5.0

    Type Alias RelevantArgsInput

    RelevantArgsInput: {
        binName: string | undefined;
        errorIfNotFound?: boolean;
        fileName: string;
        rawArgs: ReadonlyArray<string>;
    }

    Input for extractRelevantArgs.

    Type declaration

    • binName: string | undefined

      Executable bin name for your script. This should be the "bin" name in your package.json, or simply your package name if you have no custom bin name defined.

      See https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin for details on the bin @@ -9,4 +9,4 @@ always simply be __filename in CJS or import.meta.filename in ESM.

    • rawArgs: ReadonlyArray<string>

      Raw arguments passed to the CLI. Typically this will simply be process.argv.

    +
    diff --git a/types/RemoveFirstTupleEntry.html b/types/RemoveFirstTupleEntry.html index 22cff613..ad790629 100644 --- a/types/RemoveFirstTupleEntry.html +++ b/types/RemoveFirstTupleEntry.html @@ -1,3 +1,3 @@ -RemoveFirstTupleEntry | augment-vir - v31.4.0

    Type Alias RemoveFirstTupleEntry<T>

    RemoveFirstTupleEntry: T extends [any?, ...(infer Tail)] ? Tail : any[]

    Remove the first entry in a tuple.

    +RemoveFirstTupleEntry | augment-vir - v31.5.0

    Type Alias RemoveFirstTupleEntry<T>

    RemoveFirstTupleEntry: T extends [any?, ...(infer Tail)] ? Tail : any[]

    Remove the first entry in a tuple.

    Type Parameters

    • T extends any[]
    +
    diff --git a/types/RemoveLastTupleEntry.html b/types/RemoveLastTupleEntry.html index 1e4ce2dc..9c762a19 100644 --- a/types/RemoveLastTupleEntry.html +++ b/types/RemoveLastTupleEntry.html @@ -1,3 +1,3 @@ -RemoveLastTupleEntry | augment-vir - v31.4.0

    Type Alias RemoveLastTupleEntry<T>

    RemoveLastTupleEntry: T extends [...(infer Head), any?] ? Head : any[]

    Remove the last entry in a tuple.

    +RemoveLastTupleEntry | augment-vir - v31.5.0

    Type Alias RemoveLastTupleEntry<T>

    RemoveLastTupleEntry: T extends [...(infer Head), any?] ? Head : any[]

    Remove the last entry in a tuple.

    Type Parameters

    • T extends any[]
    +
    diff --git a/types/RequireNonVoid.html b/types/RequireNonVoid.html index 040b71ca..d604307a 100644 --- a/types/RequireNonVoid.html +++ b/types/RequireNonVoid.html @@ -1,4 +1,4 @@ -RequireNonVoid | augment-vir - v31.4.0

    Type Alias RequireNonVoid<NonVoid, SuccessType, ErrorType>

    RequireNonVoid: void extends NonVoid
        ? NonVoid extends void ? ErrorType : SuccessType
        : SuccessType

    Require that the given NonVoid parameter is not void. If it is void, the ErrorType or an +RequireNonVoid | augment-vir - v31.5.0

    Type Alias RequireNonVoid<NonVoid, SuccessType, ErrorType>

    RequireNonVoid: void extends NonVoid
        ? NonVoid extends void ? ErrorType : SuccessType
        : SuccessType

    Require that the given NonVoid parameter is not void. If it is void, the ErrorType or an error string type is returned. If it not void, the given SuccessType is returned.

    Type Parameters

    • NonVoid
    • SuccessType
    • ErrorType = "Input should not be void"
    +
    diff --git a/types/RequiredAndNotNull.html b/types/RequiredAndNotNull.html index 74e6c5b0..f6b03393 100644 --- a/types/RequiredAndNotNull.html +++ b/types/RequiredAndNotNull.html @@ -1,4 +1,4 @@ -RequiredAndNotNull | augment-vir - v31.4.0

    Type Alias RequiredAndNotNull<T>

    RequiredAndNotNull: { [P in keyof CompleteRequire<T>]-?: NonNullable<T[P]> }

    Same as the Required<> built-in type helper but this requires that each property be present and +RequiredAndNotNull | augment-vir - v31.5.0

    Type Alias RequiredAndNotNull<T>

    RequiredAndNotNull: { [P in keyof CompleteRequire<T>]-?: NonNullable<T[P]> }

    Same as the Required<> built-in type helper but this requires that each property be present and be not null.

    Type Parameters

    • T
    +
    diff --git a/types/RequiredKeysOf.html b/types/RequiredKeysOf.html index 91d31388..7e757691 100644 --- a/types/RequiredKeysOf.html +++ b/types/RequiredKeysOf.html @@ -1,4 +1,4 @@ -RequiredKeysOf | augment-vir - v31.4.0

    Type Alias RequiredKeysOf<BaseType>

    RequiredKeysOf: Exclude<
        {
            [Key in keyof BaseType]: BaseType extends Record<Key, BaseType[Key]>
                ? Key
                : never
        }[keyof BaseType],
        undefined,
    >

    Modified version of RequiredKeys from type-fest that does not require BaseType to extends +RequiredKeysOf | augment-vir - v31.5.0

    Type Alias RequiredKeysOf<BaseType>

    RequiredKeysOf: Exclude<
        {
            [Key in keyof BaseType]: BaseType extends Record<Key, BaseType[Key]>
                ? Key
                : never
        }[keyof BaseType],
        undefined,
    >

    Modified version of RequiredKeys from type-fest that does not require BaseType to extends object.

    Type Parameters

    • BaseType
    +
    diff --git a/types/RunDockerContainerCommandParams.html b/types/RunDockerContainerCommandParams.html index baea4da0..8ee484cf 100644 --- a/types/RunDockerContainerCommandParams.html +++ b/types/RunDockerContainerCommandParams.html @@ -1,4 +1,4 @@ -RunDockerContainerCommandParams | augment-vir - v31.4.0

    Type Alias RunDockerContainerCommandParams

    RunDockerContainerCommandParams: {
        command: string;
        containerNameOrId: string;
        dockerFlags?: ReadonlyArray<string>;
        envMapping?: DockerEnvMap;
        executionEnv?: Record<string, string>;
        tty?: boolean;
    }

    Parameters for docker.container.runCommand.

    +RunDockerContainerCommandParams | augment-vir - v31.5.0

    Type Alias RunDockerContainerCommandParams

    RunDockerContainerCommandParams: {
        command: string;
        containerNameOrId: string;
        dockerFlags?: ReadonlyArray<string>;
        envMapping?: DockerEnvMap;
        executionEnv?: Record<string, string>;
        tty?: boolean;
    }

    Parameters for docker.container.runCommand.

    Type declaration

    • command: string
    • containerNameOrId: string
    • OptionaldockerFlags?: ReadonlyArray<string>
    • OptionalenvMapping?: DockerEnvMap
    • OptionalexecutionEnv?: Record<string, string>
    • Optionaltty?: boolean

      Creates an interactive shell connection.

    +
    diff --git a/types/RunDockerContainerParams.html b/types/RunDockerContainerParams.html index a1a36c5c..fbc9d6f2 100644 --- a/types/RunDockerContainerParams.html +++ b/types/RunDockerContainerParams.html @@ -1,3 +1,3 @@ -RunDockerContainerParams | augment-vir - v31.4.0

    Type Alias RunDockerContainerParams

    RunDockerContainerParams: {
        command?: string;
        containerName: string;
        detach: boolean;
        dockerFlags?: ReadonlyArray<string>;
        envMapping?: DockerEnvMap;
        executionEnv?: Record<string, string>;
        imageName: string;
        platform?: string;
        portMapping?: ReadonlyArray<DockerPortMap>;
        removeWhenDone?: boolean;
        useCurrentUser?: boolean;
        volumeMapping?: ReadonlyArray<DockerVolumeMap>;
    }

    Parameters for docker.container.run.

    +RunDockerContainerParams | augment-vir - v31.5.0

    Type Alias RunDockerContainerParams

    RunDockerContainerParams: {
        command?: string;
        containerName: string;
        detach: boolean;
        dockerFlags?: ReadonlyArray<string>;
        envMapping?: DockerEnvMap;
        executionEnv?: Record<string, string>;
        imageName: string;
        platform?: string;
        portMapping?: ReadonlyArray<DockerPortMap>;
        removeWhenDone?: boolean;
        useCurrentUser?: boolean;
        volumeMapping?: ReadonlyArray<DockerVolumeMap>;
    }

    Parameters for docker.container.run.

    Type declaration

    • Optionalcommand?: string
    • containerName: string
    • detach: boolean
    • OptionaldockerFlags?: ReadonlyArray<string>
    • OptionalenvMapping?: DockerEnvMap
    • OptionalexecutionEnv?: Record<string, string>
    • imageName: string
    • Optionalplatform?: string
    • OptionalportMapping?: ReadonlyArray<DockerPortMap>
    • OptionalremoveWhenDone?: boolean
    • OptionaluseCurrentUser?: boolean
    • OptionalvolumeMapping?: ReadonlyArray<DockerVolumeMap>
    +
    diff --git a/types/RunShellCommandOptions.html b/types/RunShellCommandOptions.html index 6f47c7f9..e669e1c1 100644 --- a/types/RunShellCommandOptions.html +++ b/types/RunShellCommandOptions.html @@ -1,6 +1,6 @@ -RunShellCommandOptions | augment-vir - v31.4.0

    Type Alias RunShellCommandOptions

    RunShellCommandOptions: {
        cwd?: string;
        env?: NodeJS.ProcessEnv;
        hookUpToConsole?: boolean;
        rejectOnError?: boolean;
        shell?: string;
        stderrCallback?: (
            stderr: string,
            childProcess: ChildProcess,
        ) => MaybePromise<void> | undefined;
        stdoutCallback?: (
            stdout: string,
            childProcess: ChildProcess,
        ) => MaybePromise<void> | undefined;
    }

    Options for runShellCommand.

    +RunShellCommandOptions | augment-vir - v31.5.0

    Type Alias RunShellCommandOptions

    RunShellCommandOptions: {
        cwd?: string;
        env?: NodeJS.ProcessEnv;
        hookUpToConsole?: boolean;
        rejectOnError?: boolean;
        shell?: string;
        stderrCallback?: (
            stderr: string,
            childProcess: ChildProcess,
        ) => MaybePromise<void> | undefined;
        stdoutCallback?: (
            stdout: string,
            childProcess: ChildProcess,
        ) => MaybePromise<void> | undefined;
    }

    Options for runShellCommand.

    Type declaration

    • Optionalcwd?: string
    • Optionalenv?: NodeJS.ProcessEnv
    • OptionalhookUpToConsole?: boolean

      Automatically hook up stdout and stderr printing to the caller's console methods.

    • OptionalrejectOnError?: boolean
    • Optionalshell?: string
    • OptionalstderrCallback?: (stderr: string, childProcess: ChildProcess) => MaybePromise<void> | undefined

      Callback to call whenever the shell logs to stderr.

    • OptionalstdoutCallback?: (stdout: string, childProcess: ChildProcess) => MaybePromise<void> | undefined

      Callback to call whenever the shell logs to stdout.

    +
    diff --git a/types/SelectFrom.html b/types/SelectFrom.html index bd994682..7495106a 100644 --- a/types/SelectFrom.html +++ b/types/SelectFrom.html @@ -1,4 +1,4 @@ -SelectFrom | augment-vir - v31.4.0

    Type Alias SelectFrom<Full, Selection, Depth>

    SelectFrom: Depth extends TsTooMuchRecursion
        ? ["Error: recursive object depth is too deep."]
        : Full extends ReadonlyArray<infer Element extends any>
            ? (
                | SelectFrom<Extract<Element, AnyObject>, Selection, TsRecurse<Depth>>
                | Exclude<Element, AnyObject>
            )[]
            : MakeKeysOptional<
                Full,
                {
                    -readonly [Key in keyof Selection as Selection[Key] extends false
                        ? never
                        : Key extends keyof Full ? Key : never]:
                        | (
                            Selection[Key] extends GenericSelectionSet
                                ? SelectFrom<
                                    NonNullable<Extract<(...)[(...)], AnyObject>>,
                                    Selection[Key],
                                    TsRecurse<Depth>,
                                >
                                : Full[Key]
                        )
                        | Exclude<Full[Key], AnyObject>
                },
            >

    Performs a SQL-like nested selection on an object, extracting the selected values. This produces +SelectFrom | augment-vir - v31.5.0

    Type Alias SelectFrom<Full, Selection, Depth>

    SelectFrom: Depth extends TsTooMuchRecursion
        ? ["Error: recursive object depth is too deep."]
        : Full extends ReadonlyArray<infer Element extends any>
            ? (
                | SelectFrom<Extract<Element, AnyObject>, Selection, TsRecurse<Depth>>
                | Exclude<Element, AnyObject>
            )[]
            : MakeKeysOptional<
                Full,
                {
                    -readonly [Key in keyof Selection as Selection[Key] extends false
                        ? never
                        : Key extends keyof Full ? Key : never]:
                        | (
                            Selection[Key] extends GenericSelectionSet
                                ? SelectFrom<
                                    NonNullable<Extract<(...)[(...)], AnyObject>>,
                                    Selection[Key],
                                    TsRecurse<Depth>,
                                >
                                : Full[Key]
                        )
                        | Exclude<Full[Key], AnyObject>
                },
            >

    Performs a SQL-like nested selection on an object, extracting the selected values. This produces the output type for selectFrom.

    Type Parameters

    +
    diff --git a/types/SelectionSet.html b/types/SelectionSet.html index a5e81921..0e65f3b6 100644 --- a/types/SelectionSet.html +++ b/types/SelectionSet.html @@ -1,3 +1,3 @@ -SelectionSet | augment-vir - v31.4.0

    Type Alias SelectionSet<Full, Depth>

    SelectionSet: IsAny<Full> extends true
        ? any
        : Depth extends TsTooMuchRecursion
            ? boolean
            : Full extends ReadonlyArray<infer FullChild extends AnyObject>
                ? SelectionSet<FullChild, TsRecurse<Depth>>
                : Partial<
                    {
                        [Key in keyof Full]: IsNever<
                            Exclude<Full[Key], SelectionTypesToPreserve>,
                        > extends true
                            ? boolean
                            :
                                | UnionToIntersection<
                                    SelectionSet<NonNullable<(...)[(...)]>, TsRecurse<Depth>>,
                                >
                                | boolean
                    },
                >

    Defines a selection set for a given object type. This is used in SelectFrom.

    +SelectionSet | augment-vir - v31.5.0

    Type Alias SelectionSet<Full, Depth>

    SelectionSet: IsAny<Full> extends true
        ? any
        : Depth extends TsTooMuchRecursion
            ? boolean
            : Full extends ReadonlyArray<infer FullChild extends AnyObject>
                ? SelectionSet<FullChild, TsRecurse<Depth>>
                : Partial<
                    {
                        [Key in keyof Full]: IsNever<
                            Exclude<Full[Key], SelectionTypesToPreserve>,
                        > extends true
                            ? boolean
                            :
                                | UnionToIntersection<
                                    SelectionSet<NonNullable<(...)[(...)]>, TsRecurse<Depth>>,
                                >
                                | boolean
                    },
                >

    Defines a selection set for a given object type. This is used in SelectFrom.

    Type Parameters

    +
    diff --git a/types/SetOptionalAndNullable.html b/types/SetOptionalAndNullable.html index 11ee026a..419a98af 100644 --- a/types/SetOptionalAndNullable.html +++ b/types/SetOptionalAndNullable.html @@ -1,3 +1,3 @@ -SetOptionalAndNullable | augment-vir - v31.4.0

    Type Alias SetOptionalAndNullable<OriginalObjectGeneric, OptionalKeysGeneric>

    SetOptionalAndNullable: Simplify<
        Except<OriginalObjectGeneric, OptionalKeysGeneric> & {
            [PropKey in OptionalKeysGeneric]?:
                | OriginalObjectGeneric[PropKey]
                | null
        },
    >

    Sets a key as optional but also nullable.

    +SetOptionalAndNullable | augment-vir - v31.5.0

    Type Alias SetOptionalAndNullable<OriginalObjectGeneric, OptionalKeysGeneric>

    SetOptionalAndNullable: Simplify<
        Except<OriginalObjectGeneric, OptionalKeysGeneric> & {
            [PropKey in OptionalKeysGeneric]?:
                | OriginalObjectGeneric[PropKey]
                | null
        },
    >

    Sets a key as optional but also nullable.

    Type Parameters

    +
    diff --git a/types/SetRequiredAndNotNull.html b/types/SetRequiredAndNotNull.html index 7a7aa469..dfdaf793 100644 --- a/types/SetRequiredAndNotNull.html +++ b/types/SetRequiredAndNotNull.html @@ -1,4 +1,4 @@ -SetRequiredAndNotNull | augment-vir - v31.4.0

    Type Alias SetRequiredAndNotNull<T, K>

    SetRequiredAndNotNull: Omit<T, K> & CompleteRequire<
        { [PropertyName in K]: NonNullable<T[PropertyName]> },
    >

    Require only a subset of object properties and require that they be not null. This is +SetRequiredAndNotNull | augment-vir - v31.5.0

    Type Alias SetRequiredAndNotNull<T, K>

    SetRequiredAndNotNull: Omit<T, K> & CompleteRequire<
        { [PropertyName in K]: NonNullable<T[PropertyName]> },
    >

    Require only a subset of object properties and require that they be not null. This is particularly useful in conjunction with the "exactOptionalPropertyTypes" tsconfig flag.

    Type Parameters

    • T
    • K extends keyof T
    +
    diff --git a/types/ShellOutput.html b/types/ShellOutput.html index 73e90572..c5cd0470 100644 --- a/types/ShellOutput.html +++ b/types/ShellOutput.html @@ -1,3 +1,3 @@ -ShellOutput | augment-vir - v31.4.0

    Type Alias ShellOutput

    ShellOutput: {
        error: undefined | Error;
        exitCode: number | undefined;
        exitSignal: NodeJS.Signals | undefined;
        stderr: string;
        stdout: string;
    }

    All output from runShellCommand.

    +ShellOutput | augment-vir - v31.5.0

    Type Alias ShellOutput

    ShellOutput: {
        error: undefined | Error;
        exitCode: number | undefined;
        exitSignal: NodeJS.Signals | undefined;
        stderr: string;
        stdout: string;
    }

    All output from runShellCommand.

    Type declaration

    • error: undefined | Error
    • exitCode: number | undefined
    • exitSignal: NodeJS.Signals | undefined
    • stderr: string
    • stdout: string
    +
    diff --git a/types/ToLogStringParams.html b/types/ToLogStringParams.html index a156945d..54d92871 100644 --- a/types/ToLogStringParams.html +++ b/types/ToLogStringParams.html @@ -1,3 +1,3 @@ -ToLogStringParams | augment-vir - v31.4.0

    Type Alias ToLogStringParams

    ToLogStringParams: {
        args: ReadonlyArray<any>;
        colorKey: LogColorKey;
        options: Readonly<LoggerOptions>;
    }

    Parameters for toLogString.

    +ToLogStringParams | augment-vir - v31.5.0

    Type Alias ToLogStringParams

    ToLogStringParams: {
        args: ReadonlyArray<any>;
        colorKey: LogColorKey;
        options: Readonly<LoggerOptions>;
    }

    Parameters for toLogString.

    Type declaration

    +
    diff --git a/types/Truthy.html b/types/Truthy.html index fe95846b..51a5dd20 100644 --- a/types/Truthy.html +++ b/types/Truthy.html @@ -1,7 +1,7 @@ -Truthy | augment-vir - v31.4.0

    Type Alias Truthy<T>

    Truthy: Exclude<T, FalsyValue>

    Narrows the given type parameter T to all its truthy sub-types.

    +Truthy | augment-vir - v31.5.0

    Type Alias Truthy<T>

    Truthy: Exclude<T, FalsyValue>

    Narrows the given type parameter T to all its truthy sub-types.

    Type Parameters

    • T

      The original type to narrow.

    import type {Truthy} from '@augment-vir/assert';

    type MyTruthy = Truthy<0 | undefined | string>; // string
    +
    diff --git a/types/TsRecurse.html b/types/TsRecurse.html index 4a77d66a..69e809c5 100644 --- a/types/TsRecurse.html +++ b/types/TsRecurse.html @@ -1,6 +1,6 @@ -TsRecurse | augment-vir - v31.4.0

    Type Alias TsRecurse<CurrentRecursion>

    TsRecurse: TsRecursionArray[CurrentRecursion] extends TsRecursionTracker
        ? TsRecursionArray[CurrentRecursion]
        : TsTooMuchRecursion

    Increments a TypeScript recursion depth tracker.

    +TsRecurse | augment-vir - v31.5.0

    Type Alias TsRecurse<CurrentRecursion>

    TsRecurse: TsRecursionArray[CurrentRecursion] extends TsRecursionTracker
        ? TsRecursionArray[CurrentRecursion]
        : TsTooMuchRecursion

    Increments a TypeScript recursion depth tracker.

    Type Parameters

    import type {
    TsRecursionTracker,
    TsRecursionStart,
    TsRecurse,
    TsTooMuchRecursion,
    } from '@augment-vir/common';

    export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
    Depth extends TsTooMuchRecursion
    ? 'Error: recursive object depth is too deep.'
    : SomeType<TsRecurse<Depth>>;
    +
    diff --git a/types/TsRecursionStart.html b/types/TsRecursionStart.html index d99717e2..84e99390 100644 --- a/types/TsRecursionStart.html +++ b/types/TsRecursionStart.html @@ -1,7 +1,7 @@ -TsRecursionStart | augment-vir - v31.4.0

    Type Alias TsRecursionStart

    TsRecursionStart: 0

    This is the default starting recursion depth needed to get the full tested allowed recursion +TsRecursionStart | augment-vir - v31.5.0

    Type Alias TsRecursionStart

    TsRecursionStart: 0

    This is the default starting recursion depth needed to get the full tested allowed recursion depth.

    import type {
    TsRecursionTracker,
    TsRecursionStart,
    TsRecurse,
    TsTooMuchRecursion,
    } from '@augment-vir/common';

    export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
    Depth extends TsTooMuchRecursion
    ? 'Error: recursive object depth is too deep.'
    : SomeType<TsRecurse<Depth>>;
    +
    diff --git a/types/TsRecursionTracker.html b/types/TsRecursionTracker.html index 0da153f0..0d6c9b87 100644 --- a/types/TsRecursionTracker.html +++ b/types/TsRecursionTracker.html @@ -1,8 +1,8 @@ -TsRecursionTracker | augment-vir - v31.4.0

    Type Alias TsRecursionTracker

    TsRecursionTracker: keyof TsRecursionArray

    This is used as the baseline type for TypeScript recursion tracking indexes. Use this to manually +TsRecursionTracker | augment-vir - v31.5.0

    Type Alias TsRecursionTracker

    TsRecursionTracker: keyof TsRecursionArray

    This is used as the baseline type for TypeScript recursion tracking indexes. Use this to manually abort a type's recursion to prevent it from going too deep and throwing an error in TypeScript's language server.

    import type {
    TsRecursionTracker,
    TsRecursionStart,
    TsRecurse,
    TsTooMuchRecursion,
    } from '@augment-vir/common';

    export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
    Depth extends TsTooMuchRecursion
    ? 'Error: recursive object depth is too deep.'
    : SomeType<TsRecurse<Depth>>;
    +
    diff --git a/types/TsTooMuchRecursion.html b/types/TsTooMuchRecursion.html index fa78a8e9..c4c9c4aa 100644 --- a/types/TsTooMuchRecursion.html +++ b/types/TsTooMuchRecursion.html @@ -1,7 +1,7 @@ -TsTooMuchRecursion | augment-vir - v31.4.0

    Type Alias TsTooMuchRecursion

    TsTooMuchRecursion: 91

    Through experimentation on Typescript version 5.4.5, this is the maximum recursion depth we can +TsTooMuchRecursion | augment-vir - v31.5.0

    Type Alias TsTooMuchRecursion

    TsTooMuchRecursion: 91

    Through experimentation on Typescript version 5.4.5, this is the maximum recursion depth we can go to before TypeScript will block recursive types. Use this as the limit to type recursion.

    import type {
    TsRecursionTracker,
    TsRecursionStart,
    TsRecurse,
    TsTooMuchRecursion,
    } from '@augment-vir/common';

    export type SomeType<Depth extends TsRecursionTracker = TsRecursionStart> =
    Depth extends TsTooMuchRecursion
    ? 'Error: recursive object depth is too deep.'
    : SomeType<TsRecurse<Depth>>;
    +
    diff --git a/types/Tuple.html b/types/Tuple.html index 4d1d0d29..ec19df60 100644 --- a/types/Tuple.html +++ b/types/Tuple.html @@ -1,3 +1,3 @@ -Tuple | augment-vir - v31.4.0

    Type Alias Tuple<Element, Length>

    Tuple: Length extends Length
        ? number extends Length ? Element[] : _TupleOf<Element, Length, []>
        : never

    A tuple with entries of type Element and length of Length.

    +Tuple | augment-vir - v31.5.0

    Type Alias Tuple<Element, Length>

    Tuple: Length extends Length
        ? number extends Length ? Element[] : _TupleOf<Element, Length, []>
        : never

    A tuple with entries of type Element and length of Length.

    Type Parameters

    • Element
    • Length extends number
    +
    diff --git a/types/TypedFunction.html b/types/TypedFunction.html index f1362b69..91fbb344 100644 --- a/types/TypedFunction.html +++ b/types/TypedFunction.html @@ -1,4 +1,4 @@ -TypedFunction | augment-vir - v31.4.0

    Type Alias TypedFunction<Arguments, Return>

    TypedFunction: Arguments extends readonly any[]
        ? number extends Arguments["length"]
            ? (...args: Arguments[number][]) => Return
            : (...args: Arguments) => Return
        : void extends Arguments ? () => Return : (arg: Arguments) => Return

    Accepts an "Arguments" and "Return" generic to quickly make a function type. If "Arguments" is an +TypedFunction | augment-vir - v31.5.0

    Type Alias TypedFunction<Arguments, Return>

    TypedFunction: Arguments extends readonly any[]
        ? number extends Arguments["length"]
            ? (...args: Arguments[number][]) => Return
            : (...args: Arguments) => Return
        : void extends Arguments ? () => Return : (arg: Arguments) => Return

    Accepts an "Arguments" and "Return" generic to quickly make a function type. If "Arguments" is an array, it is spread into the full function's Parameters list. If any argument should be an array, instead of a rest parameter, put it inside of a tuple. If no arguments should be possible, pass void to "Arguments". If you need an optional argument, pass it inside of a tuple.

    @@ -6,4 +6,4 @@
    +
    diff --git a/types/UniversalBareDescribe.html b/types/UniversalBareDescribe.html index 9e6968cf..3d070ff2 100644 --- a/types/UniversalBareDescribe.html +++ b/types/UniversalBareDescribe.html @@ -1,6 +1,6 @@ -UniversalBareDescribe | augment-vir - v31.4.0

    Type Alias UniversalBareDescribe

    UniversalBareDescribe: (
        this: void,
        describeThis: string,
        callback: (this: void) => void,
    ) => void

    A minimal interface for describe. This is used in UniversalDescribe.

    +UniversalBareDescribe | augment-vir - v31.5.0

    Type Alias UniversalBareDescribe

    UniversalBareDescribe: (
        this: void,
        describeThis: string,
        callback: (this: void) => void,
    ) => void

    A minimal interface for describe. This is used in UniversalDescribe.

    Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    Type declaration

      • (this: void, describeThis: string, callback: (this: void) => void): void
      • Parameters

        • this: void
        • describeThis: string
        • callback: (this: void) => void

        Returns void

    +
    diff --git a/types/UniversalBareIt.html b/types/UniversalBareIt.html index 5849dd8a..9d088155 100644 --- a/types/UniversalBareIt.html +++ b/types/UniversalBareIt.html @@ -1,6 +1,6 @@ -UniversalBareIt | augment-vir - v31.4.0

    Type Alias UniversalBareIt

    UniversalBareIt: (
        this: void,
        doesThis: string,
        callback: UniversalItCallback,
    ) => void

    A minimal interface for it. This is used in UniversalIt.

    +UniversalBareIt | augment-vir - v31.5.0

    Type Alias UniversalBareIt

    UniversalBareIt: (
        this: void,
        doesThis: string,
        callback: UniversalItCallback,
    ) => void

    A minimal interface for it. This is used in UniversalIt.

    Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    Type declaration

    +
    diff --git a/types/UniversalDescribe.html b/types/UniversalDescribe.html index 0f61791d..8f79d3f6 100644 --- a/types/UniversalDescribe.html +++ b/types/UniversalDescribe.html @@ -1,6 +1,6 @@ -UniversalDescribe | augment-vir - v31.4.0

    Type Alias UniversalDescribe

    UniversalDescribe: UniversalBareDescribe & {
        only: UniversalBareDescribe;
        skip: UniversalBareDescribe;
    }

    The type for describe.

    +UniversalDescribe | augment-vir - v31.5.0

    Type Alias UniversalDescribe

    UniversalDescribe: UniversalBareDescribe & {
        only: UniversalBareDescribe;
        skip: UniversalBareDescribe;
    }

    The type for describe.

    Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    +
    diff --git a/types/UniversalIt.html b/types/UniversalIt.html index ea3e6dc3..47c4f40e 100644 --- a/types/UniversalIt.html +++ b/types/UniversalIt.html @@ -1,6 +1,6 @@ -UniversalIt | augment-vir - v31.4.0

    Type Alias UniversalIt

    UniversalIt: UniversalBareIt & { only: UniversalBareIt; skip: UniversalBareIt }

    The type for it.

    +UniversalIt | augment-vir - v31.5.0

    Type Alias UniversalIt

    UniversalIt: UniversalBareIt & { only: UniversalBareIt; skip: UniversalBareIt }

    The type for it.

    Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    +
    diff --git a/types/UniversalItCallback.html b/types/UniversalItCallback.html index 3120c22f..4d1c3cde 100644 --- a/types/UniversalItCallback.html +++ b/types/UniversalItCallback.html @@ -1,6 +1,6 @@ -UniversalItCallback | augment-vir - v31.4.0

    Type Alias UniversalItCallback

    UniversalItCallback: (
        this: void,
        context: UniversalTestContext,
    ) => Promise<void> | void

    An interface for an it callback. Used in UniversalBareIt.

    +UniversalItCallback | augment-vir - v31.5.0

    Type Alias UniversalItCallback

    UniversalItCallback: (
        this: void,
        context: UniversalTestContext,
    ) => Promise<void> | void

    An interface for an it callback. Used in UniversalBareIt.

    Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    Type declaration

    +
    diff --git a/types/UniversalTestContext.html b/types/UniversalTestContext.html index 71539c2e..4522f795 100644 --- a/types/UniversalTestContext.html +++ b/types/UniversalTestContext.html @@ -1,6 +1,6 @@ -UniversalTestContext | augment-vir - v31.4.0

    Type Alias UniversalTestContext

    UniversalTestContext: NodeTestContext | MochaTestContext

    Test context provided by it's callback.

    +UniversalTestContext | augment-vir - v31.5.0

    Type Alias UniversalTestContext

    UniversalTestContext: NodeTestContext | MochaTestContext

    Test context provided by it's callback.

    Compatible with both Node.js's test runner and web-test-runner or other Mocha-style test runners.

    +
    diff --git a/types/UnknownObject.html b/types/UnknownObject.html index 90520f23..35dae365 100644 --- a/types/UnknownObject.html +++ b/types/UnknownObject.html @@ -1,3 +1,3 @@ -UnknownObject | augment-vir - v31.4.0

    Type Alias UnknownObject

    UnknownObject: Record<PropertyKey, unknown>

    Any object with any allowed key and unknown value.

    +UnknownObject | augment-vir - v31.5.0

    Type Alias UnknownObject

    UnknownObject: Record<PropertyKey, unknown>

    Any object with any allowed key and unknown value.

    +
    diff --git a/types/Uuid.html b/types/Uuid.html index 240748e1..bd78d5c5 100644 --- a/types/Uuid.html +++ b/types/Uuid.html @@ -1,3 +1,3 @@ -Uuid | augment-vir - v31.4.0

    Type Alias Uuid

    Uuid: `${string}-${string}-${string}-${string}-${string}`

    Any of the UUID versions.

    +Uuid | augment-vir - v31.5.0

    Type Alias Uuid

    Uuid: `${string}-${string}-${string}-${string}-${string}`

    Any of the UUID versions.

    +
    diff --git a/types/ValueAtRequiredKey.html b/types/ValueAtRequiredKey.html index 6344d329..fd9bcfff 100644 --- a/types/ValueAtRequiredKey.html +++ b/types/ValueAtRequiredKey.html @@ -1,3 +1,3 @@ -ValueAtRequiredKey | augment-vir - v31.4.0

    Type Alias ValueAtRequiredKey<Parent, Key>

    ValueAtRequiredKey: CompleteRequire<Parent>[Key]

    Gets the value within an object when all its keys are required.

    +ValueAtRequiredKey | augment-vir - v31.5.0

    Type Alias ValueAtRequiredKey<Parent, Key>

    ValueAtRequiredKey: CompleteRequire<Parent>[Key]

    Gets the value within an object when all its keys are required.

    Type Parameters

    • Parent
    • Key extends keyof Parent
    +
    diff --git a/types/Values.html b/types/Values.html index 346293fd..e469928b 100644 --- a/types/Values.html +++ b/types/Values.html @@ -1,3 +1,3 @@ -Values | augment-vir - v31.4.0

    Type Alias Values<T>

    Values: T[keyof T]

    Gets the value types of an object.

    +Values | augment-vir - v31.5.0

    Type Alias Values<T>

    Values: T[keyof T]

    Gets the value types of an object.

    Type Parameters

    • T
    +
    diff --git a/types/WaitUntilOptions.html b/types/WaitUntilOptions.html index 7a99eaad..a7a737ef 100644 --- a/types/WaitUntilOptions.html +++ b/types/WaitUntilOptions.html @@ -1,3 +1,3 @@ -WaitUntilOptions | augment-vir - v31.4.0

    Type Alias WaitUntilOptions

    WaitUntilOptions: PartialWithUndefined<
        { interval: AnyDuration; timeout: AnyDuration },
    >

    Options for configuring the timing of waitUntil.

    +WaitUntilOptions | augment-vir - v31.5.0

    Type Alias WaitUntilOptions

    WaitUntilOptions: PartialWithUndefined<
        { interval: AnyDuration; timeout: AnyDuration },
    >

    Options for configuring the timing of waitUntil.

    +
    diff --git a/types/WithPercent.html b/types/WithPercent.html index 229c2377..3e58205e 100644 --- a/types/WithPercent.html +++ b/types/WithPercent.html @@ -1,3 +1,3 @@ -WithPercent | augment-vir - v31.4.0

    Type Alias WithPercent

    WithPercent: WithSuffix<typeof percentSuffix>

    Generic string type but with the '%' suffix appended to it.

    +WithPercent | augment-vir - v31.5.0

    Type Alias WithPercent

    WithPercent: WithSuffix<typeof percentSuffix>

    Generic string type but with the '%' suffix appended to it.

    +
    diff --git a/types/WithPrefix.html b/types/WithPrefix.html index dd3e1c33..b7f1208c 100644 --- a/types/WithPrefix.html +++ b/types/WithPrefix.html @@ -1,3 +1,3 @@ -WithPrefix | augment-vir - v31.4.0

    Type Alias WithPrefix<Prefix>

    WithPrefix: `${Prefix}${string}`

    Generic string type but with the given prefix prepended to it.

    +WithPrefix | augment-vir - v31.5.0

    Type Alias WithPrefix<Prefix>

    WithPrefix: `${Prefix}${string}`

    Generic string type but with the given prefix prepended to it.

    Type Parameters

    • Prefix extends string
    +
    diff --git a/types/WithPx.html b/types/WithPx.html index 0732859d..b54935a5 100644 --- a/types/WithPx.html +++ b/types/WithPx.html @@ -1,3 +1,3 @@ -WithPx | augment-vir - v31.4.0

    Type Alias WithPx

    WithPx: WithSuffix<typeof pxSuffix>

    Generic string type but with the 'px' suffix appended to it.

    +WithPx | augment-vir - v31.5.0

    Type Alias WithPx

    WithPx: WithSuffix<typeof pxSuffix>

    Generic string type but with the 'px' suffix appended to it.

    +
    diff --git a/types/WithSuffix.html b/types/WithSuffix.html index 4bf986cd..db53bfd6 100644 --- a/types/WithSuffix.html +++ b/types/WithSuffix.html @@ -1,3 +1,3 @@ -WithSuffix | augment-vir - v31.4.0

    Type Alias WithSuffix<Suffix>

    WithSuffix: `${string}${Suffix}`

    Generic string type but with the given suffix appended to it.

    +WithSuffix | augment-vir - v31.5.0

    Type Alias WithSuffix<Suffix>

    WithSuffix: `${string}${Suffix}`

    Generic string type but with the given suffix appended to it.

    Type Parameters

    • Suffix extends string
    +
    diff --git a/types/WrapInTryOptions.html b/types/WrapInTryOptions.html index 18ed7f03..f40333b9 100644 --- a/types/WrapInTryOptions.html +++ b/types/WrapInTryOptions.html @@ -1,3 +1,3 @@ -WrapInTryOptions | augment-vir - v31.4.0

    Type Alias WrapInTryOptions<FallbackValue>

    WrapInTryOptions: PartialWithUndefined<
        {
            fallbackValue: FallbackValue;
            handleError: (error: unknown) => FallbackValue;
        },
    >

    Options for wrapInTry.

    +WrapInTryOptions | augment-vir - v31.5.0

    Type Alias WrapInTryOptions<FallbackValue>

    WrapInTryOptions: PartialWithUndefined<
        {
            fallbackValue: FallbackValue;
            handleError: (error: unknown) => FallbackValue;
        },
    >

    Options for wrapInTry.

    Type Parameters

    • FallbackValue
    +
    diff --git a/types/WriteJsonOptions.html b/types/WriteJsonOptions.html index 1f06fe13..f6467c8a 100644 --- a/types/WriteJsonOptions.html +++ b/types/WriteJsonOptions.html @@ -1,3 +1,3 @@ -WriteJsonOptions | augment-vir - v31.4.0

    Type Alias WriteJsonOptions

    WriteJsonOptions: PartialWithUndefined<{ includeTrailingNewLine: boolean }>

    Options for writeJsonFile.

    +WriteJsonOptions | augment-vir - v31.5.0

    Type Alias WriteJsonOptions

    WriteJsonOptions: PartialWithUndefined<{ includeTrailingNewLine: boolean }>

    Options for writeJsonFile.

    +
    diff --git a/variables/ExtensionToRunner.html b/variables/ExtensionToRunner.html index 34f20e6b..043d9709 100644 --- a/variables/ExtensionToRunner.html +++ b/variables/ExtensionToRunner.html @@ -1,3 +1,3 @@ -ExtensionToRunner | augment-vir - v31.4.0

    Variable ExtensionToRunnerConst

    ExtensionToRunner: Record<string, string | { npx: string }> = ...

    A map of file extensions to their known runners for runCliScript.

    +ExtensionToRunner | augment-vir - v31.5.0

    Variable ExtensionToRunnerConst

    ExtensionToRunner: Record<string, string | { npx: string }> = ...

    A map of file extensions to their known runners for runCliScript.

    +
    diff --git a/variables/allowedRandomStringLetters.html b/variables/allowedRandomStringLetters.html index 84b38016..cecdc6ff 100644 --- a/variables/allowedRandomStringLetters.html +++ b/variables/allowedRandomStringLetters.html @@ -1,3 +1,3 @@ -allowedRandomStringLetters | augment-vir - v31.4.0

    Variable allowedRandomStringLettersConst

    allowedRandomStringLetters: ReadonlyArray<string> = ...

    All letters allowed in randomString.

    +allowedRandomStringLetters | augment-vir - v31.5.0

    Variable allowedRandomStringLettersConst

    allowedRandomStringLetters: ReadonlyArray<string> = ...

    All letters allowed in randomString.

    +
    diff --git a/variables/ansiRegExp.html b/variables/ansiRegExp.html index e6ea365b..828082f3 100644 --- a/variables/ansiRegExp.html +++ b/variables/ansiRegExp.html @@ -1,4 +1,4 @@ -ansiRegExp | augment-vir - v31.4.0

    Variable ansiRegExpConst

    ansiRegExp: RegExp = ...

    A RegExp that will match all ansi escape codes (such as terminal colors). Used in +ansiRegExp | augment-vir - v31.5.0

    Variable ansiRegExpConst

    ansiRegExp: RegExp = ...

    A RegExp that will match all ansi escape codes (such as terminal colors). Used in removeAnsiEscapeCodes.

    +
    diff --git a/variables/currentOperatingSystem.html b/variables/currentOperatingSystem.html index e21ef466..811160a0 100644 --- a/variables/currentOperatingSystem.html +++ b/variables/currentOperatingSystem.html @@ -1,4 +1,4 @@ -currentOperatingSystem | augment-vir - v31.4.0

    Variable currentOperatingSystemConst

    currentOperatingSystem: OperatingSystem = ...

    The current operating system type, as deduced from +currentOperatingSystem | augment-vir - v31.5.0

    Variable currentOperatingSystemConst

    currentOperatingSystem: OperatingSystem = ...

    The current operating system type, as deduced from process.platform.

    +
    diff --git a/variables/currentRuntimeEnv.html b/variables/currentRuntimeEnv.html index 16e53483..3f9e1aba 100644 --- a/variables/currentRuntimeEnv.html +++ b/variables/currentRuntimeEnv.html @@ -1,8 +1,8 @@ -currentRuntimeEnv | augment-vir - v31.4.0

    Variable currentRuntimeEnvConst

    currentRuntimeEnv: RuntimeEnv = ...

    The current RuntimeEnv.

    +currentRuntimeEnv | augment-vir - v31.5.0

    Variable currentRuntimeEnvConst

    currentRuntimeEnv: RuntimeEnv = ...

    The current RuntimeEnv.

    +
    diff --git a/variables/defaultCasingOptions.html b/variables/defaultCasingOptions.html index a40fc6cc..be58af8a 100644 --- a/variables/defaultCasingOptions.html +++ b/variables/defaultCasingOptions.html @@ -1,3 +1,3 @@ -defaultCasingOptions | augment-vir - v31.4.0

    Variable defaultCasingOptionsConst

    defaultCasingOptions: Required<CasingOptions> = ...

    Default options for CasingOptions.

    +defaultCasingOptions | augment-vir - v31.5.0

    Variable defaultCasingOptionsConst

    defaultCasingOptions: Required<CasingOptions> = ...

    Default options for CasingOptions.

    +
    diff --git a/variables/defaultLogColorConfig.html b/variables/defaultLogColorConfig.html index 3b686a16..64983f5d 100644 --- a/variables/defaultLogColorConfig.html +++ b/variables/defaultLogColorConfig.html @@ -1,3 +1,3 @@ -defaultLogColorConfig | augment-vir - v31.4.0

    Variable defaultLogColorConfigConst

    defaultLogColorConfig: LogColorConfig = ...

    Default implementation of LogColorConfig.

    +defaultLogColorConfig | augment-vir - v31.5.0

    Variable defaultLogColorConfigConst

    defaultLogColorConfig: LogColorConfig = ...

    Default implementation of LogColorConfig.

    +
    diff --git a/variables/defaultLogWriters.html b/variables/defaultLogWriters.html index 35524ea3..27bd1bdf 100644 --- a/variables/defaultLogWriters.html +++ b/variables/defaultLogWriters.html @@ -1,3 +1,3 @@ -defaultLogWriters | augment-vir - v31.4.0

    Variable defaultLogWritersConst

    defaultLogWriters: LogWriters = ...

    Default implementation of LogWriters that is dependent on the current runtime environment.

    +defaultLogWriters | augment-vir - v31.5.0

    Variable defaultLogWritersConst

    defaultLogWriters: LogWriters = ...

    Default implementation of LogWriters that is dependent on the current runtime environment.

    +
    diff --git a/variables/defaultLoggerOptions.html b/variables/defaultLoggerOptions.html index a3018bc7..df5b1b77 100644 --- a/variables/defaultLoggerOptions.html +++ b/variables/defaultLoggerOptions.html @@ -1,3 +1,3 @@ -defaultLoggerOptions | augment-vir - v31.4.0

    Variable defaultLoggerOptionsConst

    defaultLoggerOptions: LoggerOptions = ...

    Default implementation of LoggerOptions.

    +defaultLoggerOptions | augment-vir - v31.5.0

    Variable defaultLoggerOptionsConst

    defaultLoggerOptions: LoggerOptions = ...

    Default implementation of LoggerOptions.

    +
    diff --git a/variables/defaultTruncationSuffixes.html b/variables/defaultTruncationSuffixes.html index 2396e3b4..4e7ead68 100644 --- a/variables/defaultTruncationSuffixes.html +++ b/variables/defaultTruncationSuffixes.html @@ -1,3 +1,3 @@ -defaultTruncationSuffixes | augment-vir - v31.4.0

    Variable defaultTruncationSuffixesConst

    defaultTruncationSuffixes: readonly ["k", "M", "B", "T", "P", "E", "Z", "Y"] = ...

    The default truncation prefixes for truncateNumber.

    +defaultTruncationSuffixes | augment-vir - v31.5.0

    Variable defaultTruncationSuffixesConst

    defaultTruncationSuffixes: readonly ["k", "M", "B", "T", "P", "E", "Z", "Y"] = ...

    The default truncation prefixes for truncateNumber.

    +
    diff --git a/variables/docker.html b/variables/docker.html index 0bb04545..a7d4d247 100644 --- a/variables/docker.html +++ b/variables/docker.html @@ -1,4 +1,4 @@ -docker | augment-vir - v31.4.0

    Variable dockerConst

    docker: {
        container: {
            copyTo: (
                __namedParameters: CopyToDockerContainerParams,
            ) => Promise<void>;
            getInfo: (
                containerNameOrId: string,
            ) => Promise<DockerContainerInfo | undefined>;
            getLogs: (
                containerNameOrId: string,
                latestLineCount?: number,
            ) => Promise<string>;
            getStatus: (containerNameOrId: string) => Promise<DockerContainerStatus>;
            kill: (
                containerNameOrId: string,
                options?: PartialWithUndefined<{ keepContainer: boolean }>,
            ) => Promise<void>;
            run: (__namedParameters: RunDockerContainerParams) => Promise<void>;
            runCommand: (
                __namedParameters: RunDockerContainerCommandParams,
            ) => Promise<ShellOutput>;
            tryOrKill: <T>(
                containerNameOrId: string,
                callback: (containerNameOrId: string) => MaybePromise<T>,
            ) => Promise<Awaited<T>>;
            waitUntilExited: (
                containerNameOrId: string,
                failureMessage?: string,
            ) => Promise<void>;
            waitUntilRemoved: (
                containerNameOrId: string,
                failureMessage?: string,
            ) => Promise<void>;
            waitUntilRunning: (
                containerNameOrId: string,
                failureMessage?: string,
            ) => Promise<void>;
        };
        image: {
            exists: (imageName: string) => Promise<boolean>;
            remove: (imageName: string) => Promise<void>;
            update: (imageName: string, platform?: string) => Promise<void>;
        };
        isRunning: () => Promise<boolean>;
        start: () => Promise<void>;
        util: {
            makeEnvFlags: (
                envMapping?: Readonly<
                    Record<string, { allowInterpolation: boolean; value: string }>,
                >,
            ) => string;
            makePortMapFlags: (portMapping?: readonly DockerPortMap[]) => string;
            makeVolumeFlags: (volumeMapping?: readonly DockerVolumeMap[]) => string;
        };
    } = ...

    Centralized Docker API from @augment-vir/node.

    +docker | augment-vir - v31.5.0

    Variable dockerConst

    docker: {
        container: {
            copyTo: (
                __namedParameters: CopyToDockerContainerParams,
            ) => Promise<void>;
            getInfo: (
                containerNameOrId: string,
            ) => Promise<DockerContainerInfo | undefined>;
            getLogs: (
                containerNameOrId: string,
                latestLineCount?: number,
            ) => Promise<string>;
            getStatus: (containerNameOrId: string) => Promise<DockerContainerStatus>;
            kill: (
                containerNameOrId: string,
                options?: PartialWithUndefined<{ keepContainer: boolean }>,
            ) => Promise<void>;
            run: (__namedParameters: RunDockerContainerParams) => Promise<void>;
            runCommand: (
                __namedParameters: RunDockerContainerCommandParams,
            ) => Promise<ShellOutput>;
            tryOrKill: <T>(
                containerNameOrId: string,
                callback: (containerNameOrId: string) => MaybePromise<T>,
            ) => Promise<Awaited<T>>;
            waitUntilExited: (
                containerNameOrId: string,
                failureMessage?: string,
            ) => Promise<void>;
            waitUntilRemoved: (
                containerNameOrId: string,
                failureMessage?: string,
            ) => Promise<void>;
            waitUntilRunning: (
                containerNameOrId: string,
                failureMessage?: string,
            ) => Promise<void>;
        };
        image: {
            exists: (imageName: string) => Promise<boolean>;
            remove: (imageName: string) => Promise<void>;
            update: (imageName: string, platform?: string) => Promise<void>;
        };
        isRunning: () => Promise<boolean>;
        start: () => Promise<void>;
        util: {
            makeEnvFlags: (
                envMapping?: Readonly<
                    Record<string, { allowInterpolation: boolean; value: string }>,
                >,
            ) => string;
            makePortMapFlags: (portMapping?: readonly DockerPortMap[]) => string;
            makeVolumeFlags: (volumeMapping?: readonly DockerVolumeMap[]) => string;
        };
    } = ...

    Centralized Docker API from @augment-vir/node.

    Type declaration

    • container: {
          copyTo: (
              __namedParameters: CopyToDockerContainerParams,
          ) => Promise<void>;
          getInfo: (
              containerNameOrId: string,
          ) => Promise<DockerContainerInfo | undefined>;
          getLogs: (
              containerNameOrId: string,
              latestLineCount?: number,
          ) => Promise<string>;
          getStatus: (containerNameOrId: string) => Promise<DockerContainerStatus>;
          kill: (
              containerNameOrId: string,
              options?: PartialWithUndefined<{ keepContainer: boolean }>,
          ) => Promise<void>;
          run: (__namedParameters: RunDockerContainerParams) => Promise<void>;
          runCommand: (
              __namedParameters: RunDockerContainerCommandParams,
          ) => Promise<ShellOutput>;
          tryOrKill: <T>(
              containerNameOrId: string,
              callback: (containerNameOrId: string) => MaybePromise<T>,
          ) => Promise<Awaited<T>>;
          waitUntilExited: (
              containerNameOrId: string,
              failureMessage?: string,
          ) => Promise<void>;
          waitUntilRemoved: (
              containerNameOrId: string,
              failureMessage?: string,
          ) => Promise<void>;
          waitUntilRunning: (
              containerNameOrId: string,
              failureMessage?: string,
          ) => Promise<void>;
      }
      • copyTo: (__namedParameters: CopyToDockerContainerParams) => Promise<void>

        Copy a file or directory to a container.

      • getInfo: (containerNameOrId: string) => Promise<DockerContainerInfo | undefined>

        Run docker inspect on a container and return its output.

      • getLogs: (containerNameOrId: string, latestLineCount?: number) => Promise<string>

        Get a container's logs.

        @@ -26,4 +26,4 @@
      • makeVolumeFlags: (volumeMapping?: readonly DockerVolumeMap[]) => string

        Manually create a string of volume mapping flags. This is automatically done already inside the run container methods.

    +
    diff --git a/variables/emptyLog.html b/variables/emptyLog.html index c9d1f23e..16754795 100644 --- a/variables/emptyLog.html +++ b/variables/emptyLog.html @@ -1,3 +1,3 @@ -emptyLog | augment-vir - v31.4.0

    Variable emptyLogConst

    emptyLog: Logger = ...

    A default Logger that simply does nothing.

    +emptyLog | augment-vir - v31.5.0

    Variable emptyLogConst

    emptyLog: Logger = ...

    A default Logger that simply does nothing.

    +
    diff --git a/variables/endsWithPunctuationRegExp.html b/variables/endsWithPunctuationRegExp.html index b912c29e..15872f83 100644 --- a/variables/endsWithPunctuationRegExp.html +++ b/variables/endsWithPunctuationRegExp.html @@ -1,3 +1,3 @@ -endsWithPunctuationRegExp | augment-vir - v31.4.0

    Variable endsWithPunctuationRegExpConst

    endsWithPunctuationRegExp: RegExp = ...

    A RegExp matching that matches any punctuation at the end of a string.

    +endsWithPunctuationRegExp | augment-vir - v31.5.0

    Variable endsWithPunctuationRegExpConst

    endsWithPunctuationRegExp: RegExp = ...

    A RegExp matching that matches any punctuation at the end of a string.

    +
    diff --git a/variables/exitedDockerContainerStatuses.html b/variables/exitedDockerContainerStatuses.html index d8559692..a7037f1b 100644 --- a/variables/exitedDockerContainerStatuses.html +++ b/variables/exitedDockerContainerStatuses.html @@ -1,4 +1,4 @@ -exitedDockerContainerStatuses | augment-vir - v31.4.0

    Variable exitedDockerContainerStatusesConst

    exitedDockerContainerStatuses: DockerContainerStatus[] = ...

    Statuses from DockerContainerStatus that indicate that a container has been exited in some +exitedDockerContainerStatuses | augment-vir - v31.5.0

    Variable exitedDockerContainerStatusesConst

    exitedDockerContainerStatuses: DockerContainerStatus[] = ...

    Statuses from DockerContainerStatus that indicate that a container has been exited in some way.

    +
    diff --git a/variables/httpStatusByCategory-1.html b/variables/httpStatusByCategory-1.html index 7b642f6e..be68eabc 100644 --- a/variables/httpStatusByCategory-1.html +++ b/variables/httpStatusByCategory-1.html @@ -1,3 +1,3 @@ -httpStatusByCategory | augment-vir - v31.4.0

    Variable httpStatusByCategoryConst

    httpStatusByCategory: {
        clientError: readonly [
            BadRequest,
            Unauthorized,
            PaymentRequired,
            Forbidden,
            NotFound,
            MethodNotAllowed,
            NotAcceptable,
            ProxyAuthenticationRequired,
            RequestTimeout,
            Conflict,
            Gone,
            LengthRequired,
            PreconditionFailed,
            PayloadTooLarge,
            UriTooLong,
            UnsupportedMediaType,
            RangeNotSatisfiable,
            ExpectationFailed,
            ImATeapot,
            MisdirectedRequest,
            UnprocessableContent,
            Locked,
            FailedDependency,
            TooEarly,
            UpgradeRequired,
            PreconditionRequired,
            TooManyRequests,
            RequestHeaderFieldsTooLarge,
            UnavailableForLegalReasons,
        ];
        information: readonly [
            Continue,
            SwitchingProtocols,
            Processing,
            EarlyHints,
        ];
        redirect: readonly [
            MultipleChoices,
            MovedPermanently,
            Found,
            SeeOther,
            NotModified,
            UseProxy,
            Unused,
            TemporaryRedirect,
            PermanentRedirect,
        ];
        serverError: readonly [
            InternalServerError,
            NotImplemented,
            BadGateway,
            ServiceUnavailable,
            GatewayTimeout,
            HttpVersionNotSupported,
            VariantAlsoNegotiates,
            InsufficientStorage,
            LoopDetected,
            NotExtended,
            NetworkAuthenticationRequired,
        ];
        success: readonly [
            Ok,
            Created,
            Accepted,
            NonAuthoritativeInformation,
            NoContent,
            ResetContent,
            PartialContent,
            MultiStatus,
            AlreadyReported,
            ImUsed,
        ];
    } = ...

    All standardized HTTP status codes grouped into their respective categories.

    +httpStatusByCategory | augment-vir - v31.5.0

    Variable httpStatusByCategoryConst

    httpStatusByCategory: {
        clientError: readonly [
            BadRequest,
            Unauthorized,
            PaymentRequired,
            Forbidden,
            NotFound,
            MethodNotAllowed,
            NotAcceptable,
            ProxyAuthenticationRequired,
            RequestTimeout,
            Conflict,
            Gone,
            LengthRequired,
            PreconditionFailed,
            PayloadTooLarge,
            UriTooLong,
            UnsupportedMediaType,
            RangeNotSatisfiable,
            ExpectationFailed,
            ImATeapot,
            MisdirectedRequest,
            UnprocessableContent,
            Locked,
            FailedDependency,
            TooEarly,
            UpgradeRequired,
            PreconditionRequired,
            TooManyRequests,
            RequestHeaderFieldsTooLarge,
            UnavailableForLegalReasons,
        ];
        information: readonly [
            Continue,
            SwitchingProtocols,
            Processing,
            EarlyHints,
        ];
        redirect: readonly [
            MultipleChoices,
            MovedPermanently,
            Found,
            SeeOther,
            NotModified,
            UseProxy,
            Unused,
            TemporaryRedirect,
            PermanentRedirect,
        ];
        serverError: readonly [
            InternalServerError,
            NotImplemented,
            BadGateway,
            ServiceUnavailable,
            GatewayTimeout,
            HttpVersionNotSupported,
            VariantAlsoNegotiates,
            InsufficientStorage,
            LoopDetected,
            NotExtended,
            NetworkAuthenticationRequired,
        ];
        success: readonly [
            Ok,
            Created,
            Accepted,
            NonAuthoritativeInformation,
            NoContent,
            ResetContent,
            PartialContent,
            MultiStatus,
            AlreadyReported,
            ImUsed,
        ];
    } = ...

    All standardized HTTP status codes grouped into their respective categories.

    Type declaration

    +
    diff --git a/variables/log.html b/variables/log.html index d1acd18c..a29c6c72 100644 --- a/variables/log.html +++ b/variables/log.html @@ -1,7 +1,7 @@ -log | augment-vir - v31.4.0

    Variable logConst

    log: Logger = ...

    The default log. Use this in place of console methods for styled outputs in both Node.js and +log | augment-vir - v31.5.0

    Variable logConst

    log: Logger = ...

    The default log. Use this in place of console methods for styled outputs in both Node.js and the browser.

    import {log} from '@augment-vir/common';

    log.info('hi');
    log.error('failure');
    +
    diff --git a/variables/logColors.html b/variables/logColors.html index 37d896d8..3fbf8257 100644 --- a/variables/logColors.html +++ b/variables/logColors.html @@ -1,3 +1,3 @@ -logColors | augment-vir - v31.4.0

    Variable logColorsConst

    logColors: Readonly<Record<LogColorKey, string>> = ...

    Mapping of color keys to the current color string.

    +logColors | augment-vir - v31.5.0

    Variable logColorsConst

    logColors: Readonly<Record<LogColorKey, string>> = ...

    Mapping of color keys to the current color string.

    +
    diff --git a/variables/percentSuffix.html b/variables/percentSuffix.html index f6d2441b..601eca28 100644 --- a/variables/percentSuffix.html +++ b/variables/percentSuffix.html @@ -1,3 +1,3 @@ -percentSuffix | augment-vir - v31.4.0

    Variable percentSuffixConst

    percentSuffix: "%" = '%'

    Suffix for addPercent and removePercent.

    +percentSuffix | augment-vir - v31.5.0

    Variable percentSuffixConst

    percentSuffix: "%" = '%'

    Suffix for addPercent and removePercent.

    +
    diff --git a/variables/prisma.html b/variables/prisma.html index 857f6514..d9a62922 100644 --- a/variables/prisma.html +++ b/variables/prisma.html @@ -1,4 +1,4 @@ -prisma | augment-vir - v31.4.0

    Variable prismaConst

    prisma: {
        client: {
            addData: <const PrismaClient extends BasePrismaClient>(
                prismaClient: Readonly<PrismaClient>,
                data: IsAny<PrismaClient> extends true
                    ? any
                    : PrismaAddModelData<PrismaClient>,
            ) => Promise<void>;
            dumpData: <const PrismaClient extends BasePrismaClient>(
                prismaClient: PrismaClient,
                options?: Readonly<PartialWithUndefined<PrismaDataDumpOptions>>,
            ) => Promise<PrismaAllBasicModels<PrismaClient>>;
            generate: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            isCurrent: (
                __namedParameters: {
                    jsClientOutputDir: string;
                    schemaFilePath: string;
                },
            ) => Promise<boolean>;
            listModelNames: <const PrismaClient extends BasePrismaClient>(
                prismaClient: PrismaClient,
            ) => PrismaModelName<PrismaClient>[];
        };
        database: {
            diff: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<string>;
            hasDiff: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<boolean>;
            resetDev: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
        };
        migration: {
            applyDev: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            applyProd: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            create: (
                __namedParameters: { createOnly?: boolean; migrationName: string },
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            status: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<PrismaMigrationStatus>;
        };
    } = ...

    Centralized Prisma API from @augment-vir/node.

    +prisma | augment-vir - v31.5.0

    Variable prismaConst

    prisma: {
        client: {
            addData: <const PrismaClient extends BasePrismaClient>(
                prismaClient: Readonly<PrismaClient>,
                data: IsAny<PrismaClient> extends true
                    ? any
                    : PrismaAddModelData<PrismaClient>,
            ) => Promise<void>;
            dumpData: <const PrismaClient extends BasePrismaClient>(
                prismaClient: PrismaClient,
                options?: Readonly<PartialWithUndefined<PrismaDataDumpOptions>>,
            ) => Promise<PrismaAllBasicModels<PrismaClient>>;
            generate: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            isCurrent: (
                __namedParameters: {
                    jsClientOutputDir: string;
                    schemaFilePath: string;
                },
            ) => Promise<boolean>;
            listModelNames: <const PrismaClient extends BasePrismaClient>(
                prismaClient: PrismaClient,
            ) => PrismaModelName<PrismaClient>[];
        };
        database: {
            diff: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<string>;
            hasDiff: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<boolean>;
            resetDev: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
        };
        migration: {
            applyDev: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            applyProd: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            create: (
                __namedParameters: { createOnly?: boolean; migrationName: string },
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<void>;
            status: (
                schemaFilePath: string,
                env?: Record<string, string>,
            ) => Promise<PrismaMigrationStatus>;
        };
    } = ...

    Centralized Prisma API from @augment-vir/node.

    • Deploy to production

      @@ -63,4 +63,4 @@
  • status: (
        schemaFilePath: string,
        env?: Record<string, string>,
    ) => Promise<PrismaMigrationStatus>

    Get current migration status.

  • +
    diff --git a/variables/prismaModelCreateExclude.html b/variables/prismaModelCreateExclude.html index bfc1c38e..aab951ae 100644 --- a/variables/prismaModelCreateExclude.html +++ b/variables/prismaModelCreateExclude.html @@ -1,7 +1,7 @@ -prismaModelCreateExclude | augment-vir - v31.4.0

    Variable prismaModelCreateExcludeConst

    prismaModelCreateExclude: typeof prismaModelCreateExclude = ...

    Use this to define mock entries that shouldn't be saved to the database so that we can easily +prismaModelCreateExclude | augment-vir - v31.5.0

    Variable prismaModelCreateExcludeConst

    prismaModelCreateExclude: typeof prismaModelCreateExclude = ...

    Use this to define mock entries that shouldn't be saved to the database so that we can easily write tests for missing data.

    import type {PrismaClient} from '@prisma/client';
    import {prismaModelCreateExclude, PrismaKeyedModelCreate} from '@augment-vir/common';

    export const mockUsers = {
    user1: {
    id: 1,
    authRole: 'admin',
    },
    missingUser: {
    id: -1,
    authRole: 'user',
    [prismaModelCreateExclude]: true,
    },
    } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
    +
    diff --git a/variables/prismaModelCreateOmitId.html b/variables/prismaModelCreateOmitId.html index e60ee86e..48832e6d 100644 --- a/variables/prismaModelCreateOmitId.html +++ b/variables/prismaModelCreateOmitId.html @@ -1,8 +1,8 @@ -prismaModelCreateOmitId | augment-vir - v31.4.0

    Variable prismaModelCreateOmitIdConst

    prismaModelCreateOmitId: typeof prismaModelCreateOmitId = ...

    Use this to prevent the id property from being included when creating a mock record, allowing the +prismaModelCreateOmitId | augment-vir - v31.5.0

    Variable prismaModelCreateOmitIdConst

    prismaModelCreateOmitId: typeof prismaModelCreateOmitId = ...

    Use this to prevent the id property from being included when creating a mock record, allowing the database's internal auto-increment functionality to generate one. This is necessary when testing creation of new records because manually specified ids do not increment the auto incrementor.

    import type {PrismaClient} from '@prisma/client';
    import {prismaModelCreateOmitId, PrismaKeyedModelCreate} from '@augment-vir/common';

    export const mockUsers = {
    user1: {
    id: 1,
    authRole: 'admin',
    [prismaModelCreateOmitId]: true,
    },
    user2: {
    id: 2,
    authRole: 'admin',
    [prismaModelCreateOmitId]: true,
    },
    } as const satisfies PrismaKeyedModelCreate<PrismaClient, 'User'>;
    +
    diff --git a/variables/punctuationLetters.html b/variables/punctuationLetters.html index c1c953e5..30deb122 100644 --- a/variables/punctuationLetters.html +++ b/variables/punctuationLetters.html @@ -1,3 +1,3 @@ -punctuationLetters | augment-vir - v31.4.0

    Variable punctuationLettersConst

    punctuationLetters: readonly [".", ":", ";", ",", "?", "!"] = ...

    All characters that are considered punctuation.

    +punctuationLetters | augment-vir - v31.5.0

    Variable punctuationLettersConst

    punctuationLetters: readonly [".", ":", ";", ",", "?", "!"] = ...

    All characters that are considered punctuation.

    +
    diff --git a/variables/punctuationRegExp.html b/variables/punctuationRegExp.html index d7f46fcd..4c388476 100644 --- a/variables/punctuationRegExp.html +++ b/variables/punctuationRegExp.html @@ -1,3 +1,3 @@ -punctuationRegExp | augment-vir - v31.4.0

    Variable punctuationRegExpConst

    punctuationRegExp: RegExp = ...

    A RegExp matching all letters that are considered punctuation.

    +punctuationRegExp | augment-vir - v31.5.0

    Variable punctuationRegExpConst

    punctuationRegExp: RegExp = ...

    A RegExp matching all letters that are considered punctuation.

    +
    diff --git a/variables/pxSuffix.html b/variables/pxSuffix.html index a0cad66f..563838d5 100644 --- a/variables/pxSuffix.html +++ b/variables/pxSuffix.html @@ -1,3 +1,3 @@ -pxSuffix | augment-vir - v31.4.0

    Variable pxSuffixConst

    pxSuffix: "px" = 'px'

    Suffix for addPx and removePx.

    +pxSuffix | augment-vir - v31.5.0

    Variable pxSuffixConst

    pxSuffix: "px" = 'px'

    Suffix for addPx and removePx.

    +
    diff --git a/variables/systemRootPath.html b/variables/systemRootPath.html index cb75b5e9..f84f0ef4 100644 --- a/variables/systemRootPath.html +++ b/variables/systemRootPath.html @@ -1,3 +1,3 @@ -systemRootPath | augment-vir - v31.4.0

    Variable systemRootPathConst

    systemRootPath: string = ...

    The root path of the system containing the cwd.

    +systemRootPath | augment-vir - v31.5.0

    Variable systemRootPathConst

    systemRootPath: string = ...

    The root path of the system containing the cwd.

    +
    diff --git a/variables/testWeb.html b/variables/testWeb.html index 7c85da5d..dd6ce56f 100644 --- a/variables/testWeb.html +++ b/variables/testWeb.html @@ -1,4 +1,4 @@ -testWeb | augment-vir - v31.4.0

    Variable testWebConst

    testWeb: {
        cleanupRender: () => void;
        click: (element: Element) => Promise<void>;
        deleteInputText: (
            inputElement: Readonly<HTMLInputElement>,
        ) => Promise<void>;
        ensureFocus: (element: Element, maxAttemptCount?: number) => Promise<void>;
        moveMouseTo: (element: Element) => Promise<void>;
        render: <T extends Element>(
            template: LitHTMLRenderable,
            options?: FixtureOptions,
        ) => Promise<T>;
        typeIntoInput: (
            text: string,
            inputElement: Readonly<HTMLInputElement>,
        ) => Promise<void>;
        typeText: (text: string) => Promise<void>;
    } = ...

    A suite of web test helpers. This is only accessible within a browser runtime. If accessed +testWeb | augment-vir - v31.5.0

    Variable testWebConst

    testWeb: {
        cleanupRender: () => void;
        click: (element: Element) => Promise<void>;
        deleteInputText: (
            inputElement: Readonly<HTMLInputElement>,
        ) => Promise<void>;
        ensureFocus: (element: Element, maxAttemptCount?: number) => Promise<void>;
        moveMouseTo: (element: Element) => Promise<void>;
        render: <T extends Element>(
            template: LitHTMLRenderable,
            options?: FixtureOptions,
        ) => Promise<T>;
        typeIntoInput: (
            text: string,
            inputElement: Readonly<HTMLInputElement>,
        ) => Promise<void>;
        typeText: (text: string) => Promise<void>;
    } = ...

    A suite of web test helpers. This is only accessible within a browser runtime. If accessed outside of a browser runtime, it'll be an Error instead of a collection of test helpers.

    Type declaration

    • cleanupRender: () => void

      Cleans up all rendered test HTML by removing the actual wrapper nodes. Common use case is at the end of each test.

      @@ -16,4 +16,4 @@
    • typeText: (text: string) => Promise<void>

      Types the given string as if it were input by a keyboard. This doesn't try to type into any element in particular, it'll go wherever the current focus is, if any.

    +