Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { existsSync, readdir, readFile } from "fs-extra"
import {
EXPLORER_FILE_SUFFIX,
ExplorerProgram,
} from "../explorer/ExplorerProgram"
import {
EXPLORERS_GIT_CMS_FOLDER,
ExplorersRouteResponse,
} from "../explorer/ExplorerConstants"
import simpleGit, { SimpleGit } from "simple-git"
import { GitCommit } from "../clientUtils/owidTypes"
export class ExplorerAdminServer {
constructor(gitDir: string) {
this.gitDir = gitDir
}
private gitDir: string
private _simpleGit?: SimpleGit
private get simpleGit() {
if (!this._simpleGit)
this._simpleGit = simpleGit({
baseDir: this.gitDir,
binary: "git",
maxConcurrentProcesses: 1,
})
return this._simpleGit
}
// we store explorers in a subdir of the gitcms for now. idea is we may store other things in there later.
get absoluteFolderPath() {
return this.gitDir + "/" + EXPLORERS_GIT_CMS_FOLDER + "/"
}
async getAllExplorersCommand() {
// Download all explorers for the admin index page
try {
const explorers = await this.getAllExplorers()
const branches = await this.simpleGit.branchLocal()
const gitCmsBranchName = await branches.current
const needsPull = false // todo: add
return {
success: true,
gitCmsBranchName,
needsPull,
explorers: explorers.map((explorer) => explorer.toJson()),
} as ExplorersRouteResponse
} catch (err) {
console.log(err)
return {
success: false,
errorMessage: err,
} as ExplorersRouteResponse
}
}
// todo: make private? once we remove covid legacy stuff?
async getExplorerFromFile(filename: string) {
const fullPath = this.absoluteFolderPath + filename
const content = await readFile(fullPath, "utf8")
const commits = await this.simpleGit.log({ file: fullPath, n: 1 })
return new ExplorerProgram(
filename.replace(EXPLORER_FILE_SUFFIX, ""),
content,
commits.latest as GitCommit
)
}
async getExplorerFromSlug(slug: string) {
return this.getExplorerFromFile(`${slug}${EXPLORER_FILE_SUFFIX}`)
}
async getAllPublishedExplorers() {
const explorers = await this.getAllExplorers()
return explorers.filter((exp) => exp.isPublished)
}
async getAllExplorers() {
if (!existsSync(this.absoluteFolderPath)) return []
const files = await readdir(this.absoluteFolderPath)
const explorerFiles = files.filter((filename) =>
filename.endsWith(EXPLORER_FILE_SUFFIX)
)
const explorers: ExplorerProgram[] = []
for (const filename of explorerFiles) {
const explorer = await this.getExplorerFromFile(filename)
explorers.push(explorer)
}
return explorers
}
}
|