UNPKG

sbg-utility

Version:
1,451 lines (1,403 loc) 58.9 kB
import * as safelinkify from 'safelinkify'; import Hexo from 'hexo'; import EventEmitter from 'events'; import through2 from 'through2'; import fs from 'fs-extra'; import * as stream from 'stream'; import * as gulp from 'gulp'; import debuglib from 'debug'; import Bluebird from 'bluebird'; import * as cryptolib from 'crypto'; import cryptolib__default from 'crypto'; import nunjucks from 'nunjucks'; import fs$1 from 'fs'; var archive_dir = "archives"; var author = "Dimas Lanjaka"; var browsersync = { logLevel: "warn", ghostMode: { scroll: true }, instanceName: "uniqueString" }; var categories = { lowercase: false, assign: null, mapper: null }; var category_dir = "categories"; var code_dir = "downloads/code"; var date_format = "YYYY-MM-DD"; var default_category = "uncategorized"; var default_layout = "post"; var deploy = { type: "git", repo: "", branch: "gh-pages", username: "", email: "", message: "{{ now('YYYY-MM-DD HH:mm:ss') }}", deployDir: "D:/Repositories/static-blog-generator/packages/sbg-utility/.deploy_git", github: { submodule: [ ] } }; var description = "Static Blog Generator Demo"; var exclude = null; var external_link = { enable: true, field: "site", safelink: { enable: true, exclude: [ "my-custom-domain.com", "**/exclude/**", "**/node_modules/**", "**/vendor/**", "**/tmp/**", "**/dist/**" ], redirect: [ "https://www.webmanajemen.com/page/safelink.html?url=", "https://www.webmanajemen.com/page/redirector.html?url=" ], type: "base64", password: "unique-password" }, exclude: [ "webmanajemen.com", "web-manajemen.blogspot.com", "dimaslanjaka.github.io" ] }; var filename_case = 0; var future = true; var generator = { cache: true, verbose: false }; var highlight = { enable: true, line_number: true, auto_detect: false, tab_replace: " ", wrap: false, hljs: false }; var i18n_dir = ":lang"; var ignore = null; var include = null; var index_generator = { path: "", per_page: 10, order_by: "-date" }; var keywords = null; var language = "en"; var markdown = { preset: "default", render: { html: true, xhtmlOut: false, langPrefix: "language-", breaks: true, linkify: true, typographer: true, quotes: "“”‘’" }, enable_rules: null, disable_rules: null, plugins: null, anchors: { level: 2, collisionSuffix: "", permalink: false, permalinkClass: "header-anchor", permalinkSide: "left", permalinkSymbol: "¶", "case": 0, separator: "-" } }; var meta_generator = true; var new_post_name = ":title.md"; var pagination_dir = "page"; var per_page = 10; var permalink = ":title.html"; var permalink_defaults = null; var post_asset_folder = false; var post_dir = "src-posts"; var pretty_urls = { trailing_index: true, trailing_html: true }; var prismjs = { enable: false }; var public_dir = "public"; var relative_link = false; var render_drafts = false; var root = "/static-blog-generator/"; var sitemap = { path: [ "sitemap.xml", "sitemap.txt" ], rel: true, tags: true, categories: true }; var skip_render = null; var source_dir = "source"; var tag_dir = "tags"; var tags = { lowercase: false, assign: null, mapper: null }; var theme = "butterfly"; var time_format = "HH:mm:ss"; var timezone = "Asia/Jakarta"; var title = "Static Blog Generator Demo"; var titlecase = false; var updated_option = "mtime"; var url = "http://www.webmanajemen.com/static-blog-generator"; var _config = { archive_dir: archive_dir, author: author, browsersync: browsersync, categories: categories, category_dir: category_dir, code_dir: code_dir, date_format: date_format, default_category: default_category, default_layout: default_layout, deploy: deploy, description: description, exclude: exclude, external_link: external_link, filename_case: filename_case, future: future, generator: generator, highlight: highlight, i18n_dir: i18n_dir, ignore: ignore, include: include, index_generator: index_generator, keywords: keywords, language: language, markdown: markdown, meta_generator: meta_generator, new_post_name: new_post_name, pagination_dir: pagination_dir, per_page: per_page, permalink: permalink, permalink_defaults: permalink_defaults, post_asset_folder: post_asset_folder, post_dir: post_dir, pretty_urls: pretty_urls, prismjs: prismjs, public_dir: public_dir, relative_link: relative_link, render_drafts: render_drafts, root: root, sitemap: sitemap, skip_render: skip_render, source_dir: source_dir, tag_dir: tag_dir, tags: tags, theme: theme, time_format: time_format, timezone: timezone, title: title, titlecase: titlecase, updated_option: updated_option, url: url }; declare const ___config_json_archive_dir: typeof archive_dir; declare const ___config_json_author: typeof author; declare const ___config_json_browsersync: typeof browsersync; declare const ___config_json_categories: typeof categories; declare const ___config_json_category_dir: typeof category_dir; declare const ___config_json_code_dir: typeof code_dir; declare const ___config_json_date_format: typeof date_format; declare const ___config_json_default_category: typeof default_category; declare const ___config_json_default_layout: typeof default_layout; declare const ___config_json_deploy: typeof deploy; declare const ___config_json_description: typeof description; declare const ___config_json_exclude: typeof exclude; declare const ___config_json_external_link: typeof external_link; declare const ___config_json_filename_case: typeof filename_case; declare const ___config_json_future: typeof future; declare const ___config_json_generator: typeof generator; declare const ___config_json_highlight: typeof highlight; declare const ___config_json_i18n_dir: typeof i18n_dir; declare const ___config_json_ignore: typeof ignore; declare const ___config_json_include: typeof include; declare const ___config_json_index_generator: typeof index_generator; declare const ___config_json_keywords: typeof keywords; declare const ___config_json_language: typeof language; declare const ___config_json_markdown: typeof markdown; declare const ___config_json_meta_generator: typeof meta_generator; declare const ___config_json_new_post_name: typeof new_post_name; declare const ___config_json_pagination_dir: typeof pagination_dir; declare const ___config_json_per_page: typeof per_page; declare const ___config_json_permalink: typeof permalink; declare const ___config_json_permalink_defaults: typeof permalink_defaults; declare const ___config_json_post_asset_folder: typeof post_asset_folder; declare const ___config_json_post_dir: typeof post_dir; declare const ___config_json_pretty_urls: typeof pretty_urls; declare const ___config_json_prismjs: typeof prismjs; declare const ___config_json_public_dir: typeof public_dir; declare const ___config_json_relative_link: typeof relative_link; declare const ___config_json_render_drafts: typeof render_drafts; declare const ___config_json_root: typeof root; declare const ___config_json_sitemap: typeof sitemap; declare const ___config_json_skip_render: typeof skip_render; declare const ___config_json_source_dir: typeof source_dir; declare const ___config_json_tag_dir: typeof tag_dir; declare const ___config_json_tags: typeof tags; declare const ___config_json_theme: typeof theme; declare const ___config_json_time_format: typeof time_format; declare const ___config_json_timezone: typeof timezone; declare const ___config_json_title: typeof title; declare const ___config_json_titlecase: typeof titlecase; declare const ___config_json_updated_option: typeof updated_option; declare const ___config_json_url: typeof url; declare namespace ___config_json { export { ___config_json_archive_dir as archive_dir, ___config_json_author as author, ___config_json_browsersync as browsersync, ___config_json_categories as categories, ___config_json_category_dir as category_dir, ___config_json_code_dir as code_dir, ___config_json_date_format as date_format, _config as default, ___config_json_default_category as default_category, ___config_json_default_layout as default_layout, ___config_json_deploy as deploy, ___config_json_description as description, ___config_json_exclude as exclude, ___config_json_external_link as external_link, ___config_json_filename_case as filename_case, ___config_json_future as future, ___config_json_generator as generator, ___config_json_highlight as highlight, ___config_json_i18n_dir as i18n_dir, ___config_json_ignore as ignore, ___config_json_include as include, ___config_json_index_generator as index_generator, ___config_json_keywords as keywords, ___config_json_language as language, ___config_json_markdown as markdown, ___config_json_meta_generator as meta_generator, ___config_json_new_post_name as new_post_name, ___config_json_pagination_dir as pagination_dir, ___config_json_per_page as per_page, ___config_json_permalink as permalink, ___config_json_permalink_defaults as permalink_defaults, ___config_json_post_asset_folder as post_asset_folder, ___config_json_post_dir as post_dir, ___config_json_pretty_urls as pretty_urls, ___config_json_prismjs as prismjs, ___config_json_public_dir as public_dir, ___config_json_relative_link as relative_link, ___config_json_render_drafts as render_drafts, ___config_json_root as root, ___config_json_sitemap as sitemap, ___config_json_skip_render as skip_render, ___config_json_source_dir as source_dir, ___config_json_tag_dir as tag_dir, ___config_json_tags as tags, ___config_json_theme as theme, ___config_json_time_format as time_format, ___config_json_timezone as timezone, ___config_json_title as title, ___config_json_titlecase as titlecase, ___config_json_updated_option as updated_option, ___config_json_url as url }; } declare const mappedConfig: typeof ___config_json; type importConfig = typeof mappedConfig; /** * get default configuration * @returns */ declare function getDefaultConfig(): importConfig; /** * get default _config.yml * @returns */ declare function getDefaultConfigYaml(): string; declare const defaultConfig_d_getDefaultConfig: typeof getDefaultConfig; declare const defaultConfig_d_getDefaultConfigYaml: typeof getDefaultConfigYaml; type defaultConfig_d_importConfig = importConfig; declare namespace defaultConfig_d { export { defaultConfig_d_getDefaultConfig as getDefaultConfig, defaultConfig_d_getDefaultConfigYaml as getDefaultConfigYaml, type defaultConfig_d_importConfig as importConfig }; } type HexoConfig = Hexo['config']; interface ProjConf extends HexoConfig { [key: string]: any; /** * Source posts */ post_dir: string; /** * deployment directory (can be absolute path) * @example * \<project\>/.deploy_git * ```yaml * deploy_dir: .deploy_git * ``` * at somewhere on your pc * ```yaml * deploy_dir: '/usr/home/site/my username' * ``` */ deploy_dir: string; /** * Project CWD */ cwd: string; /** * Deployment options */ deploy: HexoConfig['deploy'] & importConfig['deploy'] & ReturnType<typeof deployConfig> & { /** * copy to subfolder of site * @example * deployment location at \<project\>/.deploy_git/docs * ```yaml * deploy_dir: .deploy_git * deploy: * folder: docs * ``` */ folder?: string; }; external_link: HexoConfig['external_link'] & importConfig['external_link'] & boolean & { safelink?: safelinkify.SafelinkOptions; }; /** * global ignore */ exclude: string[]; generator: { [key: string]: any; cache: boolean; verbose: boolean; }; /** * Tags mapper */ tags?: LabelMapper; /** * Categories mapper */ categories?: LabelMapper; } interface LabelMapper { /** * turn label to lower case */ lowercase: boolean; /** * add old label with new label */ assign: Record<string, string> | undefined | null; /** * replace old label with new label */ mapper: Record<string, string> | undefined | null; } /** * find `_config.yml` * @param fileYML path to file `_config.yml` or working directory */ declare function fetchConfig(fileYML?: string): void; /** * Config setter * * useful for jest * @param obj */ declare function setConfig(obj: Record<string, any> | ProjConf): ProjConf; /** * Config getter * * useful for jest * @returns */ declare function getConfig(): ProjConf; /** * get deployment config * @returns */ declare function deployConfig(): { deployDir: string; }; /** * common ignore files * @example * const config = getConfig(); * const excludes = Array.isArray(config.exclude) ? config.exclude : []; * excludes.push(...commonIgnore); */ declare const commonIgnore: string[]; /** * array of config.exclude, config.ignore */ declare const projectIgnores: any[]; type _config_d_HexoConfig = HexoConfig; type _config_d_LabelMapper = LabelMapper; type _config_d_ProjConf = ProjConf; declare const _config_d_commonIgnore: typeof commonIgnore; declare const _config_d_deployConfig: typeof deployConfig; declare const _config_d_fetchConfig: typeof fetchConfig; declare const _config_d_getConfig: typeof getConfig; declare const _config_d_projectIgnores: typeof projectIgnores; declare const _config_d_setConfig: typeof setConfig; declare namespace _config_d { export { type _config_d_HexoConfig as HexoConfig, type _config_d_LabelMapper as LabelMapper, type _config_d_ProjConf as ProjConf, _config_d_commonIgnore as commonIgnore, _config_d_deployConfig as deployConfig, _config_d_fetchConfig as fetchConfig, _config_d_getConfig as getConfig, _config_d_projectIgnores as projectIgnores, _config_d_setConfig as setConfig }; } interface createConfigEvents { add: (obj: Record<string, any>) => void; delete: (changedCount: number) => void; update: () => void; } declare interface createConfig<T extends Record<string, any>> { on<U extends keyof createConfigEvents>(event: U, listener: createConfigEvents[U]): this; emit<U extends keyof createConfigEvents>(event: U, ...args: Parameters<createConfigEvents[U]>): boolean; get<U extends Record<string, any>>(): T & U; } /** * Create/Update config wrapper */ declare class createConfig<T extends Record<string, any>> extends EventEmitter { cname: string; /** * Create/Update config wrapper * @param name config name * @param value initial config value */ constructor(name: string, value: Record<string, any>); /** * update config * @param value new values should be merged with old values using shallow object merge */ update(value: Record<string, any>): void; } type configWrapper_d_createConfig<T extends Record<string, any>> = createConfig<T>; declare const configWrapper_d_createConfig: typeof createConfig; declare namespace configWrapper_d { export { configWrapper_d_createConfig as createConfig }; } type index_d$2_HexoConfig = HexoConfig; type index_d$2_LabelMapper = LabelMapper; type index_d$2_ProjConf = ProjConf; declare const index_d$2_commonIgnore: typeof commonIgnore; type index_d$2_createConfig<T extends Record<string, any>> = createConfig<T>; declare const index_d$2_createConfig: typeof createConfig; declare const index_d$2_deployConfig: typeof deployConfig; declare const index_d$2_fetchConfig: typeof fetchConfig; declare const index_d$2_getConfig: typeof getConfig; declare const index_d$2_getDefaultConfig: typeof getDefaultConfig; declare const index_d$2_getDefaultConfigYaml: typeof getDefaultConfigYaml; type index_d$2_importConfig = importConfig; declare const index_d$2_projectIgnores: typeof projectIgnores; declare const index_d$2_setConfig: typeof setConfig; declare namespace index_d$2 { export { type index_d$2_HexoConfig as HexoConfig, type index_d$2_LabelMapper as LabelMapper, type index_d$2_ProjConf as ProjConf, index_d$2_commonIgnore as commonIgnore, index_d$2_createConfig as createConfig, defaultConfig_d as defaults, index_d$2_deployConfig as deployConfig, index_d$2_fetchConfig as fetchConfig, index_d$2_getConfig as getConfig, index_d$2_getDefaultConfig as getDefaultConfig, index_d$2_getDefaultConfigYaml as getDefaultConfigYaml, type index_d$2_importConfig as importConfig, _config_d as main, index_d$2_projectIgnores as projectIgnores, index_d$2_setConfig as setConfig, configWrapper_d as wrapper }; } /** * convert type to be writeable * * https://stackoverflow.com/a/43001581 */ type Writeable<T> = { -readonly [P in keyof T]: T[P]; }; /** * convert type to be writeable recursively * * https://stackoverflow.com/a/43001581 */ type DeepWriteable<T> = { -readonly [P in keyof T]: DeepWriteable<T[P]>; }; /** * null | undefined | type */ type Nullable<T> = T | null | undefined; type globals_d_DeepWriteable<T> = DeepWriteable<T>; type globals_d_Nullable<T> = Nullable<T>; type globals_d_Writeable<T> = Writeable<T>; declare namespace globals_d { export type { globals_d_DeepWriteable as DeepWriteable, globals_d_Nullable as Nullable, globals_d_Writeable as Writeable }; } /** * pick random items from array * @param items * @returns */ declare function array_random<T extends any[]>(items: T): T[number]; /** * unique array * * array of string,number * * array of object by object key * @param arr * @param field key name (for array of object) * @returns * * @example * arrayOfObjUniq({p:'x',n:'x'},{p:'23',n:'x'},{p:'x',n:'5g'}, 'p'); // [{p:'x',n:'x'},{p:'23',n:'x'}] * * @link https://stackoverflow.com/a/67322087/6404439 */ declare function array_unique<T extends any[]>(arr: T, field?: string): T; /** * Remove empties from array * @param arr * @returns */ declare function array_remove_empty<T extends any[]>(arr: T): any[]; /** * unique array of object by object key * @param arr * @param field key name * @returns * @see {@link https://stackoverflow.com/a/67322087/6404439} * @example * const arrobj = [{p:'x',n:'x'},{p:'23',n:'x'},{p:'x',n:'5g'}], * arrayOfObjUniq(arrobj, 'p'); // [{p:'x',n:'x'},{p:'23',n:'x'}] */ declare function arrayOfObjUniq<T extends any[]>(arr: T, field: string): T; /** * array shuffler * @param items * @returns */ declare function array_shuffle<T extends any[]>(items: T): T; /** * generate random number * @see {@link https://stackoverflow.com/a/65638217/6404439} * @param n * @returns */ declare const rand: (n: number) => number; /** * fast shuffle array using swap method * @see {@link https://stackoverflow.com/a/65638217/6404439} * @param t */ declare function array_shuffle_swap<T extends any[]>(t: T): void; /** * flattern array * @param arr * @returns */ declare function array_flatten<T extends any[], N extends number = 1>(arr: T, depth?: N): FlatArray<T, N>[]; /** * Chainable function runner. * * @param schedule - An array of function objects, each containing a callback and optional `opt` properties for before and after functions. * @example * ```ts * chain([ * { * callback: () => 'stream process eg: gulp', * opt: { * before: () => 'run before callback called', * after: () => 'run after callback called' * } * }, * { * callback: () => 'promise process' * }, * { * callback: () => 'synchronous function' * } * ]); * ``` */ declare function chain(schedule: { /** * Function to call inside chains. */ callback: (...args: any[]) => any; opt?: { /** * Function to run before the callback is called. */ before?: (...args: any[]) => any; /** * Function to run after the callback is called. */ after?: (...args: any[]) => any; }; }[]): Promise<void>; /** * convert hours,min,sec to milliseconds * @param hrs * @param min * @param sec * @returns */ declare const toMilliseconds: (hrs: number, min: number, sec: number) => number; /** * Creates a debug logger with the specified name. * * @param name - The name of the debug logger. This will be used as a prefix for log messages. * @returns A debug logger function that can be used to log messages. */ declare function debug(name: string): debuglib.Debugger; /** * Creates a debug logger with the default name `sbg`. * * This function allows for an optional subname to further specify the debug logger. * * @param subname - An optional suffix to append to the default logger name. * @returns A debug logger function with the name `sbg` or `sbg-{subname}` if provided. */ declare function sbgDebug(subname?: string): debuglib.Debugger; declare const isWindows: boolean; interface trueCasePathNewCallbackOpt { /** return as unix style path */ unix?: boolean; } declare const trueCasePathSync: (filePath: string, basePath?: string | trueCasePathNewCallbackOpt, cbOpt?: trueCasePathNewCallbackOpt) => string; declare const trueCasePath: (filePath: string, basePath?: string | trueCasePathNewCallbackOpt, cbOpt?: trueCasePathNewCallbackOpt) => string; /** * copy file/folder recursively * @param src * @param dest * @param options * @returns */ declare function copyPath(src: string, dest: string, options?: fs.CopyOptions): Promise<void>; /** * delete folder/file async * @param path path of file/folder * @param throws enable throwable * @returns */ declare function del(path: string, throws?: boolean): Bluebird<void | Error>; interface emptyDirOpt { ignore: (string | RegExp)[]; } /** * empty dir with filters * @param dir * @param param1 */ declare function emptyDir(dir: string, { ignore }: emptyDirOpt): void; declare function getAppRootDir(): string; /** * function to encode file data to base64 encoded string * @param file path file * @returns */ declare function image_base64_encode(file: string): string; declare function fixDriveLetter(filePath: string): string; /** * UNIX join path with true-case-path * @description normalize path and make drive letter uppercase * @param str * @returns Unix Style Path */ declare function normalizePath(...str: string[]): string; /** * UNIX join path with true-case-path * @description normalize path and make drive letter uppercase * @param str * @returns Unix Style Path */ declare function normalizePathUnix(...str: string[]): string; /** * remove base path * @param target path to remove * @param toRemove cwd */ declare function removeCwd(target: string, toRemove: string): string; /** * UNIX join path with auto create dirname when not exists * @param path * @returns */ declare function joinSolve(...paths: string[]): string; interface readDirDone { (err: Error | undefined | null, results?: string[]): any; } /** * read directory recursive callback * @param dir * @returns */ declare const readDir: (dir: fs.PathLike, done: readDirDone) => void; /** * read directory recursive async * @param dir * @returns */ declare const readDirAsync: (dir: fs.PathLike) => Bluebird<string[]>; /** * create writestream (auto create dirname) * @param dest * @param options * @returns */ declare function createWriteStream(dest: string, options?: Parameters<(typeof fs)['createWriteStream']>[1]): fs.WriteStream; interface writefileOpt extends fs.MakeDirectoryOptions { append?: boolean | undefined | null; async?: boolean | undefined | null; } interface writefileResult { file: string; append: boolean; } type strORobj = string | Record<string, any>; /** * sync write to file recursively (auto create dirname) * @param file * @param content */ declare function writefile(file: string, content: strORobj): writefileResult; declare function writefile(file: string, content: strORobj, opt: { append: boolean; async: undefined | null; }): writefileResult; /** * async write to file recursively (auto create dirname) * @param file * @param content * @param opt */ declare function writefile(file: string, content: strORobj, opt: { async: true; }): Promise<writefileResult>; /** * async write to file recursively (auto create dirname) * @param file * @param content * @param opt */ declare function writefile(file: string, content: strORobj, opt: { async: true; append: boolean | undefined | null; }): Promise<writefileResult>; /** * sync write to file recursively (auto create dirname) * @param file * @param content * @param opt */ declare function writefile(file: string, content: strORobj, opt: { async?: false | undefined | null; append?: boolean; }): writefileResult; /** * is non-markdown file * @param path * @returns */ declare const isAsset: (path: any) => boolean; /** * is markdown file * @param path * @returns */ declare const isMarkdown: (path: any) => boolean; /** * MD5 file synchronously * @param path */ declare function md5FileSync(path?: string): string | undefined; /** * PHP MD5 Equivalent * @param data */ declare function md5(data?: string): string | undefined; /** * convert file to hash * @param alogarithm * @param path * @param encoding * @returns */ declare function file_to_hash(alogarithm: 'sha1' | 'sha256' | 'sha384' | 'sha512' | 'md5', path: fs.PathLike, encoding?: cryptolib.BinaryToTextEncoding): Promise<string>; /** * convert data to hash (async) * @param alogarithm * @param data * @param encoding * @returns */ declare function data_to_hash(alogarithm: ("sha1" | "sha256" | "sha384" | "sha512" | "md5") | undefined, data: cryptolib__default.BinaryLike, encoding?: cryptolib.BinaryToTextEncoding): Promise<string>; /** * convert data to hash (sync) * @param alogarithm * @param data * @param encoding * @returns */ declare function data_to_hash_sync(alogarithm: ("sha1" | "sha256" | "sha384" | "sha512" | "md5") | undefined, data: cryptolib__default.BinaryLike, encoding?: cryptolib.BinaryToTextEncoding): string; /** * get hashes from folder * @param alogarithm * @param folder * @param options * @returns */ declare function folder_to_hash(alogarithm: 'sha1' | 'sha256' | 'sha384' | 'sha512' | 'md5', folder: string, options: { /** * override pattern to search files */ pattern: string; /** * ignore files by patterns from search */ ignored: string[]; /** * encoding type */ encoding: cryptolib__default.BinaryToTextEncoding; }): Promise<{ filesWithHash: Record<string, string>; hash: string; }>; /** * convert data to hash * @param alogarithm * @param url * @param encoding * @returns */ declare function url_to_hash(alogarithm: ("sha1" | "sha256" | "sha384" | "sha512" | "md5") | undefined, url: string, encoding?: cryptolib__default.BinaryToTextEncoding): Promise<unknown>; /** * check development NODE_ENV * @returns */ declare function isdev(): boolean; /** * Check if current runner is JEST * * source: {@link https://stackoverflow.com/a/52231746} * @returns */ declare function areWeTestingWithJest(): boolean; declare global { interface JSON { /** * @see {@link https://stackoverflow.com/a/61962964/6404439} * @example * console.log(JSON.stringify({a:{a:{a:{a:[{a:{hello:"world"}}]}}}})) */ stringifyWithCircularRefs: (obj: any, space?: number) => string; } } /** * transform any object to json. Suppress `TypeError: Converting circular structure to JSON` * @param data * @returns */ declare function jsonStringifyWithCircularRefs(data: any): string; /** * parse json stringified with circular refs */ declare function jsonParseWithCircularRefs<T>(data: string): T; /** * Parses a JSON string with support for circular references. * @param text - The JSON string to parse. * @param reviver - Optional function to transform the parsed values. * @returns The parsed object. */ declare const parse: (text: string, reviver?: (...args: any[]) => any) => any; /** * Stringifies an object into JSON with support for circular references. * @param value - The object to stringify. * @param replacer - Optional function to transform the values before stringifying. * @param space - Optional number or string to use as a white space in the output. * @returns The JSON string representation of the object. */ declare const stringify: (value: any, replacer?: ((this: any, key: string, value: any) => any) | string[], space?: string | number) => string; /** * Converts an object with circular references to JSON. * @param any - The object to convert. * @returns The JSON representation of the object. */ declare const toJSON: (any: any) => any; /** * Parses a circular object from JSON. * @param any - The JSON string to parse. * @returns The parsed object. */ declare const fromJSON: (any: string) => any; /** * @example * const console = Logger * Logger.log('hello world'); // should be written in <temp folder>/logs/[trace-name].log */ declare class Logger { static log(...args: any[]): void; static info(...args: any[]): void; static error(...args: any[]): void; private static tracer; } /** * search yarn root workspace folder * @param ctx option with property `base_dir` */ declare function findYarnRootWorkspace(ctx: { base_dir: string; }): string | null; /** * Resolves the path of a command binary from `node_modules/.bin`. * * This function searches for the specified command in various directories, including * the current working directory, the module directory, and optionally, user-defined * search directories. If the command is not found, it returns the original command name. * * @param commandName - The name of the command to resolve. * @param options - Optional parameters for command resolution. * @param options.searchDir - A custom directory or an array of directories to search for * the command. If provided, these directories will be included in the search. * @returns The resolved command path if found; otherwise, returns the original command name. */ declare function resolveCommand(commandName: string, options?: { searchDir: string | string[]; }): string; declare const cmd: typeof resolveCommand; /** * no operations * @param _args * @returns */ declare function noop(..._args: any[]): void; type Func = (...args: any[]) => any & CallableFunction; interface FN extends Func { then: (...args: any[]) => any; catch: (...args: any[]) => any; } declare function envNunjucks(loader?: nunjucks.ILoader | nunjucks.ILoader[] | null | undefined, opts?: nunjucks.ConfigureOptions | undefined): nunjucks.Environment; /** * sort alphabetically object by key * @param obj * @returns */ declare function orderKeys<T extends Record<string, any>>(obj: Record<string, any>): T; /** * get object property by key, supress typescript error * @param item * @param key * @returns */ declare function getObjectProperty(item: Record<string, any>, key: string): any; interface PersistentCacheOpt { /** * folder cache * @description The base directory where `persistent-cache` will save its caches. * * Defaults to the main modules directory */ base: string; /** * cache instance name * @description The name of the cache. Determines the name of the created folder where the data is stored, which is just `base + name`. * * Defaults to `cache` */ name: string; /** * expired in milliseconds * @description The amount of milliseconds a cache entry should be valid for. If not set, cache entries are not invalidated (stay until deleted). * * Defaults to `undefined` (infinite) */ duration: number; /** * Whether the cache should use memory caching or not (mirrors all cache data in the ram, * saving disk I/O and increasing performance). * * Defaults to `true` */ memory: boolean; /** * Whether the cache should be persistent, aka if it should write its data to the disk * for later use or not. Set this to `false` to create a memory-only cache. * * Defaults to `true` */ persist: boolean; } declare class persistentCache implements PersistentCacheOpt { base: string; name: string; duration: number; memory: boolean; persist: boolean; memoryCache: Record<string, any>; constructor(options?: Partial<PersistentCacheOpt>); /** * add cache deferred callback * @param key * @param data * @param cb * @returns */ put(key: string, data: any, cb: { (e: Error | NodeJS.ErrnoException): any; (e: Error | NodeJS.ErrnoException, ...args: any[]): any; } | null | undefined): any; /** * add cache sync * @param key * @param data * @returns boolean=success, any=error */ putSync(key: string, data: any): any | boolean; setSync: (key: string, data: any) => any | boolean; /** * add cache async * @param key * @param data * @returns */ set(key: string, data: any): Promise<unknown>; /** * get cache by key synchronously * @param name * @param fallback * @returns */ getSync<T>(name: string, fallback?: T): T; get<T>(name: string, fallback?: T): Promise<T>; get<T>(name: string, fallback?: (e: Error | undefined | null, entry?: T) => any): void; /** * delete cache * @param name cache key * @param cb */ deleteEntry(name: string, cb: fs.NoParamCallback): void; /** * delete cache sync * @param name cache key * @returns */ deleteEntrySync(name: string): void; getCacheDir(): string; /** * remove current cache directory * @param cb * @returns */ unlink(cb: { (e: Error, ...args: any[]): any; (e: Error, ...args: any[]): any; }): void; private transformFileNameToKey; /** * get all cache keys * @param cb * @returns */ keys(cb: (e: Error | null, ...args: any[]) => any): any; /** * get cache keys sync * @returns */ keysSync(): string[]; /** * get all values * @returns */ valuesSync(): unknown[]; buildFilePath(name: string): string; buildCacheEntry(data: any): { cacheUntil: number | undefined; data: any; }; } type safeCbParam = null | undefined | { (e: Error, ...args: any[]): any; (...args: any[]): any; }; /** * safe callback * @param cb * @returns */ declare function safeCb(cb: safeCbParam): (...args: any[]) => any; /** * async delayed * @param ms milliseconds */ declare const delay: (ms: number) => Promise<unknown>; /** * easy typescript synchronous function type */ type CallableFunctions = (...args: any[]) => any; /** * easy typescript asynchronous function type */ type CallablePromiseFunctions = (...args: any[]) => Promise<any>; /** * easy typescript function type */ type CallableMixFunctions = CallableFunctions | CallablePromiseFunctions; /** * make any function or value to be promise * @param func * @param options * @returns */ declare const promisify: typeof Bluebird.promisify; /** SCHEDULER JOB **/ /*** Postpone executing functions ***/ /** * Bind functions to exit handler * @param key * @param fn */ declare function bindProcessExit(key: string, fn: (...args: any[]) => any): void; /** * @example * ```js * bindProcessExit("scheduler_on_exit", function () { * _log.info("executing scheduled functions"); * scheduler.executeAll(); * }); * ``` * or * ```js * scheduler.register(); * ``` */ declare class scheduler { static verbose: boolean; constructor(); private static registered; /** * Register scheduler to process system */ static register(): void; /** * Add function with key to list * @param key existing key (duplicate) will be overwritten * @param value */ static add(key: string, value: () => any): void; private static postponeCounter; /** * Add function to postpone, the functions will be executed every 5 items added */ static postpone(key: string, value: () => any): void; /** * Execute functon in key and delete * @param key */ static execute(key: string, deleteAfter?: boolean): void; /** * Execute all function lists */ static executeAll(): Promise<void>; } /** * parse version string */ declare class semver { result: { [s: string]: any; } | ArrayLike<any>; /** * @param opt * @returns */ constructor(opt: string | { version: string; }); toString(): string; } /** * increment version range * @param opt * @param by */ declare function semverIncrement(opt: { version: string; } | string, by: string | number): semver; declare function createDuplexStream(): fs$1.WriteStream; /** * escape regex string * @param string * @returns */ declare function escapeRegex(string: string, method?: '1' | '2'): string | undefined; /** * capitalize string first letter of each word which mixed with symbols * @param str * @param moreSymbols add more symbols, default [] * @returns */ declare function capitalize(str: string, moreSymbols?: ConcatArray<string>): string; declare const capitalizer: typeof capitalize; /** * Stream to string * @param stream * @returns */ declare function streamToString(stream: NodeJS.ReadableStream): Promise<unknown>; /** * Buffer to string * @param array * @returns */ declare function bufferToString(array: Buffer): string; /** * Replace path unix-style * @param source * @param toReplace * @param replacement * @returns */ declare function replacePath(source: string, toReplace: string, replacement?: string): Promise<string>; /** * slugify string * @param str * @param ext * @returns */ declare function slugify(str: string, ext?: string): string; /** * check variable is valid http(s) url string * @param string string url to validate * @returns */ declare function isValidHttpUrl(string: string | URL): boolean; /** * generate random id * @param n * @param prefix * @returns */ declare const makeid: (n?: number, prefix?: string) => string; type lib_CallableFunctions = CallableFunctions; type lib_CallableMixFunctions = CallableMixFunctions; type lib_CallablePromiseFunctions = CallablePromiseFunctions; type lib_FN = FN; type lib_Func = Func; type lib_Logger = Logger; declare const lib_Logger: typeof Logger; type lib_PersistentCacheOpt = PersistentCacheOpt; declare const lib_areWeTestingWithJest: typeof areWeTestingWithJest; declare const lib_arrayOfObjUniq: typeof arrayOfObjUniq; declare const lib_array_flatten: typeof array_flatten; declare const lib_array_random: typeof array_random; declare const lib_array_remove_empty: typeof array_remove_empty; declare const lib_array_shuffle: typeof array_shuffle; declare const lib_array_shuffle_swap: typeof array_shuffle_swap; declare const lib_array_unique: typeof array_unique; declare const lib_bindProcessExit: typeof bindProcessExit; declare const lib_bufferToString: typeof bufferToString; declare const lib_capitalize: typeof capitalize; declare const lib_capitalizer: typeof capitalizer; declare const lib_chain: typeof chain; declare const lib_cmd: typeof cmd; declare const lib_copyPath: typeof copyPath; declare const lib_createDuplexStream: typeof createDuplexStream; declare const lib_createWriteStream: typeof createWriteStream; declare const lib_data_to_hash: typeof data_to_hash; declare const lib_data_to_hash_sync: typeof data_to_hash_sync; declare const lib_debug: typeof debug; declare const lib_del: typeof del; declare const lib_delay: typeof delay; declare const lib_emptyDir: typeof emptyDir; declare const lib_envNunjucks: typeof envNunjucks; declare const lib_escapeRegex: typeof escapeRegex; declare const lib_file_to_hash: typeof file_to_hash; declare const lib_findYarnRootWorkspace: typeof findYarnRootWorkspace; declare const lib_fixDriveLetter: typeof fixDriveLetter; declare const lib_folder_to_hash: typeof folder_to_hash; declare const lib_fromJSON: typeof fromJSON; declare const lib_getAppRootDir: typeof getAppRootDir; declare const lib_getObjectProperty: typeof getObjectProperty; declare const lib_image_base64_encode: typeof image_base64_encode; declare const lib_isAsset: typeof isAsset; declare const lib_isMarkdown: typeof isMarkdown; declare const lib_isValidHttpUrl: typeof isValidHttpUrl; declare const lib_isWindows: typeof isWindows; declare const lib_isdev: typeof isdev; declare const lib_joinSolve: typeof joinSolve; declare const lib_jsonParseWithCircularRefs: typeof jsonParseWithCircularRefs; declare const lib_jsonStringifyWithCircularRefs: typeof jsonStringifyWithCircularRefs; declare const lib_makeid: typeof makeid; declare const lib_md5: typeof md5; declare const lib_md5FileSync: typeof md5FileSync; declare const lib_noop: typeof noop; declare const lib_normalizePath: typeof normalizePath; declare const lib_normalizePathUnix: typeof normalizePathUnix; declare const lib_orderKeys: typeof orderKeys; declare const lib_parse: typeof parse; type lib_persistentCache = persistentCache; declare const lib_persistentCache: typeof persistentCache; declare const lib_promisify: typeof promisify; declare const lib_rand: typeof rand; declare const lib_readDir: typeof readDir; declare const lib_readDirAsync: typeof readDirAsync; type lib_readDirDone = readDirDone; declare const lib_removeCwd: typeof removeCwd; declare const lib_replacePath: typeof replacePath; declare const lib_resolveCommand: typeof resolveCommand; declare const lib_safeCb: typeof safeCb; declare const lib_sbgDebug: typeof sbgDebug; type lib_scheduler = scheduler; declare const lib_scheduler: typeof scheduler; type lib_semver = semver; declare const lib_semver: typeof semver; declare const lib_semverIncrement: typeof semverIncrement; declare const lib_slugify: typeof slugify; type lib_strORobj = strORobj; declare const lib_streamToString: typeof streamToString; declare const lib_stringify: typeof stringify; declare const lib_toJSON: typeof toJSON; declare const lib_toMilliseconds: typeof toMilliseconds; declare const lib_trueCasePath: typeof trueCasePath; declare const lib_trueCasePathSync: typeof trueCasePathSync; declare const lib_url_to_hash: typeof url_to_hash; declare const lib_writefile: typeof writefile; type lib_writefileOpt = writefileOpt; type lib_writefileResult = writefileResult; declare namespace lib { export { type lib_CallableFunctions as CallableFunctions, type lib_CallableMixFunctions as CallableMixFunctions, type lib_CallablePromiseFunctions as CallablePromiseFunctions, type lib_FN as FN, type lib_Func as Func, lib_Logger as Logger, type lib_PersistentCacheOpt as PersistentCacheOpt, lib_areWeTestingWithJest as areWeTestingWithJest, lib_arrayOfObjUniq as arrayOfObjUniq, lib_array_flatten as array_flatten, lib_array_random as array_random, lib_array_remove_empty as array_remove_empty, lib_array_shuffle as array_shuffle, lib_array_shuffle_swap as array_shuffle_swap, lib_array_unique as array_unique, lib_bindProcessExit as bindProcessExit, lib_bufferToString as bufferToString, lib_capitalize as capitalize, lib_capitalizer as capitalizer, lib_chain as chain, lib_cmd as cmd, lib_copyPath as copyPath, lib_createDuplexStream as createDuplexStream, lib_createWriteStream as createWriteStream, lib_data_to_hash as data_to_hash, lib_data_to_hash_sync as data_to_hash_sync, lib_debug as debug, lib_del as del, lib_delay as delay, lib_emptyDir as emptyDir, lib_envNunjucks as envNunjucks, lib_escapeRegex as escapeRegex, lib_file_to_hash as file_to_hash, lib_findYarnRootWorkspace as findYarnRootWorkspace, lib_fixDriveLetter as fixDriveLetter, lib_folder_to_hash as folder_to_hash, lib_fromJSON as fromJSON, lib_getAppRootDir as getAppRootDir, lib_getObjectProperty as getObjectProperty, lib_image_base64_encode as image_base64_encode, lib_isAsset as isAsset, lib_isMarkdown as isMarkdown, lib_isValidHttpUrl as isValidHttpUrl, lib_isWindows as isWindows, lib_isdev as isdev, normalizePath as joinPath, lib_joinSolve as joinSolve, lib_jsonParseWithCircularRefs as jsonParseWithCircularRefs, lib_jsonStringifyWithCircularRefs as jsonStringifyWithCircularRefs, lib_makeid as makeid, lib_md5 as md5, lib_md5FileSync as md5FileSync, lib_noop as noop, lib_normalizePath as normalizePath, lib_normalizePathUnix as normalizePathUnix, lib_orderKeys as orderKeys, lib_parse as parse, normalizePath as pathJoin, lib_persistentCache as persistentCache, lib_promisify as promisify, lib_rand as rand, lib_readDir as readDir, lib_readDirAsync as readDirAsync, type lib_readDirDone as readDirDone, lib_removeCwd as removeCwd, lib_replacePath as replacePath, lib_resolveCommand as resolveCommand, lib_safeCb as safeCb, lib_sbgDebug as sbgDebug, lib_scheduler as scheduler, lib_semver as semver, lib_semverIncrement as semverIncrement, lib_slugify as slugify, type lib_strORobj as strORobj, lib_streamToString as streamToString, lib_stringify as stringify, lib_toJSON as toJSON, lib_toMilliseconds as toMilliseconds, lib_trueCasePath as trueCasePath, lib_trueCasePathSync as trueCasePathSync, lib_url_to_hash as url_to_hash, lib_writefile as writefile, type lib_writefileOpt as writefileOpt, type lib_writefileResult as writefileResult }; } type index_d$1_CallableFunctions = CallableFunctions; type index_d$1_CallableMixFunctions = CallableMixFunctions; type index_d$1_CallablePromiseFunctions = CallablePromiseFunctions; type index_d$1_FN = FN; type index_d$1_Func = Func; type index_d$1_Logger = Logger; declare const index_d$1_Logger: typeof Logger; type index_d$1_PersistentCacheOpt = PersistentCacheOpt; declare const index_d$1_areWeTestingWithJest: typeof areWeTestingWithJest; declare const index_d$1_arrayOfObjUniq: typeof arrayOfObjUniq; declare const index_d$1_array_flatten: typeof array_flatten; declare const index_d$1_array_random: typeof array_random; declare const index_d$1_array_remove_empty: typeof array_remove_empty; declare const index_d$1_array_shuffle: typeof array_shuffle; declare const index_d$1_array_shuffle_swap: typeof array_shuffle_swap; declare const index_d$1_array_unique: typeof array_unique; declare const index_d$1_bindProcessExit: typeof bindProcessExit; declare const index_d$1_bufferToString: typeof bufferToString; declare const index_d$1_capitalize: typeof capitalize; declare const index_d$1_capitalizer: typeof capitalizer; declare const index_d$1_chain: typeof chain; declare const index_d$1_cmd: typeof cmd; declare const index_d$1_copyPath: typeof copyPath; declare const index_d$1_createDuplexStream: typeof createDuplexStream; declare const index_d$1_createWriteStream: typeof createWriteStream; declare const index_d$1_data_to_hash: typeof data_to_hash; declare const index_d$1_data_to_hash_sync: typeof data_to_hash_sync; declare const index_d$1_debug: typeof debug; declare const index_d$1_del: typeof del; declare const index_d$1_delay: typeof delay; declare const index_d$1_emptyDir: typeof emptyDir; declare const index_d$1_envNunjucks: typeof envNunjucks; declare const index_d$1_escapeRegex: typeof escapeRegex; declare const index_d$1_file_to_hash: typeof file_to_hash; declare const index_d$1_findYarnRootWorkspace: typeof findYarnRootWorkspace; declare const index_d$1_fixDriveLetter: typeof fixDriveLetter; declare const index_d$1_folder_to_hash: typeof folder_to_hash; declare const index_d$1_fromJSON: typeof fromJSON; declare const index_d$1_getAppRootDir: typeof getAppRootDir; declare const index_d$1_getObjectProperty: typeof getObjectProperty; declare const index_d$1_image_base64_encode: typeof image_base64_encode; declare const index_d$1_isAsset: typeof isAsset; declare const index_d$1_isMarkdown: typeof isMarkdown; declare const index_d$1_isValidHttpUrl: typeof isValidHttpUrl; declare const index_d$1_isWindows: typeof isWindows; declare const index_d$1_isdev: typeof isdev; declare const index_d$1_joinSolve: typeof joinSolve; declare const index_d$1_jsonParseWithCircularRefs: typeof jsonParseWithCircularRefs; declare const index_d$1_jsonStringifyWithCircularRefs: typeof jsonStringifyWithCircularRefs; declare const index_d$1_makeid: typeof makeid; declare const index_d$1_md5: typeof md5; declare const index_d$1_md5FileSync: typeof md5FileSync; declare const index_d$1_noop: typeof noop; declare const index_d$1_normalizePath: typeof normalizePath; declare const index_d$1_normalizePathUnix: typeof normalizePathUnix; declare const index_d$1_orderKeys: typeof orderKeys; declare const index_d$1_parse: typeof parse; type index_d$1_persistentCache = persistentCache; declare const index_d$1_persistentCache: typeof persistentCache; declare const index_d$1_promisify: typeof promisify; declare const index_d$1_rand: typeof rand; declare const index_d$1_readDir: typeof readDir; declare const index_d$1_readDirAsync: typeof readDirAsync; type index_d$1_readDirDone = readDirDone; declare const index_d$1_removeCwd: typeof removeCwd; declare const index_d$1_replacePath: typeof replacePath; declare const index_d$1_resolveCommand: typeof resolveCommand; declare const index_d$1_safeCb: typeof safeCb; declare const index_d$1_sbgDebug: typeof sbgDebug; type index_d$1_scheduler = scheduler; declare const index_d$1_scheduler: typeof scheduler; type index_d$1_semver = semver; declare const index_d$1_semver: typeof semver; declare const index_d$1_semverIncrement: typeof semverIncrement; declare const index_d$1_slugify: typeof slugify; type index_d$1_strORobj = strORobj; declare const index_d$1_streamToString: typeof streamToString; declare const index_d$1_stringify: typeof stringify; declare const index_d$1_toJSON: typeof toJSON; declare const index_d$1_toMilliseconds: typeof toMilliseconds; declare const index_d$1_trueCasePath: typeof trueCasePath; declare const index_d$1_trueCasePathSync: typeof trueCasePathSync; declare const index_d$1_url_to_hash: typeof url_to_hash; declare const index_d$1_writefile: typeof writefile; type index_d$1_writefileOpt = writefileOpt; type index_d$1_writefileResult = writefileResult;