Spaces:
Paused
Paused
| import { existsSync } from 'node:fs'; | |
| import { join, parse } from 'node:path'; | |
| import { cwd } from 'node:process'; | |
| import { readFile } from 'node:fs/promises'; | |
| const findFile = (file) => { | |
| let dir = cwd(); | |
| while (dir !== parse(dir).root) { | |
| if (existsSync(join(dir, file))) { | |
| return dir; | |
| } | |
| dir = join(dir, '../'); | |
| } | |
| } | |
| const root = findFile('.git'); | |
| const pack = findFile('package.json'); | |
| const readGit = (filename) => { | |
| if (!root) { | |
| throw 'no git repository root found'; | |
| } | |
| return readFile(join(root, filename), 'utf8'); | |
| } | |
| export const getCommit = async () => { | |
| return (await readGit('.git/logs/HEAD')) | |
| ?.split('\n') | |
| ?.filter(String) | |
| ?.pop() | |
| ?.split(' ')[1]; | |
| } | |
| export const getBranch = async () => { | |
| if (process.env.CF_PAGES_BRANCH) { | |
| return process.env.CF_PAGES_BRANCH; | |
| } | |
| return (await readGit('.git/HEAD')) | |
| ?.replace(/^ref: refs\/heads\//, '') | |
| ?.trim(); | |
| } | |
| export const getRemote = async () => { | |
| let remote = (await readGit('.git/config')) | |
| ?.split('\n') | |
| ?.find(line => line.includes('url = ')) | |
| ?.split('url = ')[1]; | |
| if (remote?.startsWith('git@')) { | |
| remote = remote.split(':')[1]; | |
| } else if (remote?.startsWith('http')) { | |
| remote = new URL(remote).pathname.substring(1); | |
| } | |
| remote = remote?.replace(/\.git$/, ''); | |
| if (!remote) { | |
| throw 'could not parse remote'; | |
| } | |
| return remote; | |
| } | |
| export const getVersion = async () => { | |
| if (!pack) { | |
| throw 'no package root found'; | |
| } | |
| const { version } = JSON.parse( | |
| await readFile(join(pack, 'package.json'), 'utf8') | |
| ); | |
| return version; | |
| } | |