@stats-organization/github-readme-stats-core 2.1.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/build/api/gist.d.ts +2 -7
  2. package/build/api/gist.d.ts.map +1 -1
  3. package/build/api/gist.js +28 -26
  4. package/build/api/index.d.ts +3 -8
  5. package/build/api/index.d.ts.map +1 -1
  6. package/build/api/index.js +32 -36
  7. package/build/api/pin.d.ts +2 -7
  8. package/build/api/pin.d.ts.map +1 -1
  9. package/build/api/pin.js +18 -33
  10. package/build/api/top-langs.d.ts +2 -7
  11. package/build/api/top-langs.d.ts.map +1 -1
  12. package/build/api/top-langs.js +32 -44
  13. package/build/api/wakatime.d.ts +2 -7
  14. package/build/api/wakatime.d.ts.map +1 -1
  15. package/build/api/wakatime.js +28 -26
  16. package/build/calculateRank.d.ts +12 -11
  17. package/build/calculateRank.d.ts.map +1 -1
  18. package/build/calculateRank.js +18 -18
  19. package/build/cards/common-options.d.ts +13 -0
  20. package/build/cards/common-options.d.ts.map +1 -0
  21. package/build/cards/common-options.js +1 -0
  22. package/build/cards/gist.d.ts +11 -16
  23. package/build/cards/gist.d.ts.map +1 -1
  24. package/build/cards/gist.js +26 -31
  25. package/build/cards/repo.d.ts +19 -16
  26. package/build/cards/repo.d.ts.map +1 -1
  27. package/build/cards/repo.js +79 -72
  28. package/build/cards/stats.d.ts +29 -44
  29. package/build/cards/stats.d.ts.map +1 -1
  30. package/build/cards/stats.js +118 -173
  31. package/build/cards/top-languages.d.ts +81 -77
  32. package/build/cards/top-languages.d.ts.map +1 -1
  33. package/build/cards/top-languages.js +186 -184
  34. package/build/cards/wakatime.d.ts +21 -11
  35. package/build/cards/wakatime.d.ts.map +1 -1
  36. package/build/cards/wakatime.js +92 -109
  37. package/build/common/Card.d.ts +41 -14
  38. package/build/common/Card.d.ts.map +1 -1
  39. package/build/common/Card.js +92 -31
  40. package/build/common/I18n.d.ts +4 -2
  41. package/build/common/I18n.d.ts.map +1 -1
  42. package/build/common/color.d.ts +91 -15
  43. package/build/common/color.d.ts.map +1 -1
  44. package/build/common/color.js +163 -17
  45. package/build/common/config.d.ts +2 -1
  46. package/build/common/config.d.ts.map +1 -1
  47. package/build/common/config.js +16 -26
  48. package/build/common/constants.d.ts +2 -1
  49. package/build/common/constants.d.ts.map +1 -1
  50. package/build/common/date.d.ts +37 -0
  51. package/build/common/date.d.ts.map +1 -0
  52. package/build/common/date.js +31 -0
  53. package/build/common/html.js +1 -1
  54. package/build/common/http.d.ts +37 -5
  55. package/build/common/http.d.ts.map +1 -1
  56. package/build/common/http.js +29 -6
  57. package/build/common/icons.d.ts +1 -0
  58. package/build/common/icons.d.ts.map +1 -1
  59. package/build/common/icons.js +1 -0
  60. package/build/common/languageColors.d.ts +11 -0
  61. package/build/common/languageColors.d.ts.map +1 -0
  62. package/build/common/languageColors.js +15 -0
  63. package/build/common/languageColors.json +10 -1
  64. package/build/common/ops.d.ts +27 -33
  65. package/build/common/ops.d.ts.map +1 -1
  66. package/build/common/ops.js +31 -48
  67. package/build/common/render.d.ts +154 -113
  68. package/build/common/render.d.ts.map +1 -1
  69. package/build/common/render.js +209 -92
  70. package/build/common/retryer.d.ts +15 -6
  71. package/build/common/retryer.d.ts.map +1 -1
  72. package/build/common/retryer.js +2 -0
  73. package/build/fetchers/gist.d.ts +6 -21
  74. package/build/fetchers/gist.d.ts.map +1 -1
  75. package/build/fetchers/gist.js +28 -64
  76. package/build/fetchers/repo.d.ts +12 -11
  77. package/build/fetchers/repo.d.ts.map +1 -1
  78. package/build/fetchers/repo.js +27 -68
  79. package/build/fetchers/stats.d.ts +24 -17
  80. package/build/fetchers/stats.d.ts.map +1 -1
  81. package/build/fetchers/stats.js +302 -184
  82. package/build/fetchers/top-languages.d.ts +10 -15
  83. package/build/fetchers/top-languages.d.ts.map +1 -1
  84. package/build/fetchers/top-languages.js +52 -103
  85. package/build/fetchers/types.d.ts +130 -0
  86. package/build/fetchers/types.d.ts.map +1 -0
  87. package/build/fetchers/types.js +1 -0
  88. package/build/fetchers/wakatime.d.ts +9 -5
  89. package/build/fetchers/wakatime.d.ts.map +1 -1
  90. package/build/fetchers/wakatime.js +8 -4
  91. package/build/graphql/contributionsDocument.d.ts +18 -0
  92. package/build/graphql/contributionsDocument.d.ts.map +1 -0
  93. package/build/graphql/contributionsDocument.js +30 -0
  94. package/build/graphql/generated/common.d.ts +42 -0
  95. package/build/graphql/generated/common.d.ts.map +1 -0
  96. package/build/graphql/generated/common.js +2 -0
  97. package/build/graphql/generated/gist.d.ts +44 -0
  98. package/build/graphql/generated/gist.d.ts.map +1 -0
  99. package/build/graphql/generated/gist.js +27 -0
  100. package/build/graphql/generated/repo.d.ts +67 -0
  101. package/build/graphql/generated/repo.d.ts.map +1 -0
  102. package/build/graphql/generated/repo.js +30 -0
  103. package/build/graphql/generated/stats.d.ts +150 -0
  104. package/build/graphql/generated/stats.d.ts.map +1 -0
  105. package/build/graphql/generated/stats.js +95 -0
  106. package/build/graphql/generated/top-languages.d.ts +54 -0
  107. package/build/graphql/generated/top-languages.d.ts.map +1 -0
  108. package/build/graphql/generated/top-languages.js +27 -0
  109. package/build/graphql/graphqlDocument.d.ts +22 -0
  110. package/build/graphql/graphqlDocument.d.ts.map +1 -0
  111. package/build/graphql/graphqlDocument.js +8 -0
  112. package/build/graphql/reposContributedToDocument.d.ts +27 -0
  113. package/build/graphql/reposContributedToDocument.d.ts.map +1 -0
  114. package/build/graphql/reposContributedToDocument.js +59 -0
  115. package/build/index.d.ts +3 -1
  116. package/build/index.d.ts.map +1 -1
  117. package/build/index.js +2 -1
  118. package/build/themes/index.d.ts +32 -0
  119. package/build/themes/index.d.ts.map +1 -1
  120. package/build/themes/index.js +28 -0
  121. package/build/translations.d.ts +17 -0
  122. package/build/translations.d.ts.map +1 -1
  123. package/build/translations.js +17 -0
  124. package/package.json +14 -8
  125. package/src/_emoji-name-map.d.ts +10 -0
  126. package/src/_github-username-regex.d.ts +4 -0
  127. package/src/api/gist.js +31 -31
  128. package/src/api/index.js +40 -42
  129. package/src/api/pin.js +20 -38
  130. package/src/api/top-langs.js +36 -49
  131. package/src/api/wakatime.js +31 -31
  132. package/src/{calculateRank.js → calculateRank.ts} +29 -19
  133. package/src/cards/common-options.ts +13 -0
  134. package/src/cards/{gist.js → gist.ts} +37 -37
  135. package/src/cards/{repo.js → repo.ts} +107 -79
  136. package/src/cards/{stats.js → stats.ts} +173 -210
  137. package/src/cards/{top-languages.js → top-languages.ts} +325 -243
  138. package/src/cards/{wakatime.js → wakatime.ts} +158 -127
  139. package/src/common/Card.ts +123 -43
  140. package/src/common/I18n.ts +6 -2
  141. package/src/common/color.ts +240 -28
  142. package/src/common/config.ts +22 -29
  143. package/src/common/constants.ts +3 -1
  144. package/src/common/date.ts +45 -0
  145. package/src/common/html.ts +1 -1
  146. package/src/common/http.ts +71 -0
  147. package/src/common/icons.ts +1 -0
  148. package/src/common/languageColors.json +10 -1
  149. package/src/common/languageColors.ts +19 -0
  150. package/src/common/ops.ts +158 -0
  151. package/src/common/render.ts +652 -0
  152. package/src/common/retryer.ts +21 -12
  153. package/src/fetchers/gist.ts +79 -0
  154. package/src/fetchers/repo.ts +114 -0
  155. package/src/fetchers/stats.ts +743 -0
  156. package/src/fetchers/top-languages.ts +135 -0
  157. package/src/fetchers/{types.d.ts → types.ts} +28 -20
  158. package/src/fetchers/{wakatime.js → wakatime.ts} +19 -5
  159. package/src/graphql/contributionsDocument.ts +44 -0
  160. package/src/graphql/generated/common.ts +26 -0
  161. package/src/graphql/generated/gist.ts +59 -0
  162. package/src/graphql/generated/repo.ts +90 -0
  163. package/src/graphql/generated/stats.ts +194 -0
  164. package/src/graphql/generated/top-languages.ts +75 -0
  165. package/src/graphql/graphqlDocument.ts +25 -0
  166. package/src/graphql/queries/gist.graphql +25 -0
  167. package/src/graphql/queries/repo.graphql +28 -0
  168. package/src/graphql/queries/stats.graphql +120 -0
  169. package/src/graphql/queries/top-languages.graphql +34 -0
  170. package/src/graphql/reposContributedToDocument.ts +86 -0
  171. package/src/index.ts +3 -1
  172. package/src/themes/index.ts +33 -0
  173. package/src/translations.ts +17 -0
  174. package/src/cards/types.d.ts +0 -78
  175. package/src/common/http.js +0 -19
  176. package/src/common/ops.js +0 -170
  177. package/src/common/render.js +0 -440
  178. package/src/fetchers/gist.js +0 -112
  179. package/src/fetchers/repo.js +0 -161
  180. package/src/fetchers/stats.js +0 -474
  181. package/src/fetchers/top-languages.js +0 -175
  182. package/src/themes/README.md +0 -229
@@ -355,6 +355,9 @@ declare const statCardLocales: ({ name, apostrophe, }: {
355
355
  no: string;
356
356
  be: string;
357
357
  };
358
+ "statcard.all-time-contribs": {
359
+ en: string;
360
+ };
358
361
  "statcard.reviews": {
359
362
  en: string;
360
363
  ar: string;
@@ -504,18 +507,27 @@ declare const statCardLocales: ({ name, apostrophe, }: {
504
507
  };
505
508
  "statcard.prs-authored": {
506
509
  en: string;
510
+ "zh-tw": string;
507
511
  };
508
512
  "statcard.prs-commented": {
509
513
  en: string;
514
+ "zh-tw": string;
510
515
  };
511
516
  "statcard.prs-reviewed": {
512
517
  en: string;
518
+ "zh-tw": string;
513
519
  };
514
520
  "statcard.issues-authored": {
515
521
  en: string;
522
+ "zh-tw": string;
516
523
  };
517
524
  "statcard.issues-commented": {
518
525
  en: string;
526
+ "zh-tw": string;
527
+ };
528
+ "statcard.contributions": {
529
+ en: string;
530
+ "zh-tw": string;
519
531
  };
520
532
  "statcard.prs-merged": {
521
533
  en: string;
@@ -715,18 +727,23 @@ declare const repoCardLocales: {
715
727
  };
716
728
  "repocard.prs-authored": {
717
729
  en: string;
730
+ "zh-tw": string;
718
731
  };
719
732
  "repocard.prs-commented": {
720
733
  en: string;
734
+ "zh-tw": string;
721
735
  };
722
736
  "repocard.prs-reviewed": {
723
737
  en: string;
738
+ "zh-tw": string;
724
739
  };
725
740
  "repocard.issues-authored": {
726
741
  en: string;
742
+ "zh-tw": string;
727
743
  };
728
744
  "repocard.issues-commented": {
729
745
  en: string;
746
+ "zh-tw": string;
730
747
  };
731
748
  };
732
749
  declare const langCardLocales: {
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,QAAA,MAAM,eAAe,GAAI,uBAGtB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6lBA,CAAC;AAEF,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHpB,CAAC;AAEF,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmGpB,CAAC;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAySxB,CAAC;AAIF;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,OAE3C,CAAC;AAEF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,CAAC"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../src/translations.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,QAAA,MAAM,eAAe,GAAI,uBAGtB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAymBA,CAAC;AAEF,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHpB,CAAC;AAEF,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmGpB,CAAC;AAEF,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAySxB,CAAC;AAIF;;;;;GAKG;AACH,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,OAE3C,CAAC;AAEF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,mBAAmB,GACpB,CAAC"}
@@ -355,6 +355,9 @@ const statCardLocales = ({ name, apostrophe, }) => {
355
355
  no: "Bidro til (i fjor)",
356
356
  be: "Уклад (за мінулы год)",
357
357
  },
358
+ "statcard.all-time-contribs": {
359
+ en: "Contributed to (all time)",
360
+ },
358
361
  "statcard.reviews": {
359
362
  en: "Total PRs Reviewed",
360
363
  ar: "طلبات السحب التي تم مراجعتها",
@@ -504,18 +507,27 @@ const statCardLocales = ({ name, apostrophe, }) => {
504
507
  },
505
508
  "statcard.prs-authored": {
506
509
  en: "PRs Created",
510
+ "zh-tw": "建立的拉取請求",
507
511
  },
508
512
  "statcard.prs-commented": {
509
513
  en: "PRs Commented",
514
+ "zh-tw": "參與討論的拉取請求",
510
515
  },
511
516
  "statcard.prs-reviewed": {
512
517
  en: "PRs Reviewed",
518
+ "zh-tw": "審核的拉取請求",
513
519
  },
514
520
  "statcard.issues-authored": {
515
521
  en: "Issues Created",
522
+ "zh-tw": "建立的議題",
516
523
  },
517
524
  "statcard.issues-commented": {
518
525
  en: "Issues Commented",
526
+ "zh-tw": "參與討論的議題",
527
+ },
528
+ "statcard.contributions": {
529
+ en: "Total Contributions",
530
+ "zh-tw": "總貢獻數量",
519
531
  },
520
532
  "statcard.prs-merged": {
521
533
  en: "Total PRs Merged",
@@ -716,18 +728,23 @@ const repoCardLocales = {
716
728
  },
717
729
  "repocard.prs-authored": {
718
730
  en: "my created PRs",
731
+ "zh-tw": "我所創建的拉取請求",
719
732
  },
720
733
  "repocard.prs-commented": {
721
734
  en: "my commented PRs",
735
+ "zh-tw": "我所參與的拉取請求",
722
736
  },
723
737
  "repocard.prs-reviewed": {
724
738
  en: "my reviewed PRs",
739
+ "zh-tw": "我所審核的拉取請求",
725
740
  },
726
741
  "repocard.issues-authored": {
727
742
  en: "my created issues",
743
+ "zh-tw": "我所創建的議題",
728
744
  },
729
745
  "repocard.issues-commented": {
730
746
  en: "my commented issues",
747
+ "zh-tw": "我所參與的議題",
731
748
  },
732
749
  };
733
750
  const langCardLocales = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stats-organization/github-readme-stats-core",
3
- "version": "2.1.4",
3
+ "version": "2.2.0",
4
4
  "type": "module",
5
5
  "homepage": "https://github-stats-extended.vercel.app/frontend",
6
6
  "bugs": {
@@ -67,16 +67,21 @@
67
67
  "access": "public"
68
68
  },
69
69
  "devDependencies": {
70
+ "@graphql-codegen/core": "6.2.0",
71
+ "@graphql-codegen/typescript": "6.1.0",
72
+ "@graphql-codegen/typescript-operations": "6.1.6",
73
+ "@octokit/graphql-schema": "15.26.1",
70
74
  "@testing-library/dom": "10.4.1",
71
- "@testing-library/jest-dom": "6.9.1",
75
+ "@testing-library/jest-dom": "7.0.1",
72
76
  "@uppercod/css-to-object": "1.1.1",
73
77
  "axios-mock-adapter": "2.1.0",
74
- "js-yaml": "4.2.0",
75
- "jsdom": "29.1.1",
76
- "vitest": "4.1.8"
78
+ "graphql": "16.14.2",
79
+ "js-yaml": "5.4.1",
80
+ "jsdom": "30.0.1",
81
+ "vitest": "4.1.11"
77
82
  },
78
83
  "dependencies": {
79
- "axios": "^1.17.0",
84
+ "axios": "^1.18.1",
80
85
  "emoji-name-map": "^2.0.3",
81
86
  "github-username-regex": "^1.0.0"
82
87
  },
@@ -88,7 +93,8 @@
88
93
  "bench": "vitest bench --run --config vitest.config.bench.ts",
89
94
  "lint": "eslint",
90
95
  "typecheck": "tsc -p tsconfig.typecheck.json",
91
- "theme-readme-gen": "node scripts/generate-theme-doc",
92
- "generate-langs-json": "node scripts/generate-langs-json"
96
+ "generate-graphql-types": "node scripts/generate-graphql-types",
97
+ "check-graphql-types": "node scripts/generate-graphql-types --check",
98
+ "generate-language-colors": "node scripts/generate-language-colors"
93
99
  }
94
100
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `emoji-name-map` ships no type definitions and exposes no `exports` map, so it
3
+ * cannot be resolved under `nodenext`. Declare the minimal surface used here.
4
+ */
5
+ declare module "emoji-name-map" {
6
+ const emojiNameMap: {
7
+ get(name: string): string | undefined;
8
+ };
9
+ export default emojiNameMap;
10
+ }
@@ -0,0 +1,4 @@
1
+ declare module "github-username-regex" {
2
+ const githubUsernameRegex: RegExp;
3
+ export default githubUsernameRegex;
4
+ }
package/src/api/gist.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { renderGistCard } from "../cards/gist.js";
2
+ import { findInvalidColorParam, pickColorParams } from "../common/color.js";
2
3
  import {
3
4
  MissingParamError,
4
5
  retrieveSecondaryMessage,
@@ -12,33 +13,47 @@ import { isLocaleAvailable } from "../translations.js";
12
13
  export default async (
13
14
  {
14
15
  id,
15
- title_color,
16
- icon_color,
17
- text_color,
18
- bg_color,
19
- theme,
20
16
  locale,
21
17
  border_radius,
22
- border_color,
23
18
  show_owner,
24
19
  browser_rendering,
25
20
  hide_border,
21
+ ...remainingParams
26
22
  },
27
23
  pat = null,
28
24
  ) => {
25
+ const colorParams = pickColorParams(remainingParams);
26
+
27
+ const invalidColorInput = findInvalidColorParam(colorParams);
28
+ if (invalidColorInput) {
29
+ return {
30
+ status: "error - permanent",
31
+ content: renderError({
32
+ message: "Something went wrong",
33
+ secondaryMessage: `Invalid color input for parameter "${invalidColorInput}"`,
34
+ }),
35
+ };
36
+ }
37
+
29
38
  if (locale && !isLocaleAvailable(locale)) {
30
39
  return {
31
40
  status: "error - permanent",
32
41
  content: renderError({
33
42
  message: "Something went wrong",
34
43
  secondaryMessage: "Language not found",
35
- renderOptions: {
36
- title_color,
37
- text_color,
38
- bg_color,
39
- border_color,
40
- theme,
41
- },
44
+ renderOptions: colorParams,
45
+ }),
46
+ };
47
+ }
48
+
49
+ const safePattern = /^[-\w/.,]+$/;
50
+ if (id && !safePattern.test(id)) {
51
+ return {
52
+ status: "error - permanent",
53
+ content: renderError({
54
+ message: "Something went wrong",
55
+ secondaryMessage: "Gist ID contains unsafe characters",
56
+ renderOptions: colorParams,
42
57
  }),
43
58
  };
44
59
  }
@@ -49,13 +64,8 @@ export default async (
49
64
  return {
50
65
  status: "success",
51
66
  content: renderGistCard(gistData, {
52
- title_color,
53
- icon_color,
54
- text_color,
55
- bg_color,
56
- theme,
67
+ ...colorParams,
57
68
  border_radius,
58
- border_color,
59
69
  locale: locale ? locale.toLowerCase() : null,
60
70
  show_owner: parseBoolean(show_owner),
61
71
  browser_rendering: parseBoolean(browser_rendering),
@@ -70,11 +80,7 @@ export default async (
70
80
  message: err.message,
71
81
  secondaryMessage: retrieveSecondaryMessage(err),
72
82
  renderOptions: {
73
- title_color,
74
- text_color,
75
- bg_color,
76
- border_color,
77
- theme,
83
+ ...colorParams,
78
84
  show_repo_link: !(err instanceof MissingParamError),
79
85
  },
80
86
  }),
@@ -84,13 +90,7 @@ export default async (
84
90
  status: "error - temporary",
85
91
  content: renderError({
86
92
  message: "An unknown error occurred",
87
- renderOptions: {
88
- title_color,
89
- text_color,
90
- bg_color,
91
- border_color,
92
- theme,
93
- },
93
+ renderOptions: colorParams,
94
94
  }),
95
95
  };
96
96
  }
package/src/api/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { renderStatsCard } from "../cards/stats.js";
2
+ import { findInvalidColorParam, pickColorParams } from "../common/color.js";
2
3
  import {
3
4
  MissingParamError,
4
5
  retrieveSecondaryMessage,
@@ -23,13 +24,7 @@ export default async (
23
24
  include_all_commits,
24
25
  commits_year,
25
26
  line_height,
26
- title_color,
27
- ring_color,
28
- icon_color,
29
- text_color,
30
27
  text_bold,
31
- bg_color,
32
- theme,
33
28
  exclude_repo,
34
29
  custom_title,
35
30
  locale,
@@ -38,25 +33,33 @@ export default async (
38
33
  number_format,
39
34
  role,
40
35
  number_precision,
41
- border_color,
42
36
  rank_icon,
43
37
  show,
38
+ contribs_include_own_repos,
39
+ ...remainingParams
44
40
  },
45
41
  pat = null,
46
42
  ) => {
43
+ const colorParams = pickColorParams(remainingParams);
44
+
45
+ const invalidColorInput = findInvalidColorParam(colorParams);
46
+ if (invalidColorInput) {
47
+ return {
48
+ status: "error - permanent",
49
+ content: renderError({
50
+ message: "Something went wrong",
51
+ secondaryMessage: `Invalid color input for parameter "${invalidColorInput}"`,
52
+ }),
53
+ };
54
+ }
55
+
47
56
  if (locale && !isLocaleAvailable(locale)) {
48
57
  return {
49
58
  status: "error - permanent",
50
59
  content: renderError({
51
60
  message: "Something went wrong",
52
61
  secondaryMessage: "Language not found",
53
- renderOptions: {
54
- title_color,
55
- text_color,
56
- bg_color,
57
- border_color,
58
- theme,
59
- },
62
+ renderOptions: colorParams,
60
63
  }),
61
64
  };
62
65
  }
@@ -73,16 +76,24 @@ export default async (
73
76
  message: "Something went wrong",
74
77
  secondaryMessage:
75
78
  "Username, repository or owner contains unsafe characters",
76
- renderOptions: {
77
- title_color,
78
- text_color,
79
- bg_color,
80
- border_color,
81
- theme,
82
- },
79
+ renderOptions: colorParams,
80
+ }),
81
+ };
82
+ }
83
+
84
+ // anything but a four-digit year builds a DateTime GitHub rejects
85
+ if (commits_year !== undefined && !/^\d{4}$/.test(commits_year)) {
86
+ return {
87
+ status: "error - permanent",
88
+ content: renderError({
89
+ message: "Something went wrong",
90
+ secondaryMessage: 'Invalid number input for parameter "commits_year"',
91
+ renderOptions: colorParams,
83
92
  }),
84
93
  };
85
94
  }
95
+ const commitsYearParsed =
96
+ commits_year === undefined ? undefined : Number(commits_year);
86
97
 
87
98
  try {
88
99
  const showStats = parseArray(show);
@@ -100,7 +111,7 @@ export default async (
100
111
  showStats.includes("prs_merged_percentage"),
101
112
  showStats.includes("discussions_started"),
102
113
  showStats.includes("discussions_answered"),
103
- parseInt(commits_year, 10),
114
+ commitsYearParsed,
104
115
  repository,
105
116
  repoOwner,
106
117
  showStats.includes("prs_authored"),
@@ -109,6 +120,9 @@ export default async (
109
120
  showStats.includes("issues_authored"),
110
121
  showStats.includes("issues_commented"),
111
122
  parseArray(role),
123
+ showStats.includes("contributions"),
124
+ showStats.includes("all_time_contribs"),
125
+ parseBoolean(contribs_include_own_repos),
112
126
  pat,
113
127
  );
114
128
 
@@ -117,6 +131,7 @@ export default async (
117
131
  content: renderStatsCard(
118
132
  stats,
119
133
  {
134
+ ...colorParams,
120
135
  hide: parseArray(hide),
121
136
  show_icons: parseBoolean(show_icons),
122
137
  hide_title: parseBoolean(hide_title),
@@ -124,18 +139,11 @@ export default async (
124
139
  card_width: parseInt(card_width, 10),
125
140
  hide_rank: parseBoolean(hide_rank),
126
141
  include_all_commits: parseBoolean(include_all_commits),
127
- commits_year: parseInt(commits_year, 10),
142
+ commits_year: commitsYearParsed,
128
143
  line_height,
129
- title_color,
130
- ring_color,
131
- icon_color,
132
- text_color,
133
144
  text_bold: parseBoolean(text_bold),
134
- bg_color,
135
- theme,
136
145
  custom_title,
137
146
  border_radius,
138
- border_color,
139
147
  number_format,
140
148
  number_precision: parseInt(number_precision, 10),
141
149
  locale: locale ? locale.toLowerCase() : null,
@@ -156,11 +164,7 @@ export default async (
156
164
  message: err.message,
157
165
  secondaryMessage: retrieveSecondaryMessage(err),
158
166
  renderOptions: {
159
- title_color,
160
- text_color,
161
- bg_color,
162
- border_color,
163
- theme,
167
+ ...colorParams,
164
168
  show_repo_link: !(err instanceof MissingParamError),
165
169
  },
166
170
  }),
@@ -170,13 +174,7 @@ export default async (
170
174
  status: "error - temporary",
171
175
  content: renderError({
172
176
  message: "An unknown error occurred",
173
- renderOptions: {
174
- title_color,
175
- text_color,
176
- bg_color,
177
- border_color,
178
- theme,
179
- },
177
+ renderOptions: colorParams,
180
178
  }),
181
179
  };
182
180
  }
package/src/api/pin.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { renderRepoCard } from "../cards/repo.js";
2
+ import { findInvalidColorParam, pickColorParams } from "../common/color.js";
2
3
  import {
3
4
  MissingParamError,
4
5
  retrieveSecondaryMessage,
@@ -14,12 +15,7 @@ export default async (
14
15
  username,
15
16
  repo,
16
17
  hide_border,
17
- title_color,
18
- icon_color,
19
- text_color,
20
- bg_color,
21
18
  card_width,
22
- theme,
23
19
  show_owner,
24
20
  browser_rendering,
25
21
  show,
@@ -29,24 +25,31 @@ export default async (
29
25
  line_height,
30
26
  locale,
31
27
  border_radius,
32
- border_color,
33
28
  description_lines_count,
29
+ ...remainingParams
34
30
  },
35
31
  pat = null,
36
32
  ) => {
33
+ const colorParams = pickColorParams(remainingParams);
34
+
35
+ const invalidColorInput = findInvalidColorParam(colorParams);
36
+ if (invalidColorInput) {
37
+ return {
38
+ status: "error - permanent",
39
+ content: renderError({
40
+ message: "Something went wrong",
41
+ secondaryMessage: `Invalid color input for parameter "${invalidColorInput}"`,
42
+ }),
43
+ };
44
+ }
45
+
37
46
  if (locale && !isLocaleAvailable(locale)) {
38
47
  return {
39
48
  status: "error - permanent",
40
49
  content: renderError({
41
50
  message: "Something went wrong",
42
51
  secondaryMessage: "Language not found",
43
- renderOptions: {
44
- title_color,
45
- text_color,
46
- bg_color,
47
- border_color,
48
- theme,
49
- },
52
+ renderOptions: colorParams,
50
53
  }),
51
54
  };
52
55
  }
@@ -61,13 +64,7 @@ export default async (
61
64
  content: renderError({
62
65
  message: "Something went wrong",
63
66
  secondaryMessage: "Username or repository contains unsafe characters",
64
- renderOptions: {
65
- title_color,
66
- text_color,
67
- bg_color,
68
- border_color,
69
- theme,
70
- },
67
+ renderOptions: colorParams,
71
68
  }),
72
69
  };
73
70
  }
@@ -88,14 +85,9 @@ export default async (
88
85
  return {
89
86
  status: "success",
90
87
  content: renderRepoCard(repoData, {
88
+ ...colorParams,
91
89
  hide_border: parseBoolean(hide_border),
92
- title_color,
93
- icon_color,
94
- text_color,
95
- bg_color,
96
- theme,
97
90
  border_radius,
98
- border_color,
99
91
  card_width_input: parseInt(card_width, 10),
100
92
  show_owner: parseBoolean(show_owner),
101
93
  browser_rendering: parseBoolean(browser_rendering),
@@ -117,11 +109,7 @@ export default async (
117
109
  message: err.message,
118
110
  secondaryMessage: retrieveSecondaryMessage(err),
119
111
  renderOptions: {
120
- title_color,
121
- text_color,
122
- bg_color,
123
- border_color,
124
- theme,
112
+ ...colorParams,
125
113
  show_repo_link: !(err instanceof MissingParamError),
126
114
  },
127
115
  }),
@@ -131,13 +119,7 @@ export default async (
131
119
  status: "error - temporary",
132
120
  content: renderError({
133
121
  message: "An unknown error occurred",
134
- renderOptions: {
135
- title_color,
136
- text_color,
137
- bg_color,
138
- border_color,
139
- theme,
140
- },
122
+ renderOptions: colorParams,
141
123
  }),
142
124
  };
143
125
  }