maidraw 0.9.4 → 0.10.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 (167) hide show
  1. package/assets/themes/chunithm/best/luminousLandscape/new/manifest.json +58 -32
  2. package/assets/themes/chunithm/best/luminousLandscape/recents/manifest.json +57 -31
  3. package/assets/themes/chunithm/best/luminousPlusLandscape/new/manifest.json +57 -31
  4. package/assets/themes/chunithm/best/luminousPlusLandscape/recents/manifest.json +57 -31
  5. package/assets/themes/chunithm/best/verseLandscape/new/manifest.json +57 -31
  6. package/assets/themes/chunithm/best/verseLandscape/recents/manifest.json +57 -31
  7. package/assets/themes/chunithm/chart/jp/verse/manifest.json +73 -71
  8. package/assets/themes/maimai/best50/cn/2024Landscape/manifest.json +90 -54
  9. package/assets/themes/maimai/best50/cn/2024Portrait/manifest.json +89 -53
  10. package/assets/themes/maimai/best50/cn/2025Landscape/manifest.json +90 -54
  11. package/assets/themes/maimai/best50/cn/2025Portrait/manifest.json +89 -53
  12. package/assets/themes/maimai/best50/common/prism/plus/background.png +0 -0
  13. package/assets/themes/maimai/best50/jp/buddiesLandscape/manifest.json +89 -53
  14. package/assets/themes/maimai/best50/jp/buddiesPlusLandscape/manifest.json +89 -53
  15. package/assets/themes/maimai/best50/jp/buddiesPlusPortrait/manifest.json +89 -53
  16. package/assets/themes/maimai/best50/jp/buddiesPortrait/manifest.json +89 -53
  17. package/assets/themes/maimai/best50/jp/finaleLandscape/manifest.json +89 -53
  18. package/assets/themes/maimai/best50/jp/finalePortrait/manifest.json +89 -53
  19. package/assets/themes/maimai/best50/jp/prismLandscape/manifest.json +90 -54
  20. package/assets/themes/maimai/best50/jp/prismPlusLandscape/manifest.json +90 -54
  21. package/assets/themes/maimai/best50/jp/prismPlusPortrait/manifest.json +92 -55
  22. package/assets/themes/maimai/best50/jp/prismPortrait/manifest.json +89 -53
  23. package/assets/themes/maimai/best50/salt/2026landscape/manifest.json +89 -53
  24. package/assets/themes/maimai/chart/jp/prism/manifest.json +100 -96
  25. package/assets/themes/ongeki/jp/brightMemoryLandscape/classic/manifest.json +101 -30
  26. package/assets/themes/ongeki/jp/brightMemoryLandscape/refresh/manifest.json +78 -30
  27. package/assets/themes/ongeki/jp/refreshLandscape/classic/manifest.json +101 -2
  28. package/assets/themes/ongeki/jp/refreshLandscape/refresh/manifest.json +78 -30
  29. package/dist/chu/index.d.ts +14 -4
  30. package/dist/chu/index.js +16 -4
  31. package/dist/chu/index.js.map +1 -1
  32. package/dist/chu/lib/{index.d.ts → adapter/index.d.ts} +1 -1
  33. package/dist/chu/lib/{index.js → adapter/index.js} +1 -1
  34. package/dist/chu/lib/adapter/index.js.map +1 -0
  35. package/dist/chu/lib/{kamaiTachi → adapter/kamaiTachi}/index.d.ts +1 -1
  36. package/dist/chu/lib/{kamaiTachi → adapter/kamaiTachi}/index.js +10 -10
  37. package/dist/chu/lib/adapter/kamaiTachi/index.js.map +1 -0
  38. package/dist/chu/lib/{lxns → adapter/lxns}/index.d.ts +1 -1
  39. package/dist/chu/lib/{lxns → adapter/lxns}/index.js +4 -4
  40. package/dist/chu/lib/adapter/lxns/index.js.map +1 -0
  41. package/dist/chu/{chart → lib}/database.d.ts +3 -3
  42. package/dist/chu/{chart → lib}/database.js +2 -2
  43. package/dist/chu/lib/database.js.map +1 -0
  44. package/dist/chu/lib/util.d.ts +149 -0
  45. package/dist/chu/lib/util.js +270 -0
  46. package/dist/chu/lib/util.js.map +1 -0
  47. package/dist/chu/painter/best50/index.d.ts +120 -0
  48. package/dist/chu/painter/best50/index.js +158 -0
  49. package/dist/chu/painter/best50/index.js.map +1 -0
  50. package/dist/chu/painter/chart/index.d.ts +170 -0
  51. package/dist/chu/painter/chart/index.js +116 -0
  52. package/dist/chu/painter/chart/index.js.map +1 -0
  53. package/dist/chu/painter/index.d.ts +194 -0
  54. package/dist/chu/painter/index.js +1105 -0
  55. package/dist/chu/painter/index.js.map +1 -0
  56. package/dist/geki/index.d.ts +10 -4
  57. package/dist/geki/index.js +12 -4
  58. package/dist/geki/index.js.map +1 -1
  59. package/dist/geki/lib/adapter/index.js.map +1 -0
  60. package/dist/geki/lib/adapter/kamaiTachi/index.js.map +1 -0
  61. package/dist/geki/{chart → lib}/database.d.ts +1 -1
  62. package/dist/geki/{chart → lib}/database.js +2 -2
  63. package/dist/geki/lib/database.js.map +1 -0
  64. package/dist/geki/painter/best50/index.d.ts +122 -0
  65. package/dist/geki/painter/best50/index.js +197 -0
  66. package/dist/geki/painter/best50/index.js.map +1 -0
  67. package/dist/geki/painter/index.d.ts +88 -0
  68. package/dist/geki/painter/index.js +448 -0
  69. package/dist/geki/painter/index.js.map +1 -0
  70. package/dist/lib/cache.d.ts +1 -0
  71. package/dist/lib/cache.js +6 -1
  72. package/dist/lib/cache.js.map +1 -1
  73. package/dist/lib/painter.d.ts +100 -0
  74. package/dist/lib/painter.js +216 -0
  75. package/dist/lib/painter.js.map +1 -0
  76. package/dist/lib/util.d.ts +6 -282
  77. package/dist/lib/util.js +50 -540
  78. package/dist/lib/util.js.map +1 -1
  79. package/dist/mai/index.d.ts +22 -6
  80. package/dist/mai/index.js +24 -6
  81. package/dist/mai/index.js.map +1 -1
  82. package/dist/mai/lib/{divingFish → adapter/divingFish}/index.d.ts +6 -6
  83. package/dist/mai/lib/{divingFish → adapter/divingFish}/index.js +29 -30
  84. package/dist/mai/lib/adapter/divingFish/index.js.map +1 -0
  85. package/dist/mai/lib/{index.d.ts → adapter/index.d.ts} +11 -11
  86. package/dist/mai/lib/{index.js → adapter/index.js} +2 -2
  87. package/dist/{geki/bests/lib → mai/lib/adapter}/index.js.map +1 -1
  88. package/dist/mai/lib/{kamaiTachi → adapter/kamaiTachi}/index.d.ts +84 -42
  89. package/dist/mai/lib/{kamaiTachi → adapter/kamaiTachi}/index.js +70 -62
  90. package/dist/mai/lib/adapter/kamaiTachi/index.js.map +1 -0
  91. package/dist/mai/lib/{lxns → adapter/lxns}/index.d.ts +12 -12
  92. package/dist/mai/lib/{lxns → adapter/lxns}/index.js +29 -30
  93. package/dist/mai/lib/adapter/lxns/index.js.map +1 -0
  94. package/dist/mai/lib/{maishift → adapter/maishift}/index.d.ts +4 -4
  95. package/dist/mai/lib/{maishift → adapter/maishift}/index.js +20 -20
  96. package/dist/mai/lib/adapter/maishift/index.js.map +1 -0
  97. package/dist/mai/{chart → lib}/database.d.ts +3 -3
  98. package/dist/mai/{chart → lib}/database.js +2 -2
  99. package/dist/mai/lib/database.js.map +1 -0
  100. package/dist/mai/lib/util.d.ts +134 -0
  101. package/dist/mai/lib/util.js +264 -0
  102. package/dist/mai/lib/util.js.map +1 -0
  103. package/dist/mai/painter/best50/index.d.ts +140 -0
  104. package/dist/mai/painter/best50/index.js +176 -0
  105. package/dist/mai/painter/best50/index.js.map +1 -0
  106. package/dist/mai/painter/chart/index.d.ts +195 -0
  107. package/dist/mai/painter/chart/index.js +115 -0
  108. package/dist/mai/painter/chart/index.js.map +1 -0
  109. package/dist/mai/painter/index.d.ts +237 -0
  110. package/dist/mai/painter/index.js +1431 -0
  111. package/dist/mai/painter/index.js.map +1 -0
  112. package/dist/mai/painter/level50/index.d.ts +28 -0
  113. package/dist/mai/painter/level50/index.js +129 -0
  114. package/dist/mai/painter/level50/index.js.map +1 -0
  115. package/dist/mai/type.d.ts +110 -0
  116. package/dist/mai/type.js +73 -1
  117. package/dist/mai/type.js.map +1 -1
  118. package/package.json +56 -55
  119. package/dist/chu/bests/best50.d.ts +0 -37
  120. package/dist/chu/bests/best50.js +0 -742
  121. package/dist/chu/bests/best50.js.map +0 -1
  122. package/dist/chu/bests/index.d.ts +0 -1
  123. package/dist/chu/bests/index.js +0 -6
  124. package/dist/chu/bests/index.js.map +0 -1
  125. package/dist/chu/bests/type.d.ts +0 -122
  126. package/dist/chu/bests/type.js +0 -3
  127. package/dist/chu/bests/type.js.map +0 -1
  128. package/dist/chu/chart/database.js.map +0 -1
  129. package/dist/chu/chart/index.d.ts +0 -212
  130. package/dist/chu/chart/index.js +0 -1064
  131. package/dist/chu/chart/index.js.map +0 -1
  132. package/dist/chu/lib/index.js.map +0 -1
  133. package/dist/chu/lib/kamaiTachi/index.js.map +0 -1
  134. package/dist/chu/lib/lxns/index.js.map +0 -1
  135. package/dist/geki/bests/best50.d.ts +0 -35
  136. package/dist/geki/bests/best50.js +0 -821
  137. package/dist/geki/bests/best50.js.map +0 -1
  138. package/dist/geki/bests/index.d.ts +0 -1
  139. package/dist/geki/bests/index.js +0 -6
  140. package/dist/geki/bests/index.js.map +0 -1
  141. package/dist/geki/bests/lib/kamaiTachi/index.js.map +0 -1
  142. package/dist/geki/bests/type.d.ts +0 -122
  143. package/dist/geki/bests/type.js +0 -3
  144. package/dist/geki/bests/type.js.map +0 -1
  145. package/dist/geki/chart/database.js.map +0 -1
  146. package/dist/geki/chart/index.d.ts +0 -4
  147. package/dist/geki/chart/index.js +0 -32
  148. package/dist/geki/chart/index.js.map +0 -1
  149. package/dist/mai/best50/index.d.ts +0 -271
  150. package/dist/mai/best50/index.js +0 -915
  151. package/dist/mai/best50/index.js.map +0 -1
  152. package/dist/mai/chart/database.js.map +0 -1
  153. package/dist/mai/chart/index.d.ts +0 -238
  154. package/dist/mai/chart/index.js +0 -1281
  155. package/dist/mai/chart/index.js.map +0 -1
  156. package/dist/mai/level50/index.d.ts +0 -28
  157. package/dist/mai/level50/index.js +0 -774
  158. package/dist/mai/level50/index.js.map +0 -1
  159. package/dist/mai/lib/divingFish/index.js.map +0 -1
  160. package/dist/mai/lib/index.js.map +0 -1
  161. package/dist/mai/lib/kamaiTachi/index.js.map +0 -1
  162. package/dist/mai/lib/lxns/index.js.map +0 -1
  163. package/dist/mai/lib/maishift/index.js.map +0 -1
  164. /package/dist/geki/{bests/lib → lib/adapter}/index.d.ts +0 -0
  165. /package/dist/geki/{bests/lib → lib/adapter}/index.js +0 -0
  166. /package/dist/geki/{bests/lib → lib/adapter}/kamaiTachi/index.d.ts +0 -0
  167. /package/dist/geki/{bests/lib → lib/adapter}/kamaiTachi/index.js +0 -0
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Best50Painter = void 0;
7
+ const upath_1 = __importDefault(require("upath"));
8
+ const v4_1 = require("zod/v4");
9
+ const canvas_1 = require("canvas");
10
+ const __1 = require("..");
11
+ const util_1 = require("../../../lib/util");
12
+ const painter_1 = require("../../../lib/painter");
13
+ const database_1 = require("../../lib/database");
14
+ class Best50Painter extends __1.ChunithmPainter {
15
+ static Theme = painter_1.ThemeManager.BaseTheme.extend({
16
+ elements: v4_1.z.array(v4_1.z.discriminatedUnion("type", [
17
+ __1.ChunithmPainterModule.Profile.schema,
18
+ __1.ChunithmPainterModule.Best50.ScoreGrid.schema,
19
+ painter_1.PainterModule.Image.schema,
20
+ painter_1.PainterModule.Text.schema,
21
+ ])),
22
+ });
23
+ constructor() {
24
+ super({
25
+ theme: {
26
+ schema: Best50Painter.Theme,
27
+ searchPaths: [
28
+ upath_1.default.join(Best50Painter.assetsPath, "themes", "chunithm", "best"),
29
+ ],
30
+ defaultTheme: Best50Painter.DEFAULT_THEME,
31
+ },
32
+ });
33
+ }
34
+ static DEFAULT_THEME = "jp-verse-landscape-new";
35
+ async draw(variables, options) {
36
+ let currentTheme = this.theme.get(this.theme.defaultTheme);
37
+ if (options?.theme) {
38
+ const theme = this.theme.get(options.theme);
39
+ if (theme) {
40
+ currentTheme = theme;
41
+ }
42
+ }
43
+ if (currentTheme) {
44
+ await database_1.Database.cacheJackets([
45
+ ...variables.newScores.map((v) => v.chart.id),
46
+ ...variables.oldScores.map((v) => v.chart.id),
47
+ ]);
48
+ const canvas = new canvas_1.Canvas(currentTheme.content.width * (options?.scale ?? 1), currentTheme.content.height * (options?.scale ?? 1));
49
+ const ctx = canvas.getContext("2d");
50
+ if (options?.scale)
51
+ ctx.scale(options.scale, options.scale);
52
+ ctx.imageSmoothingEnabled = true;
53
+ for (const element of currentTheme.content.elements) {
54
+ switch (element.type) {
55
+ case "image": {
56
+ await painter_1.PainterModule.Image.draw(ctx, currentTheme, element);
57
+ break;
58
+ }
59
+ case "score-grid": {
60
+ for (let y = element.y, index = element.index, i = 0; i < element.verticalSize; ++i,
61
+ y +=
62
+ element.scoreBubble.height +
63
+ element.scoreBubble.gap) {
64
+ for (let x = element.x, j = 0; j < element.horizontalSize; ++j,
65
+ ++index,
66
+ x +=
67
+ element.scoreBubble.width +
68
+ element.scoreBubble.gap) {
69
+ let curScore;
70
+ if (element.region == "new")
71
+ curScore = variables.newScores[index];
72
+ else
73
+ curScore = variables.oldScores[index];
74
+ if (curScore) {
75
+ await __1.ChunithmPainterModule.Best50.ScoreGrid.draw(ctx, currentTheme, element, curScore, index, x, y);
76
+ }
77
+ }
78
+ }
79
+ break;
80
+ }
81
+ case "profile": {
82
+ await __1.ChunithmPainterModule.Profile.draw(ctx, currentTheme, element, variables.username, variables.rating, options?.profilePicture);
83
+ break;
84
+ }
85
+ case "text": {
86
+ function getNaiveRating(length) {
87
+ const bestScores = options?.bestScores;
88
+ if (!bestScores)
89
+ return 0;
90
+ return getRatingAvg(bestScores.slice(0, length), length);
91
+ }
92
+ function getRatingAvg(scores, length) {
93
+ if (scores.length <= 0)
94
+ return 0;
95
+ return (scores
96
+ .map((v) => v.rating)
97
+ .reduce((sum, v) => sum + v, 0) / length);
98
+ }
99
+ await painter_1.PainterModule.Text.draw(ctx, element, {
100
+ username: util_1.Util.HalfFullWidthConvert.toFullWidth(variables.username),
101
+ rating: util_1.Util.truncate(variables.rating, 2),
102
+ naiveBest30: util_1.Util.truncate(getNaiveRating(30), 2),
103
+ naiveBest50: util_1.Util.truncate(getNaiveRating(50), 2),
104
+ newScoreRatingAvg: util_1.Util.truncate(getRatingAvg(variables.newScores, options.type == "recents" ? 10 : 20), 2),
105
+ oldScoreRatingAvg: util_1.Util.truncate(getRatingAvg(variables.oldScores.slice(0, 30), 30), 2),
106
+ });
107
+ break;
108
+ }
109
+ }
110
+ }
111
+ return canvas.toBuffer();
112
+ }
113
+ else
114
+ return null;
115
+ }
116
+ async drawWithScoreSource(source, variables, options) {
117
+ if (!options.type)
118
+ options.type = "new";
119
+ const profile = await source.getPlayerInfo(variables.username, options.type);
120
+ if (!profile)
121
+ return null;
122
+ let newScores, oldScores, bestScores;
123
+ if (options.type == "new") {
124
+ const score = await source.getPlayerBest50(variables.username);
125
+ if (!score)
126
+ return null;
127
+ newScores = score.new;
128
+ oldScores = score.old;
129
+ bestScores = score.best;
130
+ }
131
+ else if (options.type == "recents") {
132
+ const score = await source.getPlayerRecent40(variables.username);
133
+ if (!score)
134
+ return null;
135
+ newScores = score.recent;
136
+ oldScores = score.best;
137
+ bestScores = score.best;
138
+ }
139
+ else
140
+ return null;
141
+ return this.draw({
142
+ username: profile.name,
143
+ rating: profile.rating,
144
+ newScores,
145
+ oldScores,
146
+ }, {
147
+ ...options,
148
+ profilePicture: options?.profilePicture === null
149
+ ? undefined
150
+ : options?.profilePicture ||
151
+ (await source.getPlayerProfilePicture(variables.username)) ||
152
+ undefined,
153
+ bestScores,
154
+ });
155
+ }
156
+ }
157
+ exports.Best50Painter = Best50Painter;
158
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/chu/painter/best50/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { z } from "zod/v4";
2
+ import { IScore } from "../../type";
3
+ import ScoreTrackerAdapter from "../../lib/adapter";
4
+ import { ChunithmPainter } from "..";
5
+ export declare class ChartPainter extends ChunithmPainter<typeof ChartPainter.Theme> {
6
+ static readonly Theme: z.ZodObject<{
7
+ name: z.ZodString;
8
+ displayName: z.ZodString;
9
+ width: z.ZodNumber;
10
+ height: z.ZodNumber;
11
+ elements: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
12
+ x: z.ZodNumber;
13
+ y: z.ZodNumber;
14
+ type: z.ZodLiteral<"profile">;
15
+ height: z.ZodNumber;
16
+ sprites: z.ZodObject<{
17
+ ratingNumberMap: z.ZodString;
18
+ profile: z.ZodObject<{
19
+ nameplate: z.ZodString;
20
+ icon: z.ZodString;
21
+ }, z.core.$strip>;
22
+ }, z.core.$strip>;
23
+ }, z.core.$strip>, z.ZodObject<{
24
+ x: z.ZodNumber;
25
+ y: z.ZodNumber;
26
+ type: z.ZodLiteral<"chart-grid">;
27
+ width: z.ZodNumber;
28
+ height: z.ZodNumber;
29
+ margin: z.ZodNumber;
30
+ gap: z.ZodNumber;
31
+ bubble: z.ZodObject<{
32
+ margin: z.ZodNumber;
33
+ color: z.ZodObject<{
34
+ basic: z.ZodString;
35
+ advanced: z.ZodString;
36
+ expert: z.ZodString;
37
+ master: z.ZodString;
38
+ ultima: z.ZodString;
39
+ worldsEnd: z.ZodString;
40
+ }, z.core.$strip>;
41
+ }, z.core.$strip>;
42
+ color: z.ZodObject<{
43
+ card: z.ZodString;
44
+ }, z.core.$strip>;
45
+ sprites: z.ZodObject<{
46
+ achievement: z.ZodObject<{
47
+ d: z.ZodString;
48
+ c: z.ZodString;
49
+ b: z.ZodString;
50
+ bb: z.ZodString;
51
+ bbb: z.ZodString;
52
+ a: z.ZodString;
53
+ aa: z.ZodString;
54
+ aaa: z.ZodString;
55
+ s: z.ZodString;
56
+ sp: z.ZodString;
57
+ ss: z.ZodString;
58
+ ssp: z.ZodString;
59
+ sss: z.ZodString;
60
+ sssp: z.ZodString;
61
+ }, z.core.$strip>;
62
+ milestone: z.ZodObject<{
63
+ aj: z.ZodString;
64
+ ajc: z.ZodString;
65
+ fc: z.ZodString;
66
+ none: z.ZodString;
67
+ }, z.core.$strip>;
68
+ versions: z.ZodObject<{
69
+ JPN: z.ZodObject<{
70
+ "100": z.ZodString;
71
+ "105": z.ZodString;
72
+ "110": z.ZodString;
73
+ "115": z.ZodString;
74
+ "120": z.ZodString;
75
+ "125": z.ZodString;
76
+ "130": z.ZodString;
77
+ "135": z.ZodString;
78
+ "140": z.ZodString;
79
+ "145": z.ZodString;
80
+ "150": z.ZodString;
81
+ "155": z.ZodString;
82
+ "200": z.ZodString;
83
+ "205": z.ZodString;
84
+ "210": z.ZodString;
85
+ "215": z.ZodString;
86
+ "220": z.ZodString;
87
+ "225": z.ZodString;
88
+ "230": z.ZodString;
89
+ "240": z.ZodString;
90
+ }, z.core.$strip>;
91
+ INT: z.ZodObject<{
92
+ "100": z.ZodString;
93
+ "105": z.ZodString;
94
+ "110": z.ZodString;
95
+ "115": z.ZodString;
96
+ "120": z.ZodString;
97
+ "125": z.ZodString;
98
+ "130": z.ZodString;
99
+ "135": z.ZodString;
100
+ "140": z.ZodString;
101
+ }, z.core.$strip>;
102
+ CHN: z.ZodObject<{
103
+ "100": z.ZodString;
104
+ "110": z.ZodString;
105
+ "120": z.ZodString;
106
+ "130": z.ZodString;
107
+ }, z.core.$strip>;
108
+ }, z.core.$strip>;
109
+ }, z.core.$strip>;
110
+ }, z.core.$strip>, z.ZodObject<{
111
+ x: z.ZodNumber;
112
+ y: z.ZodNumber;
113
+ type: z.ZodLiteral<"detail-info">;
114
+ width: z.ZodNumber;
115
+ height: z.ZodNumber;
116
+ margin: z.ZodNumber;
117
+ color: z.ZodObject<{
118
+ card: z.ZodString;
119
+ }, z.core.$strip>;
120
+ }, z.core.$strip>, z.ZodObject<{
121
+ x: z.ZodNumber;
122
+ y: z.ZodNumber;
123
+ type: z.ZodLiteral<"image">;
124
+ width: z.ZodNumber;
125
+ height: z.ZodNumber;
126
+ path: z.ZodString;
127
+ }, z.core.$strip>, z.ZodObject<{
128
+ x: z.ZodNumber;
129
+ y: z.ZodNumber;
130
+ type: z.ZodLiteral<"text">;
131
+ size: z.ZodNumber;
132
+ content: z.ZodString;
133
+ width: z.ZodOptional<z.ZodNumber>;
134
+ height: z.ZodOptional<z.ZodNumber>;
135
+ linebreak: z.ZodOptional<z.ZodBoolean>;
136
+ align: z.ZodOptional<z.ZodEnum<{
137
+ left: "left";
138
+ center: "center";
139
+ right: "right";
140
+ }>>;
141
+ color: z.ZodOptional<z.ZodString>;
142
+ borderColor: z.ZodOptional<z.ZodString>;
143
+ font: z.ZodOptional<z.ZodString>;
144
+ }, z.core.$strip>], "type">>;
145
+ }, z.core.$strip>;
146
+ constructor();
147
+ private static readonly DEFAULT_THEME;
148
+ draw(variables: {
149
+ username: string;
150
+ rating: number;
151
+ chartId: number;
152
+ scores: (IScore | null)[];
153
+ type: "new" | "recents";
154
+ }, options?: {
155
+ scale?: number;
156
+ theme?: string;
157
+ profilePicture?: Buffer;
158
+ region?: "JPN" | "INT" | "CHN";
159
+ }): Promise<Buffer | null>;
160
+ drawWithScoreSource(source: ScoreTrackerAdapter, variables: {
161
+ username: string;
162
+ chartId: number;
163
+ type: "new" | "recents";
164
+ }, options?: {
165
+ scale?: number;
166
+ theme?: string;
167
+ profilePicture?: Buffer | null;
168
+ region?: "JPN" | "INT" | "CHN";
169
+ }): Promise<Buffer | null>;
170
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ChartPainter = void 0;
7
+ const upath_1 = __importDefault(require("upath"));
8
+ const v4_1 = require("zod/v4");
9
+ const canvas_1 = require("canvas");
10
+ const type_1 = require("../../type");
11
+ const util_1 = require("../../../lib/util");
12
+ const __1 = require("..");
13
+ const painter_1 = require("../../../lib/painter");
14
+ const database_1 = require("../../lib/database");
15
+ class ChartPainter extends __1.ChunithmPainter {
16
+ static Theme = painter_1.ThemeManager.BaseTheme.extend({
17
+ elements: v4_1.z.array(v4_1.z.discriminatedUnion("type", [
18
+ __1.ChunithmPainterModule.Profile.schema,
19
+ __1.ChunithmPainterModule.Chart.ChartGrid.schema,
20
+ __1.ChunithmPainterModule.Chart.DetailInfo.schema,
21
+ painter_1.PainterModule.Image.schema,
22
+ painter_1.PainterModule.Text.schema,
23
+ ])),
24
+ });
25
+ constructor() {
26
+ super({
27
+ theme: {
28
+ schema: ChartPainter.Theme,
29
+ searchPaths: [
30
+ upath_1.default.join(ChartPainter.assetsPath, "themes", "chunithm", "chart"),
31
+ ],
32
+ defaultTheme: ChartPainter.DEFAULT_THEME,
33
+ },
34
+ });
35
+ }
36
+ static DEFAULT_THEME = "jp-verse";
37
+ async draw(variables, options = {}) {
38
+ let currentTheme = this.theme.get(this.theme.defaultTheme);
39
+ if (options?.theme) {
40
+ const theme = this.theme.get(options.theme);
41
+ if (theme) {
42
+ currentTheme = theme;
43
+ }
44
+ }
45
+ const chart = database_1.Database.getLocalChart(variables.chartId, type_1.EDifficulty.BASIC);
46
+ if (!chart)
47
+ return null;
48
+ if (currentTheme) {
49
+ await database_1.Database.cacheJackets([variables.chartId]);
50
+ const canvas = new canvas_1.Canvas(currentTheme.content.width * (options?.scale ?? 1), currentTheme.content.height * (options?.scale ?? 1));
51
+ const ctx = canvas.getContext("2d");
52
+ if (options?.scale)
53
+ ctx.scale(options.scale, options.scale);
54
+ ctx.imageSmoothingEnabled = true;
55
+ for (const element of currentTheme.content.elements) {
56
+ switch (element.type) {
57
+ case "image": {
58
+ await painter_1.PainterModule.Image.draw(ctx, currentTheme, element);
59
+ break;
60
+ }
61
+ case "chart-grid": {
62
+ await __1.ChunithmPainterModule.Chart.ChartGrid.draw(ctx, currentTheme, element, variables.chartId, variables.scores, options?.region);
63
+ break;
64
+ }
65
+ case "detail-info": {
66
+ await __1.ChunithmPainterModule.Chart.DetailInfo.draw(ctx, currentTheme, element, variables.chartId);
67
+ break;
68
+ }
69
+ case "profile": {
70
+ await __1.ChunithmPainterModule.Profile.draw(ctx, currentTheme, element, variables.username, variables.rating, options?.profilePicture);
71
+ break;
72
+ }
73
+ case "text": {
74
+ await painter_1.PainterModule.Text.draw(ctx, element, {
75
+ username: util_1.Util.HalfFullWidthConvert.toFullWidth(variables.username),
76
+ rating: util_1.Util.truncate(variables.rating, 0),
77
+ });
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ return canvas.toBuffer();
83
+ }
84
+ else
85
+ return null;
86
+ }
87
+ async drawWithScoreSource(source, variables, options = {}) {
88
+ const profile = await source.getPlayerInfo(variables.username, variables.type);
89
+ const score = await source.getPlayerScore(variables.username, variables.chartId);
90
+ if (!profile || !score)
91
+ return null;
92
+ return this.draw({
93
+ username: profile.name,
94
+ rating: profile.rating,
95
+ chartId: variables.chartId,
96
+ scores: [
97
+ score.basic,
98
+ score.advanced,
99
+ score.expert,
100
+ score.master,
101
+ score.ultima,
102
+ score.worldsEnd,
103
+ ],
104
+ type: variables.type,
105
+ }, {
106
+ ...options,
107
+ profilePicture: options?.profilePicture === null
108
+ ? undefined
109
+ : options?.profilePicture ||
110
+ (await source.getPlayerProfilePicture(variables.username)) ||
111
+ undefined,
112
+ });
113
+ }
114
+ }
115
+ exports.ChartPainter = ChartPainter;
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/chu/painter/chart/index.ts"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAC1B,+BAA2B;AAC3B,mCAAgC;AAEhC,qCAAiD;AAGjD,4CAAyC;AACzC,0BAA4D;AAC5D,kDAAmE;AACnE,iDAA8C;AAE9C,MAAa,YAAa,SAAQ,mBAA0C;IACjE,MAAM,CAAU,KAAK,GAAG,sBAAY,CAAC,SAAS,CAAC,MAAM,CAAC;QACzD,QAAQ,EAAE,MAAC,CAAC,KAAK,CACb,MAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;YACzB,yBAAqB,CAAC,OAAO,CAAC,MAAM;YACpC,yBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;YAC5C,yBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM;YAC7C,uBAAa,CAAC,KAAK,CAAC,MAAM;YAC1B,uBAAa,CAAC,IAAI,CAAC,MAAM;SAC5B,CAAC,CACL;KACJ,CAAC,CAAC;IACH;QACI,KAAK,CAAC;YACF,KAAK,EAAE;gBACH,MAAM,EAAE,YAAY,CAAC,KAAK;gBAC1B,WAAW,EAAE;oBACT,eAAK,CAAC,IAAI,CACN,YAAY,CAAC,UAAU,EACvB,QAAQ,EACR,UAAU,EACV,OAAO,CACV;iBACJ;gBACD,YAAY,EAAE,YAAY,CAAC,aAAa;aAC3C;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,MAAM,CAAU,aAAa,GAAG,UAAU,CAAC;IAE5C,KAAK,CAAC,IAAI,CACb,SAMC,EACD,UAKI,EAAE;QAEN,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,KAAK,EAAE,CAAC;gBACR,YAAY,GAAG,KAAK,CAAC;YACzB,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,mBAAQ,CAAC,aAAa,CAChC,SAAS,CAAC,OAAO,EACjB,kBAAW,CAAC,KAAK,CACpB,CAAC;QACF,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,mBAAQ,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,eAAM,CACrB,YAAY,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,EAClD,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CACtD,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,OAAO,EAAE,KAAK;gBAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5D,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACjC,KAAK,MAAM,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,OAAO,CAAC,CAAC,CAAC;wBACX,MAAM,uBAAa,CAAC,KAAK,CAAC,IAAI,CAC1B,GAAG,EACH,YAAY,EACZ,OAAO,CACV,CAAC;wBACF,MAAM;oBACV,CAAC;oBACD,KAAK,YAAY,CAAC,CAAC,CAAC;wBAChB,MAAM,yBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAC5C,GAAG,EACH,YAAY,EACZ,OAAO,EACP,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,MAAM,EAChB,OAAO,EAAE,MAAM,CAClB,CAAC;wBACF,MAAM;oBACV,CAAC;oBACD,KAAK,aAAa,CAAC,CAAC,CAAC;wBACjB,MAAM,yBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAC7C,GAAG,EACH,YAAY,EACZ,OAAO,EACP,SAAS,CAAC,OAAO,CACpB,CAAC;wBACF,MAAM;oBACV,CAAC;oBACD,KAAK,SAAS,CAAC,CAAC,CAAC;wBACb,MAAM,yBAAqB,CAAC,OAAO,CAAC,IAAI,CACpC,GAAG,EACH,YAAY,EACZ,OAAO,EACP,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,MAAM,EAChB,OAAO,EAAE,cAAc,CAC1B,CAAC;wBACF,MAAM;oBACV,CAAC;oBACD,KAAK,MAAM,CAAC,CAAC,CAAC;wBACV,MAAM,uBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;4BACxC,QAAQ,EAAE,WAAI,CAAC,oBAAoB,CAAC,WAAW,CAC3C,SAAS,CAAC,QAAQ,CACrB;4BACD,MAAM,EAAE,WAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;yBAC7C,CAAC,CAAC;wBACH,MAAM;oBACV,CAAC;gBACL,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC;;YAAM,OAAO,IAAI,CAAC;IACvB,CAAC;IACM,KAAK,CAAC,mBAAmB,CAC5B,MAA2B,EAC3B,SAIC,EACD,UAKI,EAAE;QAEN,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CACtC,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,IAAI,CACjB,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CACrC,SAAS,CAAC,QAAQ,EAClB,SAAS,CAAC,OAAO,CACpB,CAAC;QACF,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,IAAI,CAAC,IAAI,CACZ;YACI,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,MAAM,EAAE;gBACJ,KAAK,CAAC,KAAK;gBACX,KAAK,CAAC,QAAQ;gBACd,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,SAAS;aAClB;YACD,IAAI,EAAE,SAAS,CAAC,IAAI;SACvB,EACD;YACI,GAAG,OAAO;YACV,cAAc,EACV,OAAO,EAAE,cAAc,KAAK,IAAI;gBAC5B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,EAAE,cAAc;oBACvB,CAAC,MAAM,MAAM,CAAC,uBAAuB,CACjC,SAAS,CAAC,QAAQ,CACrB,CAAC;oBACF,SAAS;SACtB,CACJ,CAAC;IACN,CAAC;;AA5KL,oCA6KC"}
@@ -0,0 +1,194 @@
1
+ import { z } from "zod/v4";
2
+ import { CanvasRenderingContext2D } from "canvas";
3
+ import ScoreTrackerAdapter from "../lib/adapter";
4
+ import { IScore } from "../type";
5
+ import { Painter, Theme, ThemeManager } from "../../lib/painter";
6
+ export declare abstract class ChunithmPainter<Schema extends typeof ThemeManager.BaseObject> extends Painter<ScoreTrackerAdapter, Schema> {
7
+ constructor({ theme: { schema, searchPaths, defaultTheme }, }: {
8
+ theme: {
9
+ schema: Schema;
10
+ searchPaths: string[];
11
+ defaultTheme: string;
12
+ };
13
+ });
14
+ }
15
+ export declare namespace ChunithmPainterModule {
16
+ namespace Profile {
17
+ const schema: z.ZodObject<{
18
+ x: z.ZodNumber;
19
+ y: z.ZodNumber;
20
+ type: z.ZodLiteral<"profile">;
21
+ height: z.ZodNumber;
22
+ sprites: z.ZodObject<{
23
+ ratingNumberMap: z.ZodString;
24
+ profile: z.ZodObject<{
25
+ nameplate: z.ZodString;
26
+ icon: z.ZodString;
27
+ }, z.core.$strip>;
28
+ }, z.core.$strip>;
29
+ }, z.core.$strip>;
30
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, username: string, rating: number, profilePicture?: Buffer): Promise<void>;
31
+ }
32
+ namespace Best50 {
33
+ namespace ScoreGrid {
34
+ const schema: z.ZodObject<{
35
+ x: z.ZodNumber;
36
+ y: z.ZodNumber;
37
+ type: z.ZodLiteral<"score-grid">;
38
+ horizontalSize: z.ZodNumber;
39
+ verticalSize: z.ZodNumber;
40
+ region: z.ZodEnum<{
41
+ new: "new";
42
+ old: "old";
43
+ }>;
44
+ index: z.ZodNumber;
45
+ scoreBubble: z.ZodObject<{
46
+ width: z.ZodNumber;
47
+ height: z.ZodNumber;
48
+ margin: z.ZodNumber;
49
+ gap: z.ZodNumber;
50
+ color: z.ZodObject<{
51
+ basic: z.ZodString;
52
+ advanced: z.ZodString;
53
+ expert: z.ZodString;
54
+ master: z.ZodString;
55
+ ultima: z.ZodString;
56
+ worldsEnd: z.ZodString;
57
+ }, z.core.$strip>;
58
+ }, z.core.$strip>;
59
+ sprites: z.ZodObject<{
60
+ achievement: z.ZodObject<{
61
+ d: z.ZodString;
62
+ c: z.ZodString;
63
+ b: z.ZodString;
64
+ bb: z.ZodString;
65
+ bbb: z.ZodString;
66
+ a: z.ZodString;
67
+ aa: z.ZodString;
68
+ aaa: z.ZodString;
69
+ s: z.ZodString;
70
+ sp: z.ZodString;
71
+ ss: z.ZodString;
72
+ ssp: z.ZodString;
73
+ sss: z.ZodString;
74
+ sssp: z.ZodString;
75
+ }, z.core.$strip>;
76
+ milestone: z.ZodObject<{
77
+ aj: z.ZodString;
78
+ ajc: z.ZodString;
79
+ fc: z.ZodString;
80
+ none: z.ZodString;
81
+ }, z.core.$strip>;
82
+ }, z.core.$strip>;
83
+ }, z.core.$strip>;
84
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, score: IScore, index: number, x: number, y: number): Promise<void>;
85
+ }
86
+ }
87
+ namespace Chart {
88
+ namespace ChartGrid {
89
+ const schema: z.ZodObject<{
90
+ x: z.ZodNumber;
91
+ y: z.ZodNumber;
92
+ type: z.ZodLiteral<"chart-grid">;
93
+ width: z.ZodNumber;
94
+ height: z.ZodNumber;
95
+ margin: z.ZodNumber;
96
+ gap: z.ZodNumber;
97
+ bubble: z.ZodObject<{
98
+ margin: z.ZodNumber;
99
+ color: z.ZodObject<{
100
+ basic: z.ZodString;
101
+ advanced: z.ZodString;
102
+ expert: z.ZodString;
103
+ master: z.ZodString;
104
+ ultima: z.ZodString;
105
+ worldsEnd: z.ZodString;
106
+ }, z.core.$strip>;
107
+ }, z.core.$strip>;
108
+ color: z.ZodObject<{
109
+ card: z.ZodString;
110
+ }, z.core.$strip>;
111
+ sprites: z.ZodObject<{
112
+ achievement: z.ZodObject<{
113
+ d: z.ZodString;
114
+ c: z.ZodString;
115
+ b: z.ZodString;
116
+ bb: z.ZodString;
117
+ bbb: z.ZodString;
118
+ a: z.ZodString;
119
+ aa: z.ZodString;
120
+ aaa: z.ZodString;
121
+ s: z.ZodString;
122
+ sp: z.ZodString;
123
+ ss: z.ZodString;
124
+ ssp: z.ZodString;
125
+ sss: z.ZodString;
126
+ sssp: z.ZodString;
127
+ }, z.core.$strip>;
128
+ milestone: z.ZodObject<{
129
+ aj: z.ZodString;
130
+ ajc: z.ZodString;
131
+ fc: z.ZodString;
132
+ none: z.ZodString;
133
+ }, z.core.$strip>;
134
+ versions: z.ZodObject<{
135
+ JPN: z.ZodObject<{
136
+ "100": z.ZodString;
137
+ "105": z.ZodString;
138
+ "110": z.ZodString;
139
+ "115": z.ZodString;
140
+ "120": z.ZodString;
141
+ "125": z.ZodString;
142
+ "130": z.ZodString;
143
+ "135": z.ZodString;
144
+ "140": z.ZodString;
145
+ "145": z.ZodString;
146
+ "150": z.ZodString;
147
+ "155": z.ZodString;
148
+ "200": z.ZodString;
149
+ "205": z.ZodString;
150
+ "210": z.ZodString;
151
+ "215": z.ZodString;
152
+ "220": z.ZodString;
153
+ "225": z.ZodString;
154
+ "230": z.ZodString;
155
+ "240": z.ZodString;
156
+ }, z.core.$strip>;
157
+ INT: z.ZodObject<{
158
+ "100": z.ZodString;
159
+ "105": z.ZodString;
160
+ "110": z.ZodString;
161
+ "115": z.ZodString;
162
+ "120": z.ZodString;
163
+ "125": z.ZodString;
164
+ "130": z.ZodString;
165
+ "135": z.ZodString;
166
+ "140": z.ZodString;
167
+ }, z.core.$strip>;
168
+ CHN: z.ZodObject<{
169
+ "100": z.ZodString;
170
+ "110": z.ZodString;
171
+ "120": z.ZodString;
172
+ "130": z.ZodString;
173
+ }, z.core.$strip>;
174
+ }, z.core.$strip>;
175
+ }, z.core.$strip>;
176
+ }, z.core.$strip>;
177
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, chartId: number, scores: (IScore | null)[], region?: "JPN" | "INT" | "CHN"): Promise<void>;
178
+ }
179
+ namespace DetailInfo {
180
+ const schema: z.ZodObject<{
181
+ x: z.ZodNumber;
182
+ y: z.ZodNumber;
183
+ type: z.ZodLiteral<"detail-info">;
184
+ width: z.ZodNumber;
185
+ height: z.ZodNumber;
186
+ margin: z.ZodNumber;
187
+ color: z.ZodObject<{
188
+ card: z.ZodString;
189
+ }, z.core.$strip>;
190
+ }, z.core.$strip>;
191
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>, chartId: number): Promise<void>;
192
+ }
193
+ }
194
+ }