feat: setup barrelsby for automatic barrel file generation

Add barrelsby as a dev dependency with a `generate-barrels` npm script and a `barrelesby.json` config targeting `./src`. This automates creation of barrel/index files to simplify imports across the project.
This commit is contained in:
2026-06-08 13:07:37 +08:00
parent 14d6e7c41e
commit c22b90c7f4
41 changed files with 2165 additions and 1 deletions
+156
View File
@@ -0,0 +1,156 @@
/**
* 用户统计响应
* 原始 Dart: UserStatsResponse (lib/data/models/user/user_stats_response.dart)
*
* 注:原始 Dart 中 `lastMessageAt`/`accountCreatedAt`/`currentMood` 为 `String?`
* `personalityTraits` 为 `PersonalityTraits?`,按"全部非空"约定兜底:
* - 字符串 → ""
* - PersonalityTraits → 默认实例
* - recentMemories 缺失或 null 时使用 []
*/
import { PersonalityTraits } from "./personality_traits";
import { RecentMemory } from "./recent_memory";
export class UserStatsResponse {
readonly userId: string;
readonly username: string;
readonly platform: string;
readonly intimacy: number;
readonly relationshipStage: string;
readonly dolBalance: number;
readonly totalMessages: number;
readonly lastMessageAt: string;
readonly accountCreatedAt: string;
readonly currentMood: string;
readonly personalityTraits: PersonalityTraits;
readonly recentMemories: RecentMemory[];
readonly promptTokensTotal: number;
readonly completionTokensTotal: number;
readonly cacheHitTokensTotal: number;
readonly tokensTotal: number;
constructor(params: {
userId: string;
username: string;
platform: string;
intimacy: number;
relationshipStage: string;
dolBalance: number;
totalMessages: number;
lastMessageAt?: string;
accountCreatedAt?: string;
currentMood?: string;
personalityTraits?: PersonalityTraits;
recentMemories?: RecentMemory[];
promptTokensTotal?: number;
completionTokensTotal?: number;
cacheHitTokensTotal?: number;
tokensTotal?: number;
}) {
this.userId = params.userId;
this.username = params.username;
this.platform = params.platform;
this.intimacy = params.intimacy;
this.relationshipStage = params.relationshipStage;
this.dolBalance = params.dolBalance;
this.totalMessages = params.totalMessages;
this.lastMessageAt = params.lastMessageAt ?? "";
this.accountCreatedAt = params.accountCreatedAt ?? "";
this.currentMood = params.currentMood ?? "";
this.personalityTraits =
params.personalityTraits ?? new PersonalityTraits({});
this.recentMemories = params.recentMemories ?? [];
this.promptTokensTotal = params.promptTokensTotal ?? 0;
this.completionTokensTotal = params.completionTokensTotal ?? 0;
this.cacheHitTokensTotal = params.cacheHitTokensTotal ?? 0;
this.tokensTotal = params.tokensTotal ?? 0;
Object.freeze(this);
}
toJson(): Record<string, unknown> {
return {
userId: this.userId,
username: this.username,
platform: this.platform,
intimacy: this.intimacy,
relationshipStage: this.relationshipStage,
dolBalance: this.dolBalance,
totalMessages: this.totalMessages,
lastMessageAt: this.lastMessageAt,
accountCreatedAt: this.accountCreatedAt,
currentMood: this.currentMood,
personalityTraits: this.personalityTraits.toJson(),
recentMemories: this.recentMemories.map((m) => m.toJson()),
promptTokensTotal: this.promptTokensTotal,
completionTokensTotal: this.completionTokensTotal,
cacheHitTokensTotal: this.cacheHitTokensTotal,
tokensTotal: this.tokensTotal,
};
}
static fromJson(json: Record<string, unknown>): UserStatsResponse {
const requireString = (key: string): string => {
const v = json[key];
if (typeof v !== "string") {
throw new Error(
`UserStatsResponse.${key} is required and must be a string`
);
}
return v;
};
const requireNumber = (key: string): number => {
const v = json[key];
if (typeof v !== "number") {
throw new Error(
`UserStatsResponse.${key} is required and must be a number`
);
}
return v;
};
const rawMemories = json.recentMemories;
const recentMemories: RecentMemory[] = Array.isArray(rawMemories)
? (rawMemories as Record<string, unknown>[]).map((m) =>
RecentMemory.fromJson(m)
)
: [];
return new UserStatsResponse({
userId: requireString("userId"),
username: requireString("username"),
platform: requireString("platform"),
intimacy: requireNumber("intimacy"),
relationshipStage: requireString("relationshipStage"),
dolBalance: requireNumber("dolBalance"),
totalMessages: requireNumber("totalMessages"),
lastMessageAt:
typeof json.lastMessageAt === "string"
? json.lastMessageAt
: undefined,
accountCreatedAt:
typeof json.accountCreatedAt === "string"
? json.accountCreatedAt
: undefined,
currentMood:
typeof json.currentMood === "string" ? json.currentMood : undefined,
personalityTraits: json.personalityTraits
? PersonalityTraits.fromJson(
json.personalityTraits as Record<string, unknown>
)
: undefined,
recentMemories,
promptTokensTotal:
typeof json.promptTokensTotal === "number"
? json.promptTokensTotal
: undefined,
completionTokensTotal:
typeof json.completionTokensTotal === "number"
? json.completionTokensTotal
: undefined,
cacheHitTokensTotal:
typeof json.cacheHitTokensTotal === "number"
? json.cacheHitTokensTotal
: undefined,
tokensTotal:
typeof json.tokensTotal === "number" ? json.tokensTotal : undefined,
});
}
}