Skip to content

Commit

Permalink
feat: add programmatic API for types
Browse files Browse the repository at this point in the history
  • Loading branch information
andyjessop committed Sep 30, 2024
1 parent ce7db9d commit 2dc76b6
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 0 deletions.
71 changes: 71 additions & 0 deletions packages/wrangler/src/api/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { writeFile } from "fs/promises";
import path from "path";
import { readConfig } from "../../config";
import type { Config } from "../../config";

export async function generateProjectTypes(options: {
config?: Config;
configFile?: string;
outFile?: string;
persistToFilesystem?: boolean;
}): Promise<string> {
return generateTypes(getProjectTypes, options);
}

export async function generateRuntimeTypes(options: {
config?: Config;
configFile?: string;
outFile?: string;
persistToFilesystem?: boolean;
}): Promise<string> {
return generateTypes(
async (config) =>
getRuntimeTypes({
compatibilityDate: config.compatibility_date,
compatibilityFlags: config.compatibility_flags.filter(
(flag) => !flag.includes("nodejs_compat")
),
}),
options
);
}

async function generateTypes(
getTypesFunction: (config: Config) => Promise<string>,
{
config,
configFile,
outFile,
persistToFilesystem = false,
}: {
config?: Config;
configFile?: string;
outFile?: string;
persistToFilesystem?: boolean;
}
): Promise<string> {
if (!config && !configFile) {
throw new Error("Either config or configFile must be provided");
}
if (config && configFile) {
throw new Error("Only one of config or configFile should be provided");
}
if (outFile && persistToFilesystem === undefined) {
throw new Error(
"persistToFilesystem must be specified when outFile is provided"
);
}

const resolvedConfig = config ?? readConfig(configFile, {});

const types = await getTypesFunction(resolvedConfig);

if (persistToFilesystem) {
const resolvedOutFile =
outFile ?? path.join(process.cwd(), "runtime-configuration.d.ts");

await writeFile(resolvedOutFile, types, "utf8");
}

return types;
}
1 change: 1 addition & 0 deletions packages/wrangler/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export { unstable_dev, unstable_pages, unstable_DevEnv, unstable_startWorker };
export type { UnstableDevWorker, UnstableDevOptions };

export * from "./api/integrations";
export * from "./api/types";

// Export internal APIs required by the Vitest integration as `unstable_`
export { default as unstable_splitSqlQuery } from "./d1/splitter";
Expand Down
6 changes: 6 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2dc76b6

Please sign in to comment.