/**
 * GitDocumentDB
 * Copyright (c) Hidekazu Kubota
 *
 * This source code is licensed under the Mozilla Public License Version 2.0
 * found in the LICENSE file in the root directory of this source tree.
 */
import { CollectionPath, JsonDoc } from './types';
/**
 * Validator Class
 *
 * @public
 */
export declare class Validator {
    private _workingDirectory;
    constructor(workingDir: string);
    static byteLengthOf: (str: string) => number;
    /**
     * Normalized collectionPath is '' or path strings that have a trailing slash and no heading slash.
     * Root ('/') is not allowed.
     * Backslash \\ or yen ¥ is replaced with slash /.
     */
    static normalizeCollectionPath(collectionPath: CollectionPath | undefined): CollectionPath;
    /**
     * Return the max length of working directory path
     */
    static maxWorkingDirectoryLength(): number;
    /**
     * Return the max length of collectionPath
     */
    maxCollectionPathLength(): number;
    /**
     * Return the max length of _id
     *
     * @remarks
     * _id means `${collectionPath}/${shortId}`
     */
    maxIdLength(): number;
    /**
     * Return false if the given name equals Windows reserved filename
     */
    testWindowsReservedFileName(name: string, options?: {
        allowDirectoryDot?: boolean;
    }): boolean;
    /**
     * Return false if the given name includes Windows invalid filename character
     */
    testWindowsInvalidFileNameCharacter(name: string, options?: {
        allowSlash?: boolean;
        allowDriveLetter?: boolean;
        allowDirectoryDot?: boolean;
        allowDot?: boolean;
        allowLastSpace?: boolean;
    }): boolean;
    /**
     * Validate localDir
     *
     * @remarks
     *```
     * - A directory name allows Unicode characters except for OS reserved filenames and the following characters: \< \> : " | ? * \\0
     * - A colon is generally disallowed, but a drive letter followed by a colon is allowed.
     * - A directory name cannot end with a period or a white space but the current directory . and the parent directory .. are allowed.
     * - A trailing slash could be omitted.
     *```
     * @throws {@link Err.InvalidLocalDirCharacterError}
     */
    validateLocalDir(localDir: string): void;
    /**
     * Validate dbName
     *
     * @remarks
     *```
     * - dbName allows Unicode characters except for OS reserved filenames and the following characters: \< \> : " ¥ / \\ | ? * \\0
     * - dbName cannot end with a period or a white space.
     * - dbName does not allow '.' and '..'.
     *```
     * @throws {@link Err.InvalidDbNameCharacterError}
     */
    validateDbName(dbName: string): void;
    /**
     * Validate collectionPath
     *
     * @remarks CollectionPath must be NULL string or paths that match the following conditions:
     *```
     * - CollectionPath can include paths separated by slashes.
     * - A directory name in paths allows Unicode characters except for OS reserved filenames and the following characters: \< \> : " | ? * \\0
     * - **It is recommended to use ASCII characters and case-insensitive names for cross-platform.**
     * - A directory name in paths cannot end with a period or a white space.
     * - A directory name in paths does not allow '.' and '..'.
     * - CollectionPath cannot start with a slash.
     * - Trailing slash could be omitted. e.g.) 'pages' and 'pages/' show the same CollectionPath.
     *```
     *
     * @throws {@link Err.InvalidCollectionPathCharacterError}
     * @throws {@link Err.InvalidCollectionPathLengthError}
     */
    validateCollectionPath(collectionPath: string): void;
    /**
     * Validate _id
     *
     * _id = collectionPath + shortId (not including postfix '.json')
     *
     * @remarks Spec of _id is described at {@link JsonDoc}.
     * @throws {@link Err.InvalidIdCharacterError}
     * @throws {@link Err.InvalidCollectionPathCharacterError}
     * @throws {@link Err.InvalidCollectionPathLengthError}
     * @throws {@link Err.InvalidIdLengthError}
     */
    validateId(_id: string): void;
    /**
     * Validate document
     *
     * @throws {@link Err.UndefinedDocumentIdError}
     * @throws {@link Err.InvalidIdCharacterError}
     * @throws {@link Err.InvalidIdLengthError}
     */
    validateDocument(doc: JsonDoc): void;
}
//# sourceMappingURL=validator.d.ts.map