maidraw 0.9.5 → 0.10.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 (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 +5 -5
  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 +36 -29
  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 +4 -5
  98. package/dist/mai/{chart → lib}/database.js +12 -6
  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,100 @@
1
+ import { z } from "zod/v4";
2
+ import { CanvasRenderingContext2D } from "canvas";
3
+ export declare abstract class Painter<Adapter, Schema extends typeof ThemeManager.BaseObject> {
4
+ protected readonly theme: ThemeManager<Schema>;
5
+ protected static get assetsPath(): string;
6
+ constructor({ theme: { schema, searchPaths, defaultTheme }, }: {
7
+ theme: {
8
+ schema: Schema;
9
+ searchPaths: string[];
10
+ defaultTheme: string;
11
+ };
12
+ });
13
+ abstract draw(variables: Record<string, any>, options: {
14
+ scale?: number;
15
+ } | Record<string, any>): Promise<Buffer | null>;
16
+ abstract drawWithScoreSource(source: Adapter, variables: Record<string, any>, options: {
17
+ scale?: number;
18
+ } | Record<string, any>): Promise<Buffer | null>;
19
+ }
20
+ export declare class Theme<T> {
21
+ private readonly basePath;
22
+ readonly content: T;
23
+ constructor(basePath: string, content: T);
24
+ getFile(file: string): Buffer;
25
+ }
26
+ export declare class ThemeManager<Schema extends typeof ThemeManager.BaseObject> {
27
+ private schema;
28
+ private _defaultTheme;
29
+ private logger;
30
+ static readonly Element: z.ZodObject<{
31
+ type: z.ZodString;
32
+ x: z.ZodNumber;
33
+ y: z.ZodNumber;
34
+ }, z.core.$strip>;
35
+ static readonly Elements: z.ZodDiscriminatedUnion<[z.ZodObject<{
36
+ type: z.ZodString;
37
+ x: z.ZodNumber;
38
+ y: z.ZodNumber;
39
+ }, z.core.$strip>], "type">;
40
+ static readonly BaseObject: z.ZodObject<{
41
+ name: z.ZodString;
42
+ }, z.core.$strip>;
43
+ static readonly BaseTheme: z.ZodObject<{
44
+ name: z.ZodString;
45
+ displayName: z.ZodString;
46
+ width: z.ZodNumber;
47
+ height: z.ZodNumber;
48
+ elements: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
49
+ type: z.ZodString;
50
+ x: z.ZodNumber;
51
+ y: z.ZodNumber;
52
+ }, z.core.$strip>], "type">>;
53
+ }, z.core.$strip>;
54
+ private loadedThemes;
55
+ get defaultTheme(): string;
56
+ private set defaultTheme(value);
57
+ constructor(schema: Schema, searchPaths: string[] | undefined, _defaultTheme: string);
58
+ validate(theme: any): z.infer<typeof this.schema> | null;
59
+ has(themeName: string): boolean;
60
+ get(themeName: string): Theme<z.infer<typeof this.schema>> | null;
61
+ load(path: string): boolean;
62
+ }
63
+ export declare namespace PainterModule {
64
+ namespace Image {
65
+ const schema: z.ZodObject<{
66
+ x: z.ZodNumber;
67
+ y: z.ZodNumber;
68
+ type: z.ZodLiteral<"image">;
69
+ width: z.ZodNumber;
70
+ height: z.ZodNumber;
71
+ path: z.ZodString;
72
+ }, z.core.$strip>;
73
+ function draw(ctx: CanvasRenderingContext2D, theme: Theme<any>, element: z.infer<typeof schema>): Promise<void>;
74
+ }
75
+ namespace Text {
76
+ const schema: z.ZodObject<{
77
+ x: z.ZodNumber;
78
+ y: z.ZodNumber;
79
+ type: z.ZodLiteral<"text">;
80
+ size: z.ZodNumber;
81
+ content: z.ZodString;
82
+ width: z.ZodOptional<z.ZodNumber>;
83
+ height: z.ZodOptional<z.ZodNumber>;
84
+ linebreak: z.ZodOptional<z.ZodBoolean>;
85
+ align: z.ZodOptional<z.ZodEnum<{
86
+ left: "left";
87
+ center: "center";
88
+ right: "right";
89
+ }>>;
90
+ color: z.ZodOptional<z.ZodString>;
91
+ borderColor: z.ZodOptional<z.ZodString>;
92
+ font: z.ZodOptional<z.ZodString>;
93
+ }, z.core.$strip>;
94
+ function draw(ctx: CanvasRenderingContext2D, element: z.infer<typeof schema>,
95
+ /**
96
+ * Variables that will be used to format the text content.
97
+ */
98
+ variables?: Record<string, string>): Promise<void>;
99
+ }
100
+ }
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.PainterModule = exports.ThemeManager = exports.Theme = exports.Painter = void 0;
30
+ const fs = __importStar(require("fs"));
31
+ const upath_1 = __importDefault(require("upath"));
32
+ const color_1 = __importDefault(require("color"));
33
+ const v4_1 = require("zod/v4");
34
+ const glob_1 = require("glob");
35
+ const string_template_1 = __importDefault(require("string-template"));
36
+ const canvas_1 = require("canvas");
37
+ const util_1 = require("./util");
38
+ class Painter {
39
+ theme;
40
+ static get assetsPath() {
41
+ return upath_1.default.join(__dirname, "..", "..", "assets");
42
+ }
43
+ constructor({ theme: { schema, searchPaths, defaultTheme }, }) {
44
+ this.theme = new ThemeManager(schema, searchPaths, defaultTheme);
45
+ (0, canvas_1.registerFont)(upath_1.default.join(Painter.assetsPath, "fonts", "gen-jyuu-gothic", "GenJyuuGothic-Bold.ttf"), {
46
+ family: "standard-font-title-jp",
47
+ });
48
+ (0, canvas_1.registerFont)(upath_1.default.join(Painter.assetsPath, "fonts", "comfortaa", "Comfortaa-Bold.ttf"), {
49
+ family: "standard-font-title-latin",
50
+ weight: "regular",
51
+ });
52
+ (0, canvas_1.registerFont)(upath_1.default.join(Painter.assetsPath, "fonts", "seurat-db", "FOT-Seurat Pro DB.otf"), {
53
+ family: "standard-font-username",
54
+ weight: "regular",
55
+ });
56
+ }
57
+ }
58
+ exports.Painter = Painter;
59
+ class Theme {
60
+ basePath;
61
+ content;
62
+ constructor(basePath, content) {
63
+ this.basePath = basePath;
64
+ this.content = content;
65
+ }
66
+ getFile(file) {
67
+ const path = upath_1.default.join(this.basePath, file);
68
+ if (fs.existsSync(path))
69
+ return fs.readFileSync(path);
70
+ else
71
+ return Buffer.from([]);
72
+ }
73
+ }
74
+ exports.Theme = Theme;
75
+ class ThemeManager {
76
+ schema;
77
+ _defaultTheme;
78
+ logger = util_1.Util.buildLogger(["maidraw", "painter", "theme_manager"]);
79
+ static Element = v4_1.z.object({
80
+ type: v4_1.z.string(),
81
+ x: v4_1.z.number(),
82
+ y: v4_1.z.number(),
83
+ });
84
+ static Elements = v4_1.z.discriminatedUnion("type", [
85
+ ThemeManager.Element,
86
+ ]);
87
+ static BaseObject = v4_1.z.object({
88
+ name: v4_1.z.string(),
89
+ });
90
+ static BaseTheme = this.BaseObject.extend({
91
+ displayName: v4_1.z.string(),
92
+ width: v4_1.z.number().min(1),
93
+ height: v4_1.z.number().min(1),
94
+ elements: v4_1.z.array(this.Elements),
95
+ });
96
+ loadedThemes = new Map();
97
+ get defaultTheme() {
98
+ return this._defaultTheme;
99
+ }
100
+ set defaultTheme(value) {
101
+ if (this.has(value)) {
102
+ this._defaultTheme = value;
103
+ }
104
+ }
105
+ constructor(schema, searchPaths = [], _defaultTheme) {
106
+ this.schema = schema;
107
+ this._defaultTheme = _defaultTheme;
108
+ for (const path of searchPaths) {
109
+ const manifests = (0, glob_1.globSync)(upath_1.default.join(path, "**", "manifest.json"));
110
+ for (const manifestPath of manifests) {
111
+ this.load(manifestPath);
112
+ }
113
+ }
114
+ }
115
+ validate(theme) {
116
+ const result = this.schema.safeParse(theme);
117
+ if (result.success) {
118
+ return result.data;
119
+ }
120
+ else {
121
+ this.logger.error(`Cannot validate theme${theme.name ? ` ${theme.name}:` : ":"}`);
122
+ this.logger.error(result.error);
123
+ return null;
124
+ }
125
+ }
126
+ has(themeName) {
127
+ return this.loadedThemes.has(themeName);
128
+ }
129
+ get(themeName) {
130
+ return (this.loadedThemes.get(themeName) ??
131
+ this.loadedThemes.get(this.defaultTheme) ??
132
+ null);
133
+ }
134
+ load(path) {
135
+ try {
136
+ const validated = this.validate(require(path));
137
+ if (validated) {
138
+ this.loadedThemes.set(validated.name, new Theme(upath_1.default.dirname(path), validated));
139
+ return true;
140
+ }
141
+ else
142
+ return false;
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ }
148
+ }
149
+ exports.ThemeManager = ThemeManager;
150
+ var PainterModule;
151
+ (function (PainterModule) {
152
+ let Image;
153
+ (function (Image) {
154
+ Image.schema = ThemeManager.Element.extend({
155
+ type: v4_1.z.literal("image"),
156
+ width: v4_1.z.number().min(1),
157
+ height: v4_1.z.number().min(1),
158
+ path: v4_1.z.string(),
159
+ });
160
+ async function draw(ctx, theme, element) {
161
+ const img = new canvas_1.Image();
162
+ img.src = theme.getFile(element.path);
163
+ ctx.drawImage(img, element.x, element.y, element.width, element.height);
164
+ }
165
+ Image.draw = draw;
166
+ })(Image = PainterModule.Image || (PainterModule.Image = {}));
167
+ let Text;
168
+ (function (Text) {
169
+ Text.schema = ThemeManager.Element.extend({
170
+ type: v4_1.z.literal("text"),
171
+ size: v4_1.z.number().min(1),
172
+ content: v4_1.z.string(),
173
+ width: v4_1.z.number().min(1).optional(),
174
+ height: v4_1.z.number().min(1).optional(),
175
+ linebreak: v4_1.z.boolean().optional(),
176
+ align: v4_1.z.enum(["left", "center", "right"]).optional(),
177
+ color: util_1.Util.z.color().optional(),
178
+ borderColor: util_1.Util.z.color().optional(),
179
+ font: v4_1.z.string().optional(),
180
+ });
181
+ async function draw(ctx, element,
182
+ /**
183
+ * Variables that will be used to format the text content.
184
+ */
185
+ variables = {}) {
186
+ let naiveLines = (0, string_template_1.default)(element.content, variables).split("\n");
187
+ let lines = [];
188
+ if (element.linebreak) {
189
+ for (let originalContent of naiveLines) {
190
+ while (originalContent.length) {
191
+ const line = util_1.Util.findMaxFitString(ctx, originalContent, element.width || Infinity, "");
192
+ originalContent = originalContent
193
+ .replace(line, "")
194
+ .trim();
195
+ lines.push(line.trim());
196
+ }
197
+ }
198
+ }
199
+ else {
200
+ for (const originalContent of naiveLines) {
201
+ lines.push(util_1.Util.findMaxFitString(ctx, originalContent, element.width || Infinity));
202
+ }
203
+ }
204
+ for (let i = 0; i < lines.length; ++i) {
205
+ const line = lines[i];
206
+ util_1.Util.drawText(ctx, line, element.x, element.y + i * element.size * 1.3, element.size, element.size / 3.5, element.width || Infinity, element.align, element.color || "#FFFFFF", element.borderColor
207
+ ? element.borderColor
208
+ : color_1.default.rgb(element.color || "#FFFFFF")
209
+ .darken(0.3)
210
+ .hex(), element.font, element.linebreak ? "" : "...");
211
+ }
212
+ }
213
+ Text.draw = draw;
214
+ })(Text = PainterModule.Text || (PainterModule.Text = {}));
215
+ })(PainterModule || (exports.PainterModule = PainterModule = {}));
216
+ //# sourceMappingURL=painter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"painter.js","sourceRoot":"","sources":["../../src/lib/painter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { Maimai as Mai } from "../mai";
2
- import { Chuni as Chu } from "../chu";
3
1
  import { CanvasGradient, CanvasPattern, CanvasRenderingContext2D, TextMetrics } from "canvas";
2
+ import Bunyan from "bunyan";
3
+ import { z as zod } from "zod/v4";
4
4
  export declare class Util {
5
5
  /**
6
6
  * Pretty much ignores percision loss.
@@ -29,6 +29,7 @@ export declare class Util {
29
29
  static measureText(ctx: CanvasRenderingContext2D, original: string, fontSize: number, maxWidth: number, font?: string): TextMetrics;
30
30
  static visibleLength(str: string): number;
31
31
  static capitalize(str: string): string;
32
+ static buildLogger(name: string[]): Bunyan;
32
33
  }
33
34
  export declare namespace Util {
34
35
  class HalfFullWidthConvert {
@@ -40,285 +41,8 @@ export declare namespace Util {
40
41
  static toFullWidth: (str0: any) => any;
41
42
  static toHalfWidth: (str0: any) => any;
42
43
  }
43
- namespace Maimai {
44
- class Version {
45
- static readonly DX: {
46
- name: string;
47
- gameVersion: {
48
- isDX: boolean;
49
- major: number;
50
- minor: number;
51
- };
52
- };
53
- static readonly DX_PLUS: {
54
- name: string;
55
- gameVersion: {
56
- isDX: boolean;
57
- major: number;
58
- minor: number;
59
- };
60
- };
61
- static readonly SPLASH: {
62
- name: string;
63
- gameVersion: {
64
- isDX: boolean;
65
- major: number;
66
- minor: number;
67
- };
68
- };
69
- static readonly SPLASH_PLUS: {
70
- name: string;
71
- gameVersion: {
72
- isDX: boolean;
73
- major: number;
74
- minor: number;
75
- };
76
- };
77
- static readonly UNIVERSE: {
78
- name: string;
79
- gameVersion: {
80
- isDX: boolean;
81
- major: number;
82
- minor: number;
83
- };
84
- };
85
- static readonly UNIVERSE_PLUS: {
86
- name: string;
87
- gameVersion: {
88
- isDX: boolean;
89
- major: number;
90
- minor: number;
91
- };
92
- };
93
- static readonly FESTIVAL: {
94
- name: string;
95
- gameVersion: {
96
- isDX: boolean;
97
- major: number;
98
- minor: number;
99
- };
100
- };
101
- static readonly FESTIVAL_PLUS: {
102
- name: string;
103
- gameVersion: {
104
- isDX: boolean;
105
- major: number;
106
- minor: number;
107
- };
108
- };
109
- static readonly BUDDIES: {
110
- name: string;
111
- gameVersion: {
112
- isDX: boolean;
113
- major: number;
114
- minor: number;
115
- };
116
- };
117
- static readonly BUDDIES_PLUS: {
118
- name: string;
119
- gameVersion: {
120
- isDX: boolean;
121
- major: number;
122
- minor: number;
123
- };
124
- };
125
- static readonly PRISM: {
126
- name: string;
127
- gameVersion: {
128
- isDX: boolean;
129
- major: number;
130
- minor: number;
131
- };
132
- };
133
- static readonly PRISM_PLUS: {
134
- name: string;
135
- gameVersion: {
136
- isDX: boolean;
137
- major: number;
138
- minor: number;
139
- };
140
- };
141
- private static versions;
142
- static getNextVersion(version: Mai.Chart.Database.IVersion): Mai.Chart.Database.IVersion;
143
- static getPreviousVersion(version: Mai.Chart.Database.IVersion): Mai.Chart.Database.IVersion;
144
- static toEventVersion(version: Mai.Chart.Database.IVersion): Mai.Chart.Database.IEventVersion;
145
- }
146
- const RATING_CONSTANTS: {
147
- 0: {
148
- 0.4: number;
149
- 0.3: number;
150
- 0.2: number;
151
- 0.1: number;
152
- 0: number;
153
- };
154
- 1: number;
155
- 2: number;
156
- 3: number;
157
- 4: number;
158
- 5: number;
159
- 6: number;
160
- 7: number;
161
- 8: number;
162
- 9: number;
163
- 10: number;
164
- 11: number;
165
- 12: number;
166
- 13: number;
167
- };
168
- /**
169
- * Calculate the rating of a score.
170
- * @param internalLevel Internal level of the chart.
171
- * @param achievement Achivement in percentage, range between 0 to 101.0000.
172
- * @returns Raw decimal rating value.
173
- */
174
- function calculateRating(internalLevel: number, achievement: number): number;
175
- }
176
- namespace Chunithm {
177
- class Version {
178
- static readonly CHUNITHM: {
179
- name: string;
180
- gameVersion: {
181
- major: number;
182
- minor: number;
183
- };
184
- };
185
- static readonly CHUNITHM_PLUS: {
186
- name: string;
187
- gameVersion: {
188
- major: number;
189
- minor: number;
190
- };
191
- };
192
- static readonly AIR: {
193
- name: string;
194
- gameVersion: {
195
- major: number;
196
- minor: number;
197
- };
198
- };
199
- static readonly AIR_PLUS: {
200
- name: string;
201
- gameVersion: {
202
- major: number;
203
- minor: number;
204
- };
205
- };
206
- static readonly STAR: {
207
- name: string;
208
- gameVersion: {
209
- major: number;
210
- minor: number;
211
- };
212
- };
213
- static readonly STAR_PLUS: {
214
- name: string;
215
- gameVersion: {
216
- major: number;
217
- minor: number;
218
- };
219
- };
220
- static readonly AMAZON: {
221
- name: string;
222
- gameVersion: {
223
- major: number;
224
- minor: number;
225
- };
226
- };
227
- static readonly AMAZON_PLUS: {
228
- name: string;
229
- gameVersion: {
230
- major: number;
231
- minor: number;
232
- };
233
- };
234
- static readonly CRYSTAL: {
235
- name: string;
236
- gameVersion: {
237
- major: number;
238
- minor: number;
239
- };
240
- };
241
- static readonly CRYSTAL_PLUS: {
242
- name: string;
243
- gameVersion: {
244
- major: number;
245
- minor: number;
246
- };
247
- };
248
- static readonly PARADISE: {
249
- name: string;
250
- gameVersion: {
251
- major: number;
252
- minor: number;
253
- };
254
- };
255
- static readonly NEW: {
256
- name: string;
257
- gameVersion: {
258
- major: number;
259
- minor: number;
260
- };
261
- };
262
- static readonly NEW_PLUS: {
263
- name: string;
264
- gameVersion: {
265
- major: number;
266
- minor: number;
267
- };
268
- };
269
- static readonly SUN: {
270
- name: string;
271
- gameVersion: {
272
- major: number;
273
- minor: number;
274
- };
275
- };
276
- static readonly SUN_PLUS: {
277
- name: string;
278
- gameVersion: {
279
- major: number;
280
- minor: number;
281
- };
282
- };
283
- static readonly LUMINOUS: {
284
- name: string;
285
- gameVersion: {
286
- major: number;
287
- minor: number;
288
- };
289
- };
290
- static readonly LUMINOUS_PLUS: {
291
- name: string;
292
- gameVersion: {
293
- major: number;
294
- minor: number;
295
- };
296
- };
297
- static readonly VERSE: {
298
- name: string;
299
- gameVersion: {
300
- major: number;
301
- minor: number;
302
- };
303
- };
304
- static readonly X_VERSE: {
305
- name: string;
306
- gameVersion: {
307
- major: number;
308
- minor: number;
309
- };
310
- };
311
- private static versions;
312
- static getNextVersion(version: Chu.Chart.Database.IVersion): Chu.Chart.Database.IVersion;
313
- static getPreviousVersion(version: Chu.Chart.Database.IVersion): Chu.Chart.Database.IVersion;
314
- static toEventVersion(version: Chu.Chart.Database.IVersion): Chu.Chart.Database.IEventVersion;
315
- }
316
- function getNumberVersion(version: Chu.Chart.Database.IVersion): number; /**
317
- * Calculate the rating of a score.
318
- * @param internalLevel Internal level of the chart.
319
- * @param score Score, range between 0 to 1010000.
320
- * @returns Raw decimal rating value.
321
- */
322
- function calculateRating(internalLevel: number, score: number): number;
44
+ namespace z {
45
+ function color(): zod.ZodString;
323
46
  }
324
47
  }
48
+ export default Util;