diff --git a/package.json b/package.json index d399c7b36..5299c3410 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "build:website": "cd packages/website && bun run build", "build:prisma": "prisma generate", "build:proxyclient": "cd packages/scripts && bun run build:proxyclient", + "build:catalogitemaccesssor": "cd packages/scripts && bun run build:catalogitemaccesssor", "build:ratingleaderboard": "cd packages/scripts && bun run build:ratingleaderboard", "build:app": "cd packages/app && bun run build", "dev:bot": "bun run build:bot --dev && bun start:bot", @@ -34,7 +35,7 @@ "build:reviews": "cd packages/scripts && bun build:reviews", "build:ids": "cd packages/scripts && bun build:ids", "prunestrings": "cd packages/scripts && bun prunestrings", - "setup": "bun install && bun run build:prisma && bun run build:protos && bun run build:proxyclient" + "setup": "bun install && bun run build:prisma && bun run build:protos && bun run build:proxyclient && bun run build:catalogitemaccesssor" }, "type": "module", "workspaces": [ diff --git a/packages/closed b/packages/closed index 33b7d2241..27be2fce5 160000 --- a/packages/closed +++ b/packages/closed @@ -1 +1 @@ -Subproject commit 33b7d2241927e963a58230c3dc7eb4791d5ae599 +Subproject commit 27be2fce5da09cd88ab776b3c9d452859a1f8887 diff --git a/packages/scripts/package.json b/packages/scripts/package.json index d6af45ab8..4ff36da2a 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -42,6 +42,7 @@ "build:bot": "bun src/buildBot.ts", "build:ratingleaderboard": "bun src/buildRatingLeaderboard.ts", "build:proxyclient": "bun src/buildProxyClient.ts", + "build:catalogitemaccesssor": "bun src/buildCatalogItemAccessor.ts", "prunestrings": "bun src/pruneStrings.ts", "build:protos": "bun src/protos.ts" }, diff --git a/packages/scripts/src/buildCatalogItemAccessor.ts b/packages/scripts/src/buildCatalogItemAccessor.ts new file mode 100644 index 000000000..8fb850e70 --- /dev/null +++ b/packages/scripts/src/buildCatalogItemAccessor.ts @@ -0,0 +1,62 @@ +import { readdir, readFile, writeFile } from "fs/promises"; + +const SOURCES = "../../packages/closed/protos"; +const TARGET = "../../packages/closed/src/unreal/catalogItemAccessor.ts"; + +const componentPattern = /^message (\w+)Component {/gm; + +const files = await readdir(SOURCES).then((files) => + files.filter( + (file) => + file.startsWith("blitz_static_") && file.endsWith("_component.proto") + ) +); + +const imports: { name: string; file: string }[] = []; + +for (const file of files) { + const content = await readFile(`${SOURCES}/${file}`).then((buffer) => + buffer.toString() + ); + const components = content.matchAll(componentPattern); + + for (const match of components) { + const name = match[1]; + const duplicate = imports.find((_import) => _import.name === name); + + if (duplicate) { + console.warn( + `Duplicate component ${name} across ${duplicate.file}.proto and ${file}` + ); + continue; + } + + const importFile = file.replace(".proto", ""); + + imports.push({ name, file: importFile }); + } +} + +let content = ""; + +for (const _import of imports) { + content += `import { ${_import.name}Component } from "@protos/${_import.file}";\n`; +} + +content += + 'import { BaseCatalogItemAccessor } from "./baseCatalogItemAccessor";\n\n'; +content += + "export class CatalogItemAccessor extends BaseCatalogItemAccessor {\n"; + +for (const _import of imports) { + const strippedName = _import.name.replace("BlitzStatic", ""); + const defaultName = strippedName[0].toLowerCase() + strippedName.slice(1); + + content += ` ${strippedName}(name = "${defaultName}Component") {\n`; + content += ` return this.component(name, ${_import.name}Component);\n`; + content += " }\n"; +} + +content += "}\n"; + +await writeFile(TARGET, content); diff --git a/packages/scripts/src/buildProxyClient.ts b/packages/scripts/src/buildProxyClient.ts index fc77e969d..2f0cee0ab 100644 --- a/packages/scripts/src/buildProxyClient.ts +++ b/packages/scripts/src/buildProxyClient.ts @@ -4,21 +4,18 @@ const IMPORT = "@protos/auto_legacy_proxy_client"; const SOURCE = "../../packages/closed/protos/auto_legacy_proxy_client.proto"; const TARGET = "../../packages/closed/src/unreal/methodPopulatedProxyClient.ts"; -const requestPattern = /message (\w+)Request {/g; +const requestPattern = /^message (\w+)Request {/gm; const source = await readFile(SOURCE).then((buffer) => buffer.toString()); const requests = source.matchAll(requestPattern); const imports: string[] = []; -const methods: { name: string; method: string }[] = []; +const names: string[] = []; for (const match of requests) { const name = match[1]; - // const method = - // name.charAt(0).toLowerCase() + name.slice(1).replace(/Async$/, ""); - const method = name; imports.push(`${name}Request`, `${name}Response`); - methods.push({ name, method }); + names.push(name); } let content = ""; @@ -31,9 +28,9 @@ content += 'import { BaseProxyClient } from "./baseProxyClient";\n\n'; content += "export abstract class MethodPopulatedProxyClient extends BaseProxyClient {\n"; -content += methods - .map(({ name, method }) => { - return ` ${method}(data: ${name}Request) { +content += names + .map((name) => { + return ` ${name}(data: ${name}Request) { return this.request("${name}Request", ${name}Request, data, ${name}Response); }\n`; })