import fs from 'fs';
import { ITiddlyWiki, ITiddlerFields } from 'tw5-typed';

/**
 * 初始化 TiddlyWiki
 *
 * @param {Record<string, unknown>[]} [preloadTiddlers=[]] 额外的 tiddler
 * @param {string} [dir='.'] 工作路径
 * @param {string[]} [commands=[]] 附加指令
 * @return {ITiddlyWiki}
 */
declare const tiddlywiki: (preloadTiddlers?: Record<string, unknown>[], dir?: string, commands?: string[]) => ITiddlyWiki;
/**
 * 确保某个文件对应的路径存在
 *
 * @param {string} fileName 文件路径
 */
declare const mkdirsForFileSync: (fileName: string) => void;
/**
 * 尝试深拷贝，from不存在不会出错，to存在也不会出错
 *
 * @param {string} from 源路径
 * @param {string} to 目标路径
 */
declare const tryCopy: (from: string, to: string) => void;
/**
 * 递归遍历所有文件
 *
 * @param {string} dir 根路径
 * @param {(filepath: string, stats: fs.Stats) => void} callback 回调函数
 */
declare const walkFilesSync: (dir: string, callback: (filepath: string, stats: fs.Stats) => void) => void;
/**
 * 等待若干毫秒
 *
 * @async
 * @param {number} millionseconds 毫秒数
 * @return {Promise<void>}
 */
declare const sleep: (millionseconds: number) => Promise<void>;
/**
 * 等待直到某个文件存在
 *
 * @param {string} path 要检测的文件路径
 */
declare const waitForFile: (path: string) => Promise<void>;

/**
 * 构建插件
 *
 * @async
 * @param {string} [output] 插件输出的路径，不填则只构建但不保存
 * @param {string} [excludeFilter] 排除构建的插件
 * @param {string} [srcPath='src'] 插件工程根路径
 * @return {Promise<ITiddlerFields[]>} 构建好的插件
 */
declare const build: (output?: string, excludeFilter?: string, srcPath?: string) => Promise<ITiddlerFields[]>;
/**
 * 构建插件库
 *
 * @async
 * @param {string} output 插件库输出的路径
 * @param {string} [excludeFilter] 排除构建的插件
 * @param {string} [srcPath='src'] 插件工程根路径
 * @param {string} [wikiPath='wiki'] wiki 路径
 * @return {Promise<ITiddlerFields[]>} 构建好的插件
 */
declare const buildLibrary: (output: string, excludeFilter?: string, srcPath?: string, wikiPath?: string) => Promise<Record<string, ITiddlerFields>>;

declare const rebuild: ($tw: ITiddlyWiki, pluginsDir: string, updatePaths?: string[], devMode?: boolean, excludeFilter?: string) => Promise<ITiddlerFields[]>;

/**
 * 构建在线HTML版本：核心JS和资源文件不包括在HTML中， 下载后不能使用
 * @param {string} [wikiPath='wiki'] wiki 路径
 * @param {string} [dist='dist'] 构建产物路径
 * @param {string} [htmlName='index.html'] 构建产生的 index 文件名
 * @param {string} [excludeFilter='-[is[draft]]'] 要排除的tiddler的过滤表达式，默认为'-[is[draft]]'
 * @param {boolean} [library=true] 是否同时构建插件库
 * @param {string} [srcPath='src'] 插件工程根路径
 * @param {string} [excludePlugin] 排除构建的插件
 */
declare const publishOnlineHTML: (wikiPath?: string, dist?: string, htmlName?: string, excludeFilter?: string, library?: boolean, srcPath?: string, excludePlugin?: string) => Promise<void>;
/**
 * 构建离线HTML版本：核心JS和资源文件包括在HTML中， 下载后可以使用(就是单文件版本的wiki)
 * @param {string} [wikiPath='wiki'] wiki 路径
 * @param {string} [dist='dist'] 构建产物路径
 * @param {string} [htmlName='index.html'] 构建产生的 index 文件名
 * @param {string} [excludeFilter='-[is[draft]]'] 要排除的tiddler的过滤表达式，默认为'-[is[draft]]'
 * @param {boolean} [library=true] 是否同时构建插件库
 * @param {string} [srcPath='src'] 插件工程根路径
 * @param {string} [excludePlugin] 排除构建的插件
 */
declare const publishOfflineHTML: (wikiPath?: string, dist?: string, htmlName?: string, excludeFilter?: string, library?: boolean, srcPath?: string, excludePlugin?: string) => Promise<void>;

export { build, buildLibrary, mkdirsForFileSync, publishOfflineHTML, publishOnlineHTML, rebuild, sleep, tiddlywiki, tryCopy, waitForFile, walkFilesSync };
