35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
/*
|
|
* Copyright (C) Sapphirecode - All Rights Reserved
|
|
* This file is part of console-app which is released under MIT.
|
|
* See file 'LICENSE' for full license details.
|
|
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
|
*/
|
|
|
|
import fs from 'fs-extra';
|
|
import { TypeValidation } from './TypeValidation';
|
|
|
|
export class PathType extends TypeValidation {
|
|
public get string_type (): 'string'|'number'|'boolean'|'object' {
|
|
return 'string';
|
|
}
|
|
|
|
public get persistent_type (): 'string'|'number'|'boolean'|'array' {
|
|
return 'string';
|
|
}
|
|
|
|
public async to_type (value: unknown): Promise<unknown> {
|
|
if (typeof value !== 'string')
|
|
throw new Error (`invalid type for ${this.option_type}`);
|
|
if (!await fs.pathExists (value))
|
|
throw new Error ('path does not exist');
|
|
if (this.option_type === 'path')
|
|
return value;
|
|
|
|
const stat = await fs.stat (value);
|
|
if (stat.isDirectory () === (this.option_type === 'folder'))
|
|
return value;
|
|
|
|
throw new Error ('cannot assign folder to file');
|
|
}
|
|
}
|