@stats-forge/github-stats-forge-core 0.3.0 → 0.5.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 (134) hide show
  1. package/build/api/contributed-to.js +1 -1
  2. package/build/api/gist.js +1 -1
  3. package/build/api/index.d.ts +1 -0
  4. package/build/api/index.d.ts.map +1 -1
  5. package/build/api/index.js +1 -0
  6. package/build/api/organization.d.ts +29 -0
  7. package/build/api/organization.d.ts.map +1 -0
  8. package/build/api/organization.js +53 -0
  9. package/build/api/params.js +1 -1
  10. package/build/api/pin.js +1 -1
  11. package/build/api/stats.js +1 -1
  12. package/build/api/top-langs.js +1 -1
  13. package/build/api/wakatime.js +1 -1
  14. package/build/cards/{contributed-to.d.ts → contributed-to/index.d.ts} +3 -3
  15. package/build/cards/contributed-to/index.d.ts.map +1 -0
  16. package/build/cards/{contributed-to.js → contributed-to/index.js} +31 -30
  17. package/build/cards/contributed-to/locales.d.ts +38 -0
  18. package/build/cards/contributed-to/locales.d.ts.map +1 -0
  19. package/build/cards/contributed-to/locales.js +39 -0
  20. package/build/cards/{gist.d.ts → gist/index.d.ts} +3 -3
  21. package/build/cards/gist/index.d.ts.map +1 -0
  22. package/build/cards/{gist.js → gist/index.js} +20 -15
  23. package/build/cards/gist/locales.d.ts +14 -0
  24. package/build/cards/gist/locales.d.ts.map +1 -0
  25. package/build/cards/gist/locales.js +15 -0
  26. package/build/cards/organization/index.d.ts +36 -0
  27. package/build/cards/organization/index.d.ts.map +1 -0
  28. package/build/cards/organization/index.js +226 -0
  29. package/build/cards/organization/locales.d.ts +47 -0
  30. package/build/cards/organization/locales.d.ts.map +1 -0
  31. package/build/cards/organization/locales.js +47 -0
  32. package/build/cards/{repo.d.ts → repo/index.d.ts} +3 -3
  33. package/build/cards/repo/index.d.ts.map +1 -0
  34. package/build/cards/{repo.js → repo/index.js} +20 -23
  35. package/build/cards/repo/locales.d.ts +129 -0
  36. package/build/cards/repo/locales.d.ts.map +1 -0
  37. package/build/cards/repo/locales.js +129 -0
  38. package/build/cards/{stats.d.ts → stats/index.d.ts} +3 -3
  39. package/build/cards/stats/index.d.ts.map +1 -0
  40. package/build/cards/{stats.js → stats/index.js} +38 -42
  41. package/build/cards/stats/locales.d.ts +621 -0
  42. package/build/cards/stats/locales.d.ts.map +1 -0
  43. package/build/cards/stats/locales.js +623 -0
  44. package/build/cards/{top-languages.d.ts → top-languages/index.d.ts} +3 -3
  45. package/build/cards/top-languages/index.d.ts.map +1 -0
  46. package/build/cards/{top-languages.js → top-languages/index.js} +13 -16
  47. package/build/cards/top-languages/locales.d.ts +103 -0
  48. package/build/cards/top-languages/locales.d.ts.map +1 -0
  49. package/build/cards/top-languages/locales.js +103 -0
  50. package/build/cards/{wakatime.d.ts → wakatime/index.d.ts} +3 -3
  51. package/build/cards/wakatime/index.d.ts.map +1 -0
  52. package/build/cards/{wakatime.js → wakatime/index.js} +22 -23
  53. package/build/cards/wakatime/locales.d.ts +250 -0
  54. package/build/cards/wakatime/locales.d.ts.map +1 -0
  55. package/build/cards/wakatime/locales.js +250 -0
  56. package/build/common/brand.d.ts +1 -0
  57. package/build/common/brand.d.ts.map +1 -1
  58. package/build/common/brand.js +1 -0
  59. package/build/common/error.d.ts +3 -1
  60. package/build/common/error.d.ts.map +1 -1
  61. package/build/common/error.js +3 -1
  62. package/build/common/http.d.ts +2 -0
  63. package/build/common/http.d.ts.map +1 -1
  64. package/build/common/icons.d.ts +5 -0
  65. package/build/common/icons.d.ts.map +1 -1
  66. package/build/common/icons.js +19 -4
  67. package/build/common/languageColors.json +2 -0
  68. package/build/common/locales.d.ts +59 -0
  69. package/build/common/locales.d.ts.map +1 -0
  70. package/build/common/locales.js +59 -0
  71. package/build/common/localize.d.ts +60 -0
  72. package/build/common/localize.d.ts.map +1 -0
  73. package/build/common/localize.js +163 -0
  74. package/build/fetchers/index.d.ts +2 -1
  75. package/build/fetchers/index.d.ts.map +1 -1
  76. package/build/fetchers/index.js +1 -0
  77. package/build/fetchers/organization.d.ts +15 -0
  78. package/build/fetchers/organization.d.ts.map +1 -0
  79. package/build/fetchers/organization.js +130 -0
  80. package/build/fetchers/types.d.ts +39 -0
  81. package/build/fetchers/types.d.ts.map +1 -1
  82. package/build/graphql/generated/organization.d.ts +88 -0
  83. package/build/graphql/generated/organization.d.ts.map +1 -0
  84. package/build/graphql/generated/organization.js +59 -0
  85. package/package.json +1 -1
  86. package/src/api/contributed-to.ts +1 -1
  87. package/src/api/gist.ts +1 -1
  88. package/src/api/index.ts +1 -0
  89. package/src/api/organization.ts +90 -0
  90. package/src/api/params.ts +1 -1
  91. package/src/api/pin.ts +1 -1
  92. package/src/api/stats.ts +1 -1
  93. package/src/api/top-langs.ts +1 -1
  94. package/src/api/wakatime.ts +1 -1
  95. package/src/cards/{contributed-to.ts → contributed-to/index.ts} +42 -39
  96. package/src/cards/contributed-to/locales.ts +41 -0
  97. package/src/cards/{gist.ts → gist/index.ts} +23 -20
  98. package/src/cards/gist/locales.ts +17 -0
  99. package/src/cards/organization/index.ts +359 -0
  100. package/src/cards/organization/locales.ts +49 -0
  101. package/src/cards/{repo.ts → repo/index.ts} +23 -26
  102. package/src/cards/repo/locales.ts +131 -0
  103. package/src/cards/{stats.ts → stats/index.ts} +48 -56
  104. package/src/cards/stats/locales.ts +625 -0
  105. package/src/cards/{top-languages.ts → top-languages/index.ts} +17 -20
  106. package/src/cards/top-languages/locales.ts +105 -0
  107. package/src/cards/{wakatime.ts → wakatime/index.ts} +26 -27
  108. package/src/cards/wakatime/locales.ts +252 -0
  109. package/src/common/brand.ts +1 -0
  110. package/src/common/error.ts +4 -0
  111. package/src/common/http.ts +6 -1
  112. package/src/common/icons.ts +20 -4
  113. package/src/common/languageColors.json +2 -0
  114. package/src/common/locales.ts +61 -0
  115. package/src/common/localize.ts +251 -0
  116. package/src/fetchers/index.ts +2 -0
  117. package/src/fetchers/organization.ts +172 -0
  118. package/src/fetchers/types.ts +37 -0
  119. package/src/graphql/generated/organization.ts +109 -0
  120. package/src/graphql/queries/organization.graphql +57 -0
  121. package/build/cards/contributed-to.d.ts.map +0 -1
  122. package/build/cards/gist.d.ts.map +0 -1
  123. package/build/cards/repo.d.ts.map +0 -1
  124. package/build/cards/stats.d.ts.map +0 -1
  125. package/build/cards/top-languages.d.ts.map +0 -1
  126. package/build/cards/wakatime.d.ts.map +0 -1
  127. package/build/common/I18n.d.ts +0 -21
  128. package/build/common/I18n.d.ts.map +0 -1
  129. package/build/common/I18n.js +0 -34
  130. package/build/translations.d.ts +0 -1212
  131. package/build/translations.d.ts.map +0 -1
  132. package/build/translations.js +0 -1213
  133. package/src/common/I18n.ts +0 -50
  134. package/src/translations.ts +0 -1239
@@ -5,23 +5,25 @@ import {
5
5
  FONT_WEIGHT,
6
6
  firefoxFontSize,
7
7
  font,
8
- } from '../common/brand.ts';
9
- import { Card } from '../common/Card.ts';
10
- import { getLightDarkColors } from '../common/color.ts';
11
- import type { CardColors } from '../common/color.ts';
12
- import type { GitHubDateRange } from '../common/date.ts';
13
- import { formatRange } from '../common/date.ts';
14
- import { CardError } from '../common/error.ts';
15
- import { I18n } from '../common/I18n.ts';
16
- import { icons, rankIcon } from '../common/icons.ts';
17
- import { buildSearchFilter, clampValue } from '../common/ops.ts';
18
- import { NUMBER_FORMATS, createTextNode, flexLayout, measureText } from '../common/render.ts';
19
- import type { StatsData } from '../fetchers/types.ts';
20
- import type { Child, CssChild } from '../markup/index.ts';
21
- import { atRule, cssComment, el, rule } from '../markup/index.ts';
22
- import { statCardLocales, wakatimeCardLocales } from '../translations.ts';
23
-
24
- import type { CardOptions, CommonCardOptions } from './options.ts';
8
+ } from '../../common/brand.ts';
9
+ import { Card } from '../../common/Card.ts';
10
+ import { getLightDarkColors } from '../../common/color.ts';
11
+ import type { CardColors } from '../../common/color.ts';
12
+ import type { GitHubDateRange } from '../../common/date.ts';
13
+ import { formatRange } from '../../common/date.ts';
14
+ import { CardError } from '../../common/error.ts';
15
+ import { icons, rankIcon } from '../../common/icons.ts';
16
+ import { commonLocales } from '../../common/locales.ts';
17
+ import type { Localized } from '../../common/localize.ts';
18
+ import { localize } from '../../common/localize.ts';
19
+ import { buildSearchFilter, clampValue } from '../../common/ops.ts';
20
+ import { NUMBER_FORMATS, createTextNode, flexLayout, measureText } from '../../common/render.ts';
21
+ import type { StatsData } from '../../fetchers/types.ts';
22
+ import type { Child, CssChild } from '../../markup/index.ts';
23
+ import { atRule, cssComment, el, rule } from '../../markup/index.ts';
24
+ import type { CardOptions, CommonCardOptions } from '../options.ts';
25
+
26
+ import { statCardLocales } from './locales.ts';
25
27
 
26
28
  const CARD_MIN_WIDTH = 287;
27
29
  const CARD_DEFAULT_WIDTH = CARD_WIDTH.compact;
@@ -221,13 +223,13 @@ const getStyles = ({
221
223
  const getTotalCommitsRangeLabel = (
222
224
  include_all_commits: boolean,
223
225
  commitsRange: GitHubDateRange | undefined,
224
- i18n: I18n,
226
+ commonT: Localized<typeof commonLocales>,
225
227
  ): string =>
226
228
  include_all_commits
227
229
  ? ''
228
230
  : commitsRange
229
231
  ? ` (${formatRange(commitsRange)})`
230
- : ` (${i18n.t('wakatimecard.lastyear')})`;
232
+ : ` (${commonT.lastYear()})`;
231
233
 
232
234
  /**
233
235
  * Renders the stats card.
@@ -291,19 +293,14 @@ const renderCard = (
291
293
  const shows = (stat: ShowStat): boolean => show.includes(stat);
292
294
 
293
295
  const apostrophe = /s$/i.test(name.trim()) ? '' : 's';
294
- const i18n = new I18n({
295
- locale,
296
- translations: {
297
- ...statCardLocales({ name, apostrophe }),
298
- ...wakatimeCardLocales,
299
- },
300
- });
296
+ const t = localize(statCardLocales, locale);
297
+ const commonT = localize(commonLocales, locale);
301
298
 
302
299
  // Meta data for creating text nodes with createTextNode function
303
300
  const STATS: Partial<Record<StatId, StatItem>> = {
304
301
  stars: {
305
302
  icon: icons.star,
306
- label: i18n.t('statcard.totalstars'),
303
+ label: t.totalStars(),
307
304
  value: totalStars,
308
305
  id: 'stars',
309
306
  },
@@ -312,7 +309,7 @@ const renderCard = (
312
309
  if (shows('contributions')) {
313
310
  STATS['contributions'] = {
314
311
  icon: icons.contributions,
315
- label: i18n.t('statcard.contributions'),
312
+ label: t.contributions(),
316
313
  value: totalContributions,
317
314
  id: 'contributions',
318
315
  };
@@ -320,17 +317,13 @@ const renderCard = (
320
317
 
321
318
  STATS['commits'] = {
322
319
  icon: icons.commits,
323
- label: `${i18n.t('statcard.commits')}${getTotalCommitsRangeLabel(
324
- include_all_commits,
325
- commitsRange,
326
- i18n,
327
- )}`,
320
+ label: `${t.commits()}${getTotalCommitsRangeLabel(include_all_commits, commitsRange, commonT)}`,
328
321
  value: totalCommits,
329
322
  id: 'commits',
330
323
  };
331
324
  STATS['prs'] = {
332
325
  icon: icons.prs,
333
- label: i18n.t('statcard.prs'),
326
+ label: t.prs(),
334
327
  value: totalPRs,
335
328
  id: 'prs',
336
329
  };
@@ -338,7 +331,7 @@ const renderCard = (
338
331
  if (shows('prs_merged')) {
339
332
  STATS['prs_merged'] = {
340
333
  icon: icons.prs_merged,
341
- label: i18n.t('statcard.prs-merged'),
334
+ label: t.prsMerged(),
342
335
  value: totalPRsMerged,
343
336
  id: 'prs_merged',
344
337
  };
@@ -347,7 +340,7 @@ const renderCard = (
347
340
  if (shows('prs_merged_percentage')) {
348
341
  STATS['prs_merged_percentage'] = {
349
342
  icon: icons.prs_merged_percentage,
350
- label: i18n.t('statcard.prs-merged-percentage'),
343
+ label: t.prsMergedPercentage(),
351
344
  value: mergedPRsPercentage.toFixed(
352
345
  number_precision !== undefined && Number.isFinite(number_precision)
353
346
  ? clampValue(number_precision, 0, 2)
@@ -361,7 +354,7 @@ const renderCard = (
361
354
  if (shows('reviews')) {
362
355
  STATS['reviews'] = {
363
356
  icon: icons.reviews,
364
- label: i18n.t('statcard.reviews'),
357
+ label: t.reviews(),
365
358
  value: totalReviews,
366
359
  id: 'reviews',
367
360
  };
@@ -369,7 +362,7 @@ const renderCard = (
369
362
 
370
363
  STATS['issues'] = {
371
364
  icon: icons.issues,
372
- label: i18n.t('statcard.issues'),
365
+ label: t.issues(),
373
366
  value: totalIssues,
374
367
  id: 'issues',
375
368
  };
@@ -377,7 +370,7 @@ const renderCard = (
377
370
  if (shows('discussions_started')) {
378
371
  STATS['discussions_started'] = {
379
372
  icon: icons.discussions_started,
380
- label: i18n.t('statcard.discussions-started'),
373
+ label: t.discussionsStarted(),
381
374
  value: totalDiscussionsStarted,
382
375
  id: 'discussions_started',
383
376
  };
@@ -385,7 +378,7 @@ const renderCard = (
385
378
  if (shows('discussions_answered')) {
386
379
  STATS['discussions_answered'] = {
387
380
  icon: icons.discussions_answered,
388
- label: i18n.t('statcard.discussions-answered'),
381
+ label: t.discussionsAnswered(),
389
382
  value: totalDiscussionsAnswered,
390
383
  id: 'discussions_answered',
391
384
  };
@@ -396,7 +389,7 @@ const renderCard = (
396
389
  if (shows('prs_authored')) {
397
390
  STATS['prs_authored'] = {
398
391
  icon: icons.prs,
399
- label: i18n.t('statcard.prs-authored'),
392
+ label: t.prsAuthored(),
400
393
  value: totalPRsAuthored,
401
394
  id: 'prs_authored',
402
395
  link: `https://github.com/search?q=${repoFilter}author%3A${encodedUsername}&amp;type=pullrequests`,
@@ -405,7 +398,7 @@ const renderCard = (
405
398
  if (shows('prs_commented')) {
406
399
  STATS['prs_commented'] = {
407
400
  icon: icons.comments,
408
- label: i18n.t('statcard.prs-commented'),
401
+ label: t.prsCommented(),
409
402
  value: totalPRsCommented,
410
403
  id: 'prs_commented',
411
404
  link: `https://github.com/search?q=${repoFilter}commenter%3A${encodedUsername}+-author%3A${encodedUsername}&amp;type=pullrequests`,
@@ -414,7 +407,7 @@ const renderCard = (
414
407
  if (shows('prs_reviewed')) {
415
408
  STATS['prs_reviewed'] = {
416
409
  icon: icons.reviews,
417
- label: i18n.t('statcard.prs-reviewed'),
410
+ label: t.prsReviewed(),
418
411
  value: totalPRsReviewed,
419
412
  id: 'prs_reviewed',
420
413
  link: `https://github.com/search?q=${repoFilter}reviewed-by%3A${encodedUsername}+-author%3A${encodedUsername}&amp;type=pullrequests`,
@@ -423,7 +416,7 @@ const renderCard = (
423
416
  if (shows('issues_authored')) {
424
417
  STATS['issues_authored'] = {
425
418
  icon: icons.issues,
426
- label: i18n.t('statcard.issues-authored'),
419
+ label: t.issuesAuthored(),
427
420
  value: totalIssuesAuthored,
428
421
  id: 'issues_authored',
429
422
  link: `https://github.com/search?q=${repoFilter}author%3A${encodedUsername}&amp;type=issues`,
@@ -432,7 +425,7 @@ const renderCard = (
432
425
  if (shows('issues_commented')) {
433
426
  STATS['issues_commented'] = {
434
427
  icon: icons.discussions_started,
435
- label: i18n.t('statcard.issues-commented'),
428
+ label: t.issuesCommented(),
436
429
  value: totalIssuesCommented,
437
430
  id: 'issues_commented',
438
431
  link: `https://github.com/search?q=${repoFilter}commenter%3A${encodedUsername}+-author%3A${encodedUsername}&amp;type=issues`,
@@ -441,7 +434,7 @@ const renderCard = (
441
434
 
442
435
  STATS['contribs'] = {
443
436
  icon: icons.repo,
444
- label: i18n.t('statcard.contribs'),
437
+ label: t.contribs(),
445
438
  value: contributedTo,
446
439
  id: 'contribs',
447
440
  };
@@ -449,7 +442,7 @@ const renderCard = (
449
442
  if (shows('all_time_contribs')) {
450
443
  STATS['all_time_contribs'] = {
451
444
  icon: icons.repo,
452
- label: i18n.t('statcard.all-time-contribs'),
445
+ label: t.allTimeContribs(),
453
446
  value: allTimeContributedTo,
454
447
  id: 'all_time_contribs',
455
448
  };
@@ -468,6 +461,9 @@ const renderCard = (
468
461
  }
469
462
 
470
463
  // check if all used labels are short
464
+ const defaultTitle =
465
+ visibleStats.length > 0 ? t.title({ name, apostrophe }) : t.rankTitle({ name, apostrophe });
466
+
471
467
  const longLabels = visibleStats.some(([, stat]) => stat.label.length > 18);
472
468
 
473
469
  // The rank ring sets the floor: 150 beside the stats, 180 when it is the whole card.
@@ -479,11 +475,7 @@ const renderCard = (
479
475
  // the lower the user's percentile the better
480
476
  const progress = 100 - rank.percentile;
481
477
 
482
- const calculateTextWidth = (): number =>
483
- measureText(
484
- custom_title ||
485
- (visibleStats.length > 0 ? i18n.t('statcard.title') : i18n.t('statcard.ranktitle')),
486
- );
478
+ const calculateTextWidth = (): number => measureText(custom_title || defaultTitle);
487
479
 
488
480
  const iconWidth = show_icons && visibleStats.length > 0 ? 16 + /* padding */ 1 : 0;
489
481
  // The icons ride inside the step's own slack, so a default card lands on the width grid;
@@ -539,7 +531,7 @@ const renderCard = (
539
531
 
540
532
  const card = new Card({
541
533
  customTitle: custom_title,
542
- defaultTitle: visibleStats.length > 0 ? i18n.t('statcard.title') : i18n.t('statcard.ranktitle'),
534
+ defaultTitle,
543
535
  titlePrefixIcon: CARD_ICON.stats,
544
536
  width,
545
537
  height,
@@ -587,10 +579,10 @@ const renderCard = (
587
579
  const labels = visibleStats
588
580
  .map(([key, stat]) => {
589
581
  if (key === 'commits') {
590
- return `${i18n.t('statcard.commits')} ${getTotalCommitsRangeLabel(
582
+ return `${t.commits()} ${getTotalCommitsRangeLabel(
591
583
  include_all_commits,
592
584
  commitsRange,
593
- i18n,
585
+ commonT,
594
586
  )} : ${stat.value}`;
595
587
  }
596
588
  return `${stat.label}: ${stat.value}`;
@@ -598,7 +590,7 @@ const renderCard = (
598
590
  .join(', ');
599
591
 
600
592
  card.setAccessibilityLabel({
601
- title: `${card.title}, ${i18n.t('statcard.rank')}: ${rank.level}`,
593
+ title: t.accessibilityTitle({ title: card.title, level: rank.level }),
602
594
  desc: labels,
603
595
  });
604
596