@stats-forge/github-stats-forge-core 0.0.1

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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/build/api/api-result.d.ts +44 -0
  4. package/build/api/api-result.d.ts.map +1 -0
  5. package/build/api/api-result.js +33 -0
  6. package/build/api/gist.d.ts +29 -0
  7. package/build/api/gist.d.ts.map +1 -0
  8. package/build/api/gist.js +52 -0
  9. package/build/api/index.d.ts +13 -0
  10. package/build/api/index.d.ts.map +1 -0
  11. package/build/api/index.js +8 -0
  12. package/build/api/params.d.ts +93 -0
  13. package/build/api/params.d.ts.map +1 -0
  14. package/build/api/params.js +145 -0
  15. package/build/api/pin.d.ts +47 -0
  16. package/build/api/pin.d.ts.map +1 -0
  17. package/build/api/pin.js +87 -0
  18. package/build/api/stats.d.ts +42 -0
  19. package/build/api/stats.d.ts.map +1 -0
  20. package/build/api/stats.js +132 -0
  21. package/build/api/top-langs.d.ts +37 -0
  22. package/build/api/top-langs.d.ts.map +1 -0
  23. package/build/api/top-langs.js +101 -0
  24. package/build/api/wakatime.d.ts +34 -0
  25. package/build/api/wakatime.d.ts.map +1 -0
  26. package/build/api/wakatime.js +91 -0
  27. package/build/calculateRank.d.ts +29 -0
  28. package/build/calculateRank.d.ts.map +1 -0
  29. package/build/calculateRank.js +58 -0
  30. package/build/cards/gist.d.ts +16 -0
  31. package/build/cards/gist.d.ts.map +1 -0
  32. package/build/cards/gist.js +119 -0
  33. package/build/cards/index.d.ts +11 -0
  34. package/build/cards/index.d.ts.map +1 -0
  35. package/build/cards/index.js +7 -0
  36. package/build/cards/options.d.ts +19 -0
  37. package/build/cards/options.d.ts.map +1 -0
  38. package/build/cards/options.js +1 -0
  39. package/build/cards/repo.d.ts +25 -0
  40. package/build/cards/repo.d.ts.map +1 -0
  41. package/build/cards/repo.js +276 -0
  42. package/build/cards/stats.d.ts +37 -0
  43. package/build/cards/stats.d.ts.map +1 -0
  44. package/build/cards/stats.js +457 -0
  45. package/build/cards/top-languages.d.ts +153 -0
  46. package/build/cards/top-languages.d.ts.map +1 -0
  47. package/build/cards/top-languages.js +805 -0
  48. package/build/cards/wakatime.d.ts +31 -0
  49. package/build/cards/wakatime.d.ts.map +1 -0
  50. package/build/cards/wakatime.js +376 -0
  51. package/build/common/Card.d.ts +121 -0
  52. package/build/common/Card.d.ts.map +1 -0
  53. package/build/common/Card.js +305 -0
  54. package/build/common/I18n.d.ts +27 -0
  55. package/build/common/I18n.d.ts.map +1 -0
  56. package/build/common/I18n.js +35 -0
  57. package/build/common/color.d.ts +112 -0
  58. package/build/common/color.d.ts.map +1 -0
  59. package/build/common/color.js +188 -0
  60. package/build/common/config.d.ts +53 -0
  61. package/build/common/config.d.ts.map +1 -0
  62. package/build/common/config.js +87 -0
  63. package/build/common/constants.d.ts +7 -0
  64. package/build/common/constants.d.ts.map +1 -0
  65. package/build/common/constants.js +9 -0
  66. package/build/common/date.d.ts +29 -0
  67. package/build/common/date.d.ts.map +1 -0
  68. package/build/common/date.js +23 -0
  69. package/build/common/error.d.ts +87 -0
  70. package/build/common/error.d.ts.map +1 -0
  71. package/build/common/error.js +108 -0
  72. package/build/common/fmt.d.ts +28 -0
  73. package/build/common/fmt.d.ts.map +1 -0
  74. package/build/common/fmt.js +68 -0
  75. package/build/common/html.d.ts +8 -0
  76. package/build/common/html.d.ts.map +1 -0
  77. package/build/common/html.js +14 -0
  78. package/build/common/http.d.ts +53 -0
  79. package/build/common/http.d.ts.map +1 -0
  80. package/build/common/http.js +47 -0
  81. package/build/common/icons.d.ts +28 -0
  82. package/build/common/icons.d.ts.map +1 -0
  83. package/build/common/icons.js +77 -0
  84. package/build/common/languageColors.d.ts +11 -0
  85. package/build/common/languageColors.d.ts.map +1 -0
  86. package/build/common/languageColors.js +15 -0
  87. package/build/common/languageColors.json +678 -0
  88. package/build/common/log.d.ts +9 -0
  89. package/build/common/log.d.ts.map +1 -0
  90. package/build/common/log.js +8 -0
  91. package/build/common/ops.d.ts +59 -0
  92. package/build/common/ops.d.ts.map +1 -0
  93. package/build/common/ops.js +115 -0
  94. package/build/common/render.d.ts +196 -0
  95. package/build/common/render.d.ts.map +1 -0
  96. package/build/common/render.js +474 -0
  97. package/build/common/retryer.d.ts +36 -0
  98. package/build/common/retryer.d.ts.map +1 -0
  99. package/build/common/retryer.js +67 -0
  100. package/build/fetchers/gist.d.ts +15 -0
  101. package/build/fetchers/gist.d.ts.map +1 -0
  102. package/build/fetchers/gist.js +68 -0
  103. package/build/fetchers/index.d.ts +13 -0
  104. package/build/fetchers/index.d.ts.map +1 -0
  105. package/build/fetchers/index.js +10 -0
  106. package/build/fetchers/repo.d.ts +27 -0
  107. package/build/fetchers/repo.d.ts.map +1 -0
  108. package/build/fetchers/repo.js +100 -0
  109. package/build/fetchers/stats.d.ts +74 -0
  110. package/build/fetchers/stats.d.ts.map +1 -0
  111. package/build/fetchers/stats.js +498 -0
  112. package/build/fetchers/top-languages.d.ts +23 -0
  113. package/build/fetchers/top-languages.d.ts.map +1 -0
  114. package/build/fetchers/top-languages.js +89 -0
  115. package/build/fetchers/types.d.ts +130 -0
  116. package/build/fetchers/types.d.ts.map +1 -0
  117. package/build/fetchers/types.js +1 -0
  118. package/build/fetchers/wakatime.d.ts +19 -0
  119. package/build/fetchers/wakatime.d.ts.map +1 -0
  120. package/build/fetchers/wakatime.js +36 -0
  121. package/build/graphql/contributionsDocument.d.ts +18 -0
  122. package/build/graphql/contributionsDocument.d.ts.map +1 -0
  123. package/build/graphql/contributionsDocument.js +30 -0
  124. package/build/graphql/generated/common.d.ts +42 -0
  125. package/build/graphql/generated/common.d.ts.map +1 -0
  126. package/build/graphql/generated/common.js +2 -0
  127. package/build/graphql/generated/gist.d.ts +44 -0
  128. package/build/graphql/generated/gist.d.ts.map +1 -0
  129. package/build/graphql/generated/gist.js +27 -0
  130. package/build/graphql/generated/repo.d.ts +67 -0
  131. package/build/graphql/generated/repo.d.ts.map +1 -0
  132. package/build/graphql/generated/repo.js +30 -0
  133. package/build/graphql/generated/stats.d.ts +150 -0
  134. package/build/graphql/generated/stats.d.ts.map +1 -0
  135. package/build/graphql/generated/stats.js +95 -0
  136. package/build/graphql/generated/top-languages.d.ts +54 -0
  137. package/build/graphql/generated/top-languages.d.ts.map +1 -0
  138. package/build/graphql/generated/top-languages.js +27 -0
  139. package/build/graphql/graphqlDocument.d.ts +22 -0
  140. package/build/graphql/graphqlDocument.d.ts.map +1 -0
  141. package/build/graphql/graphqlDocument.js +8 -0
  142. package/build/graphql/reposContributedToDocument.d.ts +27 -0
  143. package/build/graphql/reposContributedToDocument.d.ts.map +1 -0
  144. package/build/graphql/reposContributedToDocument.js +59 -0
  145. package/build/index.d.ts +15 -0
  146. package/build/index.d.ts.map +1 -0
  147. package/build/index.js +10 -0
  148. package/build/themes/index.d.ts +505 -0
  149. package/build/themes/index.d.ts.map +1 -0
  150. package/build/themes/index.js +505 -0
  151. package/build/translations.d.ts +1153 -0
  152. package/build/translations.d.ts.map +1 -0
  153. package/build/translations.js +1156 -0
  154. package/package.json +114 -0
  155. package/src/_emoji-name-map.d.ts +10 -0
  156. package/src/_github-username-regex.d.ts +4 -0
  157. package/src/api/api-result.ts +69 -0
  158. package/src/api/gist.ts +66 -0
  159. package/src/api/index.ts +16 -0
  160. package/src/api/params.ts +221 -0
  161. package/src/api/pin.ts +126 -0
  162. package/src/api/stats.ts +195 -0
  163. package/src/api/top-langs.ts +150 -0
  164. package/src/api/wakatime.ts +130 -0
  165. package/src/calculateRank.ts +91 -0
  166. package/src/cards/gist.ts +169 -0
  167. package/src/cards/index.ts +21 -0
  168. package/src/cards/options.ts +18 -0
  169. package/src/cards/repo.ts +376 -0
  170. package/src/cards/stats.ts +615 -0
  171. package/src/cards/top-languages.ts +1077 -0
  172. package/src/cards/wakatime.ts +501 -0
  173. package/src/common/Card.ts +364 -0
  174. package/src/common/I18n.ts +51 -0
  175. package/src/common/color.ts +296 -0
  176. package/src/common/config.ts +118 -0
  177. package/src/common/constants.ts +12 -0
  178. package/src/common/date.ts +34 -0
  179. package/src/common/error.ts +163 -0
  180. package/src/common/fmt.ts +86 -0
  181. package/src/common/html.ts +17 -0
  182. package/src/common/http.ts +98 -0
  183. package/src/common/icons.ts +80 -0
  184. package/src/common/languageColors.json +678 -0
  185. package/src/common/languageColors.ts +19 -0
  186. package/src/common/log.ts +12 -0
  187. package/src/common/ops.ts +145 -0
  188. package/src/common/render.ts +641 -0
  189. package/src/common/retryer.ts +111 -0
  190. package/src/fetchers/gist.ts +82 -0
  191. package/src/fetchers/index.ts +25 -0
  192. package/src/fetchers/repo.ts +140 -0
  193. package/src/fetchers/stats.ts +742 -0
  194. package/src/fetchers/top-languages.ts +134 -0
  195. package/src/fetchers/types.ts +136 -0
  196. package/src/fetchers/wakatime.ts +56 -0
  197. package/src/graphql/contributionsDocument.ts +44 -0
  198. package/src/graphql/generated/common.ts +26 -0
  199. package/src/graphql/generated/gist.ts +56 -0
  200. package/src/graphql/generated/repo.ts +79 -0
  201. package/src/graphql/generated/stats.ts +180 -0
  202. package/src/graphql/generated/top-languages.ts +66 -0
  203. package/src/graphql/graphqlDocument.ts +25 -0
  204. package/src/graphql/queries/gist.graphql +25 -0
  205. package/src/graphql/queries/repo.graphql +28 -0
  206. package/src/graphql/queries/stats.graphql +113 -0
  207. package/src/graphql/queries/top-languages.graphql +27 -0
  208. package/src/graphql/reposContributedToDocument.ts +83 -0
  209. package/src/index.ts +18 -0
  210. package/src/themes/index.ts +519 -0
  211. package/src/translations.ts +1169 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Return console instance based on the environment.
3
+ */
4
+ const logger: {
5
+ log: (...args: Array<unknown>) => void;
6
+ error: (...args: Array<unknown>) => void;
7
+ } = {
8
+ log: console.log,
9
+ error: console.error,
10
+ };
11
+
12
+ export { logger };
@@ -0,0 +1,145 @@
1
+ import toEmoji from 'emoji-name-map';
2
+
3
+ import type { RepositoryAffiliation } from '../graphql/generated/common.js';
4
+
5
+ import { OWNER_AFFILIATIONS } from './constants.js';
6
+ import { CardError, INVALID_AFFILIATION } from './error.js';
7
+
8
+ /**
9
+ * Returns boolean if value is either "true" or "false" else the value as it is.
10
+ *
11
+ * @param value The value to parse; `undefined` when the param was not sent.
12
+ * @returns The parsed value.
13
+ */
14
+ const parseBoolean = (value: string | boolean | undefined): boolean | undefined => {
15
+ if (typeof value === 'boolean') {
16
+ return value;
17
+ }
18
+
19
+ if (typeof value === 'string') {
20
+ if (value.toLowerCase() === 'true') {
21
+ return true;
22
+ } else if (value.toLowerCase() === 'false') {
23
+ return false;
24
+ }
25
+ }
26
+ return undefined;
27
+ };
28
+
29
+ /**
30
+ * Parse string to array of strings.
31
+ *
32
+ * @param str The string to parse; `undefined` when the param was not sent.
33
+ * @returns The array of strings.
34
+ */
35
+ const parseArray = (str: string | undefined): Array<string> => {
36
+ if (!str) {
37
+ return [];
38
+ }
39
+ return str.split(',');
40
+ };
41
+
42
+ /**
43
+ * Clamp the given number between the given range.
44
+ *
45
+ * @param number The number to clamp.
46
+ * @param min The minimum value.
47
+ * @param max The maximum value.
48
+ * @returns The clamped number.
49
+ */
50
+ const clampValue = (number: string | number, min: number, max: number): number => {
51
+ if (Number.isNaN(parseInt(String(number), 10))) {
52
+ return min;
53
+ }
54
+ return Math.max(min, Math.min(Number(number), max));
55
+ };
56
+
57
+ /**
58
+ * Lowercase and trim string.
59
+ *
60
+ * @param name String to lowercase and trim.
61
+ * @returns Lowercased and trimmed string.
62
+ */
63
+ const lowercaseTrim = (name: string): string => name.toLowerCase().trim();
64
+
65
+ /**
66
+ * Split array of languages in two columns.
67
+ *
68
+ * @template T Language object.
69
+ * @param arr Array of languages.
70
+ * @param perChunk Number of languages per column.
71
+ * @returns Array of languages split in two columns.
72
+ */
73
+ const chunkArray = <T>(arr: Array<T>, perChunk: number): Array<Array<T>> => {
74
+ return arr.reduce<Array<Array<T>>>((resultArray, item, index) => {
75
+ const chunkIndex = Math.floor(index / perChunk);
76
+ const chunk = resultArray[chunkIndex] ?? [];
77
+ chunk.push(item);
78
+ resultArray[chunkIndex] = chunk;
79
+ return resultArray;
80
+ }, []);
81
+ };
82
+
83
+ /**
84
+ * Parse emoji from string.
85
+ *
86
+ * @param str String to parse emoji from.
87
+ * @returns String with emoji parsed.
88
+ */
89
+ const parseEmojis = (str: string): string => {
90
+ if (!str) {
91
+ throw new Error('[parseEmoji]: str argument not provided');
92
+ }
93
+ return str.replace(/:\w+:/gm, (emoji) => {
94
+ return toEmoji.get(emoji) || '';
95
+ });
96
+ };
97
+
98
+ const isOwnerAffiliation = (value: string): value is RepositoryAffiliation =>
99
+ OWNER_AFFILIATIONS.some((affiliation) => affiliation === value);
100
+
101
+ /**
102
+ * Parse owner affiliations.
103
+ *
104
+ * @param affiliations input affiliations to be parsed.
105
+ * @returns Parsed affiliations.
106
+ *
107
+ * @throws {CardError} If affiliations contains invalid values.
108
+ */
109
+ const parseOwnerAffiliations = (affiliations: Array<string>): Array<RepositoryAffiliation> => {
110
+ // Set default value for ownerAffiliations.
111
+ // NOTE: Done here since parseArray() will always return an empty array even nothing
112
+ //was specified.
113
+ const normalized =
114
+ affiliations.length > 0
115
+ ? affiliations.map((affiliation) => affiliation.toUpperCase())
116
+ : ['OWNER'];
117
+
118
+ // Check if ownerAffiliations contains valid values.
119
+ if (!normalized.every(isOwnerAffiliation)) {
120
+ throw CardError.invalidParam('role', INVALID_AFFILIATION);
121
+ }
122
+ return normalized;
123
+ };
124
+
125
+ const buildSearchFilter = (
126
+ repos: Array<string> | string = [],
127
+ owners: Array<string> | string = [],
128
+ ): string => {
129
+ const repoFilter =
130
+ Array.isArray(repos) && repos.length > 0 ? repos.map((r) => `repo:${r} `).join('') : '';
131
+ const orgFilter =
132
+ Array.isArray(owners) && owners.length > 0 ? owners.map((o) => `owner:${o} `).join('') : '';
133
+ return repoFilter + orgFilter;
134
+ };
135
+
136
+ export {
137
+ parseBoolean,
138
+ parseArray,
139
+ clampValue,
140
+ lowercaseTrim,
141
+ chunkArray,
142
+ parseEmojis,
143
+ parseOwnerAffiliations,
144
+ buildSearchFilter,
145
+ };