feat: add companion API and Android APK shell
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import { isAbsolute, relative, resolve, sep } from 'node:path';
|
||||
|
||||
const ignoredPathSegments = new Set(['.git', '.dev', 'node_modules', 'dist', 'android']);
|
||||
|
||||
export function toSafeAbsolutePath(workspaceRoot: string, requestedPath = '.'): string {
|
||||
const root = resolve(workspaceRoot);
|
||||
const target = resolve(root, requestedPath || '.');
|
||||
const relativePath = relative(root, target);
|
||||
|
||||
if (relativePath === '' || (!relativePath.startsWith('..') && !relativePath.includes(`..${sep}`) && !isAbsolute(relativePath))) {
|
||||
return target;
|
||||
}
|
||||
|
||||
throw new Error('Path is outside the configured workspace root');
|
||||
}
|
||||
|
||||
export function toWorkspacePath(workspaceRoot: string, absolutePath: string): string {
|
||||
const relativePath = relative(resolve(workspaceRoot), resolve(absolutePath));
|
||||
return relativePath === '' ? '.' : relativePath.split(sep).join('/');
|
||||
}
|
||||
|
||||
export function isIgnoredWorkspacePath(workspacePath: string): boolean {
|
||||
return workspacePath
|
||||
.split('/')
|
||||
.filter(Boolean)
|
||||
.some((segment) => ignoredPathSegments.has(segment));
|
||||
}
|
||||
Reference in New Issue
Block a user