refactor: split large modules and normalize rust layout
This commit is contained in:
@@ -29,7 +29,7 @@ const forbiddenSnippets = [
|
||||
reason: 'puzzle_leaderboard_entry 已有 by_puzzle_leaderboard_profile_grid 索引',
|
||||
},
|
||||
{
|
||||
file: 'server-rs/crates/spacetime-module/src/match3d/mod.rs',
|
||||
file: 'server-rs/crates/spacetime-module/src/match3d.rs',
|
||||
snippet: '.match3d_work_profile()\n .iter()\n .filter(|row| {',
|
||||
reason: 'match3d_work_profile 已有 owner/status 索引,列表不应整表过滤',
|
||||
},
|
||||
@@ -99,12 +99,12 @@ const forbiddenSnippets = [
|
||||
reason: 'tracking_daily_stat 已有 by_tracking_daily_stat_scope_day / event_day 索引,analytics 查询不应整表过滤',
|
||||
},
|
||||
{
|
||||
file: 'server-rs/crates/spacetime-module/src/custom_world/mod.rs',
|
||||
file: 'server-rs/crates/spacetime-module/src/custom_world.rs',
|
||||
snippet: '.custom_world_profile()\n .iter()\n .find(|row| {',
|
||||
reason: 'custom_world_profile owner 维度已有 by_custom_world_profile_owner_user_id 索引',
|
||||
},
|
||||
{
|
||||
file: 'server-rs/crates/spacetime-module/src/custom_world/mod.rs',
|
||||
file: 'server-rs/crates/spacetime-module/src/custom_world.rs',
|
||||
snippet: '.custom_world_profile()\n .iter()\n .filter(|profile| {',
|
||||
reason: 'custom_world_profile Published 同步已有 by_custom_world_profile_publication_status 索引',
|
||||
},
|
||||
|
||||
@@ -21,6 +21,14 @@ const TARGETS = [
|
||||
'src',
|
||||
'module_bindings',
|
||||
),
|
||||
entryFile: path.join(
|
||||
REPO_ROOT,
|
||||
'server-rs',
|
||||
'crates',
|
||||
'spacetime-client',
|
||||
'src',
|
||||
'module_bindings.rs',
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -64,6 +72,7 @@ for (const target of selectedTargets) {
|
||||
|
||||
console.log(`[spacetime:generate] 同步 ${fileCount} 个文件到 ${target.outDir}`);
|
||||
await replaceGeneratedDir(tempOutDir, target.outDir);
|
||||
await moveGeneratedEntryFile(target);
|
||||
}
|
||||
|
||||
await rm(tempRoot, {recursive: true, force: true});
|
||||
@@ -111,6 +120,23 @@ async function replaceGeneratedDir(fromDir, toDir) {
|
||||
}
|
||||
}
|
||||
|
||||
async function moveGeneratedEntryFile(target) {
|
||||
if (!target.entryFile) {
|
||||
return;
|
||||
}
|
||||
|
||||
assertInside(target.entryFile, REPO_ROOT, '生成入口文件');
|
||||
const generatedModFile = path.join(target.outDir, 'mod.rs');
|
||||
|
||||
if (!existsSync(generatedModFile)) {
|
||||
throw new Error(`${target.name} bindings 缺少入口文件: ${generatedModFile}`);
|
||||
}
|
||||
|
||||
await rm(target.entryFile, {force: true});
|
||||
await cp(generatedModFile, target.entryFile, {force: true});
|
||||
await rm(generatedModFile, {force: true});
|
||||
}
|
||||
|
||||
function assertInside(candidate, parent, label) {
|
||||
const relative = path.relative(path.resolve(parent), path.resolve(candidate));
|
||||
if (relative === '' || relative.startsWith('..') || path.isAbsolute(relative)) {
|
||||
|
||||
Reference in New Issue
Block a user