scripts/generateClientTypesMap/index.ts (37 lines of code) (raw):
import { exec } from "node:child_process";
import { writeFile } from "node:fs/promises";
import { join } from "node:path";
import { promisify } from "node:util";
import {
CLIENT_NAMES,
DOCUMENT_CLIENT,
DYNAMODB,
DYNAMODB_DOCUMENT_CLIENT,
} from "../../src/transforms/v2-to-v3/config";
import { getClientReqRespTypesMap } from "./getClientReqRespTypesMap";
import { getClientTypesMap } from "./getClientTypesMap";
const execAsync = promisify(exec);
(async () => {
for (const [mapName, getTypesMap] of [
["CLIENT_TYPES_MAP", getClientTypesMap],
["CLIENT_REQ_RESP_TYPES_MAP", getClientReqRespTypesMap],
] as [string, (clientName: string) => Promise<Record<string, string>>][]) {
const filePath = join("src", "transforms", "v2-to-v3", "config", `${mapName}.ts`);
const relativeFilePath = join(__dirname, "..", "..", filePath);
let fileContent = "// This file is generated by scripts/generateClientTypesMap/index.ts\n";
fileContent +=
"// Do not edit this file directly. Instead, edit the script and run it to regenerate this file.\n";
fileContent += "\n\n\n";
fileContent += `export const ${mapName}: Record<string, Record<string, string>> = `;
const clientTypesMap = {};
for (const clientName of CLIENT_NAMES) {
clientTypesMap[clientName] = await getTypesMap(clientName);
if (clientName === DYNAMODB) {
clientTypesMap[DYNAMODB_DOCUMENT_CLIENT] = await getTypesMap(DOCUMENT_CLIENT);
}
}
fileContent += JSON.stringify(clientTypesMap);
await writeFile(relativeFilePath, fileContent);
await execAsync(`yarn biome format --write ${relativeFilePath}`);
}
})();