@stats-forge/github-stats-forge-core 0.1.0 → 0.3.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 (142) hide show
  1. package/build/api/contributed-to.d.ts +23 -0
  2. package/build/api/contributed-to.d.ts.map +1 -0
  3. package/build/api/contributed-to.js +43 -0
  4. package/build/api/gist.d.ts +8 -15
  5. package/build/api/gist.d.ts.map +1 -1
  6. package/build/api/gist.js +14 -29
  7. package/build/api/handler.d.ts +16 -0
  8. package/build/api/handler.d.ts.map +1 -0
  9. package/build/api/handler.js +29 -0
  10. package/build/api/index.d.ts +1 -0
  11. package/build/api/index.d.ts.map +1 -1
  12. package/build/api/index.js +1 -0
  13. package/build/api/params.d.ts +11 -5
  14. package/build/api/params.d.ts.map +1 -1
  15. package/build/api/params.js +26 -6
  16. package/build/api/pin.d.ts +11 -15
  17. package/build/api/pin.d.ts.map +1 -1
  18. package/build/api/pin.js +34 -46
  19. package/build/api/stats.d.ts +15 -22
  20. package/build/api/stats.d.ts.map +1 -1
  21. package/build/api/stats.js +59 -72
  22. package/build/api/top-langs.d.ts +11 -22
  23. package/build/api/top-langs.d.ts.map +1 -1
  24. package/build/api/top-langs.js +34 -51
  25. package/build/api/wakatime.d.ts +10 -24
  26. package/build/api/wakatime.d.ts.map +1 -1
  27. package/build/api/wakatime.js +27 -47
  28. package/build/cards/contributed-to.d.ts +19 -0
  29. package/build/cards/contributed-to.d.ts.map +1 -0
  30. package/build/cards/contributed-to.js +242 -0
  31. package/build/cards/gist.d.ts +1 -0
  32. package/build/cards/gist.d.ts.map +1 -1
  33. package/build/cards/gist.js +13 -9
  34. package/build/cards/repo.d.ts +12 -1
  35. package/build/cards/repo.d.ts.map +1 -1
  36. package/build/cards/repo.js +40 -18
  37. package/build/cards/stats.d.ts +15 -3
  38. package/build/cards/stats.d.ts.map +1 -1
  39. package/build/cards/stats.js +91 -76
  40. package/build/cards/top-languages.d.ts +13 -2
  41. package/build/cards/top-languages.d.ts.map +1 -1
  42. package/build/cards/top-languages.js +26 -9
  43. package/build/cards/wakatime.d.ts +13 -2
  44. package/build/cards/wakatime.d.ts.map +1 -1
  45. package/build/cards/wakatime.js +22 -9
  46. package/build/common/Card.d.ts +9 -0
  47. package/build/common/Card.d.ts.map +1 -1
  48. package/build/common/Card.js +44 -9
  49. package/build/common/I18n.d.ts +1 -1
  50. package/build/common/I18n.d.ts.map +1 -1
  51. package/build/common/I18n.js +4 -2
  52. package/build/common/brand.d.ts +76 -0
  53. package/build/common/brand.d.ts.map +1 -0
  54. package/build/common/brand.js +73 -0
  55. package/build/common/constants.d.ts +3 -1
  56. package/build/common/constants.d.ts.map +1 -1
  57. package/build/common/constants.js +3 -1
  58. package/build/common/date.d.ts +50 -3
  59. package/build/common/date.d.ts.map +1 -1
  60. package/build/common/date.js +104 -2
  61. package/build/common/icons.d.ts +4 -2
  62. package/build/common/icons.d.ts.map +1 -1
  63. package/build/common/icons.js +10 -5
  64. package/build/common/ops.d.ts +8 -3
  65. package/build/common/ops.d.ts.map +1 -1
  66. package/build/common/ops.js +8 -14
  67. package/build/common/render.d.ts +7 -1
  68. package/build/common/render.d.ts.map +1 -1
  69. package/build/common/render.js +69 -61
  70. package/build/fetchers/contributed-to.d.ts +62 -0
  71. package/build/fetchers/contributed-to.d.ts.map +1 -0
  72. package/build/fetchers/contributed-to.js +184 -0
  73. package/build/fetchers/graphql-error.d.ts +13 -0
  74. package/build/fetchers/graphql-error.d.ts.map +1 -0
  75. package/build/fetchers/graphql-error.js +29 -0
  76. package/build/fetchers/index.d.ts +2 -1
  77. package/build/fetchers/index.d.ts.map +1 -1
  78. package/build/fetchers/index.js +1 -0
  79. package/build/fetchers/stats.d.ts +14 -8
  80. package/build/fetchers/stats.d.ts.map +1 -1
  81. package/build/fetchers/stats.js +72 -195
  82. package/build/fetchers/top-languages.d.ts.map +1 -1
  83. package/build/fetchers/top-languages.js +3 -18
  84. package/build/fetchers/types.d.ts +24 -0
  85. package/build/fetchers/types.d.ts.map +1 -1
  86. package/build/graphql/contributionsCollection.d.ts +9 -0
  87. package/build/graphql/contributionsCollection.d.ts.map +1 -0
  88. package/build/graphql/contributionsCollection.js +12 -0
  89. package/build/graphql/contributionsDocument.d.ts +5 -5
  90. package/build/graphql/contributionsDocument.d.ts.map +1 -1
  91. package/build/graphql/contributionsDocument.js +8 -15
  92. package/build/graphql/generated/contributed-to.d.ts +22 -0
  93. package/build/graphql/generated/contributed-to.d.ts.map +1 -0
  94. package/build/graphql/generated/contributed-to.js +11 -0
  95. package/build/graphql/generated/stats.d.ts +13 -1
  96. package/build/graphql/generated/stats.d.ts.map +1 -1
  97. package/build/graphql/generated/stats.js +2 -2
  98. package/build/graphql/graphqlDocument.d.ts +1 -1
  99. package/build/graphql/reposContributedToDocument.d.ts.map +1 -1
  100. package/build/graphql/reposContributedToDocument.js +11 -5
  101. package/build/translations.d.ts +64 -1
  102. package/build/translations.d.ts.map +1 -1
  103. package/build/translations.js +65 -1
  104. package/package.json +1 -1
  105. package/src/api/contributed-to.ts +84 -0
  106. package/src/api/gist.ts +20 -37
  107. package/src/api/handler.ts +42 -0
  108. package/src/api/index.ts +1 -0
  109. package/src/api/params.ts +48 -9
  110. package/src/api/pin.ts +33 -45
  111. package/src/api/stats.ts +78 -89
  112. package/src/api/top-langs.ts +34 -56
  113. package/src/api/wakatime.ts +33 -54
  114. package/src/cards/contributed-to.ts +373 -0
  115. package/src/cards/gist.ts +17 -8
  116. package/src/cards/repo.ts +44 -20
  117. package/src/cards/stats.ts +119 -90
  118. package/src/cards/top-languages.ts +27 -18
  119. package/src/cards/wakatime.ts +23 -13
  120. package/src/common/Card.ts +56 -11
  121. package/src/common/I18n.ts +4 -2
  122. package/src/common/brand.ts +109 -0
  123. package/src/common/constants.ts +4 -1
  124. package/src/common/date.ts +135 -3
  125. package/src/common/icons.ts +10 -5
  126. package/src/common/ops.ts +10 -19
  127. package/src/common/render.ts +75 -65
  128. package/src/fetchers/contributed-to.ts +271 -0
  129. package/src/fetchers/graphql-error.ts +36 -0
  130. package/src/fetchers/index.ts +3 -0
  131. package/src/fetchers/stats.ts +123 -274
  132. package/src/fetchers/top-languages.ts +5 -19
  133. package/src/fetchers/types.ts +26 -0
  134. package/src/graphql/contributionsCollection.ts +18 -0
  135. package/src/graphql/contributionsDocument.ts +11 -18
  136. package/src/graphql/generated/contributed-to.ts +25 -0
  137. package/src/graphql/generated/stats.ts +19 -6
  138. package/src/graphql/graphqlDocument.ts +1 -1
  139. package/src/graphql/queries/contributed-to.graphql +8 -0
  140. package/src/graphql/queries/stats.graphql +14 -2
  141. package/src/graphql/reposContributedToDocument.ts +11 -9
  142. package/src/translations.ts +77 -0
@@ -1,10 +1,12 @@
1
1
  import * as z from 'zod/mini';
2
- import { RANK_ICONS, renderStatsCard } from '../cards/stats.js';
2
+ import { renderStatsCard } from '../cards/stats.js';
3
+ import { OWNER_AFFILIATIONS } from '../common/constants.js';
3
4
  import { fetchStats } from '../fetchers/stats.js';
4
- import { errorResult } from './api-result.js';
5
- import { booleanParam, enumParam, listParam, localeParam, looseIntParam, numberParam, parseColorParams, parseParams, rawParam, safeListParam, usernameParam, yearParam, } from './params.js';
5
+ import { cardHandler } from './handler.js';
6
+ import { booleanParam, enumParam, fromParam, listParam, localeParam, looseIntParam, numberParam, ORDERED_RANGE, rawParam, safeListParam, toParam, usernameParam, } from './params.js';
6
7
  /** What the stats endpoint accepts, on top of the shared color params. */
7
- const statsQuery = z.object({
8
+ const statsQuery = z
9
+ .object({
8
10
  username: usernameParam,
9
11
  repo: safeListParam,
10
12
  owner: safeListParam,
@@ -15,7 +17,8 @@ const statsQuery = z.object({
15
17
  hide_rank: booleanParam,
16
18
  show_icons: booleanParam,
17
19
  include_all_commits: booleanParam,
18
- commits_year: yearParam,
20
+ from: fromParam,
21
+ to: toParam,
19
22
  line_height: rawParam,
20
23
  text_bold: booleanParam,
21
24
  exclude_repo: listParam,
@@ -26,81 +29,65 @@ const statsQuery = z.object({
26
29
  number_format: rawParam,
27
30
  role: listParam,
28
31
  number_precision: looseIntParam,
29
- rank_icon: enumParam(RANK_ICONS),
32
+ rank_icon: enumParam(renderStatsCard.OPTIONS.rank_icon),
30
33
  show: listParam,
31
34
  contribs_include_own_repos: booleanParam,
32
- });
35
+ })
36
+ .check(ORDERED_RANGE);
33
37
  /**
34
38
  * Render the stats card for a set of query params.
35
39
  *
36
40
  * @returns The rendered card, or a rendered error.
37
41
  */
38
- const renderStats = async (query, config) => {
39
- let colors;
40
- try {
41
- colors = parseColorParams(query);
42
- }
43
- catch (error) {
44
- // A rejected color cannot be used to draw its own error card.
45
- return errorResult(error);
46
- }
47
- try {
48
- const { username, repo, owner, hide, hide_title, hide_border, card_width, hide_rank, show_icons, include_all_commits, commits_year, line_height, text_bold, exclude_repo, custom_title, locale, disable_animations, border_radius, number_format, role, number_precision, rank_icon, show, contribs_include_own_repos, } = parseParams(statsQuery, query);
49
- // A bare repo name is scoped to the user whose card this is.
50
- const repository = repo.map((name) => name.includes('/') ? name : `${username ?? ''}/${name}`);
51
- const stats = await fetchStats({
52
- username,
53
- include_all_commits,
54
- exclude_repo,
55
- include_merged_pull_requests: show.includes('prs_merged') || show.includes('prs_merged_percentage'),
56
- include_discussions: show.includes('discussions_started'),
57
- include_discussions_answers: show.includes('discussions_answered'),
58
- commits_year,
59
- repo: repository,
60
- owner,
61
- include_prs_authored: show.includes('prs_authored'),
62
- include_prs_commented: show.includes('prs_commented'),
63
- include_prs_reviewed: show.includes('prs_reviewed'),
64
- include_issues_authored: show.includes('issues_authored'),
65
- include_issues_commented: show.includes('issues_commented'),
66
- ownerAffiliations: role,
67
- include_contributions: show.includes('contributions'),
68
- include_all_time_contribs: show.includes('all_time_contribs'),
69
- contribs_include_own_repos,
70
- }, config);
71
- return {
72
- status: 'success',
73
- content: renderStatsCard(stats, {
74
- ...colors,
75
- hide,
76
- show_icons,
77
- hide_title,
78
- hide_border,
79
- card_width,
80
- hide_rank,
81
- include_all_commits,
82
- commits_year,
83
- line_height,
84
- text_bold,
85
- custom_title,
86
- border_radius,
87
- number_format,
88
- number_precision,
89
- locale,
90
- disable_animations,
91
- rank_icon,
92
- show,
93
- }, username, repository, owner),
94
- };
95
- }
96
- catch (error) {
97
- return errorResult(error, colors);
98
- }
99
- };
42
+ const renderStats = cardHandler(statsQuery, async ({ username, repo, owner, hide, hide_title, hide_border, card_width, hide_rank, show_icons, include_all_commits, from, to, line_height, text_bold, exclude_repo, custom_title, locale, disable_animations, border_radius, number_format, role, number_precision, rank_icon, show, contribs_include_own_repos, }, colors, config) => {
43
+ // A bare repo name is scoped to the user whose card this is.
44
+ const repository = repo.map((name) => name.includes('/') ? name : `${username ?? ''}/${name}`);
45
+ const stats = await fetchStats({
46
+ username,
47
+ include_all_commits,
48
+ exclude_repo,
49
+ include_merged_pull_requests: show.includes('prs_merged') || show.includes('prs_merged_percentage'),
50
+ include_discussions: show.includes('discussions_started'),
51
+ include_discussions_answers: show.includes('discussions_answered'),
52
+ from,
53
+ to,
54
+ repo: repository,
55
+ owner,
56
+ include_prs_authored: show.includes('prs_authored'),
57
+ include_prs_commented: show.includes('prs_commented'),
58
+ include_prs_reviewed: show.includes('prs_reviewed'),
59
+ include_issues_authored: show.includes('issues_authored'),
60
+ include_issues_commented: show.includes('issues_commented'),
61
+ ownerAffiliations: role,
62
+ include_contributions: show.includes('contributions'),
63
+ include_all_time_contribs: show.includes('all_time_contribs'),
64
+ contribs_include_own_repos,
65
+ }, config);
66
+ return renderStatsCard(stats, {
67
+ ...colors,
68
+ hide,
69
+ show_icons,
70
+ hide_title,
71
+ hide_border,
72
+ card_width,
73
+ hide_rank,
74
+ include_all_commits,
75
+ line_height,
76
+ text_bold,
77
+ custom_title,
78
+ border_radius,
79
+ number_format,
80
+ number_precision,
81
+ locale,
82
+ disable_animations,
83
+ rank_icon,
84
+ show,
85
+ }, username, repository, owner);
86
+ });
100
87
  /**
101
- * The card, with the values its enum params accept.
102
- * A UI reads them off the function it calls, e.g. `stats.LAYOUTS`.
88
+ * The card, and the values each of its options accepts, keyed by the option's own name.
89
+ * A UI reads them off the function it calls: `stats.OPTIONS.rank_icon`.
103
90
  */
104
91
  export const stats = Object.assign(renderStats, {
105
- RANK_ICONS,
92
+ OPTIONS: { ...renderStatsCard.OPTIONS, role: OWNER_AFFILIATIONS },
106
93
  });
@@ -1,9 +1,9 @@
1
1
  import * as z from 'zod/mini';
2
- import type { CardConfig } from '../common/config.ts';
3
- import type { ApiResult } from './api-result.ts';
4
- import type { ApiQuery } from './params.ts';
5
- /** What the top-languages endpoint accepts, on top of the shared color params. */
6
- declare const topLangsQuery: z.ZodMiniObject<{
2
+ /**
3
+ * The card, and the values each of its options accepts, keyed by the option's own name.
4
+ * A UI reads them off the function it calls: `topLangs.OPTIONS.layout`.
5
+ */
6
+ export declare const topLangs: ((query: import("./params.ts").ApiQuery<z.ZodMiniObject<{
7
7
  username: z.ZodMiniType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>;
8
8
  hide: z.ZodMiniPipe<z.ZodMiniOptional<z.ZodMiniString<string>>, z.ZodMiniTransform<string[], string | undefined>>;
9
9
  hide_title: z.ZodMiniPipe<z.ZodMiniOptional<z.ZodMiniString<string>>, z.ZodMiniTransform<boolean | undefined, string | undefined>>;
@@ -22,22 +22,11 @@ declare const topLangsQuery: z.ZodMiniObject<{
22
22
  hide_progress: z.ZodMiniPipe<z.ZodMiniOptional<z.ZodMiniString<string>>, z.ZodMiniTransform<boolean | undefined, string | undefined>>;
23
23
  hide_values: z.ZodMiniPipe<z.ZodMiniOptional<z.ZodMiniString<string>>, z.ZodMiniTransform<boolean | undefined, string | undefined>>;
24
24
  stats_format: z.ZodMiniType<"bytes" | "percentages" | undefined, string | undefined, z.core.$ZodTypeInternals<"bytes" | "percentages" | undefined, string | undefined>>;
25
- }, z.core.$strip>;
26
- /** The query this endpoint accepts, checked against the schema above. */
27
- type TopLangsApiQuery = ApiQuery<typeof topLangsQuery>;
28
- /**
29
- * Render the top languages card for a set of query params.
30
- *
31
- * @returns The rendered card, or a rendered error.
32
- */
33
- declare const renderTopLangs: (query: TopLangsApiQuery, config: CardConfig) => Promise<ApiResult>;
34
- /**
35
- * The card, with the values its enum params accept.
36
- * A UI reads them off the function it calls, e.g. `topLangs.LAYOUTS`.
37
- */
38
- export declare const topLangs: typeof renderTopLangs & {
39
- LAYOUTS: readonly ["compact", "normal", "donut", "donut-vertical", "pie"];
40
- STATS_FORMATS: readonly ["percentages", "bytes"];
25
+ }, z.core.$strip>>, config: import("./index.ts").CardConfig) => Promise<import("./api-result.ts").ApiResult>) & {
26
+ OPTIONS: {
27
+ layout: readonly ["compact", "normal", "donut", "donut-vertical", "pie"];
28
+ stats_format: readonly ["percentages", "bytes"];
29
+ role: import("../graphql/generated/common.ts").RepositoryAffiliation[];
30
+ };
41
31
  };
42
- export {};
43
32
  //# sourceMappingURL=top-langs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"top-langs.d.ts","sourceRoot":"","sources":["../../src/api/top-langs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAO9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAc5C,kFAAkF;AAClF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;iBAmBjB,CAAC;AAEH,yEAAyE;AACzE,KAAK,gBAAgB,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAEvD;;;;GAIG;AACH,QAAA,MAAM,cAAc,UAAiB,gBAAgB,UAAU,UAAU,KAAG,OAAO,CAAC,SAAS,CAgE5F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;CAGnB,CAAC"}
1
+ {"version":3,"file":"top-langs.d.ts","sourceRoot":"","sources":["../../src/api/top-langs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAqG9B;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;CAEnB,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import * as z from 'zod/mini';
2
- import { TOP_LANG_LAYOUTS, TOP_LANG_STATS_FORMATS, renderTopLanguages, } from '../cards/top-languages.js';
2
+ import { renderTopLanguages } from '../cards/top-languages.js';
3
+ import { OWNER_AFFILIATIONS } from '../common/constants.js';
3
4
  import { fetchTopLanguages } from '../fetchers/top-languages.js';
4
- import { errorResult } from './api-result.js';
5
- import { booleanParam, enumParam, listParam, localeParam, looseIntParam, numberParam, parseColorParams, parseParams, rawParam, usernameParam, } from './params.js';
5
+ import { cardHandler } from './handler.js';
6
+ import { booleanParam, enumParam, listParam, localeParam, looseIntParam, numberParam, rawParam, usernameParam, } from './params.js';
6
7
  /** What the top-languages endpoint accepts, on top of the shared color params. */
7
8
  const topLangsQuery = z.object({
8
9
  username: usernameParam,
@@ -10,7 +11,7 @@ const topLangsQuery = z.object({
10
11
  hide_title: booleanParam,
11
12
  hide_border: booleanParam,
12
13
  card_width: looseIntParam,
13
- layout: enumParam(TOP_LANG_LAYOUTS),
14
+ layout: enumParam(renderTopLanguages.OPTIONS.layout),
14
15
  langs_count: looseIntParam,
15
16
  exclude_repo: listParam,
16
17
  size_weight: numberParam,
@@ -22,60 +23,42 @@ const topLangsQuery = z.object({
22
23
  disable_animations: booleanParam,
23
24
  hide_progress: booleanParam,
24
25
  hide_values: booleanParam,
25
- stats_format: enumParam(TOP_LANG_STATS_FORMATS),
26
+ stats_format: enumParam(renderTopLanguages.OPTIONS.stats_format),
26
27
  });
27
28
  /**
28
29
  * Render the top languages card for a set of query params.
29
30
  *
30
31
  * @returns The rendered card, or a rendered error.
31
32
  */
32
- const renderTopLangs = async (query, config) => {
33
- let colors;
34
- try {
35
- colors = parseColorParams(query);
36
- }
37
- catch (error) {
38
- // A rejected color cannot be used to draw its own error card.
39
- return errorResult(error);
40
- }
41
- try {
42
- const { username, hide, hide_title, hide_border, card_width, layout, langs_count, exclude_repo, size_weight, count_weight, custom_title, locale, border_radius, role, disable_animations, hide_progress, hide_values, stats_format, } = parseParams(topLangsQuery, query);
43
- const topLangs = await fetchTopLanguages({
44
- username,
45
- exclude_repo,
46
- size_weight,
47
- count_weight,
48
- ownerAffiliations: role,
49
- }, config);
50
- return {
51
- status: 'success',
52
- content: renderTopLanguages(topLangs, {
53
- ...colors,
54
- custom_title,
55
- hide_title,
56
- hide_border,
57
- card_width,
58
- hide,
59
- layout,
60
- langs_count,
61
- border_radius,
62
- locale,
63
- disable_animations,
64
- hide_progress,
65
- hide_values,
66
- stats_format,
67
- }),
68
- };
69
- }
70
- catch (error) {
71
- return errorResult(error, colors);
72
- }
73
- };
33
+ const renderTopLangs = cardHandler(topLangsQuery, async ({ username, hide, hide_title, hide_border, card_width, layout, langs_count, exclude_repo, size_weight, count_weight, custom_title, locale, border_radius, role, disable_animations, hide_progress, hide_values, stats_format, }, colors, config) => {
34
+ const topLangs = await fetchTopLanguages({
35
+ username,
36
+ exclude_repo,
37
+ size_weight,
38
+ count_weight,
39
+ ownerAffiliations: role,
40
+ }, config);
41
+ return renderTopLanguages(topLangs, {
42
+ ...colors,
43
+ custom_title,
44
+ hide_title,
45
+ hide_border,
46
+ card_width,
47
+ hide,
48
+ layout,
49
+ langs_count,
50
+ border_radius,
51
+ locale,
52
+ disable_animations,
53
+ hide_progress,
54
+ hide_values,
55
+ stats_format,
56
+ });
57
+ });
74
58
  /**
75
- * The card, with the values its enum params accept.
76
- * A UI reads them off the function it calls, e.g. `topLangs.LAYOUTS`.
59
+ * The card, and the values each of its options accepts, keyed by the option's own name.
60
+ * A UI reads them off the function it calls: `topLangs.OPTIONS.layout`.
77
61
  */
78
62
  export const topLangs = Object.assign(renderTopLangs, {
79
- LAYOUTS: TOP_LANG_LAYOUTS,
80
- STATS_FORMATS: TOP_LANG_STATS_FORMATS,
63
+ OPTIONS: { ...renderTopLanguages.OPTIONS, role: OWNER_AFFILIATIONS },
81
64
  });
@@ -1,9 +1,9 @@
1
1
  import * as z from 'zod/mini';
2
- import type { CardConfig } from '../common/config.ts';
3
- import type { ApiResult } from './api-result.ts';
4
- import type { ApiQuery } from './params.ts';
5
- /** What the wakatime endpoint accepts, on top of the shared color params. */
6
- declare const wakatimeQuery: z.ZodMiniObject<{
2
+ /**
3
+ * The card, and the values each of its options accepts, keyed by the option's own name.
4
+ * A UI reads them off the function it calls: `wakatime.OPTIONS.layout`.
5
+ */
6
+ export declare const wakatime: ((query: import("./params.ts").ApiQuery<z.ZodMiniObject<{
7
7
  username: z.ZodMiniType<string | undefined, string | undefined, z.core.$ZodTypeInternals<string | undefined, string | undefined>>;
8
8
  hide_border: z.ZodMiniPipe<z.ZodMiniOptional<z.ZodMiniString<string>>, z.ZodMiniTransform<boolean | undefined, string | undefined>>;
9
9
  card_width: z.ZodMiniPipe<z.ZodMiniOptional<z.ZodMiniString<string>>, z.ZodMiniTransform<number | undefined, string | undefined>>;
@@ -19,24 +19,10 @@ declare const wakatimeQuery: z.ZodMiniObject<{
19
19
  border_radius: z.ZodMiniType<number | undefined, string | undefined, z.core.$ZodTypeInternals<number | undefined, string | undefined>>;
20
20
  display_format: z.ZodMiniType<"percent" | "time" | undefined, string | undefined, z.core.$ZodTypeInternals<"percent" | "time" | undefined, string | undefined>>;
21
21
  disable_animations: z.ZodMiniPipe<z.ZodMiniOptional<z.ZodMiniString<string>>, z.ZodMiniTransform<boolean | undefined, string | undefined>>;
22
- }, z.core.$strip>;
23
- /** The query this endpoint accepts, checked against the schema above. */
24
- type WakatimeApiQuery = ApiQuery<typeof wakatimeQuery>;
25
- /**
26
- * Render the WakaTime card for a set of query params.
27
- *
28
- * WakaTime needs no GitHub token, so the config is read only for the transport it carries.
29
- *
30
- * @returns The rendered card, or a rendered error.
31
- */
32
- declare const renderWakatime: (query: WakatimeApiQuery, config: CardConfig) => Promise<ApiResult>;
33
- /**
34
- * The card, with the values its enum params accept.
35
- * A UI reads them off the function it calls, e.g. `wakatime.LAYOUTS`.
36
- */
37
- export declare const wakatime: typeof renderWakatime & {
38
- LAYOUTS: readonly ["compact", "normal"];
39
- DISPLAY_FORMATS: readonly ["time", "percent"];
22
+ }, z.core.$strip>>, config: import("./index.ts").CardConfig) => Promise<import("./api-result.ts").ApiResult>) & {
23
+ OPTIONS: {
24
+ layout: readonly ["compact", "normal"];
25
+ display_format: readonly ["time", "percent"];
26
+ };
40
27
  };
41
- export {};
42
28
  //# sourceMappingURL=wakatime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wakatime.d.ts","sourceRoot":"","sources":["../../src/api/wakatime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAG9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAc5C,6EAA6E;AAC7E,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;iBAgBjB,CAAC;AAEH,yEAAyE;AACzE,KAAK,gBAAgB,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAEvD;;;;;;GAMG;AACH,QAAA,MAAM,cAAc,UAAiB,gBAAgB,UAAU,UAAU,KAAG,OAAO,CAAC,SAAS,CAoD5F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;CAGnB,CAAC"}
1
+ {"version":3,"file":"wakatime.d.ts","sourceRoot":"","sources":["../../src/api/wakatime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAuF9B;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;CAAyE,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import * as z from 'zod/mini';
2
- import { DISPLAY_FORMATS, WAKATIME_LAYOUTS, renderWakatimeCard } from '../cards/wakatime.js';
2
+ import { renderWakatimeCard } from '../cards/wakatime.js';
3
3
  import { fetchWakatimeStats } from '../fetchers/wakatime.js';
4
- import { errorResult } from './api-result.js';
5
- import { booleanParam, enumParam, listParam, localeParam, looseIntParam, numberParam, parseColorParams, parseParams, rawParam, safeParam, } from './params.js';
4
+ import { cardHandler } from './handler.js';
5
+ import { booleanParam, enumParam, listParam, localeParam, looseIntParam, numberParam, rawParam, safeParam, } from './params.js';
6
6
  /** What the wakatime endpoint accepts, on top of the shared color params. */
7
7
  const wakatimeQuery = z.object({
8
8
  username: safeParam,
@@ -13,12 +13,12 @@ const wakatimeQuery = z.object({
13
13
  hide_progress: booleanParam,
14
14
  custom_title: rawParam,
15
15
  locale: localeParam,
16
- layout: enumParam(WAKATIME_LAYOUTS),
16
+ layout: enumParam(renderWakatimeCard.OPTIONS.layout),
17
17
  langs_count: looseIntParam,
18
18
  hide: listParam,
19
19
  api_domain: rawParam,
20
20
  border_radius: numberParam,
21
- display_format: enumParam(DISPLAY_FORMATS),
21
+ display_format: enumParam(renderWakatimeCard.OPTIONS.display_format),
22
22
  disable_animations: booleanParam,
23
23
  });
24
24
  /**
@@ -28,47 +28,27 @@ const wakatimeQuery = z.object({
28
28
  *
29
29
  * @returns The rendered card, or a rendered error.
30
30
  */
31
- const renderWakatime = async (query, config) => {
32
- let colors;
33
- try {
34
- colors = parseColorParams(query);
35
- }
36
- catch (error) {
37
- // A rejected color cannot be used to draw its own error card.
38
- return errorResult(error);
39
- }
40
- try {
41
- const { username, hide_border, card_width, line_height, hide_title, hide_progress, custom_title, locale, layout, langs_count, hide, api_domain, border_radius, display_format, disable_animations, } = parseParams(wakatimeQuery, query);
42
- const stats = await fetchWakatimeStats({ username, api_domain }, config);
43
- return {
44
- status: 'success',
45
- content: renderWakatimeCard(stats, {
46
- ...colors,
47
- custom_title,
48
- hide_title,
49
- hide_border,
50
- card_width,
51
- hide,
52
- line_height,
53
- hide_progress,
54
- border_radius,
55
- locale,
56
- layout,
57
- langs_count,
58
- display_format,
59
- disable_animations,
60
- }),
61
- };
62
- }
63
- catch (error) {
64
- return errorResult(error, colors);
65
- }
66
- };
31
+ const renderWakatime = cardHandler(wakatimeQuery, async ({ username, hide_border, card_width, line_height, hide_title, hide_progress, custom_title, locale, layout, langs_count, hide, api_domain, border_radius, display_format, disable_animations, }, colors, config) => {
32
+ const stats = await fetchWakatimeStats({ username, api_domain }, config);
33
+ return renderWakatimeCard(stats, {
34
+ ...colors,
35
+ custom_title,
36
+ hide_title,
37
+ hide_border,
38
+ card_width,
39
+ hide,
40
+ line_height,
41
+ hide_progress,
42
+ border_radius,
43
+ locale,
44
+ layout,
45
+ langs_count,
46
+ display_format,
47
+ disable_animations,
48
+ });
49
+ });
67
50
  /**
68
- * The card, with the values its enum params accept.
69
- * A UI reads them off the function it calls, e.g. `wakatime.LAYOUTS`.
51
+ * The card, and the values each of its options accepts, keyed by the option's own name.
52
+ * A UI reads them off the function it calls: `wakatime.OPTIONS.layout`.
70
53
  */
71
- export const wakatime = Object.assign(renderWakatime, {
72
- LAYOUTS: WAKATIME_LAYOUTS,
73
- DISPLAY_FORMATS,
74
- });
54
+ export const wakatime = Object.assign(renderWakatime, { OPTIONS: renderWakatimeCard.OPTIONS });
@@ -0,0 +1,19 @@
1
+ import type { ContributedToData } from '../fetchers/types.ts';
2
+ import type { CardOptions, CommonCardOptions } from './options.ts';
3
+ declare const MIN_CARD_WIDTH = 340;
4
+ interface ContributedToCardOptions extends CommonCardOptions {
5
+ locale: string;
6
+ hide_title: boolean;
7
+ card_width: number;
8
+ custom_title: string;
9
+ disable_animations: boolean;
10
+ hide_years: boolean;
11
+ }
12
+ /**
13
+ * Renders the repositories a user contributed to, ranked by contributions.
14
+ *
15
+ * @returns Contributed-to card SVG string.
16
+ */
17
+ declare const renderContributedToCard: (data: ContributedToData, options?: CardOptions<ContributedToCardOptions>) => string;
18
+ export { renderContributedToCard, MIN_CARD_WIDTH };
19
+ //# sourceMappingURL=contributed-to.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contributed-to.d.ts","sourceRoot":"","sources":["../../src/cards/contributed-to.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAK/E,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGnE,QAAA,MAAM,cAAc,MAAM,CAAC;AA8B3B,UAAU,wBAAyB,SAAQ,iBAAiB;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;CACrB;AAmKD;;;;GAIG;AACH,QAAA,MAAM,uBAAuB,SACrB,iBAAiB,YACd,WAAW,CAAC,wBAAwB,CAAC,KAC7C,MAkJF,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,CAAC"}