insomnia/packages/insomnia-app/app/sync/git/parse-git-path.js

36 lines
1.0 KiB
JavaScript

// @flow
import path from 'path';
import { GIT_CLONE_DIR } from './git-vcs';
// The win32 separator is a single backslash (\), but we have to escape both the JS string and RegExp.
const pathSep = path.sep === path.win32.sep ? '\\\\' : '/';
const _cloneDirRegExp = new RegExp(`^${GIT_CLONE_DIR}${pathSep}`);
type GitPathSegments = {
root: string | null,
type: string | null,
id: string | null,
};
const parseGitPath = (filePath: string): GitPathSegments => {
filePath = path.normalize(filePath);
// FilePath will start with the clone directory. We want to remove the clone dir, so that the
// segments can be extracted correctly.
filePath = filePath.replace(_cloneDirRegExp, '');
// Ignore empty and current directory '.' segments
const [root, type, idRaw] = filePath.split(path.sep).filter(s => s !== '' && s !== '.');
const id = typeof idRaw === 'string' ? idRaw.replace(/\.(json|yml)$/, '') : idRaw;
return {
root: root || null,
type: type || null,
id: id || null,
};
};
export default parseGitPath;