Files
cfw-autumn/packages/openapi/utils/paths.ts
2026-05-01 17:43:23 +01:00

71 lines
2.2 KiB
TypeScript

import { mkdirSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
export interface OpenApiPaths {
/** packages/openapi/ directory */
openApiDir: string;
/** packages/openapi/openapi.yml */
openApiOutput: string;
/** packages/openapi/openapi-stripped.yml (JSDoc examples stripped for non-TS SDKs) */
openApiStrippedOutput: string;
/** packages/sdk/ directory */
tsSdkDir: string;
/** others/python-sdk/ directory */
pythonSdkDir: string;
/** apps/docs/mintlify/api/ directory */
docsApiDir: string;
/** apps/docs/mintlify/api/openapi.yml */
docsOpenApiPath: string;
/** apps/docs/mintlify/ directory */
docsDir: string;
/** packages/autumn-js/src/generated/ directory */
autumnJsGeneratedDir: string;
/** packages/autumn-js/src/generated/schemas.ts */
autumnJsSchemasPath: string;
/** others/svix-transforms/ directory */
svixTransformsDir: string;
}
/**
* Resolves all paths needed for OpenAPI generation.
* Also creates necessary directories.
*/
export function resolvePaths(): OpenApiPaths {
const currentFilePath = fileURLToPath(import.meta.url);
const currentDirPath = path.dirname(currentFilePath);
// Go up from utils/ to packages/openapi/
const openApiDir = path.resolve(currentDirPath, "..");
const tsSdkDir = path.resolve(openApiDir, "../sdk");
const pythonSdkDir = path.resolve(openApiDir, "../../others/python-sdk");
const docsApiDir = path.resolve(openApiDir, "../../apps/docs/mintlify/api");
const docsDir = path.resolve(openApiDir, "../../apps/docs/mintlify");
const autumnJsGeneratedDir = path.resolve(
openApiDir,
"../autumn-js/src/generated",
);
const svixTransformsDir = path.resolve(
openApiDir,
"../../others/svix-transforms",
);
// Ensure directories exist
mkdirSync(openApiDir, { recursive: true });
mkdirSync(docsApiDir, { recursive: true });
mkdirSync(autumnJsGeneratedDir, { recursive: true });
return {
openApiDir,
openApiOutput: path.join(openApiDir, "openapi.yml"),
openApiStrippedOutput: path.join(openApiDir, "openapi-stripped.yml"),
tsSdkDir,
pythonSdkDir,
docsApiDir,
docsOpenApiPath: path.join(docsApiDir, "openapi.yml"),
docsDir,
autumnJsGeneratedDir,
autumnJsSchemasPath: path.join(autumnJsGeneratedDir, "schemas.ts"),
svixTransformsDir,
};
}