From 1495ae623a27fcb7cb98a6e458e436dcb48fe1e7 Mon Sep 17 00:00:00 2001 From: Sidharth Vinod Date: Wed, 21 Dec 2022 10:54:23 +0530 Subject: [PATCH] WIP Adding contributors page from vitest --- cSpell.json | 27 +- package.json | 4 +- .../.vitepress/components/Contributors.vue | 27 ++ .../docs/.vitepress/contributor-names.json | 387 ++++++++++++++++++ .../src/docs/.vitepress/contributors.ts | 111 +++++ pnpm-lock.yaml | 43 ++ scripts/updateContributors.ts | 40 ++ 7 files changed, 633 insertions(+), 6 deletions(-) create mode 100644 packages/mermaid/src/docs/.vitepress/components/Contributors.vue create mode 100644 packages/mermaid/src/docs/.vitepress/contributor-names.json create mode 100644 packages/mermaid/src/docs/.vitepress/contributors.ts create mode 100644 scripts/updateContributors.ts diff --git a/cSpell.json b/cSpell.json index 4e9e4945a..b3da99863 100644 --- a/cSpell.json +++ b/cSpell.json @@ -62,6 +62,7 @@ "mitigations", "mkdocs", "mult", + "ohmyfetch", "orlandoni", "phpbb", "plantuml", @@ -99,7 +100,11 @@ "yash" ], "patterns": [ - { "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" }, + { + "name": "Markdown links", + "pattern": "\\((.*)\\)", + "description": "" + }, { "name": "Markdown code blocks", "pattern": "/^(\\s*`{3,}).*[\\s\\S]*?^\\1/gmx", @@ -110,14 +115,25 @@ "pattern": "\\`([^\\`\\r\\n]+?)\\`", "description": "https://stackoverflow.com/questions/41274241/how-to-capture-inline-markdown-code-but-not-a-markdown-code-fence-with-regex" }, - { "name": "Link contents", "pattern": "\\", "description": "" }, - { "name": "Snippet references", "pattern": "-- snippet:(.*)", "description": "" }, + { + "name": "Link contents", + "pattern": "\\", + "description": "" + }, + { + "name": "Snippet references", + "pattern": "-- snippet:(.*)", + "description": "" + }, { "name": "Snippet references 2", "pattern": "\\<\\[sample:(.*)", "description": "another kind of snippet reference" }, - { "name": "Multi-line code blocks", "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm" }, + { + "name": "Multi-line code blocks", + "pattern": "/^\\s*```[\\s\\S]*?^\\s*```/gm" + }, { "name": "HTML Tags", "pattern": "<[^>]*>", @@ -136,6 +152,7 @@ ], "ignorePaths": [ "packages/mermaid/src/docs/CHANGELOG.md", - "packages/mermaid/src/docs/.vitepress/redirect.ts" + "packages/mermaid/src/docs/.vitepress/redirect.ts", + "packages/mermaid/src/docs/.vitepress/contributor-names.json" ] } diff --git a/package.json b/package.json index c027fa71f..5d2daa48f 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "lint": "eslint --cache --ignore-path .gitignore . && pnpm lint:jison && prettier --check .", "lint:fix": "eslint --fix --ignore-path .gitignore . && prettier --write . && ts-node-esm scripts/fixCSpell.ts", "lint:jison": "ts-node-esm ./scripts/jison/lint.mts", + "contributors": "ts-node-esm scripts/updateContributors.ts", "cypress": "cypress run", "cypress:open": "cypress open", "e2e": "start-server-and-test dev http://localhost:9000/ cypress", @@ -96,6 +97,7 @@ "js-yaml": "^4.1.0", "jsdom": "^20.0.2", "lint-staged": "^13.0.3", + "ohmyfetch": "^0.4.21", "path-browserify": "^1.0.1", "pnpm": "^7.15.0", "prettier": "^2.7.1", @@ -111,4 +113,4 @@ "volta": { "node": "18.12.1" } -} +} \ No newline at end of file diff --git a/packages/mermaid/src/docs/.vitepress/components/Contributors.vue b/packages/mermaid/src/docs/.vitepress/components/Contributors.vue new file mode 100644 index 000000000..37b7b9133 --- /dev/null +++ b/packages/mermaid/src/docs/.vitepress/components/Contributors.vue @@ -0,0 +1,27 @@ + + + diff --git a/packages/mermaid/src/docs/.vitepress/contributor-names.json b/packages/mermaid/src/docs/.vitepress/contributor-names.json new file mode 100644 index 000000000..f1253b557 --- /dev/null +++ b/packages/mermaid/src/docs/.vitepress/contributor-names.json @@ -0,0 +1,387 @@ +[ + "knsv", + "sidharthv96", + "NeilCuzon", + "tylerlong", + "ashishjain0512", + "weedySeaDragon", + "mmorel-35", + "GDFaber", + "aloisklink", + "klemmchr", + "jgreywolf", + "cmmoran", + "Yash-Singh1", + "IOrlandoni", + "raghur", + "SeanKilleen", + "erelling", + "spopida", + "emersonbottero", + "bjowes", + "Andre601", + "dbartholomae", + "gibson042", + "pbrolin47", + "chrismoran-bkt", + "abzicht", + "gwincr11", + "mearns", + "spier", + "BastianZim", + "devcer", + "sagea", + "DKurilo", + "gijswijs", + "timmaffett", + "pinghe", + "ciekawy", + "lexmin0412", + "koljatm-edeka", + "notquiterussell", + "spect88", + "huynhicode", + "dany74q", + "johnnywalker", + "72636c", + "therzka", + "fardog", + "Mogztter", + "bollwyvl", + "adamwulf", + "elliot-nelson", + "fabiospampinato", + "HustLion", + "nacc", + "flying-sheep", + "vallsv", + "Xstoudi", + "arpansaha13", + "Some-Dood", + "DanShai", + "LarryKlugerDS", + "MasonM", + "stanhu", + "sechel", + "swoyam2609", + "abhijeet-pathak", + "lishid", + "eajenkins", + "harshilparmar", + "Guy-Adler", + "ahmadnassri", + "crodriguez1a", + "danangtomo", + "FlorianWoelki", + "Jmuccigr", + "joshuacolvin", + "khiga8", + "keenanjt33", + "lf-novelt", + "faisalarbain", + "cm-wada-yusuke", + "ymgch", + "yutotnh", + "arnaud-zg", + "BD103", + "Aniket1026", + "CalebUsadi", + "gene1wood", + "gillesdemey", + "JoshSharpe", + "heyfirst", + "knuts-ic", + "loris-intergalactique", + "lindseywild", + "tmatz", + "mahomedalid", + "doble-eme", + "Mister-Hope", + "MrCoder", + "pbendersky", + "Rutorai", + "ThanasisMpalatsoukas", + "thomasleveil", + "tomperr", + "husa", + "abeaton", + "anugs", + "ginomempin", + "lilisha100", + "nothingismagick", + "phairow", + "deining", + "jsyang", + "naveensrinivasan", + "tommoor", + "vijay40", + "0xflotus", + "AndreasVolkmann", + "ashsearle", + "bish0polis", + "DawMatt", + "frankschmitt", + "ggpasqualino", + "hrgui", + "IanLee1521", + "jbednar", + "jdavis61", + "jayvdb", + "jbronson-sf", + "lorint", + "MindaugasLaganeckas", + "u-minor", + "namgivu", + "OlegAxenow", + "phschaer", + "rmedaer", + "rheggen", + "larkinscott", + "The-Alchemist", + "TomWright", + "tshepang", + "Vrixyz", + "sinedied", + "yonasb", + "Zer0n0mask", + "brookhong", + "edumicse", + "ilmari-lauhakangas", + "jasmaa", + "sy-records", + "uttk", + "el-mapache", + "bigred8982", + "imgss", + "Joxtacy", + "mrmanc", + "riaanduplessis", + "sylhare", + "vikyaiyer", + "CollierCZ", + "adutton", + "adam-hotait", + "ameech", + "AlanHohn", + "aledileo", + "alexislefebvre", + "zag", + "alvynmcq", + "alwinw", + "amyq", + "ajthinking", + "NKjoep", + "AndrewL-64", + "sublimino", + "andrewschleifer", + "andrew-demb", + "6footGeek", + "anishkny", + "aniston", + "antco25", + "saveman71", + "Abrifq", + "arfanliaqat", + "Arthaey", + "AsaAyers", + "bglnelissen", + "ben-page", + "jawn", + "Billiam", + "xbojch", + "craigmac", + "hydrosquall", + "carlosblanco", + "carbeer", + "watsoncj", + "dodoinblue", + "ctruelson", + "beaudry", + "ct-martin", + "Clint-Chester", + "connor4312", + "DCsunset", + "activus-d", + "DanInProgress", + "egnor", + "Olshansk", + "danielsitnik", + "dariuswiles", + "DarkNami", + "daveaglick", + "davidpendraykalibrate", + "DavidWittman", + "detj", + "dbrans", + "dbussink", + "dwinston", + "dfinke", + "quickstep25", + "ebjornset", + "Eji4h", + "glensc", + "Erhannis", + "FabAlchemy", + "fregante", + "filipedeschamps", + "Foo-x", + "Frank-Mayer", + "gwatts", + "gnkm", + "gjlubbertsen", + "guidanoli", + "guyellis", + "H3RSKO", + "hwine", + "HerbCaudill", + "TribalNightOwl", + "hugovk", + "jolting", + "ImanimalXI", + "ImgBotApp", + "imma90", + "inclusive-coding-bot", + "itprdev", + "revolter", + "isinek", + "marcastel", + "coxy1989", + "janverb", + "jasonbellamy", + "jasonmhoule", + "jayenashar", + "jaybuidl", + "jeroenekkelkamp", + "joebordes", + "jnnnnn", + "jfuentescpp", + "jinntrance", + "jmelfi", + "Qix-", + "jmg-duarte", + "kahgoh", + "Schweinepriester", + "Kaligule", + "kdipippo", + "khink", + "kevinkhill", + "kkirsche", + "kriskhaira", + "kale-stew", + "Lance-DC", + "kciter", + "zaaath", + "manicki", + "levlas", + "spydon", + "woehrl01", + "lukehsiao", + "korycins", + "maiconschmitz", + "vaceletm", + "marcjansen", + "markdalgleish", + "markotibold", + "Swaagie", + "Narretz", + "ma-zal", + "mgaitan", + "mapio", + "matteodelabre", + "maxArturo", + "DavertMik", + "mgenereu", + "maiermic", + "magmax", + "quulah", + "mbostock", + "Crocin", + "elv-nate", + "NateChurch", + "gerardnico", + "NitinLodha2812", + "hype09", + "pje", + "saulgajda", + "skywinder", + "ticapix", + "pravi", + "bfriedz", + "reetghosh1", + "renanlecaro", + "Renfay007", + "wontonst", + "RudolfMan", + "SlideeScherz", + "SilvM", + "simon-id", + "simonplattner", + "sdankel", + "Soptq", + "stevenengler", + "stevenschobert", + "swhgoon", + "hiramekun", + "gitter-badger", + "KarnerTh", + "codebeige", + "schmelto", + "TreyE", + "thilde", + "vaniship", + "commai", + "MetalBlueberry", + "volkanunsal", + "yudenzel", + "uskey512", + "zakhenry", + "abergquist", + "JiChao99", + "aryandeelwal", + "avijit1258", + "bby-bishopclark", + "beriakomal", + "bolshoytoster", + "chrismetz09", + "christopherkade", + "tenuki", + "dkkb", + "endolith", + "eel87", + "esphas", + "raptor0929", + "flywire", + "gkchic", + "gomlgs", + "hikerpig", + "hopoverflow", + "hughli-git", + "ishuen", + "it-sec-std", + "it0a", + "ivan-danilov", + "kerwin612", + "kuanyi-ng", + "laDanz", + "lgasp", + "mahimas28", + "may4everL", + "meganemura", + "monsterkrampe", + "mupple", + "mvandermade", + "penenkel", + "r-a-v-a-s", + "ryenus", + "alguerocode", + "siddhant-tripathy1", + "sifb", + "silverwind", + "wfnuser", + "chewnoill", + "znxkznxk1030", + "zepatrik", + "zephyraft", + "zwpaper", + "hetz" +] diff --git a/packages/mermaid/src/docs/.vitepress/contributors.ts b/packages/mermaid/src/docs/.vitepress/contributors.ts new file mode 100644 index 000000000..0e504466e --- /dev/null +++ b/packages/mermaid/src/docs/.vitepress/contributors.ts @@ -0,0 +1,111 @@ +import contributorNames from './contributor-names.json'; + +export interface Contributor { + name: string; + avatar: string; +} + +export interface SocialEntry { + icon: string; + link: string; +} + +export interface CoreTeam { + avatar: string; + name: string; + // required to download avatars from GitHub + github: string; + twitter: string; + sponsor?: string; + title?: string; + org?: string; + desc?: string; + links?: SocialEntry[]; +} + +const contributorsAvatars: Record = {}; + +const getAvatarUrl = (name: string) => + import.meta.hot ? `https://github.com/${name}.png` : `/user-avatars/${name}.png`; + +export const contributors = (contributorNames as string[]).reduce((acc, name) => { + contributorsAvatars[name] = getAvatarUrl(name); + acc.push({ name, avatar: contributorsAvatars[name] }); + return acc; +}, [] as Contributor[]); + +// const createLinks = (tm: CoreTeam): CoreTeam => { +// tm.links = [ +// { icon: 'github', link: `https://github.com/${tm.github}` }, +// { icon: 'twitter', link: `https://twitter.com/${tm.twitter}` }, +// ]; +// return tm; +// }; + +// const plainTeamMembers: CoreTeam[] = [ +// { +// avatar: contributorsAvatars.antfu, +// name: 'Anthony Fu', +// github: 'antfu', +// twitter: 'antfu7', +// sponsor: 'https://github.com/sponsors/antfu', +// title: 'A fanatical open sourceror, working', +// org: 'NuxtLabs', +// desc: 'Core team member of Vite & Vue', +// }, +// { +// avatar: contributorsAvatars['sheremet-va'], +// name: 'Vladimir', +// github: 'sheremet-va', +// twitter: 'sheremet_va', +// sponsor: 'https://github.com/sponsors/sheremet-va', +// title: 'An open source fullstack developer', +// desc: 'Core team member of Vitest', +// }, +// { +// avatar: contributorsAvatars['patak-dev'], +// name: 'Patak', +// github: 'patak-dev', +// twitter: 'patak_dev', +// sponsor: 'https://github.com/sponsors/patak-dev', +// title: 'A collaborative being, working', +// org: 'StackBlitz', +// desc: 'Core team member of Vite & Vue', +// }, +// { +// avatar: contributorsAvatars.Aslemammad, +// name: 'Mohammad Bagher', +// github: 'Aslemammad', +// twitter: 'asleMammadam', +// title: 'An open source developer', +// desc: 'Team member of Poimandres & Vike', +// }, +// { +// avatar: contributorsAvatars.Demivan, +// name: 'Ivan Demchuk', +// github: 'Demivan', +// twitter: 'IvanDemchuk', +// title: 'A tech lead, fullstack developer', +// desc: 'Author of fluent-vue', +// }, +// { +// avatar: contributorsAvatars.userquin, +// name: 'Joaquín Sánchez', +// github: 'userquin', +// twitter: 'userquin', +// title: 'A fullstack and android developer', +// desc: "Vite's fanatical follower", +// }, +// { +// avatar: contributorsAvatars.zxch3n, +// name: 'Zixuan Chen', +// github: 'zxch3n', +// twitter: 'zxch3n', +// title: 'A fullstack developer', +// desc: 'Creating tools for collaboration', +// }, +// ]; + +// const teamMembers = plainTeamMembers.map((tm) => createLinks(tm)); + +// export { teamMembers }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 951d3cc1e..12700ebd8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -130,6 +130,9 @@ importers: lint-staged: specifier: ^13.0.3 version: 13.0.3 + ohmyfetch: + specifier: ^0.4.21 + version: 0.4.21 path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -3961,6 +3964,13 @@ packages: engines: {node: '>=6'} dev: true + /busboy/1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: true + /bytes/3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -5408,6 +5418,10 @@ packages: engines: {node: '>=6'} dev: true + /destr/1.2.2: + resolution: {integrity: sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA==} + dev: true + /destroy/1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -8913,6 +8927,10 @@ packages: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true + /node-fetch-native/0.1.8: + resolution: {integrity: sha512-ZNaury9r0NxaT2oL65GvdGDy+5PlSaHTovT6JV5tOW07k1TQmgC0olZETa4C9KZg0+6zBr99ctTYa3Utqj9P/Q==} + dev: true + /node-fetch/2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -9016,6 +9034,15 @@ packages: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true + /ohmyfetch/0.4.21: + resolution: {integrity: sha512-VG7f/JRvqvBOYvL0tHyEIEG7XHWm7OqIfAs6/HqwWwDfjiJ1g0huIpe5sFEmyb+7hpFa1EGNH2aERWR72tlClw==} + dependencies: + destr: 1.2.2 + node-fetch-native: 0.1.8 + ufo: 0.8.6 + undici: 5.14.0 + dev: true + /on-finished/2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -10410,6 +10437,11 @@ packages: duplexer: 0.1.2 dev: true + /streamsearch/1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: true + /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -10931,6 +10963,10 @@ packages: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: true + /ufo/0.8.6: + resolution: {integrity: sha512-fk6CmUgwKCfX79EzcDQQpSCMxrHstvbLswFChHS0Vump+kFkw7nJBfTZoC1j0bOGoY9I7R3n2DGek5ajbcYnOw==} + dev: true + /uglify-js/3.17.3: resolution: {integrity: sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==} engines: {node: '>=0.8.0'} @@ -10943,6 +10979,13 @@ packages: resolution: {integrity: sha512-w4QtCHoLBXw1mjofIDoMyexaEdWGMedWNDhlWTtT1V1lCRqi65Pnoygkh6+WRdr+Bm8ldkBNkNeCsXGMlQS9HQ==} dev: true + /undici/5.14.0: + resolution: {integrity: sha512-yJlHYw6yXPPsuOH0x2Ib1Km61vu4hLiRRQoafs+WUgX1vO64vgnxiCEN9dpIrhZyHFsai3F0AEj4P9zy19enEQ==} + engines: {node: '>=12.18'} + dependencies: + busboy: 1.6.0 + dev: true + /unified/10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: diff --git a/scripts/updateContributors.ts b/scripts/updateContributors.ts new file mode 100644 index 000000000..e28f24b0a --- /dev/null +++ b/scripts/updateContributors.ts @@ -0,0 +1,40 @@ +// Adapted from https://github.dev/vitest-dev/vitest/blob/991ff33ab717caee85ef6cbe1c16dc514186b4cc/scripts/update-contributors.ts#L6 + +import { writeFile } from 'node:fs/promises'; +import { $fetch } from 'ohmyfetch'; + +interface Contributor { + login: string; +} + +async function fetchContributors() { + const collaborators: string[] = []; + let page = 1; + let data: Contributor[] = []; + do { + data = + (await $fetch( + `https://api.github.com/repos/mermaid-js/mermaid/contributors?per_page=100&page=${page}`, + { + method: 'get', + headers: { + 'content-type': 'application/json', + }, + } + )) || []; + collaborators.push(...data.map((i) => i.login)); + page++; + } while (data.length === 100); + return collaborators.filter((name) => !name.includes('[bot]')); +} + +async function generate() { + const collaborators = await fetchContributors(); + await writeFile( + './packages/mermaid/src/docs/.vitepress/contributor-names.json', + `${JSON.stringify(collaborators, null, 2)}\n`, + 'utf8' + ); +} + +void generate();