diff --git a/.all-contributorsrc b/.all-contributorsrc index be5b5426d..9bc2e912d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -94,7 +94,8 @@ "avatar_url": "https://avatars1.githubusercontent.com/u/28659384?v=4", "profile": "http://timdeschryver.dev/", "contributions": [ - "doc" + "doc", + "code" ] }, { @@ -314,11 +315,2498 @@ "contributions": [ "doc" ] + }, + { + "login": "vernonk", + "name": "Vernon Kesner", + "avatar_url": "https://avatars1.githubusercontent.com/u/74096?v=4", + "profile": "https://github.com/vernonk", + "contributions": [ + "doc" + ] + }, + { + "login": "wdoug", + "name": "Will Douglas", + "avatar_url": "https://avatars3.githubusercontent.com/u/5432102?v=4", + "profile": "https://github.com/wdoug", + "contributions": [ + "doc" + ] + }, + { + "login": "HTMLhead", + "name": "Head", + "avatar_url": "https://avatars0.githubusercontent.com/u/40166539?v=4", + "profile": "https://velog.io/@head", + "contributions": [ + "doc" + ] + }, + { + "login": "mynar7", + "name": "Lee", + "avatar_url": "https://avatars0.githubusercontent.com/u/32332479?v=4", + "profile": "https://github.com/mynar7", + "contributions": [ + "doc" + ] + }, + { + "login": "Belco90", + "name": "Mario Beltrán Alarcón", + "avatar_url": "https://avatars1.githubusercontent.com/u/2677072?v=4", + "profile": "https://mario.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "jameslevine", + "name": "jameslevine", + "avatar_url": "https://avatars0.githubusercontent.com/u/41184245?v=4", + "profile": "https://github.com/jameslevine", + "contributions": [ + "doc" + ] + }, + { + "login": "mihar-22", + "name": "Rahim Alwer", + "avatar_url": "https://avatars2.githubusercontent.com/u/14304599?v=4", + "profile": "https://github.com/mihar-22", + "contributions": [ + "doc" + ] + }, + { + "login": "ariesjia", + "name": "Chenjia", + "avatar_url": "https://avatars1.githubusercontent.com/u/1797160?v=4", + "profile": "http://www.btorange.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "olethanh", + "name": "Olivier Le Thanh Duong", + "avatar_url": "https://avatars0.githubusercontent.com/u/82500?v=4", + "profile": "http://blog.staz.be/", + "contributions": [ + "doc" + ] + }, + { + "login": "KubaJastrz", + "name": "Jakub Jastrzębski", + "avatar_url": "https://avatars0.githubusercontent.com/u/6443113?v=4", + "profile": "https://kubajastrz.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "trurl-master", + "name": "Ivan Galiatin", + "avatar_url": "https://avatars1.githubusercontent.com/u/640657?v=4", + "profile": "http://russianbrandgardeners.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "HendrikRoehm", + "name": "Hendrik Röhm", + "avatar_url": "https://avatars3.githubusercontent.com/u/26203080?v=4", + "profile": "https://github.com/HendrikRoehm", + "contributions": [ + "doc" + ] + }, + { + "login": "samvk", + "name": "Sam Kauffman", + "avatar_url": "https://avatars1.githubusercontent.com/u/12996081?v=4", + "profile": "https://samvk.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "turadg", + "name": "Turadg Aleahmad", + "avatar_url": "https://avatars1.githubusercontent.com/u/21505?v=4", + "profile": "http://turadg.aleahmad.net/", + "contributions": [ + "doc" + ] + }, + { + "login": "MarkGeeRomano", + "name": "mark g romano", + "avatar_url": "https://avatars1.githubusercontent.com/u/13630752?v=4", + "profile": "https://github.com/MarkGeeRomano", + "contributions": [ + "doc" + ] + }, + { + "login": "arturoromeroslc", + "name": "Arturo Romero", + "avatar_url": "https://avatars0.githubusercontent.com/u/7406639?v=4", + "profile": "https://github.com/arturoromeroslc", + "contributions": [ + "doc" + ] + }, + { + "login": "dustinsoftware", + "name": "Dustin Masters", + "avatar_url": "https://avatars3.githubusercontent.com/u/942358?v=4", + "profile": "https://www.dustinsoftware.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "darren-lester", + "name": "Darren Lester", + "avatar_url": "https://avatars2.githubusercontent.com/u/19534488?v=4", + "profile": "https://www.darrenlester.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "iswara108", + "name": "Iswara Chaitanya", + "avatar_url": "https://avatars3.githubusercontent.com/u/9681451?v=4", + "profile": "https://github.com/iswara108", + "contributions": [ + "doc" + ] + }, + { + "login": "pylnata", + "name": "Nataliia Pylypenko", + "avatar_url": "https://avatars0.githubusercontent.com/u/33361478?v=4", + "profile": "https://github.com/pylnata", + "contributions": [ + "doc" + ] + }, + { + "login": "huchenme", + "name": "Hu Chen", + "avatar_url": "https://avatars3.githubusercontent.com/u/2078389?v=4", + "profile": "https://huchen.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "jkdowdle", + "name": "Josh", + "avatar_url": "https://avatars0.githubusercontent.com/u/19804196?v=4", + "profile": "https://github.com/jkdowdle", + "contributions": [ + "doc" + ] + }, + { + "login": "numb86", + "name": "numb86", + "avatar_url": "https://avatars1.githubusercontent.com/u/16703337?v=4", + "profile": "https://numb86.net/", + "contributions": [ + "doc" + ] + }, + { + "login": "NicholasBoll", + "name": "Nicholas Boll", + "avatar_url": "https://avatars2.githubusercontent.com/u/338257?v=4", + "profile": "https://github.com/NicholasBoll", + "contributions": [ + "doc" + ] + }, + { + "login": "Billy-", + "name": "Billy Matthews", + "avatar_url": "https://avatars2.githubusercontent.com/u/4316168?v=4", + "profile": "https://github.com/Billy-", + "contributions": [ + "talk", + "doc" + ] + }, + { + "login": "dale-french", + "name": "Dale French", + "avatar_url": "https://avatars3.githubusercontent.com/u/6544116?v=4", + "profile": "https://github.com/dale-french", + "contributions": [ + "doc" + ] + }, + { + "login": "aw-davidson", + "name": "aw-davidson", + "avatar_url": "https://avatars2.githubusercontent.com/u/32170938?v=4", + "profile": "https://github.com/aw-davidson", + "contributions": [ + "doc" + ] + }, + { + "login": "BBlackwo", + "name": "Benjamin Blackwood", + "avatar_url": "https://avatars0.githubusercontent.com/u/7598058?v=4", + "profile": "https://twitter.com/B_Blackwo", + "contributions": [ + "doc" + ] + }, + { + "login": "rockingskier", + "name": "Ben", + "avatar_url": "https://avatars1.githubusercontent.com/u/681614?v=4", + "profile": "https://github.com/rockingskier", + "contributions": [ + "doc" + ] + }, + { + "login": "danieljcafonso", + "name": "Daniel Afonso", + "avatar_url": "https://avatars3.githubusercontent.com/u/35337607?v=4", + "profile": "https://github.com/danieljcafonso", + "contributions": [ + "doc" + ] + }, + { + "login": "NomanGul", + "name": "Noman Gul", + "avatar_url": "https://avatars1.githubusercontent.com/u/39244918?v=4", + "profile": "https://dev.to/nomangul", + "contributions": [ + "doc" + ] + }, + { + "login": "rafaelangical", + "name": "Rafael Souza", + "avatar_url": "https://avatars2.githubusercontent.com/u/20307803?v=4", + "profile": "http://rafatech.tk/", + "contributions": [ + "doc" + ] + }, + { + "login": "pustovalov", + "name": "Pavel Pustovalov", + "avatar_url": "https://avatars2.githubusercontent.com/u/1568885?v=4", + "profile": "http://pustovalov.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "dymafr", + "name": "Dyma", + "avatar_url": "https://avatars2.githubusercontent.com/u/32801166?v=4", + "profile": "https://github.com/dymafr", + "contributions": [ + "doc" + ] + }, + { + "login": "MatanBobi", + "name": "Matan Borenkraout", + "avatar_url": "https://avatars2.githubusercontent.com/u/12711091?v=4", + "profile": "https://twitter.com/matan_bobi", + "contributions": [ + "doc", + "code" + ] + }, + { + "login": "timrobinson33", + "name": "timrobinson33", + "avatar_url": "https://avatars0.githubusercontent.com/u/57178390?v=4", + "profile": "https://github.com/timrobinson33", + "contributions": [ + "doc" + ] + }, + { + "login": "mdugue", + "name": "Manuel Dugué", + "avatar_url": "https://avatars1.githubusercontent.com/u/894149?v=4", + "profile": "http://manueldugue.de/", + "contributions": [ + "doc" + ] + }, + { + "login": "karthik20", + "name": "karthik20", + "avatar_url": "https://avatars2.githubusercontent.com/u/12153250?v=4", + "profile": "https://github.com/karthik20", + "contributions": [ + "doc" + ] + }, + { + "login": "pobch", + "name": "Pob Ch", + "avatar_url": "https://avatars3.githubusercontent.com/u/19894957?v=4", + "profile": "https://github.com/pobch", + "contributions": [ + "doc" + ] + }, + { + "login": "mkermani144", + "name": "Mohammad Kermani", + "avatar_url": "https://avatars2.githubusercontent.com/u/12621708?v=4", + "profile": "https://github.com/mkermani144", + "contributions": [ + "doc" + ] + }, + { + "login": "adeelibr", + "name": "Adeel Imran", + "avatar_url": "https://avatars0.githubusercontent.com/u/16651811?v=4", + "profile": "http://twitter.com/adeelibr", + "contributions": [ + "doc" + ] + }, + { + "login": "varundey", + "name": "Varun Dey", + "avatar_url": "https://avatars0.githubusercontent.com/u/9202135?v=4", + "profile": "https://varundey.me/", + "contributions": [ + "doc" + ] + }, + { + "login": "PabloDinella", + "name": "Pablo R. Dinella", + "avatar_url": "https://avatars1.githubusercontent.com/u/2482730?v=4", + "profile": "http://pablodinella.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "jamsinclair", + "name": "Jamie", + "avatar_url": "https://avatars0.githubusercontent.com/u/5964236?v=4", + "profile": "https://jamie.tokyo/", + "contributions": [ + "doc" + ] + }, + { + "login": "coryhouse", + "name": "Cory House", + "avatar_url": "https://avatars2.githubusercontent.com/u/1688997?v=4", + "profile": "http://www.bitnative.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "bugzpodder", + "name": "Jack Zhao", + "avatar_url": "https://avatars3.githubusercontent.com/u/14841421?v=4", + "profile": "http://fb.me/yz", + "contributions": [ + "doc" + ] + }, + { + "login": "rkennel", + "name": "Ryan Kennel", + "avatar_url": "https://avatars2.githubusercontent.com/u/28492538?v=4", + "profile": "https://github.com/rkennel", + "contributions": [ + "doc" + ] + }, + { + "login": "JesuHrz", + "name": "Jesus Hernandez", + "avatar_url": "https://avatars0.githubusercontent.com/u/28031187?v=4", + "profile": "https://github.com/JesuHrz", + "contributions": [ + "doc" + ] + }, + { + "login": "airjp73", + "name": "Aaron Pettengill", + "avatar_url": "https://avatars2.githubusercontent.com/u/25882770?v=4", + "profile": "https://github.com/airjp73", + "contributions": [ + "doc" + ] + }, + { + "login": "Izhaki", + "name": "Izhaki", + "avatar_url": "https://avatars1.githubusercontent.com/u/880132?v=4", + "profile": "https://github.com/Izhaki", + "contributions": [ + "doc" + ] + }, + { + "login": "rwieruch", + "name": "Robin Wieruch", + "avatar_url": "https://avatars0.githubusercontent.com/u/2479967?v=4", + "profile": "https://www.robinwieruch.de/", + "contributions": [ + "tutorial" + ] + }, + { + "login": "Alex-Sokolov", + "name": "Alexander Sokolov", + "avatar_url": "https://avatars3.githubusercontent.com/u/4497128?v=4", + "profile": "https://github.com/Alex-Sokolov", + "contributions": [ + "doc" + ] + }, + { + "login": "sastan", + "name": "Sascha Tandel", + "avatar_url": "https://avatars1.githubusercontent.com/u/514405?v=4", + "profile": "https://github.com/sastan", + "contributions": [ + "doc" + ] + }, + { + "login": "gyuwon", + "name": "Gyuwon Yi", + "avatar_url": "https://avatars3.githubusercontent.com/u/973743?v=4", + "profile": "https://gyuwon.github.io/", + "contributions": [ + "doc" + ] + }, + { + "login": "just-boris", + "name": "Boris Serdiuk", + "avatar_url": "https://avatars2.githubusercontent.com/u/812240?v=4", + "profile": "https://twitter.com/boriscoder", + "contributions": [ + "doc" + ] + }, + { + "login": "balavishnuvj", + "name": "balavishnuvj", + "avatar_url": "https://avatars3.githubusercontent.com/u/13718688?v=4", + "profile": "https://github.com/balavishnuvj", + "contributions": [ + "doc" + ] + }, + { + "login": "sharmilajesupaul", + "name": "Sharmila Jesupaul", + "avatar_url": "https://avatars1.githubusercontent.com/u/7876997?v=4", + "profile": "http://jesupaul.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "BatuhanW", + "name": "Batuhan Wilhelm", + "avatar_url": "https://avatars3.githubusercontent.com/u/16444991?v=4", + "profile": "https://github.com/BatuhanW", + "contributions": [ + "doc" + ] + }, + { + "login": "deadkff01", + "name": "Dennis Kaffer", + "avatar_url": "https://avatars2.githubusercontent.com/u/5138179?v=4", + "profile": "https://github.com/deadkff01", + "contributions": [ + "doc" + ] + }, + { + "login": "camjackson", + "name": "Cam Jackson", + "avatar_url": "https://avatars0.githubusercontent.com/u/1930451?v=4", + "profile": "http://camjackson.net/", + "contributions": [ + "doc" + ] + }, + { + "login": "jluxenberg", + "name": "Jared Luxenberg", + "avatar_url": "https://avatars0.githubusercontent.com/u/450478?v=4", + "profile": "http://www.jaredlux.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "yakirn", + "name": "Yakir Narkis", + "avatar_url": "https://avatars3.githubusercontent.com/u/6659632?v=4", + "profile": "https://github.com/yakirn", + "contributions": [ + "doc" + ] + }, + { + "login": "rahulbhooteshwar", + "name": "Rahul Bhooteshwar", + "avatar_url": "https://avatars2.githubusercontent.com/u/15920476?v=4", + "profile": "https://rahulbhooteshwar.github.io/", + "contributions": [ + "doc" + ] + }, + { + "login": "majapw", + "name": "Maja Wichrowska", + "avatar_url": "https://avatars1.githubusercontent.com/u/1383861?v=4", + "profile": "https://github.com/majapw", + "contributions": [ + "doc" + ] + }, + { + "login": "m98", + "name": "Kermani", + "avatar_url": "https://avatars2.githubusercontent.com/u/7496103?v=4", + "profile": "http://medium.com/@kermani", + "contributions": [ + "doc", + "review" + ] + }, + { + "login": "malykhinvi", + "name": "Vasily Malykhin", + "avatar_url": "https://avatars2.githubusercontent.com/u/5537715?v=4", + "profile": "https://malykhinvi.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "brrianalexis", + "name": "Brian Alexis", + "avatar_url": "https://avatars2.githubusercontent.com/u/51463930?v=4", + "profile": "https://github.com/brrianalexis", + "contributions": [ + "doc" + ] + }, + { + "login": "kalpeshsingh", + "name": "Kalpesh Singh", + "avatar_url": "https://avatars2.githubusercontent.com/u/13119410?v=4", + "profile": "http://knowkalpesh.in/", + "contributions": [ + "doc" + ] + }, + { + "login": "ljosberinn", + "name": "Gerrit Alex", + "avatar_url": "https://avatars1.githubusercontent.com/u/29307652?v=4", + "profile": "http://gerritalex.de/", + "contributions": [ + "doc" + ] + }, + { + "login": "winterlamon", + "name": "Winter LaMon", + "avatar_url": "https://avatars0.githubusercontent.com/u/16295605?v=4", + "profile": "https://github.com/winterlamon", + "contributions": [ + "doc" + ] + }, + { + "login": "jpenna", + "name": "Juliano Penna", + "avatar_url": "https://avatars1.githubusercontent.com/u/16005946?v=4", + "profile": "https://github.com/jpenna", + "contributions": [ + "doc" + ] + }, + { + "login": "PaulACoroneos", + "name": "Paul Coroneos", + "avatar_url": "https://avatars2.githubusercontent.com/u/40515238?v=4", + "profile": "http://www.pcoroneos.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "eps1lon", + "name": "Sebastian Silbermann", + "avatar_url": "https://avatars3.githubusercontent.com/u/12292047?v=4", + "profile": "https://solverfox.dev/", + "contributions": [ + "doc", + "review" + ] + }, + { + "login": "psalaets", + "name": "Paul Salaets", + "avatar_url": "https://avatars0.githubusercontent.com/u/123952?v=4", + "profile": "https://paulsalaets.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "michaeldeboey", + "name": "Michaël De Boey", + "avatar_url": "https://avatars3.githubusercontent.com/u/6643991?v=4", + "profile": "https://michaeldeboey.be/", + "contributions": [ + "doc" + ] + }, + { + "login": "washingtonsoares", + "name": "Washington Soares", + "avatar_url": "https://avatars3.githubusercontent.com/u/5726140?v=4", + "profile": "https://thewashington.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "jamisuomalainen", + "name": "Jami Suomalainen", + "avatar_url": "https://avatars2.githubusercontent.com/u/19325270?v=4", + "profile": "https://github.com/jamisuomalainen", + "contributions": [ + "doc" + ] + }, + { + "login": "oriolpuig", + "name": "Oriol Puig", + "avatar_url": "https://avatars3.githubusercontent.com/u/3933098?v=4", + "profile": "http://www.oriolpuig.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "hedgecox", + "name": "hedgecox", + "avatar_url": "https://avatars3.githubusercontent.com/u/41297418?v=4", + "profile": "https://hedgecox.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "shermanhui", + "name": "Sherman Hui", + "avatar_url": "https://avatars2.githubusercontent.com/u/11592023?v=4", + "profile": "https://github.com/shermanhui", + "contributions": [ + "doc" + ] + }, + { + "login": "jesujcastillom", + "name": "Jesu Castillo", + "avatar_url": "https://avatars3.githubusercontent.com/u/7827281?v=4", + "profile": "https://github.com/jesujcastillom", + "contributions": [ + "doc" + ] + }, + { + "login": "corehtml5canvas", + "name": "Core HTML5 Canvas, the book", + "avatar_url": "https://avatars1.githubusercontent.com/u/1553693?v=4", + "profile": "http://gearysite.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "johnste", + "name": "John Sterling", + "avatar_url": "https://avatars3.githubusercontent.com/u/886051?v=4", + "profile": "https://github.com/johnste", + "contributions": [ + "doc" + ] + }, + { + "login": "velusgautam", + "name": "Velu S Gautam", + "avatar_url": "https://avatars3.githubusercontent.com/u/8556085?v=4", + "profile": "http://www.velusgautam.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "RichardBray", + "name": "Richard Oliver Bray", + "avatar_url": "https://avatars2.githubusercontent.com/u/1377253?v=4", + "profile": "https://www.youtube.com/c/RichardBray", + "contributions": [ + "doc" + ] + }, + { + "login": "cncolder", + "name": "Yanlin Jiang", + "avatar_url": "https://avatars3.githubusercontent.com/u/127009?v=4", + "profile": "https://github.com/cncolder", + "contributions": [ + "doc" + ] + }, + { + "login": "lidoravitan", + "name": "Lidor Avitan", + "avatar_url": "https://avatars0.githubusercontent.com/u/35113398?v=4", + "profile": "https://github.com/lidoravitan", + "contributions": [ + "doc" + ] + }, + { + "login": "ITenthusiasm", + "name": "Isaiah Thomason", + "avatar_url": "https://avatars0.githubusercontent.com/u/47364027?v=4", + "profile": "https://github.com/ITenthusiasm", + "contributions": [ + "doc" + ] + }, + { + "login": "denis", + "name": "Denis Barushev", + "avatar_url": "https://avatars3.githubusercontent.com/u/805?v=4", + "profile": "http://barushev.net/", + "contributions": [ + "doc" + ] + }, + { + "login": "domasx2", + "name": "Domas", + "avatar_url": "https://avatars1.githubusercontent.com/u/847684?v=4", + "profile": "https://github.com/domasx2", + "contributions": [ + "doc" + ] + }, + { + "login": "AntonNiklasson", + "name": "Anton Niklasson", + "avatar_url": "https://avatars0.githubusercontent.com/u/785676?v=4", + "profile": "http://www.antn.se/", + "contributions": [ + "doc" + ] + }, + { + "login": "nick722", + "name": "Nikolai Yakuschenko", + "avatar_url": "https://avatars3.githubusercontent.com/u/31370625?v=4", + "profile": "https://github.com/nick722", + "contributions": [ + "doc" + ] + }, + { + "login": "vier31", + "name": "Jan Schröder", + "avatar_url": "https://avatars1.githubusercontent.com/u/34372068?v=4", + "profile": "https://github.com/vier31", + "contributions": [ + "doc" + ] + }, + { + "login": "nickmccurdy", + "name": "Nick McCurdy", + "avatar_url": "https://avatars0.githubusercontent.com/u/927220?v=4", + "profile": "https://nickmccurdy.com/", + "contributions": [ + "doc", + "review", + "code" + ] + }, + { + "login": "tsuki42", + "name": "Sudhanshu", + "avatar_url": "https://avatars2.githubusercontent.com/u/22864071?v=4", + "profile": "http://sudhanshu-ranjan.tech/", + "contributions": [ + "doc" + ] + }, + { + "login": "aleks-rope", + "name": "Aleksandr Chernov", + "avatar_url": "https://avatars0.githubusercontent.com/u/58922379?v=4", + "profile": "http://newrope.biz/", + "contributions": [ + "doc" + ] + }, + { + "login": "mathiassoeholm", + "name": "Mathias", + "avatar_url": "https://avatars0.githubusercontent.com/u/1747242?v=4", + "profile": "https://github.com/mathiassoeholm", + "contributions": [ + "doc" + ] + }, + { + "login": "davidseow", + "name": "davidseow", + "avatar_url": "https://avatars1.githubusercontent.com/u/502503?v=4", + "profile": "https://github.com/davidseow", + "contributions": [ + "doc" + ] + }, + { + "login": "tonyhallett", + "name": "Tony Hallett", + "avatar_url": "https://avatars2.githubusercontent.com/u/11292998?v=4", + "profile": "https://github.com/tonyhallett", + "contributions": [ + "doc" + ] + }, + { + "login": "prsdta", + "name": "prsdta", + "avatar_url": "https://avatars3.githubusercontent.com/u/19373361?v=4", + "profile": "https://github.com/prsdta", + "contributions": [ + "doc" + ] + }, + { + "login": "tal-joffe", + "name": "tal-joffe", + "avatar_url": "https://avatars0.githubusercontent.com/u/7221753?v=4", + "profile": "https://github.com/tal-joffe", + "contributions": [ + "doc" + ] + }, + { + "login": "mayank23", + "name": "Mayank Jethva", + "avatar_url": "https://avatars.githubusercontent.com/u/1103708?v=4", + "profile": "http://mayankjethva.xyz/", + "contributions": [ + "doc" + ] + }, + { + "login": "EladIsraeli", + "name": "Elad Israeli", + "avatar_url": "https://avatars.githubusercontent.com/u/13487086?v=4", + "profile": "https://github.com/EladIsraeli", + "contributions": [ + "doc" + ] + }, + { + "login": "chartrandf", + "name": "Francis Chartrand", + "avatar_url": "https://avatars.githubusercontent.com/u/1503758?v=4", + "profile": "https://francischartrand.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "prestoncarman", + "name": "Preston Carman", + "avatar_url": "https://avatars.githubusercontent.com/u/3517157?v=4", + "profile": "https://github.com/prestoncarman", + "contributions": [ + "doc" + ] + }, + { + "login": "olivierwilkinson", + "name": "Olivier Wilkinson", + "avatar_url": "https://avatars.githubusercontent.com/u/15321261?v=4", + "profile": "https://github.com/olivierwilkinson", + "contributions": [ + "doc" + ] + }, + { + "login": "amitmiran137", + "name": "Amit Miran", + "avatar_url": "https://avatars.githubusercontent.com/u/47772523?v=4", + "profile": "https://github.com/amitmiran137", + "contributions": [ + "doc" + ] + }, + { + "login": "gangsthub", + "name": "Paul Melero", + "avatar_url": "https://avatars.githubusercontent.com/u/6775220?v=4", + "profile": "https://graficos.net/", + "contributions": [ + "doc" + ] + }, + { + "login": "modosc", + "name": "jonathan schatz", + "avatar_url": "https://avatars.githubusercontent.com/u/2231664?v=4", + "profile": "https://modo.sc/", + "contributions": [ + "doc" + ] + }, + { + "login": "rickysullivan", + "name": "Ricky Sullivan Himself", + "avatar_url": "https://avatars.githubusercontent.com/u/437480?v=4", + "profile": "https://github.com/rickysullivan", + "contributions": [ + "doc" + ] + }, + { + "login": "wuarmin", + "name": "Armin", + "avatar_url": "https://avatars.githubusercontent.com/u/9987680?v=4", + "profile": "https://github.com/wuarmin", + "contributions": [ + "doc" + ] + }, + { + "login": "dalebaldwin", + "name": "Dale Baldwin", + "avatar_url": "https://avatars.githubusercontent.com/u/403546?v=4", + "profile": "http://linktr.ee/dalebaldwin", + "contributions": [ + "doc" + ] + }, + { + "login": "AdriSolid", + "name": "AdriSolid", + "avatar_url": "https://avatars.githubusercontent.com/u/25487037?v=4", + "profile": "https://www.linkedin.com/in/adrisolid/", + "contributions": [ + "doc" + ] + }, + { + "login": "naruthk", + "name": "Naruth Kongurai", + "avatar_url": "https://avatars.githubusercontent.com/u/9120451?v=4", + "profile": "https://naruth.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "ErfanMirzapour", + "name": "Erfan Mirzapour", + "avatar_url": "https://avatars.githubusercontent.com/u/52346515?v=4", + "profile": "https://github.com/ErfanMirzapour", + "contributions": [ + "doc" + ] + }, + { + "login": "shemExelate", + "name": "Shem Mahluf", + "avatar_url": "https://avatars.githubusercontent.com/u/46557021?v=4", + "profile": "https://github.com/shemExelate", + "contributions": [ + "code", + "infra", + "doc" + ] + }, + { + "login": "scoobster17", + "name": "Phil Gibbins", + "avatar_url": "https://avatars.githubusercontent.com/u/12157029?v=4", + "profile": "https://github.com/scoobster17", + "contributions": [ + "doc" + ] + }, + { + "login": "Liadshiran", + "name": "Liad Shiran", + "avatar_url": "https://avatars.githubusercontent.com/u/18011106?v=4", + "profile": "https://github.com/Liadshiran", + "contributions": [ + "doc" + ] + }, + { + "login": "EduardoSimon", + "name": "Eduardo Simón Picón", + "avatar_url": "https://avatars.githubusercontent.com/u/19764148?v=4", + "profile": "https://github.com/EduardoSimon", + "contributions": [ + "doc" + ] + }, + { + "login": "thesanjeevsharma", + "name": "Sanjeev Sharma", + "avatar_url": "https://avatars.githubusercontent.com/u/29539278?v=4", + "profile": "https://thesanjeevsharma.now.sh/", + "contributions": [ + "doc" + ] + }, + { + "login": "drorheller", + "name": "dror-heller", + "avatar_url": "https://avatars.githubusercontent.com/u/12750737?v=4", + "profile": "https://github.com/drorheller", + "contributions": [ + "doc" + ] + }, + { + "login": "yialo", + "name": "Aleksei Arro", + "avatar_url": "https://avatars.githubusercontent.com/u/38593881?v=4", + "profile": "https://github.com/yialo", + "contributions": [ + "doc" + ] + }, + { + "login": "carlobeltrame", + "name": "Carlo Beltrame", + "avatar_url": "https://avatars.githubusercontent.com/u/7566995?v=4", + "profile": "https://github.com/carlobeltrame", + "contributions": [ + "doc" + ] + }, + { + "login": "ggorlen", + "name": "ggorlen", + "avatar_url": "https://avatars.githubusercontent.com/u/17895165?v=4", + "profile": "https://github.com/ggorlen", + "contributions": [ + "doc" + ] + }, + { + "login": "mattstobbs", + "name": "mattstobbs", + "avatar_url": "https://avatars.githubusercontent.com/u/15341757?v=4", + "profile": "https://blog.scottlogic.com/mstobbs/", + "contributions": [ + "doc" + ] + }, + { + "login": "vxxce", + "name": "Zach", + "avatar_url": "https://avatars.githubusercontent.com/u/38638365?v=4", + "profile": "https://vxxce.github.io/", + "contributions": [ + "doc" + ] + }, + { + "login": "anpaopao", + "name": "Angus J. Pope", + "avatar_url": "https://avatars.githubusercontent.com/u/44686792?v=4", + "profile": "https://github.com/anpaopao", + "contributions": [ + "doc" + ] + }, + { + "login": "DylanPiercey", + "name": "Dylan Piercey", + "avatar_url": "https://avatars.githubusercontent.com/u/4985201?v=4", + "profile": "https://twitter.com/dylan_piercey", + "contributions": [ + "doc" + ] + }, + { + "login": "ruhollahh", + "name": "Ruhollah", + "avatar_url": "https://avatars.githubusercontent.com/u/53814636?v=4", + "profile": "https://github.com/ruhollahh", + "contributions": [ + "doc" + ] + }, + { + "login": "votemike", + "name": "Michael Gwynne", + "avatar_url": "https://avatars.githubusercontent.com/u/3957065?v=4", + "profile": "https://votemike.co.uk/", + "contributions": [ + "doc" + ] + }, + { + "login": "thetric", + "name": "Dominik Broj", + "avatar_url": "https://avatars.githubusercontent.com/u/19861998?v=4", + "profile": "https://github.com/thetric", + "contributions": [ + "doc" + ] + }, + { + "login": "stephenwade", + "name": "Stephen Wade", + "avatar_url": "https://avatars.githubusercontent.com/u/4148577?v=4", + "profile": "https://github.com/stephenwade", + "contributions": [ + "doc" + ] + }, + { + "login": "luizbaldi", + "name": "Luiz Baldi", + "avatar_url": "https://avatars.githubusercontent.com/u/17226904?v=4", + "profile": "https://luizbaldi.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "ravinggenius", + "name": "Thomas Ingram", + "avatar_url": "https://avatars.githubusercontent.com/u/21517?v=4", + "profile": "http://www.ravinggenius.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "dwjohnston", + "name": "David Johnston", + "avatar_url": "https://avatars.githubusercontent.com/u/2467377?v=4", + "profile": "https://blacksheepcode.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "fildon", + "name": "Rupert McKay", + "avatar_url": "https://avatars.githubusercontent.com/u/10462288?v=4", + "profile": "https://fildon.me/", + "contributions": [ + "doc" + ] + }, + { + "login": "SebastianMaciel", + "name": "Sebastián Maciel", + "avatar_url": "https://avatars.githubusercontent.com/u/4841148?v=4", + "profile": "http://www.sebastianmaciel.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "sidharthv96", + "name": "Sidharth Vinod", + "avatar_url": "https://avatars.githubusercontent.com/u/10703445?v=4", + "profile": "http://sidharth.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "jankalfus", + "name": "Honza Kalfus", + "avatar_url": "https://avatars.githubusercontent.com/u/12714276?v=4", + "profile": "https://github.com/jankalfus", + "contributions": [ + "doc" + ] + }, + { + "login": "claidler", + "name": "Christopher Laidler", + "avatar_url": "https://avatars.githubusercontent.com/u/43636691?v=4", + "profile": "https://github.com/claidler", + "contributions": [ + "doc" + ] + }, + { + "login": "savcni01", + "name": "Nik Savchenko", + "avatar_url": "https://avatars.githubusercontent.com/u/18025894?v=4", + "profile": "https://github.com/savcni01", + "contributions": [ + "doc" + ] + }, + { + "login": "sfrieson", + "name": "Steven Frieson", + "avatar_url": "https://avatars.githubusercontent.com/u/15187179?v=4", + "profile": "http://stevenfrieson.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "andrewarosario", + "name": "Andrew Rosário", + "avatar_url": "https://avatars.githubusercontent.com/u/21269337?v=4", + "profile": "https://andrewrosario.medium.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "brleinad", + "name": "Daniel RB", + "avatar_url": "https://avatars.githubusercontent.com/u/12233785?v=4", + "profile": "http://danielrb.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "HonkingGoose", + "name": "HonkingGoose", + "avatar_url": "https://avatars.githubusercontent.com/u/34918129?v=4", + "profile": "https://github.com/HonkingGoose", + "contributions": [ + "doc" + ] + }, + { + "login": "Daniel-Kolev", + "name": "Daniel Kolev", + "avatar_url": "https://avatars.githubusercontent.com/u/43587261?v=4", + "profile": "https://github.com/Daniel-Kolev", + "contributions": [ + "doc" + ] + }, + { + "login": "arryanggaputra", + "name": "Arryangga Aliev Pratamaputra", + "avatar_url": "https://avatars.githubusercontent.com/u/4743772?v=4", + "profile": "http://www.kopi.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "arahansen", + "name": "Andrew Hansen", + "avatar_url": "https://avatars.githubusercontent.com/u/8746094?v=4", + "profile": "http://arahansen.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "jgsneves", + "name": "JOAO GABRIEL SANTOS NEVES", + "avatar_url": "https://avatars.githubusercontent.com/u/48700146?v=4", + "profile": "https://www.linkedin.com/in/jgsneves/", + "contributions": [ + "doc" + ] + }, + { + "login": "lukeingalls", + "name": "Luke Ingalls", + "avatar_url": "https://avatars.githubusercontent.com/u/45518011?v=4", + "profile": "http://lukeingalls.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "levenleven", + "name": "Aleksey Levenstein", + "avatar_url": "https://avatars.githubusercontent.com/u/6463364?v=4", + "profile": "https://github.com/levenleven", + "contributions": [ + "doc" + ] + }, + { + "login": "zaicevas", + "name": "Tomas Zaicevas", + "avatar_url": "https://avatars.githubusercontent.com/u/34719980?v=4", + "profile": "https://medium.com/@zaicevas", + "contributions": [ + "doc" + ] + }, + { + "login": "tsriram", + "name": "Sriram Thiagarajan", + "avatar_url": "https://avatars.githubusercontent.com/u/450559?v=4", + "profile": "https://github.com/tsriram", + "contributions": [ + "doc" + ] + }, + { + "login": "EstebanBorai", + "name": "Esteban Borai", + "avatar_url": "https://avatars.githubusercontent.com/u/34756077?v=4", + "profile": "http://estebanborai.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "artivilla", + "name": "Arti Villa", + "avatar_url": "https://avatars.githubusercontent.com/u/2120159?v=4", + "profile": "https://twitter.com/artivilla", + "contributions": [ + "doc" + ] + }, + { + "login": "jakeboone02", + "name": "Jake Boone", + "avatar_url": "https://avatars.githubusercontent.com/u/366438?v=4", + "profile": "https://github.com/jakeboone02", + "contributions": [ + "doc" + ] + }, + { + "login": "Dennis273", + "name": "Dennis273", + "avatar_url": "https://avatars.githubusercontent.com/u/19815164?v=4", + "profile": "https://github.com/Dennis273", + "contributions": [ + "doc" + ] + }, + { + "login": "moshfeu", + "name": "Mosh Feu", + "avatar_url": "https://avatars.githubusercontent.com/u/3723951?v=4", + "profile": "https://www.linkedin.com/in/moshfeu/", + "contributions": [ + "doc" + ] + }, + { + "login": "make-github-pseudonymous-again", + "name": "Notas Hellout", + "avatar_url": "https://avatars.githubusercontent.com/u/5165674?v=4", + "profile": "https://fosstodon.org/@sudonymouse", + "contributions": [ + "doc" + ] + }, + { + "login": "msmolens", + "name": "Max Smolens", + "avatar_url": "https://avatars.githubusercontent.com/u/7122091?v=4", + "profile": "https://maxsmolens.org/", + "contributions": [ + "doc" + ] + }, + { + "login": "nimaebra", + "name": "Nima Ebrazeh", + "avatar_url": "https://avatars.githubusercontent.com/u/78249749?v=4", + "profile": "https://github.com/nimaebra", + "contributions": [ + "doc" + ] + }, + { + "login": "ph-fritsche", + "name": "Philipp Fritsche", + "avatar_url": "https://avatars.githubusercontent.com/u/39068198?v=4", + "profile": "http://ph-fritsche.github.io/", + "contributions": [ + "review" + ] + }, + { + "login": "clemp6r", + "name": "Clément Plantier", + "avatar_url": "https://avatars.githubusercontent.com/u/4757677?v=4", + "profile": "https://github.com/clemp6r", + "contributions": [ + "doc" + ] + }, + { + "login": "pppp606", + "name": "pppp606", + "avatar_url": "https://avatars.githubusercontent.com/u/7203958?v=4", + "profile": "https://github.com/pppp606", + "contributions": [ + "doc" + ] + }, + { + "login": "bilouw", + "name": "Bilou", + "avatar_url": "https://avatars.githubusercontent.com/u/7089641?v=4", + "profile": "https://github.com/bilouw", + "contributions": [ + "doc" + ] + }, + { + "login": "dten", + "name": "David Hewson", + "avatar_url": "https://avatars.githubusercontent.com/u/1019038?v=4", + "profile": "https://github.com/dten", + "contributions": [ + "doc" + ] + }, + { + "login": "alex-kim-dev", + "name": "Alex Kim", + "avatar_url": "https://avatars.githubusercontent.com/u/45559664?v=4", + "profile": "https://github.com/alex-kim-dev", + "contributions": [ + "doc" + ] + }, + { + "login": "PaquitoSoft", + "name": "PaquitoSoft", + "avatar_url": "https://avatars.githubusercontent.com/u/166022?v=4", + "profile": "http://paquitosoftware.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "marcioggs", + "name": "Márcio Gabriel", + "avatar_url": "https://avatars.githubusercontent.com/u/2506127?v=4", + "profile": "https://br.linkedin.com/in/marcioggs", + "contributions": [ + "doc" + ] + }, + { + "login": "krychaxp", + "name": "Krychaxp", + "avatar_url": "https://avatars.githubusercontent.com/u/55843050?v=4", + "profile": "http://krychaxp.pl/", + "contributions": [ + "doc" + ] + }, + { + "login": "mohetti", + "name": "momokolo", + "avatar_url": "https://avatars.githubusercontent.com/u/73931283?v=4", + "profile": "https://github.com/mohetti", + "contributions": [ + "doc" + ] + }, + { + "login": "meatnordrink", + "name": "AndyG", + "avatar_url": "https://avatars.githubusercontent.com/u/35735666?v=4", + "profile": "https://github.com/meatnordrink", + "contributions": [ + "doc" + ] + }, + { + "login": "jbutz", + "name": "Jason Butz", + "avatar_url": "https://avatars.githubusercontent.com/u/736696?v=4", + "profile": "http://www.jasonbutz.info/", + "contributions": [ + "infra" + ] + }, + { + "login": "olejech", + "name": "Oleg", + "avatar_url": "https://avatars.githubusercontent.com/u/64708593?v=4", + "profile": "https://github.com/olejech", + "contributions": [ + "doc" + ] + }, + { + "login": "danywalls", + "name": "Dany Paredes", + "avatar_url": "https://avatars.githubusercontent.com/u/5494535?v=4", + "profile": "http://www.danywalls.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "abelhbeyene", + "name": "Abel", + "avatar_url": "https://avatars.githubusercontent.com/u/12272815?v=4", + "profile": "https://github.com/abelhbeyene", + "contributions": [ + "doc" + ] + }, + { + "login": "patrady", + "name": "Patrick Brady", + "avatar_url": "https://avatars.githubusercontent.com/u/17067460?v=4", + "profile": "https://github.com/patrady", + "contributions": [ + "doc" + ] + }, + { + "login": "GrantIsEaton", + "name": "Grant Eaton", + "avatar_url": "https://avatars.githubusercontent.com/u/101603396?v=4", + "profile": "https://github.com/GrantIsEaton", + "contributions": [ + "doc" + ] + }, + { + "login": "aarondunphy", + "name": "Aaron Dunphy", + "avatar_url": "https://avatars.githubusercontent.com/u/5583119?v=4", + "profile": "https://aarondunphy.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "mrazauskas", + "name": "Tom Mrazauskas", + "avatar_url": "https://avatars.githubusercontent.com/u/72159681?v=4", + "profile": "https://github.com/mrazauskas", + "contributions": [ + "doc" + ] + }, + { + "login": "LuckyMona", + "name": "Supermaryy", + "avatar_url": "https://avatars.githubusercontent.com/u/12708942?v=4", + "profile": "http://supermaryy.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "bennewton999", + "name": "Ben Newton", + "avatar_url": "https://avatars.githubusercontent.com/u/458991?v=4", + "profile": "http://benenewton.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "silvenon", + "name": "Matija Marohnić", + "avatar_url": "https://avatars.githubusercontent.com/u/471278?v=4", + "profile": "https://silvenon.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "ThaddeusJiang", + "name": "Thaddeus Jiang", + "avatar_url": "https://avatars.githubusercontent.com/u/17308201?v=4", + "profile": "https://thaddeusjiang.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "robin-drexler", + "name": "Robin Drexler", + "avatar_url": "https://avatars.githubusercontent.com/u/474248?v=4", + "profile": "https://www.robin-drexler.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "caffeine-storm", + "name": "Thomas McKee", + "avatar_url": "https://avatars.githubusercontent.com/u/1609128?v=4", + "profile": "https://github.com/caffeine-storm", + "contributions": [ + "doc" + ] + }, + { + "login": "satanTime", + "name": "satanTime", + "avatar_url": "https://avatars.githubusercontent.com/u/966305?v=4", + "profile": "https://sudo.eu/", + "contributions": [ + "doc" + ] + }, + { + "login": "polinamochan", + "name": "polinamochan", + "avatar_url": "https://avatars.githubusercontent.com/u/108654322?v=4", + "profile": "https://github.com/polinamochan", + "contributions": [ + "doc" + ] + }, + { + "login": "shaiRose", + "name": "Shai Rose", + "avatar_url": "https://avatars.githubusercontent.com/u/4546940?v=4", + "profile": "https://github.com/shaiRose", + "contributions": [ + "doc" + ] + }, + { + "login": "AldinRekic", + "name": "AldinRekic", + "avatar_url": "https://avatars.githubusercontent.com/u/65592409?v=4", + "profile": "https://github.com/AldinRekic", + "contributions": [ + "design" + ] + }, + { + "login": "thanhsonng", + "name": "Son Nguyen", + "avatar_url": "https://avatars.githubusercontent.com/u/28614996?v=4", + "profile": "https://sonng.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "Lirlev48", + "name": "Lirlev48", + "avatar_url": "https://avatars.githubusercontent.com/u/58209233?v=4", + "profile": "https://github.com/Lirlev48", + "contributions": [ + "doc" + ] + }, + { + "login": "tarjei", + "name": "Tarjei Huse", + "avatar_url": "https://avatars.githubusercontent.com/u/211263?v=4", + "profile": "https://github.com/tarjei", + "contributions": [ + "doc" + ] + }, + { + "login": "ObieMunoz", + "name": "Obie Munoz", + "avatar_url": "https://avatars.githubusercontent.com/u/5696449?v=4", + "profile": "https://www.linkedin.com/in/obedmunozjr/", + "contributions": [ + "doc" + ] + }, + { + "login": "bertybot", + "name": "Bert B", + "avatar_url": "https://avatars.githubusercontent.com/u/44912991?v=4", + "profile": "https://github.com/bertybot", + "contributions": [ + "doc" + ] + }, + { + "login": "alirezahi", + "name": "Alireza Heydari", + "avatar_url": "https://avatars.githubusercontent.com/u/16666064?v=4", + "profile": "https://github.com/alirezahi", + "contributions": [ + "doc" + ] + }, + { + "login": "glebinsky", + "name": "Gleb Radutsky", + "avatar_url": "https://avatars.githubusercontent.com/u/898643?v=4", + "profile": "https://github.com/glebinsky", + "contributions": [ + "doc" + ] + }, + { + "login": "giovanniPepi", + "name": "giovanniPepi", + "avatar_url": "https://avatars.githubusercontent.com/u/5255535?v=4", + "profile": "https://github.com/giovanniPepi", + "contributions": [ + "doc" + ] + }, + { + "login": "mdjastrzebski", + "name": "Maciej Jastrzebski", + "avatar_url": "https://avatars.githubusercontent.com/u/6368606?v=4", + "profile": "https://github.com/mdjastrzebski", + "contributions": [ + "doc" + ] + }, + { + "login": "semoal", + "name": "Sergio Moreno", + "avatar_url": "https://avatars.githubusercontent.com/u/22656541?v=4", + "profile": "https://semoal.github.io/sergiomoreno/", + "contributions": [ + "code" + ] + }, + { + "login": "davidnixon", + "name": "David Nixon", + "avatar_url": "https://avatars.githubusercontent.com/u/7536103?v=4", + "profile": "https://github.com/davidnixon", + "contributions": [ + "doc" + ] + }, + { + "login": "khitrenovich", + "name": "Anton Khitrenovich", + "avatar_url": "https://avatars.githubusercontent.com/u/3424762?v=4", + "profile": "http://technotes.khitrenovich.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "kostasx", + "name": "Kostas Minaidis", + "avatar_url": "https://avatars.githubusercontent.com/u/1638325?v=4", + "profile": "https://plethorathemes.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "MynockSpit", + "name": "Than Hutchins", + "avatar_url": "https://avatars.githubusercontent.com/u/5713867?v=4", + "profile": "https://github.com/MynockSpit", + "contributions": [ + "doc" + ] + }, + { + "login": "edmundsj", + "name": "Jordan Edmunds", + "avatar_url": "https://avatars.githubusercontent.com/u/11085127?v=4", + "profile": "https://github.com/edmundsj", + "contributions": [ + "doc" + ] + }, + { + "login": "mouse484", + "name": "mouse", + "avatar_url": "https://avatars.githubusercontent.com/u/38714187?v=4", + "profile": "https://portfolio.mouse484.vercel.app/", + "contributions": [ + "doc" + ] + }, + { + "login": "robertoms99", + "name": "Roberto Molina", + "avatar_url": "https://avatars.githubusercontent.com/u/54558382?v=4", + "profile": "https://roberto-molina.netlify.app/", + "contributions": [ + "doc" + ] + }, + { + "login": "louis-young", + "name": "Louis Young", + "avatar_url": "https://avatars.githubusercontent.com/u/35606709?v=4", + "profile": "https://www.louisyoung.co.uk/", + "contributions": [ + "doc" + ] + }, + { + "login": "lukaselmer", + "name": "Lukas Elmer", + "avatar_url": "https://avatars.githubusercontent.com/u/326935?v=4", + "profile": "https://www.linkedin.com/in/lukaselmer/", + "contributions": [ + "doc" + ] + }, + { + "login": "brentguf", + "name": "Brent Guffens", + "avatar_url": "https://avatars.githubusercontent.com/u/16427929?v=4", + "profile": "https://github.com/brentguf", + "contributions": [ + "doc" + ] + }, + { + "login": "estebanfelipep", + "name": "Esteban", + "avatar_url": "https://avatars.githubusercontent.com/u/15718690?v=4", + "profile": "https://github.com/estebanfelipep", + "contributions": [ + "doc" + ] + }, + { + "login": "tiborbarsi", + "name": "Tibor Barsi", + "avatar_url": "https://avatars.githubusercontent.com/u/21023594?v=4", + "profile": "https://github.com/tiborbarsi", + "contributions": [ + "doc" + ] + }, + { + "login": "tnyo43", + "name": "Tomoya Kashifuku", + "avatar_url": "https://avatars.githubusercontent.com/u/11014018?v=4", + "profile": "https://github.com/tnyo43", + "contributions": [ + "doc" + ] + }, + { + "login": "wtlin1228", + "name": "Leo", + "avatar_url": "https://avatars.githubusercontent.com/u/16910748?v=4", + "profile": "https://leonerd.gatsbyjs.io/", + "contributions": [ + "doc" + ] + }, + { + "login": "erik-metz", + "name": "Erik Metz", + "avatar_url": "https://avatars.githubusercontent.com/u/69653055?v=4", + "profile": "http://spray-r.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "mrtyagi07", + "name": "Vaibhav Tyagi", + "avatar_url": "https://avatars.githubusercontent.com/u/83115094?v=4", + "profile": "https://github.com/mrtyagi07", + "contributions": [ + "doc" + ] + }, + { + "login": "alleksei37", + "name": "Aleksei Drokin", + "avatar_url": "https://avatars.githubusercontent.com/u/18336748?v=4", + "profile": "https://github.com/alleksei37", + "contributions": [ + "doc" + ] + }, + { + "login": "shaman-apprentice", + "name": "Torsten Knauf", + "avatar_url": "https://avatars.githubusercontent.com/u/3596742?v=4", + "profile": "https://github.com/shaman-apprentice", + "contributions": [ + "doc" + ] + }, + { + "login": "jharlowuk", + "name": "John Harlow", + "avatar_url": "https://avatars.githubusercontent.com/u/41212861?v=4", + "profile": "http://jharlow.uk/", + "contributions": [ + "doc" + ] + }, + { + "login": "morgan121", + "name": "Morgan Hunter", + "avatar_url": "https://avatars.githubusercontent.com/u/62575603?v=4", + "profile": "https://github.com/morgan121", + "contributions": [ + "doc" + ] + }, + { + "login": "Mozl", + "name": "Louis Moselhi", + "avatar_url": "https://avatars.githubusercontent.com/u/24245755?v=4", + "profile": "https://github.com/Mozl", + "contributions": [ + "doc" + ] + }, + { + "login": "rydash", + "name": "Ryan McGill", + "avatar_url": "https://avatars.githubusercontent.com/u/9492442?v=4", + "profile": "https://github.com/rydash", + "contributions": [ + "doc" + ] + }, + { + "login": "renansoares", + "name": "Renan Andrade", + "avatar_url": "https://avatars.githubusercontent.com/u/1657840?v=4", + "profile": "http://rensoares.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "boldurean", + "name": "Vasilii Boldurean", + "avatar_url": "https://avatars.githubusercontent.com/u/64642760?v=4", + "profile": "https://github.com/boldurean", + "contributions": [ + "doc" + ] + }, + { + "login": "josiasds", + "name": "Josias Schneider", + "avatar_url": "https://avatars.githubusercontent.com/u/882253?v=4", + "profile": "http://theoutsider.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "ledenis", + "name": "Denis LE", + "avatar_url": "https://avatars.githubusercontent.com/u/2855723?v=4", + "profile": "https://github.com/ledenis", + "contributions": [ + "doc" + ] + }, + { + "login": "Nicoss54", + "name": "Nicolas Frizzarin", + "avatar_url": "https://avatars.githubusercontent.com/u/24563545?v=4", + "profile": "https://github.com/Nicoss54", + "contributions": [ + "doc" + ] + }, + { + "login": "santoshyadavdev", + "name": "Santosh Yadav", + "avatar_url": "https://avatars.githubusercontent.com/u/11923975?v=4", + "profile": "https://github.com/santoshyadavdev", + "contributions": [ + "doc" + ] + }, + { + "login": "caiangums", + "name": "Ilê Caian", + "avatar_url": "https://avatars.githubusercontent.com/u/7551787?v=4", + "profile": "http://caian.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "Clarity-89", + "name": "Alex Khomenko", + "avatar_url": "https://avatars.githubusercontent.com/u/8878045?v=4", + "profile": "https://claritydev.net/", + "contributions": [ + "doc" + ] + }, + { + "login": "LLCampos", + "name": "Luís Campos", + "avatar_url": "https://avatars.githubusercontent.com/u/12008784?v=4", + "profile": "https://llcampos.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "YozhEzhi", + "name": "Alexandr Zhidovlenko", + "avatar_url": "https://avatars.githubusercontent.com/u/2706062?v=4", + "profile": "https://github.com/YozhEzhi", + "contributions": [ + "doc" + ] + }, + { + "login": "lyannel", + "name": "lyannel", + "avatar_url": "https://avatars.githubusercontent.com/u/34246811?v=4", + "profile": "https://github.com/lyannel", + "contributions": [ + "a11y" + ] + }, + { + "login": "yanick", + "name": "Yanick Champoux", + "avatar_url": "https://avatars.githubusercontent.com/u/19954?v=4", + "profile": "https://techblog.babyl.ca/", + "contributions": [ + "doc" + ] + }, + { + "login": "ali-kamalizade", + "name": "Ali", + "avatar_url": "https://avatars.githubusercontent.com/u/1886605?v=4", + "profile": "https://ali-dev.medium.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "macmillen", + "name": "Milan Jaritz", + "avatar_url": "https://avatars.githubusercontent.com/u/33156526?v=4", + "profile": "https://github.com/macmillen", + "contributions": [ + "doc" + ] + }, + { + "login": "dzonatan", + "name": "Rokas Brazdžionis", + "avatar_url": "https://avatars.githubusercontent.com/u/5166666?v=4", + "profile": "https://github.com/dzonatan", + "contributions": [ + "doc" + ] + }, + { + "login": "tomalaforge", + "name": "Laforge Thomas", + "avatar_url": "https://avatars.githubusercontent.com/u/30832608?v=4", + "profile": "https://thomaslaforge.dev/home", + "contributions": [ + "doc" + ] + }, + { + "login": "StephNathai", + "name": "Steph Nathai", + "avatar_url": "https://avatars.githubusercontent.com/u/11414958?v=4", + "profile": "https://github.com/StephNathai", + "contributions": [ + "code", + "a11y" + ] + }, + { + "login": "friederbluemle", + "name": "Frieder Bluemle", + "avatar_url": "https://avatars.githubusercontent.com/u/743291?v=4", + "profile": "https://github.com/friederbluemle", + "contributions": [ + "doc" + ] + }, + { + "login": "ssi02014", + "name": "Gromit (전민재)", + "avatar_url": "https://avatars.githubusercontent.com/u/64779472?v=4", + "profile": "https://blog.naver.com/ssi02014", + "contributions": [ + "doc" + ] + }, + { + "login": "csantos1113", + "name": "Cesar S", + "avatar_url": "https://avatars.githubusercontent.com/u/9648559?v=4", + "profile": "https://github.com/csantos1113", + "contributions": [ + "doc" + ] + }, + { + "login": "crutchcorn", + "name": "Corbin Crutchley", + "avatar_url": "https://avatars.githubusercontent.com/u/9100169?v=4", + "profile": "https://crutchcorn.dev/", + "contributions": [ + "doc" + ] + }, + { + "login": "rbatsenko", + "name": "Roman Batsenko", + "avatar_url": "https://avatars.githubusercontent.com/u/6410057?v=4", + "profile": "https://github.com/rbatsenko", + "contributions": [ + "doc" + ] + }, + { + "login": "snjro", + "name": "snjro", + "avatar_url": "https://avatars.githubusercontent.com/u/34432943?v=4", + "profile": "https://github.com/snjro", + "contributions": [ + "doc" + ] + }, + { + "login": "taro-28", + "name": "taro", + "avatar_url": "https://avatars.githubusercontent.com/u/66539019?v=4", + "profile": "https://bento.me/taro", + "contributions": [ + "doc" + ] + }, + { + "login": "andnorda", + "name": "Andreas Nordahl", + "avatar_url": "https://avatars.githubusercontent.com/u/1894119?v=4", + "profile": "https://github.com/andnorda", + "contributions": [ + "doc" + ] + }, + { + "login": "neaumusic", + "name": "neaumusic", + "avatar_url": "https://avatars.githubusercontent.com/u/3423750?v=4", + "profile": "https://neaumusic.github.io/", + "contributions": [ + "doc" + ] + }, + { + "login": "JoyelJohny", + "name": "Joyel Johny", + "avatar_url": "https://avatars.githubusercontent.com/u/81413791?v=4", + "profile": "https://github.com/JoyelJohny", + "contributions": [ + "code" + ] + }, + { + "login": "bsheps", + "name": "bsheps", + "avatar_url": "https://avatars.githubusercontent.com/u/35780702?v=4", + "profile": "https://github.com/bsheps", + "contributions": [ + "doc" + ] + }, + { + "login": "kyle-n", + "name": "Kyle Nazario", + "avatar_url": "https://avatars.githubusercontent.com/u/13384477?v=4", + "profile": "http://www.kylenazario.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "thefalked", + "name": "Giuliano Crivelli", + "avatar_url": "https://avatars.githubusercontent.com/u/28029756?v=4", + "profile": "https://github.com/thefalked", + "contributions": [ + "doc" + ] + }, + { + "login": "mroforolhc", + "name": "mrkv", + "avatar_url": "https://avatars.githubusercontent.com/u/26799398?v=4", + "profile": "https://t.me/markov_ka", + "contributions": [ + "doc" + ] + }, + { + "login": "smk267", + "name": "smk267", + "avatar_url": "https://avatars.githubusercontent.com/u/88115182?v=4", + "profile": "https://github.com/smk267", + "contributions": [ + "infra" + ] + }, + { + "login": "agentdylan", + "name": "Dylan Gordon", + "avatar_url": "https://avatars.githubusercontent.com/u/3656794?v=4", + "profile": "https://www.dylangordon.co.nz/", + "contributions": [ + "doc" + ] + }, + { + "login": "mcous", + "name": "Michael Cousins", + "avatar_url": "https://avatars.githubusercontent.com/u/2963448?v=4", + "profile": "https://michael.cousins.io/", + "contributions": [ + "doc", + "review" + ] + }, + { + "login": "kettanaito", + "name": "Artem Zakharchenko", + "avatar_url": "https://avatars.githubusercontent.com/u/14984911?v=4", + "profile": "https://kettanaito.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "vadimshvetsov", + "name": "Vadim Shvetsov", + "avatar_url": "https://avatars.githubusercontent.com/u/16336572?v=4", + "profile": "https://github.com/vadimshvetsov", + "contributions": [ + "doc" + ] + }, + { + "login": "domnantas", + "name": "Domantas Petrauskas", + "avatar_url": "https://avatars.githubusercontent.com/u/51953549?v=4", + "profile": "https://domnantas.lt/", + "contributions": [ + "doc" + ] + }, + { + "login": "Efim-Kapliy", + "name": "Efim", + "avatar_url": "https://avatars.githubusercontent.com/u/126895483?v=4", + "profile": "https://portfolio.edkt.ru/", + "contributions": [ + "doc" + ] + }, + { + "login": "denisx", + "name": "denisx", + "avatar_url": "https://avatars.githubusercontent.com/u/427776?v=4", + "profile": "https://github.com/denisx", + "contributions": [ + "code" + ] + }, + { + "login": "ggualiato", + "name": "Giovanni Gualiato", + "avatar_url": "https://avatars.githubusercontent.com/u/26698704?v=4", + "profile": "https://github.com/ggualiato", + "contributions": [ + "doc" + ] + }, + { + "login": "saubaig456", + "name": "Saud Baig", + "avatar_url": "https://avatars.githubusercontent.com/u/143418574?v=4", + "profile": "https://github.com/saubaig456", + "contributions": [ + "doc" + ] + }, + { + "login": "moeyashi", + "name": "Ren Adachi", + "avatar_url": "https://avatars.githubusercontent.com/u/49895682?v=4", + "profile": "https://github.com/moeyashi", + "contributions": [ + "doc" + ] + }, + { + "login": "TyMick", + "name": "Ty Mick", + "avatar_url": "https://avatars.githubusercontent.com/u/5317080?v=4", + "profile": "https://tymick.me/", + "contributions": [ + "doc" + ] + }, + { + "login": "enmanuelduran", + "name": "Enmanuel Durán", + "avatar_url": "https://avatars.githubusercontent.com/u/8060530?v=4", + "profile": "https://enmascript.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "gbhasha", + "name": "Galeel Bhasha Satthar", + "avatar_url": "https://avatars.githubusercontent.com/u/501794?v=4", + "profile": "https://github.com/gbhasha", + "contributions": [ + "doc" + ] + }, + { + "login": "ianlet", + "name": "Ian Létourneau", + "avatar_url": "https://avatars.githubusercontent.com/u/6018732?v=4", + "profile": "https://noma.to/", + "contributions": [ + "doc" + ] + }, + { + "login": "brianlu2610", + "name": "brianlu2610", + "avatar_url": "https://avatars.githubusercontent.com/u/68666483?v=4", + "profile": "https://github.com/brianlu2610", + "contributions": [ + "code" + ] + }, + { + "login": "ezzatron", + "name": "Erin", + "avatar_url": "https://avatars.githubusercontent.com/u/100152?v=4", + "profile": "https://github.com/ezzatron", + "contributions": [ + "doc" + ] + }, + { + "login": "nchen000", + "name": "Nan Chen", + "avatar_url": "https://avatars.githubusercontent.com/u/23487984?v=4", + "profile": "https://www.linkedin.com/in/nan-chen-000/", + "contributions": [ + "doc" + ] + }, + { + "login": "aburdiss", + "name": "Alexander Burdiss", + "avatar_url": "https://avatars.githubusercontent.com/u/31200600?v=4", + "profile": "http://alexanderburdiss.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "peterh-capella", + "name": "Peter Hentges", + "avatar_url": "https://avatars.githubusercontent.com/u/1122723?v=4", + "profile": "https://github.com/peterh-capella", + "contributions": [ + "doc" + ] + }, + { + "login": "neknalb", + "name": "neknalb", + "avatar_url": "https://avatars.githubusercontent.com/u/23031302?v=4", + "profile": "https://github.com/neknalb", + "contributions": [ + "doc" + ] + }, + { + "login": "fetsorn", + "name": "fetsorn", + "avatar_url": "https://avatars.githubusercontent.com/u/12858105?v=4", + "profile": "https://github.com/fetsorn", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, "projectName": "testing-library-docs", "projectOwner": "testing-library", "repoType": "github", - "repoHost": "https://github.com/" + "repoHost": "https://github.com/", + "skipCi": true, + "commitType": "docs" } diff --git a/.dockerignore b/.dockerignore deleted file mode 100755 index 27d2dae2b..000000000 --- a/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -*/node_modules -*.log diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 9bf526656..000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -open_collective: testing-library diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index dd84ea782..8bc4a7ed8 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,35 +4,33 @@ about: Create a report to help us improve title: '' labels: '' assignees: '' - --- -**Describe the bug** -A clear and concise description of what the bug is. +**Describe the bug** A clear and concise description of what the bug is. + +**To Reproduce** Steps to reproduce the behavior: -**To Reproduce** -Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error -**Expected behavior** -A clear and concise description of what you expected to happen. +**Expected behavior** A clear and concise description of what you expected to +happen. -**Screenshots** -If applicable, add screenshots to help explain your problem. +**Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] **Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] -**Additional context** -Add any other context about the problem here. +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] + +**Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index bbcbbe7d6..2866f790f 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,17 +4,16 @@ about: Suggest an idea for this project title: '' labels: '' assignees: '' - --- -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] +**Is your feature request related to a problem? Please describe.** A clear and +concise description of what the problem is. Ex. I'm always frustrated when [...] -**Describe the solution you'd like** -A clear and concise description of what you want to happen. +**Describe the solution you'd like** A clear and concise description of what you +want to happen. -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. +**Describe alternatives you've considered** A clear and concise description of +any alternative solutions or features you've considered. -**Additional context** -Add any other context or screenshots about the feature request here. +**Additional context** Add any other context or screenshots about the feature +request here. diff --git a/.gitignore b/.gitignore index ce04b46a7..5c447595b 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea .DS_Store node_modules @@ -5,12 +6,12 @@ node_modules lib/core/metadata.js lib/core/MetadataBlog.js -website/translated_docs -website/build/ -website/yarn.lock -website/node_modules -website/i18n/* +translated_docs +build/ +i18n/* +.docusaurus +.cache-loader *.log -.idea +yarn.lock diff --git a/.node-version b/.node-version new file mode 100644 index 000000000..dcf74e268 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +16.14 \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js index 30f575a92..4679d9bf6 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,6 +1 @@ -module.exports = { - proseWrap: 'always', - singleQuote: true, - semi: false, - trailingComma: 'es5', -} \ No newline at end of file +module.exports = require('kcd-scripts/prettier') diff --git a/.vscode/markdown.code-snippets b/.vscode/markdown.code-snippets index 8df3257d7..bed57a2f8 100644 --- a/.vscode/markdown.code-snippets +++ b/.vscode/markdown.code-snippets @@ -1,53 +1,47 @@ { - // Place your testing-library-docs workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and - // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope - // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is - // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: - // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. - // Placeholders with the same ids are connected. - // Example: - // "Print to console": { - // "scope": "javascript,typescript", - // "prefix": "log", - // "body": [ - // "console.log('$1');", - // "$2" - // ], - // "description": "Log output to console" - // }, - "Multilanguage Code Block": { - "scope": "markdown", - "prefix": "docblock", - "body": [ - "```html", - "$4", - "```", - "", - "", - "", - "", - "```js", - "import { $1 } from '@testing-library/dom'", - "", - "const container = document.body", - "const $3 = $1(container, '$2')", - "```", - "", - "", - "```js", - "import { render } from '@testing-library/react'", - "", - "const { $1 } = render()", - "const $3 = $1('$2')", - "```", - "", - "", - "```js", - "cy.$1('$2').should('exist')", - "```", - "", - "" - ], - "description": "Create a Docusaurus multi-language code block" - } -} \ No newline at end of file + "MDX title": { + "prefix": "mdxtitle", + "body": ["---", "id: $1", "title: $2", "sidebar_label: $3", "---"], + "description": "MDX file titles" + }, + "MDX Multilingual Tabs": { + "prefix": "mdxtabs", + "body": [ + "", + "import Tabs from '@theme/Tabs';", + "import TabItem from '@theme/TabItem';", + "", + " ", + " ", + "", + " ```js", + " $1", + " ```", + "", + " ", + " ", + "", + " ```jsx", + " $2", + " ```", + "", + " ", + " ", + "", + " ```js", + " $3", + " ```", + "", + " ", + " ", + "" + ], + "description": "MDX multilingual tabs" + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 7a17ef2a4..176df8375 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,9 @@ { "editor.rulers": [ 60, // try to keep examples this long - 80, // hard wrap - ] + 80 // hard wrap + ], + "files.associations": { + "*.md": "mdx" + } } diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 26cd10755..6a568d709 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -5,31 +5,31 @@ In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. +size, disability, ethnicity, sex characteristics, gender identity and +expression, level of experience, education, socio-economic status, nationality, +personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting ## Our Responsibilities @@ -37,11 +37,11 @@ Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. ## Scope @@ -55,11 +55,12 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at alexander.krolick+testing@gmail.com. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. +reported by contacting the project team at alexander.krolick+testing@gmail.com. +All complaints will be reviewed and investigated and will result in a response +that is deemed necessary and appropriate to the circumstances. The project team +is obligated to maintain confidentiality with regard to the reporter of an +incident. Further details of specific enforcement policies may be posted +separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other @@ -67,8 +68,9 @@ members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.4, available at +https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org diff --git a/Dockerfile b/Dockerfile deleted file mode 100755 index d369844d5..000000000 --- a/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:8.11.4 - -WORKDIR /app/website - -EXPOSE 3000 35729 -COPY ./docs /app/docs -COPY ./website /app/website -RUN yarn install - -CMD ["yarn", "start"] diff --git a/README.md b/README.md index 7fbc2bbaa..4ffd940f5 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,15 @@ -testing-library-docs --------------------- - +## testing-library-docs -[![Open Collective Sponsors and Backers][opencollective-badge]][opencollective] [![All Contributors][allcontributors-badge]](#contributors) [![Code of Conduct][coc-badge]][coc] -Documentation site for [React Testing Library](https://github.com/testing-library/react-testing-library), [DOM Testing Library](https://github.com/testing-library/dom-testing-library), and [related projects](https://github.com/testing-library) - -See [./website/README.md](./website/README.md) for instructions on building the site +Documentation site for +[React Testing Library](https://github.com/testing-library/react-testing-library), +[DOM Testing Library](https://github.com/testing-library/dom-testing-library), +[Angular Testing Library](https://github.com/testing-library/angular-testing-library), +and [related projects](https://github.com/testing-library) **https://testing-library.com** @@ -18,67 +17,532 @@ See [./website/README.md](./website/README.md) for instructions on building the [![Netlify Status][netlify-badge]][build] -[netlify-badge]: https://api.netlify.com/api/v1/badges/24366204-84ca-41e9-b573-2a64f0845e46/deploy-status +[netlify-badge]: + https://api.netlify.com/api/v1/badges/24366204-84ca-41e9-b573-2a64f0845e46/deploy-status [build]: https://app.netlify.com/sites/testing-library/deploys -[opencollective]: https://opencollective.com/testing-library/ -[opencollective-badge]: https://img.shields.io/opencollective/all/testing-library.svg?label=opencollective%20backers&style=flat-square -[allcontributors-badge]: https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square -[coc-badge]: https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square -[coc]: https://github.com/testing-library/react-testing-library/blob/master/CODE_OF_CONDUCT.md +[allcontributors-badge]: + https://img.shields.io/github/all-contributors/testing-library/testing-library-docs?color=ee8449&style=flat-square +[coc-badge]: + https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square +[coc]: + https://github.com/testing-library/react-testing-library/blob/main/CODE_OF_CONDUCT.md + +This website was created with [Docusaurus](https://v2.docusaurus.io). + +# What's In This Document + +- [Get Started in 5 Minutes](#get-started-in-5-minutes) +- [Editing Content](#editing-content) +- [Adding Content](#adding-content) + +# Get Started in 5 Minutes + +1. Make sure all the dependencies for the website are installed: + +```sh +# Install dependencies +$ npm install +``` + +2. Run your dev server: + +```sh +# Start the site +$ npm start +``` + +# Editing Content + +## Editing an existing docs page + +Edit docs by navigating to `docs/` and editing the corresponding document: + +`docs/doc-to-be-edited.mdx` + +```markdown +--- +id: page-needs-edit +title: This Doc Needs To Be Edited +--- + +Edit me... +``` + +For more information about docs, click [here](https://v2.docusaurus.io/docs) + +## Editing an existing blog post + +Edit blog posts by navigating to `blog` and editing the corresponding post: + +`blog/post-to-be-edited.mdx` + +```markdown +--- +id: post-needs-edit +title: This Blog Post Needs To Be Edited +--- + +Edit me... +``` + +For more information about blog posts, click +[here](https://v2.docusaurus.io/docs/blog) + +# Adding Content + +## Adding a new docs page to an existing sidebar + +1. Create the doc as a new markdown file in `/docs`, example + `docs/newly-created-doc.mdx`: + +```md +--- +id: newly-created-doc +title: This Doc Needs To Be Edited +--- + +My new content here.. +``` + +Note: Ensure the file name and the id value do not include non-url safe +characters i.e. '\*'. + +2. Refer to that doc's ID in an existing sidebar in `sidebar.json`: + +```javascript +// Add newly-created-doc to the Getting Started category of docs +{ + "docs": { + "Getting Started": [ + "quick-start", + "newly-created-doc" // new doc here + ], + ... + }, + ... +} +``` + +For more information about adding new docs, click +[here](https://v2.docusaurus.io/docs/) ## Contributors -Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): +Thanks goes to these wonderful people +([emoji key](https://allcontributors.org/docs/en/emoji-key)): - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Kent C. Dodds
Kent C. Dodds

🚧
Alex Krolick
Alex Krolick

🚧
Sidak Singh Aulakh
Sidak Singh Aulakh

💻
Brandon Carroll
Brandon Carroll

💻
David
David

📖
Ryan James
Ryan James

📖
Brandon Johnson
Brandon Johnson

📖
Edward Coleridge Smith
Edward Coleridge Smith

📖
Adrià Fontcuberta
Adrià Fontcuberta

📖 👀
Tim Deschryver
Tim Deschryver

📖
Ben Monro
Ben Monro

📖
Scott Sauber
Scott Sauber

📝
Shota Tamura
Shota Tamura

🖋 📖
Giorgio Polvara
Giorgio Polvara

📖
michalak111
michalak111

📖 ⚠️
Huyen Nguyen
Huyen Nguyen

📖
Kieren Hughes
Kieren Hughes

📖
Sean McPherson
Sean McPherson

📖
Michael Lasky
Michael Lasky

📖
Thomas Lombart
Thomas Lombart

📖
Patrick K Long
Patrick K Long

📖
Pedro Filho
Pedro Filho

📖
Tanguy Antoine
Tanguy Antoine

📖
Kevin Anderson
Kevin Anderson

📖
Dustin Myers
Dustin Myers

📖
Vojta Holik
Vojta Holik

🎨
Steve Schwarz
Steve Schwarz

📖
Aayush Rajvanshi
Aayush Rajvanshi

📖
Eugie Limpin
Eugie Limpin

📖
Kevin
Kevin

📖
Jennifer Shehane
Jennifer Shehane

📖
Steve Taggart
Steve Taggart

📖
Stephen Sugden
Stephen Sugden

📖
Blai Samitier
Blai Samitier

📖
Kent C. Dodds
Kent C. Dodds

🚧
Alex Krolick
Alex Krolick

🚧
Sidak Singh Aulakh
Sidak Singh Aulakh

💻
Brandon Carroll
Brandon Carroll

💻
David
David

📖
Ryan James
Ryan James

📖
Brandon Johnson
Brandon Johnson

📖
Edward Coleridge Smith
Edward Coleridge Smith

📖
Adrià Fontcuberta
Adrià Fontcuberta

📖 👀
Tim Deschryver
Tim Deschryver

📖 💻
Ben Monro
Ben Monro

📖
Scott Sauber
Scott Sauber

📝
Shota Tamura
Shota Tamura

🖋 📖
Giorgio Polvara
Giorgio Polvara

📖
michalak111
michalak111

📖 ⚠️
Huyen Nguyen
Huyen Nguyen

📖
Kieren Hughes
Kieren Hughes

📖
Sean McPherson
Sean McPherson

📖
Michael Lasky
Michael Lasky

📖
Thomas Lombart
Thomas Lombart

📖
Patrick K Long
Patrick K Long

📖
Pedro Filho
Pedro Filho

📖
Tanguy Antoine
Tanguy Antoine

📖
Kevin Anderson
Kevin Anderson

📖
Dustin Myers
Dustin Myers

📖
Vojta Holik
Vojta Holik

🎨
Steve Schwarz
Steve Schwarz

📖
Aayush Rajvanshi
Aayush Rajvanshi

📖
Eugie Limpin
Eugie Limpin

📖
Kevin
Kevin

📖
Jennifer Shehane
Jennifer Shehane

📖
Steve Taggart
Steve Taggart

📖
Stephen Sugden
Stephen Sugden

📖
Blai Samitier
Blai Samitier

📖
Vernon Kesner
Vernon Kesner

📖
Will Douglas
Will Douglas

📖
Head
Head

📖
Lee
Lee

📖
Mario Beltrán Alarcón
Mario Beltrán Alarcón

📖
jameslevine
jameslevine

📖
Rahim Alwer
Rahim Alwer

📖
Chenjia
Chenjia

📖
Olivier Le Thanh Duong
Olivier Le Thanh Duong

📖
Jakub Jastrzębski
Jakub Jastrzębski

📖
Ivan Galiatin
Ivan Galiatin

📖
Hendrik Röhm
Hendrik Röhm

📖
Sam Kauffman
Sam Kauffman

📖
Turadg Aleahmad
Turadg Aleahmad

📖
mark g romano
mark g romano

📖
Arturo Romero
Arturo Romero

📖
Dustin Masters
Dustin Masters

📖
Darren Lester
Darren Lester

📖
Iswara Chaitanya
Iswara Chaitanya

📖
Nataliia Pylypenko
Nataliia Pylypenko

📖
Hu Chen
Hu Chen

📖
Josh
Josh

📖
numb86
numb86

📖
Nicholas Boll
Nicholas Boll

📖
Billy Matthews
Billy Matthews

📢 📖
Dale French
Dale French

📖
aw-davidson
aw-davidson

📖
Benjamin Blackwood
Benjamin Blackwood

📖
Ben
Ben

📖
Daniel Afonso
Daniel Afonso

📖
Noman Gul
Noman Gul

📖
Rafael Souza
Rafael Souza

📖
Pavel Pustovalov
Pavel Pustovalov

📖
Dyma
Dyma

📖
Matan Borenkraout
Matan Borenkraout

📖 💻
timrobinson33
timrobinson33

📖
Manuel Dugué
Manuel Dugué

📖
karthik20
karthik20

📖
Pob Ch
Pob Ch

📖
Mohammad Kermani
Mohammad Kermani

📖
Adeel Imran
Adeel Imran

📖
Varun Dey
Varun Dey

📖
Pablo R. Dinella
Pablo R. Dinella

📖
Jamie
Jamie

📖
Cory House
Cory House

📖
Jack Zhao
Jack Zhao

📖
Ryan Kennel
Ryan Kennel

📖
Jesus Hernandez
Jesus Hernandez

📖
Aaron Pettengill
Aaron Pettengill

📖
Izhaki
Izhaki

📖
Robin Wieruch
Robin Wieruch

Alexander Sokolov
Alexander Sokolov

📖
Sascha Tandel
Sascha Tandel

📖
Gyuwon Yi
Gyuwon Yi

📖
Boris Serdiuk
Boris Serdiuk

📖
balavishnuvj
balavishnuvj

📖
Sharmila Jesupaul
Sharmila Jesupaul

📖
Batuhan Wilhelm
Batuhan Wilhelm

📖
Dennis Kaffer
Dennis Kaffer

📖
Cam Jackson
Cam Jackson

📖
Jared Luxenberg
Jared Luxenberg

📖
Yakir Narkis
Yakir Narkis

📖
Rahul Bhooteshwar
Rahul Bhooteshwar

📖
Maja Wichrowska
Maja Wichrowska

📖
Kermani
Kermani

📖 👀
Vasily Malykhin
Vasily Malykhin

📖
Brian Alexis
Brian Alexis

📖
Kalpesh Singh
Kalpesh Singh

📖
Gerrit Alex
Gerrit Alex

📖
Winter LaMon
Winter LaMon

📖
Juliano Penna
Juliano Penna

📖
Paul Coroneos
Paul Coroneos

📖
Sebastian Silbermann
Sebastian Silbermann

📖 👀
Paul Salaets
Paul Salaets

📖
Michaël De Boey
Michaël De Boey

📖
Washington Soares
Washington Soares

📖
Jami Suomalainen
Jami Suomalainen

📖
Oriol Puig
Oriol Puig

📖
hedgecox
hedgecox

📖
Sherman Hui
Sherman Hui

📖
Jesu Castillo
Jesu Castillo

📖
Core HTML5 Canvas, the book
Core HTML5 Canvas, the book

📖
John Sterling
John Sterling

📖
Velu S Gautam
Velu S Gautam

📖
Richard Oliver Bray
Richard Oliver Bray

📖
Yanlin Jiang
Yanlin Jiang

📖
Lidor Avitan
Lidor Avitan

📖
Isaiah Thomason
Isaiah Thomason

📖
Denis Barushev
Denis Barushev

📖
Domas
Domas

📖
Anton Niklasson
Anton Niklasson

📖
Nikolai Yakuschenko
Nikolai Yakuschenko

📖
Jan Schröder
Jan Schröder

📖
Nick McCurdy
Nick McCurdy

📖 👀 💻
Sudhanshu
Sudhanshu

📖
Aleksandr Chernov
Aleksandr Chernov

📖
Mathias
Mathias

📖
davidseow
davidseow

📖
Tony Hallett
Tony Hallett

📖
prsdta
prsdta

📖
tal-joffe
tal-joffe

📖
Mayank Jethva
Mayank Jethva

📖
Elad Israeli
Elad Israeli

📖
Francis Chartrand
Francis Chartrand

📖
Preston Carman
Preston Carman

📖
Olivier Wilkinson
Olivier Wilkinson

📖
Amit Miran
Amit Miran

📖
Paul Melero
Paul Melero

📖
jonathan schatz
jonathan schatz

📖
Ricky Sullivan Himself
Ricky Sullivan Himself

📖
Armin
Armin

📖
Dale Baldwin
Dale Baldwin

📖
AdriSolid
AdriSolid

📖
Naruth Kongurai
Naruth Kongurai

📖
Erfan Mirzapour
Erfan Mirzapour

📖
Shem Mahluf
Shem Mahluf

💻 🚇 📖
Phil Gibbins
Phil Gibbins

📖
Liad Shiran
Liad Shiran

📖
Eduardo Simón Picón
Eduardo Simón Picón

📖
Sanjeev Sharma
Sanjeev Sharma

📖
dror-heller
dror-heller

📖
Aleksei Arro
Aleksei Arro

📖
Carlo Beltrame
Carlo Beltrame

📖
ggorlen
ggorlen

📖
mattstobbs
mattstobbs

📖
Zach
Zach

📖
Angus J. Pope
Angus J. Pope

📖
Dylan Piercey
Dylan Piercey

📖
Ruhollah
Ruhollah

📖
Michael Gwynne
Michael Gwynne

📖
Dominik Broj
Dominik Broj

📖
Stephen Wade
Stephen Wade

📖
Luiz Baldi
Luiz Baldi

📖
Thomas Ingram
Thomas Ingram

📖
David Johnston
David Johnston

📖
Rupert McKay
Rupert McKay

📖
Sebastián Maciel
Sebastián Maciel

📖
Sidharth Vinod
Sidharth Vinod

📖
Honza Kalfus
Honza Kalfus

📖
Christopher Laidler
Christopher Laidler

📖
Nik Savchenko
Nik Savchenko

📖
Steven Frieson
Steven Frieson

📖
Andrew Rosário
Andrew Rosário

📖
Daniel RB
Daniel RB

📖
HonkingGoose
HonkingGoose

📖
Daniel Kolev
Daniel Kolev

📖
Arryangga Aliev Pratamaputra
Arryangga Aliev Pratamaputra

📖
Andrew Hansen
Andrew Hansen

📖
JOAO GABRIEL SANTOS NEVES
JOAO GABRIEL SANTOS NEVES

📖
Luke Ingalls
Luke Ingalls

📖
Aleksey Levenstein
Aleksey Levenstein

📖
Tomas Zaicevas
Tomas Zaicevas

📖
Sriram Thiagarajan
Sriram Thiagarajan

📖
Esteban Borai
Esteban Borai

📖
Arti Villa
Arti Villa

📖
Jake Boone
Jake Boone

📖
Dennis273
Dennis273

📖
Mosh Feu
Mosh Feu

📖
Notas Hellout
Notas Hellout

📖
Max Smolens
Max Smolens

📖
Nima Ebrazeh
Nima Ebrazeh

📖
Philipp Fritsche
Philipp Fritsche

👀
Clément Plantier
Clément Plantier

📖
pppp606
pppp606

📖
Bilou
Bilou

📖
David Hewson
David Hewson

📖
Alex Kim
Alex Kim

📖
PaquitoSoft
PaquitoSoft

📖
Márcio Gabriel
Márcio Gabriel

📖
Krychaxp
Krychaxp

📖
momokolo
momokolo

📖
AndyG
AndyG

📖
Jason Butz
Jason Butz

🚇
Oleg
Oleg

📖
Dany Paredes
Dany Paredes

📖
Abel
Abel

📖
Patrick Brady
Patrick Brady

📖
Grant Eaton
Grant Eaton

📖
Aaron Dunphy
Aaron Dunphy

📖
Tom Mrazauskas
Tom Mrazauskas

📖
Supermaryy
Supermaryy

📖
Ben Newton
Ben Newton

📖
Matija Marohnić
Matija Marohnić

📖
Thaddeus Jiang
Thaddeus Jiang

📖
Robin Drexler
Robin Drexler

📖
Thomas McKee
Thomas McKee

📖
satanTime
satanTime

📖
polinamochan
polinamochan

📖
Shai Rose
Shai Rose

📖
AldinRekic
AldinRekic

🎨
Son Nguyen
Son Nguyen

📖
Lirlev48
Lirlev48

📖
Tarjei Huse
Tarjei Huse

📖
Obie Munoz
Obie Munoz

📖
Bert B
Bert B

📖
Alireza Heydari
Alireza Heydari

📖
Gleb Radutsky
Gleb Radutsky

📖
giovanniPepi
giovanniPepi

📖
Maciej Jastrzebski
Maciej Jastrzebski

📖
Sergio Moreno
Sergio Moreno

💻
David Nixon
David Nixon

📖
Anton Khitrenovich
Anton Khitrenovich

📖
Kostas Minaidis
Kostas Minaidis

📖
Than Hutchins
Than Hutchins

📖
Jordan Edmunds
Jordan Edmunds

📖
mouse
mouse

📖
Roberto Molina
Roberto Molina

📖
Louis Young
Louis Young

📖
Lukas Elmer
Lukas Elmer

📖
Brent Guffens
Brent Guffens

📖
Esteban
Esteban

📖
Tibor Barsi
Tibor Barsi

📖
Tomoya Kashifuku
Tomoya Kashifuku

📖
Leo
Leo

📖
Erik Metz
Erik Metz

📖
Vaibhav Tyagi
Vaibhav Tyagi

📖
Aleksei Drokin
Aleksei Drokin

📖
Torsten Knauf
Torsten Knauf

📖
John Harlow
John Harlow

📖
Morgan Hunter
Morgan Hunter

📖
Louis Moselhi
Louis Moselhi

📖
Ryan McGill
Ryan McGill

📖
Renan Andrade
Renan Andrade

📖
Vasilii Boldurean
Vasilii Boldurean

📖
Josias Schneider
Josias Schneider

📖
Denis LE
Denis LE

📖
Nicolas Frizzarin
Nicolas Frizzarin

📖
Santosh Yadav
Santosh Yadav

📖
Ilê Caian
Ilê Caian

📖
Alex Khomenko
Alex Khomenko

📖
Luís Campos
Luís Campos

📖
Alexandr Zhidovlenko
Alexandr Zhidovlenko

📖
lyannel
lyannel

️️️️♿️
Yanick Champoux
Yanick Champoux

📖
Ali
Ali

📖
Milan Jaritz
Milan Jaritz

📖
Rokas Brazdžionis
Rokas Brazdžionis

📖
Laforge Thomas
Laforge Thomas

📖
Steph Nathai
Steph Nathai

💻 ️️️️♿️
Frieder Bluemle
Frieder Bluemle

📖
Gromit (전민재)
Gromit (전민재)

📖
Cesar S
Cesar S

📖
Corbin Crutchley
Corbin Crutchley

📖
Roman Batsenko
Roman Batsenko

📖
snjro
snjro

📖
taro
taro

📖
Andreas Nordahl
Andreas Nordahl

📖
neaumusic
neaumusic

📖
Joyel Johny
Joyel Johny

💻
bsheps
bsheps

📖
Kyle Nazario
Kyle Nazario

📖
Giuliano Crivelli
Giuliano Crivelli

📖
mrkv
mrkv

📖
smk267
smk267

🚇
Dylan Gordon
Dylan Gordon

📖
Michael Cousins
Michael Cousins

📖 👀
Artem Zakharchenko
Artem Zakharchenko

📖
Vadim Shvetsov
Vadim Shvetsov

📖
Domantas Petrauskas
Domantas Petrauskas

📖
Efim
Efim

📖
denisx
denisx

💻
Giovanni Gualiato
Giovanni Gualiato

📖
Saud Baig
Saud Baig

📖
Ren Adachi
Ren Adachi

📖
Ty Mick
Ty Mick

📖
Enmanuel Durán
Enmanuel Durán

📖
Galeel Bhasha Satthar
Galeel Bhasha Satthar

📖
Ian Létourneau
Ian Létourneau

📖
brianlu2610
brianlu2610

💻
Erin
Erin

📖
Nan Chen
Nan Chen

📖
Alexander Burdiss
Alexander Burdiss

📖
Peter Hentges
Peter Hentges

📖
neknalb
neknalb

📖
fetsorn
fetsorn

📖
+ + + -This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! +This project follows the +[all-contributors](https://github.com/all-contributors/all-contributors) +specification. Contributions of any kind welcome! diff --git a/website/blog/2018-12-29-new-site.md b/blog/2018-12-29-new-site.mdx similarity index 79% rename from website/blog/2018-12-29-new-site.md rename to blog/2018-12-29-new-site.mdx index cd3652a16..592607164 100755 --- a/website/blog/2018-12-29-new-site.md +++ b/blog/2018-12-29-new-site.mdx @@ -1,7 +1,7 @@ --- title: New Site author: Alex Krolick -authorURL: http://github.com/alexkrolick +authorURL: 'http://github.com/alexkrolick' --- We have a docs site now! It's built with [Docusaurus](https://docusaurus.io). @@ -20,6 +20,6 @@ beyond! 🎉 Happy new year! -[dtl]: / -[rtl]: /react -[ctl]: /cypress +[dtl]: /docs/dom-testing-library/intro +[rtl]: /docs/react-testing-library/intro +[ctl]: /docs/cypress-testing-library/intro diff --git a/website/blog/2019-03-17-code-blocks.md b/blog/2019-03-17-code-blocks.mdx similarity index 92% rename from website/blog/2019-03-17-code-blocks.md rename to blog/2019-03-17-code-blocks.mdx index 49b0c45b1..b17d70ea2 100755 --- a/website/blog/2019-03-17-code-blocks.md +++ b/blog/2019-03-17-code-blocks.mdx @@ -1,7 +1,7 @@ --- title: Multi-Framework Code Blocks author: Alex Krolick -authorURL: http://github.com/alexkrolick +authorURL: 'http://github.com/alexkrolick' --- Many of the code samples have been updated to include tabs to switch between diff --git a/website/blog/2019-04-25-new-org.md b/blog/2019-04-25-new-org.mdx similarity index 83% rename from website/blog/2019-04-25-new-org.md rename to blog/2019-04-25-new-org.mdx index c835f1a8b..b0e09c200 100644 --- a/website/blog/2019-04-25-new-org.md +++ b/blog/2019-04-25-new-org.mdx @@ -1,10 +1,12 @@ --- -# prettier doesn't like how long this line is. -# prettier-ignore -title: "Testing Library Updates: new release, github org, open collective, and twitter account" +# prettier doesn't like how long this line is.: "" +# prettier-ignore: "" +title: + 'Testing Library Updates: new release, github org, open collective, and + twitter account' author: Kent C. Dodds -authorURL: https://kentcdodds.com -authorImageURL: https://avatars0.githubusercontent.com/u/1500684?s=120&v=4 +authorURL: 'https://kentcdodds.com/' +authorImageURL: 'https://avatars0.githubusercontent.com/u/1500684?s=120&v=4' --- Hello friends! I'm pleased to announce the recent updates to the testing-library @@ -35,8 +37,7 @@ just disable it here --> We hope that this helps you catch bugs better! @@ -71,7 +72,7 @@ Here are the current (or soon to be) members of the org: (Puppeteer) - [bs-react-testing-library](https://github.com/wyze/bs-react-testing-library) (ReasonReact) -- [testcafe-testing-library](https://github.com/benmonro/testcafe-testing-library) +- [testcafe-testing-library](https://github.com/testing-library/testcafe-testing-library) - [user-event](https://github.com/Gpx/user-event) - [jest-dom](https://github.com/testing-library/jest-dom) - [jest-native](https://github.com/testing-library/jest-native) @@ -122,33 +123,27 @@ there.) Please join us! > [Join us on Spectrum](https://spectrum.chat/testing-library) -## [Testing Library on React Native](https://www.native-testing-library.com/) +## [Testing Library on React Native](https://callstack.github.io/react-native-testing-library/) I'm really happy to announce a super solution to the React Native testing space. The DOM is quite different from native, as I mentioned before, it's not the code but the concepts that really make the Testing Library great. I'm happy to say -that [Brandon Carroll](https://twitter.com/bcarroll22) has successfully ported +that [Brandon Carroll](https://github.com/bcarroll22) has successfully ported those concepts to a solution for React Native and I'm really happy with it. Give it a look if you're building React Native applications and want confidence that they continue to work as you make changes! -(Note, there is already `react-native-testing-library`, but it doesn't quite -follow the guiding principles of Testing Library, so we recommend you use -`native-testing-library`. -[Learn More](https://medium.com/@brandoncarroll/why-native-testing-library-exists-629ffb85cae2)). +> [Checkout native-testing-library](https://callstack.github.io/react-native-testing-library/) -> [Checkout native-testing-library](https://www.native-testing-library.com/) - -## [Learn Testing Library](https://testing-library.com/docs/learning) +## [Learn Testing Library](/docs/learning) There's been a LOT of activity around the Testing Library principles and tools in the content space. We do have -[a page that lists learning materials](https://testing-library.com/docs/learning), -and more gets added to it daily. If you know of blog posts, YouTube videos, -courses, or anything else about the Testing Library family of tools, please -contribute to the list! +[a page that lists learning materials](/docs/learning), and more gets added to +it daily. If you know of blog posts, YouTube videos, courses, or anything else +about the Testing Library family of tools, please contribute to the list! -> [Contribute to the learning materials page](https://github.com/testing-library/testing-library-docs/edit/master/docs/learning.md) +> [Contribute to the learning materials page](https://github.com/testing-library/testing-library-docs/edit/main/docs/learning.mdx) ## Other Exciting news @@ -157,9 +152,9 @@ As of a few months ago, you use react-testing-library to test your react applications. That's kinda neat :) -At the React Amsterdam [Open Source awards](https://osawards.com/react/) ceremony, -react-testing-library won the award for the Most impactful contribution to the -community! +At the React Amsterdam [Open Source awards](https://osawards.com/react/) +ceremony, react-testing-library won the award for the Most impactful +contribution to the community! ![Open Source Awards award](/img/blog/award.jpg) @@ -178,7 +173,7 @@ an especially significant impact on the Testing Library family of tools and community. [Myself 👋](https://kentcdodds.com), [Alex Krolick](https://alexkrolick.com/), -[Brandon Carroll](https://twitter.com/bcarroll22), +[Brandon Carroll](https://github.com/bcarroll22), [Giorgio](https://twitter.com/Gpx), [Ernesto García](https://twitter.com/gnapse), and [Daniel Cook](https://github.com/dfcook). diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100755 index 6711192ae..000000000 --- a/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: "3" - -services: - docusaurus: - build: . - ports: - - 3000:3000 - - 35729:35729 - volumes: - - ./docs:/app/docs - - ./website/blog:/app/website/blog - - ./website/core:/app/website/core - - ./website/i18n:/app/website/i18n - - ./website/pages:/app/website/pages - - ./website/static:/app/website/static - - ./website/sidebars.json:/app/website/sidebars.json - - ./website/siteConfig.js:/app/website/siteConfig.js - working_dir: /app/website diff --git a/docs/angular-testing-library/api.md b/docs/angular-testing-library/api.md deleted file mode 100644 index 976e959c9..000000000 --- a/docs/angular-testing-library/api.md +++ /dev/null @@ -1,282 +0,0 @@ ---- -id: api -title: API -sidebar_label: API ---- - -`Angular Testing Library` re-exports everything from `DOM Testing Library` as -well as these methods: - -- [`render`](<(#render)>) - -## `render` - -```typescript -function render( - component: Type, - renderOptions?: RenderOptions -): Promise -function render( - template: string, - renderOptions: RenderOptions -): Promise -``` - -## RenderOptions - -### `detectChanges` - -Will call `detectChanges` when the component is compiled - -**default** : `true` - -**example**: - -```typescript -const component = await render(AppComponent, { detectChanges: false }) -``` - -### `declarations` - -A collection of providers needed to render the component via Dependency -Injection, for example, injectable services or tokens. - -For more info see the -[Angular docs](https://angular.io/api/core/NgModule#providers). - -**default** : `[]` - -**example**: - -```typescript -const component = await render(AppComponent, { - providers: [ - CustomersService, - { - provide: MAX_CUSTOMERS_TOKEN, - useValue: 10, - }, - ], -}) -``` - -### `imports` - -A collection of imports needed to render the component, for example, shared -modules. Adds `NoopAnimationsModule` by default if `BrowserAnimationsModule` -isn't added to the collection - -For more info see the -[Angular docs](https://angular.io/api/core/NgModule#imports). - -**default** : `[NoopAnimationsModule]` - -**example**: - -```typescript -const component = await render(AppComponent, { - imports: [AppSharedModule, MaterialModule], -}) -``` - -### `schemas` - -A collection of schemas needed to render the component. Allowed values are -`NO_ERRORS_SCHEMA` and `CUSTOM_ELEMENTS_SCHEMA`. - -For more info see the -[Angular docs](https://angular.io/api/core/NgModule#schemas). - -**default** : `[]` - -**example**: - -```typescript -const component = await render(AppComponent, { - schemas: [NO_ERRORS_SCHEMA], -}) -``` - -### `componentProperties` - -An object to set `@Input` and `@Output` properties of the component. - -**default** : `{}` - -**example**: - -```typescript -const component = await render(AppComponent, { - componentProperties: { - counterValue: 10, - send: (value) => { ... } - } -}) -``` - -### `componentProviders` - -A collection of providers to inject dependencies of the component. - -For more info see the -[Angular docs](https://angular.io/api/core/Directive#providers). - -**default** : `[]` - -**example**: - -```typescript -const component = await render(AppComponent, { - componentProviders: [AppComponentService], -}) -``` - -### `queries` - -Queries to bind. Overrides the default set from DOM Testing Library unless -merged. - -**default** : `undefined` - -**example**: - -```typescript -const component = await render(AppComponent, { - queries: { ...queries, ...customQueries }, -}) -``` - -### `wrapper` - -An Angular component to wrap the component in. - -**default** : `WrapperComponent`, an empty component that strips the -`ng-version` attribute. - -**example**: - -```typescript -const component = await render(AppComponent, { - wrapper: CustomWrapperComponent, -}) -``` - -### `excludeComponentDeclaration` - -Exclude the component to be automatically be added as a declaration. This is -needed when the component is declared in an imported module. - -**default** : `false` - -**example**: - -```typescript -const component = await render(AppComponent, { - imports: [AppModule], // a module that includes AppComponent - excludeComponentDeclaration: true, -}) -``` - -## `RenderResult` - -### `...queries` - -The most important feature of `render` is that the queries from -[DOM Testing Library](https://testing-library.com/docs/dom-testing-library) are -automatically returned with their first argument bound to the component under -test. - -See [Queries](https://testing-library.com/docs/dom-testing-library/api-queries) -for a complete list. - -**example**: - -```typescript -const component = await render(AppComponent) - -component.getByText('Hello world') -component.queryByLabelText('First name:') -``` - -### `fireEvent.***` - -The second most important feature of `render` is that the events from -[DOM Testing Library](https://testing-library.com/docs/dom-testing-library) are -automatically bound to the Angular Component. This to ensure that the Angular -change detection has been run by calling `detectChanges` after an event has been -fired. - -See -[Firing Events](https://testing-library.com/docs/dom-testing-library/api-events) -for a complete list. - -**example**: - -```typescript -const component = await render(AppComponent) - -component.change(component.getByLabelText('Username'), { - target: { - value: 'Tim', - }, -}) -component.click(component.getByText('Login')) -``` - -### `type` - -Types a value in an input field with the same interactions as the user would do. - -```typescript -const component = await render(AppComponent) - -component.type(component.getByLabelText('Username'), 'Tim') -component.type(component.getByLabelText('Username'), 'Tim', { delay: 250 }) -``` - -### `selectOptions` - -Select an option(s) from a select field with the same interactions as the user -would do. - -```typescript -const component = await render(AppComponent) - -component.selectOptions(component.getByLabelText('Fruit'), 'Blueberry') -component.selectOptions(component.getByLabelText('Fruit'), ['Blueberry'. 'Grape']) -``` - -### `fixture` - -The Angular `ComponentFixture` of the component. - -For more info see the -[Angular docs](https://angular.io/api/core/testing/ComponentFixture). - -```typescript -const component = await render(AppComponent) - -const componentInstance = component.fixture.componentInstance as AppComponent -``` - -> 🚨 If you find yourself using `fixture` to access the component's internal -> values you should reconsider! This probable means, you're testing -> implementation details. - -### `container` - -The containing DOM node of your rendered Angular Component. This is a regular -DOM node, so you can call `container.querySelector` etc. to inspect the -children. - -### `debug` - -Prints out the component's DOM with syntax highlighting. Accepts an optional -parameter, to print out a specific DOM node. - -```typescript -const component = await render(AppComponent) - -component.debug() -component.debug(component.getByRole('alert')) -``` diff --git a/docs/angular-testing-library/api.mdx b/docs/angular-testing-library/api.mdx new file mode 100644 index 000000000..08daa3359 --- /dev/null +++ b/docs/angular-testing-library/api.mdx @@ -0,0 +1,597 @@ +--- +id: api +title: API +--- + +`Angular Testing Library` re-exports everything from `DOM Testing Library` as +well as the `render` method. + +The following re-exports are patched to make them easier to use with Angular: + +- The events on `fireEvent` automatically invoke a change detection cycle after + the event has been fired +- The `findBy` queries automatically invoke a change detection cycle before the + query is invoked function +- The `waitFor` functions automatically invoke a change detection cycle before + invoking the callback function + +## `render` + +With Angular Testing Library, the component can be rendered in two ways, via the +component's type or with a template. + +> By default, `render` also imports the `NoopAnimationsModule`. + +## `Type` + +To render a component, you need to pass component's type to the `render` method. +For components that don't use other parts of your application (for example +design modules or services), rendering a component can be as simple as the +following example. + +```typescript +await render(AppComponent) +``` + +## `template` + +Instead of passing the component's type as first argument, you can also provide +a template. This practice is required to render directives but can also be +applied to components, it might even be more useful. The directive's (or +component's) type must then be added to the `imports` (or `declarations` in case +of non-standalone components). + +**example with directive**: + +```typescript +await render('
', { + declarations: [SpoilerDirective], +}) +``` + +**example with component**: + +```typescript +await render( + '', + { + declarations: [AppComponent], + componentProperties: { + anotherValue: 'valueOfAnotherProperty', + sendValue: jest.fn(), + }, + }, +) +``` + +```typescript +export async function render( + component: Type, + renderOptions?: RenderComponentOptions, +): Promise> +export async function render( + template: string, + renderOptions?: RenderTemplateOptions, +): Promise> +``` + +## Component RenderOptions + + +### `inputs` + +An object to set `@Input` or `input()` properties of the component. + +**default** : `{}` + +```typescript +await render(AppComponent, { + inputs: { + counterValue: 10, + // explicitly define aliases using `aliasedInput` + ...aliasedInput('someAlias', 'someValue'), + }, +}) +``` + +### `on` + +An object with callbacks to subscribe to `EventEmitters` and `Observables` of +the component. + +**default** : `{}` + +```ts +// using a manual callback +const sendValue = (value) => { ... } +await render(AppComponent, { + on: { + send: (value) => sendValue(value), + } +}) + +// using a (jest) spy +const sendValueSpy = jest.fn() + +await render(AppComponent, { + on: { + send: sendValueSpy + } +}) +``` + +### `declarations` + +A collection of components, directives and pipes needed to render the component. +For example, nested components of the component. + +For more info see the +[Angular docs](https://angular.dev/guide/ngmodules/overview#declarations). + +**default** : `[]` + +**example**: + +```typescript +await render(AppComponent, { + declarations: [CustomerDetailComponent, ButtonComponent], +}) +``` + +### `deferBlockBehavior` + +Set the defer blocks behavior. + +For more info see the +[Angular docs](https://angular.dev/api/core/testing/DeferBlockBehavior) + +**default** : `undefined` (uses `DeferBlockBehavior.Manual`, which is different +from the Angular default of `DeferBlockBehavior.Playthrough`) + +**example**: + +```typescript +await render(AppComponent, { + deferBlockBehavior: DeferBlockBehavior.Playthrough, +}) +``` + +### `deferBlockStates` + +Set the initial state of a deferrable blocks in a component. + +For more info see the +[Angular docs](https://angular.dev/api/core/testing/DeferBlockState) + +**default** : `undefined` (uses the Angular default, which is +`DeferBlockState.Placeholder`) + +**example**: + +```typescript +await render(FixtureComponent, { + deferBlockStates: DeferBlockState.Loading, +}) +``` + +### `componentProviders` + +A collection of providers needed to render the component via Dependency +Injection. + +These will be provided at the component level. To inject dependencies at the +module level, use [`providers`](#providers). + +For more info see the +[Angular docs](https://angular.dev/guide/di/hierarchical-dependency-injection#example-providing-services-in-component). + +**default** : `[]` + +**example**: + +```typescript +await render(AppComponent, { + componentProviders: [AppComponentService], +}) +``` + +### `componentImports` + +A collection of imports to override a standalone component's imports with. + +**default** : `undefined` + +**example**: + +```typescript +await render(AppComponent, { + componentImports: [MockChildComponent], +}) +``` + +### `childComponentOverrides` + +Collection of child component specified providers to override with. + +**default** : `undefined` + +**example**: + +```typescript +await render(AppComponent, { + childComponentOverrides: [ + { + component: ChildOfAppComponent, + providers: [{provide: ChildService, useValue: {hello: 'world'}}], + }, + ], +}) +``` + +### `detectChangesOnRender` + +Invokes `detectChanges` after the component is rendered. + +**default** : `true` + +**example**: + +```typescript +await render(AppComponent, {detectChangesOnRender: false}) +``` + +### `autoDetectChanges` + +Automatically detect changes as a "real" running component would do. For +example, runs a change detection cycle when an event has occured. + +**default** : `true` + +**example**: + +```typescript +await render(AppComponent, { + autoDetectChanges: false, +}) +``` + +### `excludeComponentDeclaration` + +Exclude the component to be automatically be added as a declaration. This is +needed when the component is declared in an imported module, for example with +SCAMs. + +**default** : `false` + +**example**: + +```typescript +await render(AppComponent, { + imports: [AppModule], // a module that includes AppComponent + excludeComponentDeclaration: true, +}) +``` + +### `imports` + +A collection of imports needed to render the component, for example, shared +modules. Adds `NoopAnimationsModule` by default if `BrowserAnimationsModule` +isn't added to the collection + +For more info see the +[Angular docs](https://angular.dev/guide/components#imports-in-the-component-decorator). + +**default** : `[NoopAnimationsModule]` + +**example**: + +```typescript +await render(AppComponent, { + imports: [AppSharedModule, MaterialModule], +}) +``` + +### `providers` + +A collection of providers needed to render the component via Dependency +Injection. + +These will be provided at the module level. To inject dependencies at the +component level, use [`componentProviders`](#componentProviders). + +For more info see the +[Angular docs](https://angular.dev/guide/di/dependency-injection-providers#). + +**default** : `[]` + +**example**: + +```typescript +await render(AppComponent, { + providers: [ + CustomersService, + { + provide: MAX_CUSTOMERS_TOKEN, + useValue: 10, + }, + ], +}) +``` + +### `queries` + +Queries to bind. Overrides the default set from DOM Testing Library unless +merged. + +**default** : `undefined` + +**example**: + +```typescript +await render(AppComponent, { + queries: {...queries, ...customQueries}, +}) +``` + +### `routes` + +The route configuration to set up the router service via +`RouterTestingModule.withRoutes`. For more info see the +[Angular Routes docs](https://angular.dev/api/router/Routes). + +**default** : `[]` + +**example**: + +```typescript +await render(AppComponent, { + declarations: [ChildComponent], + routes: [ + { + path: '', + children: [ + { + path: 'child/:id', + component: ChildComponent, + }, + ], + }, + ], +}) +``` + +### `schemas` + +A collection of schemas needed to render the component. Allowed values are +`NO_ERRORS_SCHEMA` and `CUSTOM_ELEMENTS_SCHEMA`. + +For more info see the +[Angular docs](https://angular.dev/guide/components/advanced-configuration#custom-element-schemas). + +**default** : `[]` + +**example**: + +```typescript +await render(AppComponent, { + schemas: [NO_ERRORS_SCHEMA], +}) +``` + +### `removeAngularAttributes` + +Removes the Angular attributes (ng-version, and root-id) from the fixture. + +**default** : `false` + +**example**: + +```typescript +await render(AppComponent, { + removeAngularAttributes: true, +}) +``` + + +### ~~`componentInputs`~~ (deprecated) + +An object to set `@Input` properties of the component. Uses `setInput` to set +the input property. Throws if the component property is not annotated with the +`@Input` attribute. + +**default** : `{}` + +**example**: + +```typescript +await render(AppComponent, { + componentInputs: { + counterValue: 10, + }, +}) +``` + +### ~~`componentOutputs`~~ (deprecated) + +An object to set `@Output` properties of the component. + +**default** : `{}` + +**example**: + +```typescript +await render(AppComponent, { + componentOutputs: { + clicked: (value) => { ... } + } +}) +``` + +### ~~`componentProperties`~~ (deprecated) + +An object to set `@Input` and `@Output` properties of the component. Doesn't +have a fine-grained control as `inputs` and `on`. + +**default** : `{}` + +**example**: + +```typescript +await render(AppComponent, { + componentProperties: { + // an input + counterValue: 10, + // an output + send: (value) => { ... } + // a public property + name: 'Tim' + } +}) +``` + + +## `RenderResult` + +### `container` + +The containing DOM node of your rendered Angular Component. This is a regular +DOM node, so you can call `container.querySelector` etc. to inspect the +children. + +### `debug` + +Prints out the component's DOM with syntax highlighting. Accepts an optional +parameter, to print out a specific DOM node. + +```typescript +const {debug} = await render(AppComponent) + +debug() +``` + +### `rerender` + +Changes the input properties of the existing component instance by following +Angular component lifecycle events (i.e. `ngOnChanges` is called). Input +properties that are not defined are cleared. + +```typescript +const {rerender} = await render(Counter, { + inputs: {count: 4, name: 'Sarah'}, +}) + +expect(screen.getByTestId('count-value').textContent).toBe('4') +expect(screen.getByTestId('name-value').textContent).toBe('Sarah') + +await rerender({ + inputs: {count: 7} +}) + +// count is updated to 7 +expect(screen.getByTestId('count-value').textContent).toBe('7') +// name is undefined because it's not provided in rerender +expect(screen.getByTestId('name-value').textContent).toBeUndefined() +``` + +Using `partialUpdate`, only the newly provided properties will be updated. Other +input properties that aren't provided won't be cleared. + +```typescript +const {rerender} = await render(Counter, { + inputs: {count: 4, name: 'Sarah'}, +}) + +expect(screen.getByTestId('count-value').textContent).toBe('4') +expect(screen.getByTestId('name-value').textContent).toBe('Sarah') + +await rerender({inputs: {count: 7}, partialUpdate: true}) + +// count is updated to 7 +expect(screen.getByTestId('count-value').textContent).toBe('7') +// name is still rendered as "Sarah" because of the partial update +expect(screen.getByTestId('name-value').textContent).toBe('Sarah') +``` + +### `detectChanges` + +Trigger a change detection cycle for the component. + +For more info see the +[Angular docs](https://angular.dev/api/core/testing/ComponentFixture#detectChanges). + +### `debugElement` + +The Angular `DebugElement` of the component. + +For more info see the [Angular docs](https://angular.dev/api/core/DebugElement). + +### `fixture` + +The Angular `ComponentFixture` of the component. + +For more info see the +[Angular docs](https://angular.dev/api/core/testing/ComponentFixture). + +```typescript +const {fixture} = await render(AppComponent) + +// componentInstance is typed as AppComponent +const componentInstance = fixture.componentInstance +``` + +> 🚨 If you find yourself using `fixture` to access the component's internal +> values you should reconsider! This probable means, you're testing +> implementation details. + +### `navigate` + +Accepts a DOM element or a path as parameter. If an element is passed, +`navigate` will navigate to the `href` value of the element. If a path is +passed, `navigate` will navigate to the path. + +```typescript +const { navigate } = await render(AppComponent, { + routes: [...] +}) + +await navigate(component.getByLabelText('To details')) +await navigate('details/3') +``` + +### `...queries` + +The most important feature of `render` is that the queries from +[DOM Testing Library](/docs/dom-testing-library/intro) are automatically +returned with their first argument bound to the component under test. + +See [Queries](queries/about.mdx) for a complete list. + +**example**: + +```typescript +const {getByText, queryByLabelText} = await render(AppComponent) + +screen.getByRole('heading', { + name: /api/i, +}) +queryByLabelText(/First name/i') +``` + +### `renderDeferBlock` + +To test [Deferrable views](https://angular.dev/guide/defer#defer), you can make +use of `renderDeferBlock`. `renderDeferBlock` will set the desired defer state +for a specific deferrable block. The default value of a deferrable view is +`Placeholder`, but you can also set the initial state while rendering the +component. + +```typescript +const {renderDeferBlock} = await render(FixtureComponent, { + deferBlockStates: DeferBlockState.Loading, +}) + +expect(screen.getByText(/loading/i)).toBeInTheDocument() + +await renderDeferBlock(DeferBlockState.Complete) +expect(screen.getByText(/completed/i)).toBeInTheDocument() +``` diff --git a/docs/angular-testing-library/examples.md b/docs/angular-testing-library/examples.md deleted file mode 100644 index ad2e2cd35..000000000 --- a/docs/angular-testing-library/examples.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -id: examples -title: Examples -sidebar_label: Examples ---- - -counter.component.ts - -```typescript -@Component({ - selector: 'counter', - template: ` - - Current Count: {{ counter }} - - `, -}) -export class CounterComponent { - @Input() counter = 0 - - increment() { - this.counter += 1 - } - - decrement() { - this.counter -= 1 - } -} -``` - -counter.component.spec.ts - -```typescript -import { render } from '@testing-library/angular' -import CounterComponent from './counter.component.ts' - -describe('Counter', () => { - test('should render counter', async () => { - const { getByText } = await render(CounterComponent, { - componentProperties: { counter: 5 }, - }) - - expect(getByText('Current Count: 5')) - }) - - test('should increment the counter on click', async () => { - const { getByText, click } = await render(CounterComponent, { - componentProperties: { counter: 5 }, - }) - - click(getByText('+')) - - expect(getByText('Current Count: 6')) - }) -}) -``` - -More examples can be found in the -[GitHub project](https://github.com/testing-library/angular-testing-library/tree/master/src/app/examples). -These examples include: - -- `@Input` and `@Output` properties -- (Reactive) Forms -- Integration with NgRx (mock) Store -- And more - -If you're looking for an example that isn't on the list, please feel free to -create a -[new issue](https://github.com/testing-library/angular-testing-library/issues/new). diff --git a/docs/angular-testing-library/examples.mdx b/docs/angular-testing-library/examples.mdx new file mode 100644 index 000000000..2e44b893c --- /dev/null +++ b/docs/angular-testing-library/examples.mdx @@ -0,0 +1,82 @@ +--- +id: examples +title: Example +--- + +> Read about +> [best practices](https://timdeschryver.dev/blog/good-testing-practices-with-angular-testing-library), +> or follow the +> [guided example](https://timdeschryver.dev/blog/getting-the-most-value-out-of-your-angular-component-tests) + +Angular Testing Library can be used with standalone components and also with Angular components that uses Modules. +The example below shows how to test a standalone component, but the same principles apply to Angular components that uses Modules. +In fact, there should be no difference in how you test both types of components, only the setup might be different. + +```ts title="counter.component.ts" +@Component({ + selector: 'app-counter', + template: ` + {{ hello() }} + + Current Count: {{ counter() }} + + `, +}) +export class CounterComponent { + counter = model(0); + hello = input('Hi', { alias: 'greeting' }); + + increment() { + this.counter.set(this.counter() + 1); + } + + decrement() { + this.counter.set(this.counter() - 1); + } +} +``` + +```typescript title="counter.component.spec.ts" +import { render, screen, fireEvent, aliasedInput } from '@testing-library/angular'; +import { CounterComponent } from './counter.component'; + +describe('Counter', () => { + it('should render counter', async () => { + await render(CounterComponent, { + inputs: { + counter: 5, + // aliases need to be specified using aliasedInput + ...aliasedInput('greeting', 'Hello Alias!'), + }, + }); + + expect(screen.getByText('Current Count: 5')).toBeVisible(); + expect(screen.getByText('Hello Alias!')).toBeVisible(); + }); + + it('should increment the counter on click', async () => { + await render(CounterComponent, { inputs: { counter: 5 } }); + + const incrementButton = screen.getByRole('button', { name: '+' }); + fireEvent.click(incrementButton); + + expect(screen.getByText('Current Count: 6')).toBeVisible(); + }); +}); +``` + +## More examples + +More examples can be found in the +[GitHub project](https://github.com/testing-library/angular-testing-library/tree/master/apps/example-app/src/app/examples). +These examples include: + +- `input` and `output` properties +- Forms +- Integration injected services +- And + [more](https://github.com/testing-library/angular-testing-library/tree/master/apps/example-app/src/app/examples) + +If you're looking for an example that isn't on the list, please feel free to +create a +[new issue](https://github.com/testing-library/angular-testing-library/issues/new). diff --git a/docs/angular-testing-library/faq.mdx b/docs/angular-testing-library/faq.mdx new file mode 100644 index 000000000..e333db4b3 --- /dev/null +++ b/docs/angular-testing-library/faq.mdx @@ -0,0 +1,109 @@ +--- +id: faq +title: FAQ +--- + +See also the [main FAQ](dom-testing-library/faq.mdx) for questions not specific +to Angular testing. + +
+ +Can I write unit tests with this library? + +Definitely yes! You can write unit and integration tests with this library. See +below for more on how to mock dependencies (because this library intentionally +does NOT support shallow rendering) if you want to unit test a high level +component. The tests in this project show several examples of unit testing with +this library. + +As you write your tests, keep in mind: + +> The more your tests resemble the way your software is used, the more +> confidence they can give you. - [17 Feb 2018][guiding-principle] + +
+ +
+ + + If I can't use shallow rendering, how do I mock out components in tests? + + +In general, you should avoid mocking out components (see +[the Guiding Principles section](guiding-principles.mdx)). However, if you need +to, then try to use [ng-mocks](https://ng-mocks.sudo.eu/) and its +[`MockBuilder`](https://ng-mocks.sudo.eu/extra/with-3rd-party#testing-libraryangular-and-mockbuilder). + +```typescript +import {Component, NgModule} from '@angular/core' +import {render, screen} from '@testing-library/angular' +import {MockBuilder} from 'ng-mocks' + +@Component({ + selector: 'app-parent-component', + template: '', +}) +class ParentComponent {} + +@Component({ + selector: 'app-child-component', + template: '

Child component

', +}) +class ChildComponent {} + +@NgModule({ + declarations: [ParentComponent, ChildComponent], +}) +export class AppModule {} + +describe('ParentComponent', () => { + it('should not render ChildComponent when shallow rendering', async () => { + // all imports, declarations and exports of AppModule will be mocked. + const dependencies = MockBuilder(ParentComponent, AppModule).build() + + await render(ParentComponent, dependencies) + + expect(screen.queryByText('Child component')).toBeNull() + }) +}) +``` + +
+ +
+ + + What level of a component tree should I test? Children, parents, or both? + + +Following the guiding principle of this library, it is useful to break down how +tests are organized around how the user experiences and interacts with +application functionality rather than around specific components themselves. In +some cases, for example for reusable component libraries, it might be useful to +include developers in the list of users to test for and test each of the +reusable components individually. Other times, the specific break down of a +component tree is just an implementation detail and testing every component +within that tree individually can cause issues (see +https://kentcdodds.com/blog/avoid-the-test-user). + +In practice this means that it is often preferable to test high enough up the +component tree to simulate realistic user interactions. The question of whether +it is worth additionally testing at a higher or lower level on top of this comes +down to a question of tradeoffs and what will provide enough value for the cost +(see https://kentcdodds.com/blog/unit-vs-integration-vs-e2e-tests on more info +on different levels of testing). + +For a more in-depth discussion of this topic see +[this video](https://youtu.be/0qmPdcV-rN8). + +
+ + + + + +[guiding-principle]: https://twitter.com/kentcdodds/status/977018512689455106 + + diff --git a/docs/angular-testing-library/intro.md b/docs/angular-testing-library/intro.mdx similarity index 82% rename from docs/angular-testing-library/intro.md rename to docs/angular-testing-library/intro.mdx index 42d30e6ff..a7820b7f0 100644 --- a/docs/angular-testing-library/intro.md +++ b/docs/angular-testing-library/intro.mdx @@ -8,9 +8,17 @@ sidebar_label: Introduction builds on top of [`DOM Testing Library`](https://github.com/testing-library/dom-testing-library) by adding APIs for working with Angular components. +Starting from ATL version 17, you also need to install `@testing-library/dom`: + +```bash npm2yarn +npm install --save-dev @testing-library/angular @testing-library/dom +``` + +Or, you can use the `ng add` command. +This sets up your project to use Angular Testing Library, which also includes the installation of `@testing-library/dom`. ```bash -npm install --save-dev @testing-library/angular +ng add @testing-library/angular ``` - [`@testing-library/angular-testing-library` on GitHub](https://github.com/testing-library/angular-testing-library) @@ -33,11 +41,11 @@ components. It provides light utility functions on top of in a way that encourages better testing practices. Its primary guiding principle is: -> [The more your tests resemble the way your software is used, the more confidence they can give you.](guiding-principles.md) +> [The more your tests resemble the way your software is used, the more confidence they can give you.](guiding-principles.mdx) So rather than dealing with instances of rendered Angular components, your tests will work with actual DOM nodes. The utilities this library provides facilitate -querying the DOM in the same way the user would. Finding for elements by their +querying the DOM in the same way the user would. Finding form elements by their label text (just like a user would), finding links and buttons from their text (like a user would). It also exposes a recommended way to find elements by a `data-testid` as an "escape hatch" for elements where the text content and label diff --git a/docs/angular-testing-library/version-compatibility.mdx b/docs/angular-testing-library/version-compatibility.mdx new file mode 100644 index 000000000..3b64dd5d2 --- /dev/null +++ b/docs/angular-testing-library/version-compatibility.mdx @@ -0,0 +1,18 @@ +--- +id: version-compatibility +title: Version compatibility +--- + +An overview of the compatibility between different versions of Angular Testing +Library and Angular. + +| Angular | Angular Testing Library | +| ------- | ---------------------------------- | +| 20.x | 18.x | +| 19.x | 18.x, 17.x, 16.x, 15.x, 14.x, 13.x | +| 18.x | 17.x, 16.x, 15.x, 14.x, 13.x | +| 17.x | 17.x, 16.x, 15.x, 14.x, 13.x | +| 16.x | 14.x, 13.x | +| >= 15.1 | 14.x, 13.x | +| < 15.1 | 12.x, 11.x | +| 14.x | 12.x, 11.x | diff --git a/docs/bs-react-testing-library/examples.md b/docs/bs-react-testing-library/examples.mdx similarity index 97% rename from docs/bs-react-testing-library/examples.md rename to docs/bs-react-testing-library/examples.mdx index ce8d544a7..08e96a7c9 100644 --- a/docs/bs-react-testing-library/examples.md +++ b/docs/bs-react-testing-library/examples.mdx @@ -1,6 +1,6 @@ --- id: examples -title: Examples +title: Example --- You can find more bs-dom-testing-library examples at @@ -11,9 +11,7 @@ You can find more bs-react-testing-library examples at ## React Testing Library -```reason -/* Component_test.re */ - +```reason title="Component_test.re" open Jest; open Expect; open ReactTestingLibrary; @@ -37,8 +35,7 @@ with typings and creating events. ### getByText -```reason -/* __tests__/example_test.re */ +```reason title="__tests__/example_test.re" open Jest; open DomTestingLibrary; open Expect; diff --git a/docs/bs-react-testing-library/intro.md b/docs/bs-react-testing-library/intro.mdx similarity index 95% rename from docs/bs-react-testing-library/intro.md rename to docs/bs-react-testing-library/intro.mdx index 8e2545423..316ccc9b2 100644 --- a/docs/bs-react-testing-library/intro.md +++ b/docs/bs-react-testing-library/intro.mdx @@ -13,8 +13,11 @@ Bindings for several testing libraries have been ported to [ReasonML][re]. [`bs-dom-testing-library`][gh-dom] contains [BuckleScript][bs] bindings for `DOM Testing Library`. -``` +```bash npm2yarn npm install --save-dev bs-dom-testing-library +``` + +```bash npm2yarn npm install --save-dev bs-react-testing-library ``` @@ -49,7 +52,7 @@ _or_ This is what [BuckleScript][bs] uses to compile the [Reason][re] code to JS. If it is not in your project you can install it like so: -``` +```bash npm2yarn npm install --save-dev bs-platform ``` @@ -60,7 +63,7 @@ examples here will be using it. - [bs-jest on GitHub](https://github.com/glennsl/bs-jest) -``` +```bash npm2yarn npm install --save-dev @glennsl/bs-jest ``` diff --git a/docs/contributing.md b/docs/contributing.md deleted file mode 100644 index d446eacbe..000000000 --- a/docs/contributing.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -id: contributing -title: Contributing -sidebar_label: Contributing ---- - -## License - -`React Testing Library` is distributed under the open-source MIT license - -## Issues - -_Looking to contribute? Look for the [Good First Issue][good-first-issue] -label._ - -### 🐛 Bugs - -Please file an issue for bugs, missing documentation, or unexpected behavior. - -[**See Bugs**][bugs] - -### 💡 Feature Requests - -Please file an issue to suggest new features. Vote on feature requests by adding -a 👍. This helps maintainers prioritize what to work on. - -[**See Feature Requests**][requests] - -### ❓ Questions - -For questions related to using the library, please visit a support community -instead of filing an issue on GitHub. - -- [Spectrum][spectrum] -- [Reactiflux on Discord][reactiflux] -- [Stack Overflow][stackoverflow] - - - - - -[npm]: https://www.npmjs.com/ -[node]: https://nodejs.org -[build-badge]: https://img.shields.io/travis/kentcdodds/react-testing-library.svg?style=flat-square -[build]: https://travis-ci.org/kentcdodds/react-testing-library -[coverage-badge]: https://img.shields.io/codecov/c/github/kentcdodds/react-testing-library.svg?style=flat-square -[coverage]: https://codecov.io/github/kentcdodds/react-testing-library -[version-badge]: https://img.shields.io/npm/v/react-testing-library.svg?style=flat-square -[package]: https://www.npmjs.com/package/react-testing-library -[downloads-badge]: https://img.shields.io/npm/dm/react-testing-library.svg?style=flat-square -[npmtrends]: http://www.npmtrends.com/react-testing-library -[spectrum-badge]: https://withspectrum.github.io/badge/badge.svg -[spectrum]: https://spectrum.chat/testing-library -[license-badge]: https://img.shields.io/npm/l/react-testing-library.svg?style=flat-square -[license]: https://github.com/testing-library/react-testing-library/blob/master/LICENSE -[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square -[prs]: http://makeapullrequest.com -[donate-badge]: https://img.shields.io/badge/$-support-green.svg?style=flat-square -[coc-badge]: https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square -[coc]: https://github.com/testing-library/react-testing-library/blob/master/CODE_OF_CONDUCT.md -[github-watch-badge]: https://img.shields.io/github/watchers/kentcdodds/react-testing-library.svg?style=social -[github-watch]: https://github.com/testing-library/react-testing-library/watchers -[github-star-badge]: https://img.shields.io/github/stars/kentcdodds/react-testing-library.svg?style=social -[github-star]: https://github.com/testing-library/react-testing-library/stargazers -[twitter]: https://twitter.com/intent/tweet?text=Check%20out%20react-testing-library%20by%20%40kentcdodds%20https%3A%2F%2Fgithub.com%2Fkentcdodds%2Freact-testing-library%20%F0%9F%91%8D -[twitter-badge]: https://img.shields.io/twitter/url/https/github.com/testing-library/react-testing-library.svg?style=social -[emojis]: https://github.com/kentcdodds/all-contributors#emoji-key -[all-contributors]: https://github.com/kentcdodds/all-contributors -[set-immediate]: https://developer.mozilla.org/en-US/docs/Web/API/Window/setImmediate -[guiding-principle]: https://twitter.com/kentcdodds/status/977018512689455106 -[data-testid-blog-post]: https://blog.kentcdodds.com/making-your-ui-tests-resilient-to-change-d37a6ee37269 -[dom-testing-lib-textmatch]: https://github.com/testing-library/dom-testing-library#textmatch -[bugs]: https://github.com/testing-library/react-testing-library/issues?q=is%3Aissue+is%3Aopen+label%3Abug+sort%3Acreated-desc -[requests]: https://github.com/testing-library/react-testing-library/issues?q=is%3Aissue+sort%3Areactions-%2B1-desc+label%3Aenhancement+is%3Aopen -[good-first-issue]: https://github.com/testing-library/react-testing-library/issues?utf8=✓&q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A"good+first+issue"+ -[reactiflux]: https://www.reactiflux.com/ -[stackoverflow]: https://stackoverflow.com/questions/tagged/react-testing-library - - diff --git a/docs/contributing.mdx b/docs/contributing.mdx new file mode 100644 index 000000000..167844e54 --- /dev/null +++ b/docs/contributing.mdx @@ -0,0 +1,49 @@ +--- +id: contributing +title: Contributing +sidebar_label: Contributing +--- + +## License + +`React Testing Library` is distributed under the open-source MIT license + +## Issues + +_Looking to contribute? Look for the [Good First Issue][good-first-issue] +label._ + +### 🐛 Bugs + +Please file an issue for bugs, missing documentation, or unexpected behavior. + +[**See Bugs**][bugs] + +### 💡 Feature Requests + +Please file an issue to suggest new features. Vote on feature requests by adding +a 👍. This helps maintainers prioritize what to work on. + +[**See Feature Requests**][requests] + +### ❓ Questions + +For questions related to using the library, please visit a support community +instead of filing an issue on GitHub. + +- [Discord][discord] +- [Stack Overflow][stackoverflow] + + + + + +[bugs]: https://github.com/testing-library/react-testing-library/issues?q=is%3Aissue+is%3Aopen+label%3Abug+sort%3Acreated-desc +[requests]: https://github.com/testing-library/react-testing-library/issues?q=is%3Aissue+sort%3Areactions-%2B1-desc+label%3Aenhancement+is%3Aopen +[good-first-issue]: https://github.com/testing-library/react-testing-library/issues?utf8=✓&q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3A"good+first+issue"+ +[discord]: https://discord.gg/testing-library +[stackoverflow]: https://stackoverflow.com/questions/tagged/react-testing-library + + diff --git a/docs/cypress-testing-library/intro.md b/docs/cypress-testing-library/intro.md deleted file mode 100644 index bbc7cefee..000000000 --- a/docs/cypress-testing-library/intro.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -id: intro -title: Cypress Testing Library ---- - -[`Cypress Testing Library`][gh] allows the use of dom-testing queries within -[Cypress](https://cypress.io) end-to-end browser tests. - -``` -npm install --save-dev cypress @testing-library/cypress -``` - -- [Cypress Testing Library on GitHub][gh] - -## Usage - -`Cypress Testing Library` extends Cypress's `cy` commands. - -Add this line to your project's `cypress/support/commands.js`: - -``` -import '@testing-library/cypress/add-commands'; -``` - -## With TypeScript - -Typings are defined in `@types/testing-library__cypress` at [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/testing-library__cypress), -and should be added as follows in `tsconfig.json`: - -```json -{ - "compilerOptions": { - "types": ["cypress", "@types/testing-library__cypress"] - } -} -``` - -You can now use all of `DOM Testing Library`'s `getBy`, `getAllBy`, `queryBy` -and `queryAllBy` commands. -[See `DOM Testing Library` API for reference](dom-testing-library/api-queries.md) - -## Examples - -You can find [all library definitions here](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/testing-library__cypress/index.d.ts). - -To show some simple examples (from -[https://github.com/testing-library/cypress-testing-library/blob/master/cypress/integration/commands.spec.js](https://github.com/testing-library/cypress-testing-library/blob/master/cypress/integration/commands.spec.js)): - -```javascript -cy.getAllByText('Jackie Chan').click() -cy.queryByText('Button Text').should('exist') -cy.queryByText('Non-existing Button Text').should('not.exist') -cy.queryByLabelText('Label text', { timeout: 7000 }).should('exist') -cy.get('form').within(() => { - cy.getByText('Button Text').should('exist') -}) -cy.get('form').then(subject => { - cy.getByText('Button Text', { container: subject }).should('exist') -}) -``` - -`Cypress Testing Library` supports both jQuery elements and DOM nodes. This is -necessary because Cypress uses jQuery elements, while `DOM Testing Library` -expects DOM nodes. When you pass a jQuery element as `container`, it will get -the first DOM node from the collection and use that as the `container` parameter -for the DOM Testing Library functions. - -[gh]: https://github.com/testing-library/cypress-testing-library diff --git a/docs/cypress-testing-library/intro.mdx b/docs/cypress-testing-library/intro.mdx new file mode 100644 index 000000000..3c88d4d2b --- /dev/null +++ b/docs/cypress-testing-library/intro.mdx @@ -0,0 +1,75 @@ +--- +id: intro +title: Cypress Testing Library +--- + +[`Cypress Testing Library`][gh] allows the use of dom-testing queries within +[Cypress](https://cypress.io) end-to-end browser tests. + +```bash npm2yarn +npm install --save-dev cypress @testing-library/cypress +``` + +- [Cypress Testing Library on GitHub][gh] + +## Usage + +`Cypress Testing Library` extends Cypress's `cy` commands. + +Add this line to your project's `cypress/support/commands.js`: + +```js +import '@testing-library/cypress/add-commands' +``` + +You can now use some of `DOM Testing Library`'s `findBy`, and `findAllBy` commands off the global `cy` object. +[See the `About queries` docs for reference](/docs/queries/about). + +> Note: the `get*` queries are not supported because for reasonable Cypress +> tests you need retryability and `find*` queries already support that. `query*` +> queries are no longer necessary since v5 and will be removed in v6. `find*` +> fully support built-in Cypress assertions (removes the only use-case for +> `query*`). + +## With TypeScript + +Typings should be added as follows in `tsconfig.json`: + +```json +{ + "compilerOptions": { + "types": ["cypress", "@testing-library/cypress"] + } +} +``` + +You can find +[all Library definitions here](https://github.com/testing-library/cypress-testing-library/blob/master/types/index.d.ts). + +## Examples + +To show some simple examples (from +[cypress/integration/find.spec.js](https://github.com/testing-library/cypress-testing-library/blob/97939da7d4707a71049884c0324c0eda56e26fc2/cypress/integration/find.spec.js)): + +```javascript +cy.findByRole('button', {name: /Jackie Chan/i}).click() +cy.findByRole('button', {name: /Button Text/i}).should('exist') +cy.findByRole('button', {name: /Non-existing Button Text/i}).should('not.exist') +cy.findByLabelText(/Label text/i, {timeout: 7000}).should('exist') + +// findByRole _inside_ a form element +cy.get('form') + .findByRole('button', {name: /Button Text/i}) + .should('exist') +cy.findByRole('dialog').within(() => { + cy.findByRole('button', {name: /confirm/i}) +}) +``` + +`Cypress Testing Library` supports both jQuery elements and DOM nodes. This is +necessary because Cypress uses jQuery elements, while `DOM Testing Library` +expects DOM nodes. When you pass a jQuery element as `container`, it will get +the first DOM node from the collection and use that as the `container` parameter +for the `DOM Testing Library` functions. + +[gh]: https://github.com/testing-library/cypress-testing-library diff --git a/docs/dom-testing-library/api-accessibility.mdx b/docs/dom-testing-library/api-accessibility.mdx new file mode 100644 index 000000000..9b5e4e761 --- /dev/null +++ b/docs/dom-testing-library/api-accessibility.mdx @@ -0,0 +1,92 @@ +--- +id: api-accessibility +title: Accessibility +--- + +## Testing for Accessibility + +One of the guiding principles of the Testing Library APIs is that they should +enable you to test your app the way your users use it, including through +accessibility interfaces like screen readers. + +See the page on [queries](queries/about.mdx#priority) for details on how using a +semantic HTML query can make sure your app works with browser accessibility +APIs. + +## `getRoles` + +This function allows iteration over the implicit ARIA roles represented in a +given tree of DOM nodes. + +It returns an object, indexed by role name, with each value being an array of +elements which have that implicit ARIA role. + +See +[ARIA in HTML](https://www.w3.org/TR/html-aria/#document-conformance-requirements-for-use-of-aria-attributes-in-html) +for more information about implicit ARIA roles. + +```javascript +import {getRoles} from '@testing-library/dom' + +const nav = document.createElement('nav') +nav.innerHTML = ` +
    +
  • Item 1
  • +
  • Item 2
  • +
` +console.log(getRoles(nav)) + +// Object { +// navigation: [