|
1 | | -import * as path from "path"; |
2 | 1 | import { FileService } from "../infrastructure/file-service.js"; |
3 | 2 | import { DirectoryPath } from "./file/directoryPath.js"; |
| 3 | +import { BuildContext } from "./build-context.js"; |
| 4 | + |
| 5 | +type VersionedBuildValidateResult = { isValid: false; } | { |
| 6 | + isValid: true; |
| 7 | + versionsDirectory: DirectoryPath; |
| 8 | + versions: string[]; |
| 9 | +}; |
4 | 10 |
|
5 | 11 | export class VersionedBuildContext { |
6 | 12 | private readonly fileService = new FileService(); |
7 | | - private readonly versionedDocsDir: DirectoryPath; |
| 13 | + private readonly buildDirectory: DirectoryPath; |
8 | 14 |
|
9 | 15 | constructor(buildDirectory: DirectoryPath) { |
10 | | - this.versionedDocsDir = buildDirectory.join("versioned_docs"); |
11 | | - } |
12 | | - |
13 | | - public async exists(): Promise<boolean> { |
14 | | - return this.fileService.directoryExists(this.versionedDocsDir); |
15 | | - } |
16 | | - |
17 | | - public async getResolvedBuildDirectory(): Promise<DirectoryPath | null> { |
18 | | - const subDirs = await this.fileService.getSubDirectoriesPaths(this.versionedDocsDir); |
19 | | - if (subDirs.length === 0) |
20 | | - return null; |
21 | | - return subDirs[0]; |
| 16 | + this.buildDirectory = buildDirectory; |
22 | 17 | } |
23 | 18 |
|
24 | | - public getRelativePath(resolvedDirectory: DirectoryPath): string { |
25 | | - return path.join(".", "src", "versioned_docs", resolvedDirectory.leafName()); |
| 19 | + public async validate(): Promise<VersionedBuildValidateResult> { |
| 20 | + const buildContext = new BuildContext(this.buildDirectory); |
| 21 | + if (!(await buildContext.validate())) { |
| 22 | + return { isValid: false }; |
| 23 | + } |
| 24 | + const config = await buildContext.getBuildFileContents(); |
| 25 | + if (!("generateVersionedPortal" in config)) { |
| 26 | + return { isValid: false }; |
| 27 | + } |
| 28 | + const versionsPath = (config.versionsPath as string) ?? "versioned_docs"; |
| 29 | + const versionsDirectory = this.buildDirectory.join(versionsPath); |
| 30 | + if (!(await this.fileService.directoryExists(versionsDirectory))) { |
| 31 | + return { isValid: false }; |
| 32 | + } |
| 33 | + const versionsDirs = await this.fileService.getSubDirectoriesPaths(versionsDirectory); |
| 34 | + const versions = versionsDirs.map((dir) => dir.leafName()); |
| 35 | + return { isValid: true, versionsDirectory, versions }; |
26 | 36 | } |
27 | 37 | } |
0 commit comments