-
Notifications
You must be signed in to change notification settings - Fork 685
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add programmatic API for types
- Loading branch information
1 parent
ce7db9d
commit 2dc76b6
Showing
3 changed files
with
78 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.