48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { $ } from "bun";
|
|
import { Project } from "ts-morph";
|
|
|
|
import { logStep } from "~/libs/logStep";
|
|
|
|
await logStep(
|
|
'Re-generating "env.d.ts"',
|
|
() => $`bunx wrangler types src/types/env.d.ts`.quiet(),
|
|
"Generated env.d.ts",
|
|
);
|
|
|
|
const secretNames = await logStep(
|
|
"Fetching secrets from Cloudflare",
|
|
async (): Promise<string[]> => {
|
|
const { stdout } = await $`bunx wrangler secret list`.quiet();
|
|
return JSON.parse(stdout.toString()).map(
|
|
(secret: { name: string; type: "secret_text" }) => secret.name,
|
|
);
|
|
},
|
|
"Fetched secrets",
|
|
);
|
|
|
|
const project = new Project({});
|
|
|
|
const envSourceFile = project.addSourceFileAtPath("src/types/env.d.ts");
|
|
envSourceFile.insertImportDeclaration(2, {
|
|
isTypeOnly: true,
|
|
moduleSpecifier: "hono",
|
|
namedImports: ["Env as HonoEnv"],
|
|
});
|
|
envSourceFile
|
|
.getInterfaceOrThrow("Env")
|
|
.addExtends(["HonoEnv", "Record<string, unknown>"]);
|
|
envSourceFile.getInterfaceOrThrow("Env").addProperties(
|
|
secretNames.map((name) => ({
|
|
name,
|
|
type: `string`,
|
|
})),
|
|
);
|
|
|
|
await project.save();
|
|
|
|
await logStep(
|
|
"Formatting env.d.ts",
|
|
() => $`bunx prettier --write src/types/env.d.ts`.quiet(),
|
|
"Formatted env.d.ts",
|
|
);
|