create-esmx
Version:
A scaffold tool for creating Esmx projects
49 lines (48 loc) • 2.12 kB
TypeScript
/**
* Project name utilities
*/
export interface ProjectNameResult {
name: string;
root: string;
}
/**
* Format project name and determine target directory
*
* Examples:
* 1. Input: 'foo', cwd: '/home/user' (Unix)
* Output: { name: 'foo', root: '/home/user/foo' }
* Input: 'foo', cwd: 'C:\\workspace' (Windows)
* Output: { name: 'foo', root: 'C:\\workspace\\foo' }
*
* 2. Input: 'foo/bar', cwd: '/home/user' (Unix)
* Output: { name: 'bar', root: '/home/user/foo/bar' }
* Input: 'foo\\bar', cwd: 'C:\\workspace' (Windows)
* Output: { name: 'bar', root: 'C:\\workspace\\foo\\bar' }
*
* 3. Input: '@scope/foo', cwd: '/home/user' (Unix)
* Output: { name: '@scope/foo', root: '/home/user/@scope/foo' }
* Input: '@scope/foo', cwd: 'C:\\workspace' (Windows)
* Output: { name: '@scope/foo', root: 'C:\\workspace\\@scope\\foo' }
*
* 4. Input: './foo/bar', cwd: '/home/user/current' (Unix)
* Output: { name: 'bar', root: '/home/user/current/foo/bar' }
* Input: '.\\foo\\bar', cwd: 'C:\\workspace\\current' (Windows)
* Output: { name: 'bar', root: 'C:\\workspace\\current\\foo\\bar' }
*
* 5. Input: '/root/path/to/foo', cwd: '/home/user' (Unix absolute)
* Output: { name: 'foo', root: '/root/path/to/foo' }
* Input: 'C:\\projects\\my-app', cwd: 'D:\\workspace' (Windows absolute)
* Output: { name: 'my-app', root: 'C:\\projects\\my-app' }
*
* 6. Input: '.', cwd: '/home/user/projects/my-app' (Unix current dir)
* Output: { name: 'my-app', root: '/home/user/projects/my-app' }
* Input: '.', cwd: 'C:\\Users\\Developer\\Projects\\WindowsApp' (Windows current dir)
* Output: { name: 'WindowsApp', root: 'C:\\Users\\Developer\\Projects\\WindowsApp' }
*
* 7. Input: '\\\\server\\share\\project', cwd: 'C:\\workspace' (Windows UNC)
* Output: { name: 'project', root: '\\\\server\\share\\project' }
*
* 8. Input: 'path\\to/project', cwd: '/home/user' (Mixed separators)
* Output: { name: 'project', root: '/home/user/path/to/project' }
*/
export declare function formatProjectName(input: string, cwd?: string): ProjectNameResult;