/** * @packageDocumentation * 提供思源笔记API、博客API等统一实现 */ import { DefaultLogger } from "zhi-log" import Env from "zhi-env" /** * 博客API * * @public * @author terwer * @since 1.0.0 */ export declare class BlogApi implements IBlogApi { private readonly type private readonly apiAdaptor /** * 博客API版本号 */ readonly VERSION: string /** * 初始化博客 API * * @param type - 博客类型 * @param env - 环境变量,注意:环境变量会在配置对象失效时候生效 * @param cfg - 对应博客的配置,例如:SiyuanConfig */ constructor(type: string, env: Env, cfg: any) /** * 最新文章 * * @param numOfPosts - 文章数目 * @param page - 页码(可选,部分平台不支持分页) * @param keyword - 关键字(可选,部分平台不支持搜索) */ getRecentPosts(numOfPosts: number, page?: number, keyword?: string): Promise> /** * 博客配置列表 */ getUsersBlogs(): Promise> /** * 文章详情 * @param postid - postid * @param useSlug - 是否使用的是别名(可选,部分平台不支持) */ getPost(postid: string, useSlug?: boolean): Promise } /** * 浏览器工具类 * * @public * @author terwer * @since 1.0.2 */ export declare class BrowserUtil { /** * 是否在浏览器环境 */ static isInBrowser: boolean /** * 是否是Electron环境 */ static isElectron: () => boolean /** * 检测是否运行在Chrome插件中 */ static isInChromeExtension(): boolean /** * 获取url参数 * * @param sParam - 参数 */ getQueryString: (sParam: string) => string /** * 替换 URL 的参数 * @param url - 链接地址 * @param paramName - 参数名 * @param paramValue - 参数值 */ static replaceUrlParam: (url: string, paramName: string, paramValue: string) => string /** * 设置url参数 * @param urlstring - url * @param key - key * @param value - value */ static setUrlParameter: (urlstring: string, key: string, value: string) => string /** * 重新加载指定tab * * @param tabname - tabname */ static reloadTabPage: (tabname: string) => void /** * 刷新当前tab页面 */ static reloadPage: () => void /** * 刷新当前tab页面 * * @param msg - 消息提示 * @param cb - 回调 */ static reloadPageWithMessageCallback: (msg: string, cb: any) => void } /** * 通用工具类 * * @public * @author terwer * @since 1.0.2 */ export declare class Common { /** * 字符串操作工具类 */ readonly strUtil: StrUtil /** * 日期处理工具类 */ readonly dateUtil: DateUtil /** * electron内部工具类 */ readonly electronUtil: ElectronUtil /** * 浏览器工具类 */ readonly browserUtil: typeof BrowserUtil /** * 版本号操作工具类 */ readonly versionUtil: VersionUtil /** * 设备工具类 */ readonly deviceUtil: typeof DeviceUtil /** * Markdown工具类 */ readonly markdownUtil: MarkdownUtil /** * HTML 工具类 */ readonly htmlUtil: HtmlUtil constructor() } /** * 时间处理工具类 * * @public * @author terwer * @since 1.0.0 */ export declare class DateUtil { private readonly TIME_SPLIT /** * 给日期添加小时 * * @param date - Date * @param numOfHours - 数字 * @author terwer * @since 1.0.0 */ private addHoursToDate /** * 转换ISO日期为中文日期 * * @param str - '2022-07-18T06:25:48.000Z * @param isAddTimeZone - 是否增加时区(默认不增加) * @param isShort - 是否只返回日期 * @author terwer * @since 1.0.0 */ formatIsoToZhDate: (str: string, isAddTimeZone?: boolean, isShort?: boolean) => string /** * 当前日期时间完整格式,格式:2023-03-10 02:03:43 */ nowZh(): string /** * 当前日期,格式:2023-03-10 */ nowDateZh(): string /** * 当前时间,格式:02:03:43 */ nowTimeZh(): string } /** * 设备类型枚举 * * @public * @author terwer * @since 1.0.8 */ export declare enum DeviceType { /** * 思源笔记新窗口(Sofill主题新窗口共用) */ DeviceType_Siyuan_NewWin = "Siyuan_NewWin", /** * 思源笔记挂件 */ DeviceType_Siyuan_Widget = "Siyuan_Widget", /** * Google Chrome浏览器插件 */ DeviceType_Chrome_Extension = "Chrome_Extension", /** * Google Chrome浏览器(Docker浏览器共用) */ DeviceType_Chrome_Browser = "Chrome_Browser", } /** * 设备相关 * * @public * @author terwer * @since 1.0.7 */ export declare class DeviceUtil { /** * 获取当前设备 */ static getDevice(): DeviceType } /** * 警告⚠️:请勿在非Electron环境调用此文件中的任何方法 * * Node通用工具类 * * @public * @node */ export declare class ElectronUtil implements NodeUtil { private siyuanUtil constructor() /** * 引入依赖 * * @param libpath - 依赖全路径 */ requireLib: (libpath: string) => any /** * * 可以使用Node.js内置的fs模块中的`copyFileSync`或者`copyFile`方法来复制文件夹。不过需要注意,这两个方法只能复制单个文件,如果想要复制整个文件夹,需要自己编写递归函数实现。 * 本方法用于复制一个文件夹以及其中所有子文件和子文件夹 * * @param source - 源文件 * @param target - 目标文件 * @author terwer * @since 1.0.0 */ copyFolderSync(source: string, target: string): void /** * 删除文件夹 * * @param folder - 文件夹 */ rmFolder(folder: string): void /** * 路径拼接 * * @param paths - 路径数组 */ joinPath(...paths: string[]): string /** * 获取相对路径 * * @param pathname - 路径名称 */ dirname(pathname: string): string /** * 获取绝对路径 * * @param pathname - 路径名称 */ absPath(pathname: string): string /** * 思源笔记 process 对象 */ syProcess(): any /** * 思源笔记 conf 目录 */ siyuanConfPath(): any /** * 思源笔记 data 目录 */ siyuanDataPath(): any /** * 思源笔记 appearance 目录 */ siyuanAppearancePath(): any /** * 思源笔记 themes 目录 */ siyuanThemePath(): any /** * zhi 主题目录 */ zhiThemePath(): any /** * zhi 主题构建目录 */ zhiThemeDistPath(): any /** * zhi 博客构建目录 */ zhiBlogDistPath(): any /** * zhi-mini 目录 */ zhiMiniPath(): any /** * 获取跨平台的用户配置文件夹 */ getCrossPlatformAppDataFolder: () => any } /** * HTML 工具类 * * @public * @author terwer * @since .1.0 */ export declare class HtmlUtil { /** * 移除标题数字 * * @param str - 标题 */ removeTitleNumber(str: string): string /** * 删除挂件的HTML * @param str - 原字符 */ removeWidgetTag(str: string): string } /** * 通用博客接口 * * @public */ export declare interface IBlogApi { /** * 博客配置列表 */ getUsersBlogs(): Promise> /** * 最新文章 * * @param numOfPosts - 文章数目 * @param page - 页码(可选,部分平台不支持分页) * @param keyword - 关键字(可选,部分平台不支持搜索) */ getRecentPosts(numOfPosts: number, page?: number, keyword?: string): Promise> /** * 文章详情 * @param postid - postid * @param useSlug - 是否使用的是别名(可选,部分平台不支持) */ getPost(postid: string, useSlug?: boolean): Promise } /** * Markdown渲染引擎枚举 * * @public * @author terwer * @since 1.1.0 */ export declare enum MarkdownRenderTypeEnum { /** * 使用 lute 渲染引擎 */ RenderType_Lute = "lute", /** * 使用 showdown 渲染引擎 */ RenderType_Showdown = "showdown", } /** * Markdown渲染公共方法 * * @public */ export declare class MarkdownUtil { private readonly converter constructor(renderType?: MarkdownRenderTypeEnum) /** * 渲染Markdown * @param md - markdown */ renderHTML(md: string): string } /** * 警告⚠️:请勿在非Node环境调用此文件中的任何方法 * * Node通用工具类 * * @public * @node */ export declare interface NodeUtil { /** * * 可以使用Node.js内置的fs模块中的`copyFileSync`或者`copyFile`方法来复制文件夹。不过需要注意,这两个方法只能复制单个文件,如果想要复制整个文件夹,需要自己编写递归函数实现。 * 本方法用于复制一个文件夹以及其中所有子文件和子文件夹 * * @param source - 源文件 * @param target - 目标文件 * @author terwer * @since 1.0.0 */ copyFolderSync(source: string, target: string): void /** * 删除文件夹 * * @param folder - 文件夹 */ rmFolder(folder: string): void /** * 路径拼接 * * @param paths - 路径数组 */ joinPath(...paths: string[]): string /** * 获取相对路径 * * @param pathname - 路径名称 */ dirname(pathname: string): string /** * 获取绝对路径 * * @param pathname - 路径名称 */ absPath(pathname: string): string } /** * 通用文章模型定义 * * @public */ export declare class Post { /** * 文章ID */ postid: string /** * 标题 */ title: string /** * 逗号分隔的标签 */ mt_keywords: string /** * 链接 */ link?: string /** * 永久链接 */ permalink: string /** * 摘要 */ shortDesc?: string /** * 描述 */ description: string /** * 短评 */ mt_excerpt?: string /** * 别名 */ wp_slug: string /** * 创建时间 */ dateCreated: Date /** * 分类 */ categories: Array /** * 更多 */ mt_text_more?: string /** * 发布状态 */ post_status?: string /** * 是否发布 */ isPublished: boolean /** * 发布密码 */ wp_password: string constructor() } /** * 思源笔记API * * @public * @author terwer * @since 1.0.0 */ export declare class SiyuanApi { /** * 思源笔记内核API */ readonly serverApi: SiyuanServerApi /** * 思源笔记客户端API */ readonly clientApi: SiyuanClientApi /** * 思源笔记工具类 */ readonly siyuanUtil: SiyuanUtil /** * 构造思源 API对象 * * @param env - 可选,注意:serverApi必须传递env才能使用 * @param cfg - 可选,注意:y优先级比环境变量高 */ constructor(env?: Env, cfg?: SiyuanConfig) } /** * 思源笔记客户端API * * @public * @author terwer * @since 1.0.0 */ export declare class SiyuanClientApi { /** * 思源笔记客户端API版本号 */ readonly VERSION: string constructor() } /** * 思源笔记配置 * * @public * @author terwer */ export declare class SiyuanConfig { readonly baseUrl: string readonly token: string readonly middlewareUrl: string constructor(baseUrl: string, token: string, middlewareUrl: string) } /** * 思源笔记服务端API v2.0.27 * https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md#%E9%89%B4%E6%9D%83 * * @public * @author terwer * @since 1.0.0 */ export declare class SiyuanServerApi { /** * 思源笔记服务端API版本号 */ readonly VERSION: string private readonly logger private readonly siyuanConfig /** * 初始化思源服务端 API * * @param env - 环境变量 * @param siyuanConfig - 配置项 */ constructor(env?: Env, siyuanConfig?: SiyuanConfig) /** * 分页获取根文档 * * @param page - 页码 * @param pagesize - 数目 * @param keyword - 关键字 */ getRootBlocks(page: number, pagesize: number, keyword: string): Promise /** * 获取块属性 * * @param blockId - blockId */ getBlockAttrs(blockId: string): Promise /** * 设置块属性 * * @param blockId - blockId * @param attrs - 属性 */ setBlockAttrs(blockId: string, attrs: any): Promise /** * 以id获取思源块信息 * * @param blockId - 内容块ID */ getBlockByID(blockId: string): Promise /** * 以slug获取思源块信息 * * @param slug - 内容块别名 */ getBlockBySlug(slug: string): Promise /** * 导出markdown文本 * * @param docId - 文档id */ exportMdContent(docId: string): Promise /** * 向思源请求数据 * * @param url - url * @param data - 数据 * @param method - 请求方法 GET | POST * @param useToken - 权限TOKEN */ private siyuanRequest /** * 以sql发送请求 * * @param sql - sql */ private sql } /** * * 思源笔记工具类 * * @public * @author terwer * @since 1.0.0 */ export declare class SiyuanUtil { /** * 思源笔记Iframe挂件环境 */ isInSiyuanWidget: () => boolean /** * 思源笔记新窗口 */ isInSiyuanNewWin: () => boolean /** * 思源笔记 window 对象 */ siyuanWindow(): any /** * 思源笔记或者思源笔记新窗口,等价于Electron环境 */ isInSiyuanOrSiyuanNewWin: () => () => boolean } /** * 字符串工具类 * * @public * @author terwer * @since 0.0.1 */ export declare class StrUtil { /** * 格式化字符串 * * @param str - 字符串,可用占位符,例如:test\{0\}str * @param args - 按占位符顺序排列的参数 * @author terwer * @since 0.0.1 */ f(str: string, ...args: (string | number | boolean | object)[]): string } /** * 博客信息定义 * * @public */ export declare class UserBlog { /** * 博客ID */ blogid: string /** * 博客地址 */ url: string /** * 博客名称 */ blogName: string /** * 是否是管理员 */ isAdmin?: boolean /** * xmlrpc地址 */ xmlrpc?: string constructor() } /** * 版本号比较 * * @public * @author terwer * @since 1.0.2 */ export declare class VersionUtil { /** * Compare [semver](https://semver.org/) version strings * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`. * * @param v1 - First version to compare * @param v2 - Second version to compare * @returns boolean true if v1 is higher than v2 */ greater(v1: string, v2: string): boolean /** * Compare [semver](https://semver.org/) version strings * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`. * * @param v1 - First version to compare * @param v2 - Second version to compare * @returns boolean true if v1 is equal to v2 */ equal(v1: string, v2: string): boolean /** * Compare [semver](https://semver.org/) version strings * This library supports the full semver specification, including comparing versions with different number of digits like `1.0.0`, `1.0`, `1`, and pre-release versions like `1.0.0-alpha`. * * @param v1 - First version to compare * @param v2 - Second version to compare * @returns boolean true if v1 is lesser than v2 */ lesser(v1: string, v2: string): boolean } /** * SDK操作统一入口,建议大部分操作使用此工具类实现 * * @public * @author terwer * @since 1.0.0 */ declare class ZhiSdk { /** * 环境变量 * * @private */ private readonly env /** * 日志记录器 * * @private */ private readonly logger /** * 思源API统一入口 */ readonly siyuanApi: SiyuanApi /** * 博客API统一入口 */ readonly blogApi: BlogApi /** * 通用工具类 */ readonly common: Common /** * 构造 zhi-sdk 对象 * @param env - 可选,环境变量对象 * @param cfg - cfg,优先级高 */ constructor(env?: Env, cfg?: any) /** * 获取配置环境变量 */ getEnv(): Env /** * 获取日志操作对象 */ getLogger(): DefaultLogger } export default ZhiSdk export {}