@diplodoc/cli 5.36.3 → 5.36.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/arcadia-vcs.js +6 -1
- package/build/arcadia-vcs.js.map +2 -2
- package/build/core/markdown/utils.d.ts +1 -0
- package/build/index.js +3 -3
- package/build/index.mjs +3 -3
- package/lib/markdown/index.js +27 -1
- package/lib/markdown/index.js.map +2 -2
- package/lib/markdown/index.mjs +27 -1
- package/lib/markdown/index.mjs.map +2 -2
- package/lib/markdown/utils.d.ts +1 -0
- package/lib/utils/index.js +1 -1
- package/lib/utils/index.js.map +2 -2
- package/lib/utils/index.mjs +1 -1
- package/lib/utils/index.mjs.map +2 -2
- package/package.json +1 -1
package/lib/utils/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/core/utils/index.ts", "../../src/core/utils/common.ts", "../../src/core/utils/decorators.ts", "../../src/core/utils/console.ts", "../../src/core/utils/extension.ts", "../../src/core/utils/path.ts", "../../src/core/utils/string.ts", "../../src/core/utils/url.ts", "../../src/core/utils/markdown.ts", "../../src/core/utils/file.ts", "../../src/core/utils/graph/index.ts", "../../src/core/utils/json/index.ts", "../../src/core/utils/fs.ts", "../../src/core/utils/conditions.ts"],
|
|
4
|
-
"sourcesContent": ["export * from './common';\nexport * from './console';\nexport * from './decorators';\nexport * from './extension';\nexport * from './path';\nexport * from './string';\nexport * from './url';\nexport * from './markdown';\nexport * from './file';\nexport * from './graph';\nexport * from './json';\nexport * from './fs';\nexport * from './conditions';\n", "import {isObject} from 'lodash';\n\nimport {bounded} from './decorators';\n\nexport const all = Promise.all.bind(Promise);\n\nexport const race = Promise.race.bind(Promise);\n\nexport function noop() {}\n\nexport function get<K extends string>(key: K) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function <T extends Record<K, any>>(\n object: T,\n ): T extends Record<K, infer V> ? V : never {\n return object[key];\n };\n}\n\nexport function zip<T = unknown>(keys: string[], values: T[]) {\n return keys.reduce((acc, key, index) => {\n acc[key] = values[index];\n return acc;\n }, {} as Hash<T>);\n}\n\nexport function own<V = unknown, T extends string = string>(\n box: unknown,\n field: T,\n): box is Record<T, V> {\n return (\n Boolean(box && typeof box === 'object') && Object.prototype.hasOwnProperty.call(box, field)\n );\n}\n\nexport function copyJson<T extends object>(\n json: T | undefined,\n): T extends DeepFrozen<infer R> ? R : T | undefined {\n // @ts-ignore\n return json ? JSON.parse(JSON.stringify(json)) : json;\n}\n\nexport function freezeJson<T>(target: T, visited = new Set()): T {\n if (!visited.has(target)) {\n visited.add(target);\n\n if (Array.isArray(target)) {\n target.forEach((item) => freezeJson(item, visited));\n }\n\n if (isObject(target) && !Object.isSealed(target)) {\n Object.freeze(target);\n Object.keys(target).forEach((key) =>\n freezeJson(target[key as keyof typeof target], visited),\n );\n }\n }\n\n return target;\n}\n\nexport function errorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error;\n }\n\n if (own<string, 'message'>(error, 'message')) {\n return error.message;\n }\n\n return String(error);\n}\n\nexport function fallbackLang(lang: string) {\n if (['kz', 'ua', 'be', 'ru'].includes(lang)) {\n return 'ru';\n }\n\n return 'en';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class Defer<T = any> {\n promise: Promise<T>;\n\n resolve!: (result: T) => void;\n\n reject!: (error: unknown) => void;\n\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n\ntype CancelAPI = {\n cancel: () => void;\n skip: () => void;\n};\n\nexport function wait(delay: number, action = () => {}): Promise<void> & CancelAPI {\n let timeout: NodeJS.Timeout;\n const promise = new Promise((resolve) => {\n timeout = setTimeout(resolve, delay);\n }).then(() => action());\n\n Object.assign(promise, {\n cancel: () => clearTimeout(timeout),\n skip: () => {\n action = () => {};\n },\n });\n\n return promise as Promise<void> & CancelAPI;\n}\n\nexport type Bucket<T> = {\n get(): T;\n set(value: T): void;\n};\n\nexport function bucket<T>() {\n let _value: T;\n\n return {\n get: () => _value,\n set: (value: T) => {\n _value = value;\n },\n };\n}\n\nexport class Buckets<T> {\n private scope: Map<string, T> = new Map();\n\n @bounded\n bind(key: string) {\n return {\n get: () => this.get(key),\n set: (value: T) => this.set(key, value),\n };\n }\n\n @bounded\n set(key: string, value: T) {\n this.scope.set(key, value);\n }\n\n @bounded\n get(key: string): T {\n return this.scope.get(key) as T;\n }\n\n @bounded\n delete(key: string) {\n this.scope.delete(key);\n }\n}\n", "export function bounded(_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n this[methodName] = this[methodName].bind(this);\n });\n}\n\nconst Release = Symbol('Cache');\n\ntype DecoratedMethod = Function & {\n [Release](args: unknown[]): void;\n};\n\nexport function memoize(...props: string[] | [Function]) {\n return function (_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n const hash =\n typeof props[0] === 'function'\n ? props[0]\n : function (...args: unknown[]) {\n const mem = args.slice(0, props.length);\n if (!mem.every(isPrimitive)) {\n return null;\n }\n\n return props.map((prop, index) => `${prop}=${mem[index]}`).join('&');\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n const cache = new Map();\n const method = this[methodName];\n\n this[methodName] = function (this: unknown, ...args: unknown[]) {\n const key = hash.call(this, ...args);\n\n if (key === null) {\n return method.call(this, ...args);\n }\n\n if (!cache.has(key)) {\n cache.set(key, method.call(this, ...args));\n }\n\n return cache.get(key);\n };\n this[methodName][Release] = (args: unknown[]) => {\n const key = hash.call(this, ...args);\n\n cache.delete(key);\n };\n });\n };\n}\n\nmemoize.release = (method: Function, ...args: unknown[]) => {\n if (Release in method) {\n (method as DecoratedMethod)[Release](args);\n }\n};\n\nconst PRIMITIVE_TYPES = ['string', 'number', 'symbol', 'boolean', 'undefined'];\n\nfunction isPrimitive(value: unknown) {\n return !value || PRIMITIVE_TYPES.includes(typeof value);\n}\n", "import {Console} from 'node:console';\n\nclass MutableConsole extends Console {\n log(...args: unknown[]) {\n this.write('log', args);\n }\n\n time(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.time(label);\n }\n }\n\n timeEnd(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.timeEnd(label);\n }\n }\n\n private write(level: 'log' | 'error' | 'warn', args: unknown[]) {\n if (process.env.NODE_ENV !== 'test') {\n super[level](...args);\n }\n }\n}\n\nconst _console = new MutableConsole(process.stdout, process.stderr, false);\n\nexport {_console as console};\n", "import type {Hook, HookMap} from 'tapable';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Hooks = Hash<Hook<any, any> | HookMap<any>>;\n\nexport function generateHooksAccess<THooks extends Hooks>(\n name: string,\n hooks: (name: string) => THooks,\n) {\n const Hooks = Symbol(`${name}Hooks`);\n\n function getHooks(program: object | undefined): THooks {\n return (program && (program as {[Hooks]: THooks})[Hooks]) || hooks('Unknown');\n }\n\n function withHooks<T extends ClassType>(Target: T, {kind}: ClassDecoratorContext): T {\n if (kind !== 'class') {\n throw new TypeError(`Decorator 'withHooks' is not applicable to '${kind}'.`);\n }\n\n return class extends Target {\n [Hooks] = intercept(this.name, hooks(this.name || name));\n };\n }\n\n return [getHooks, withHooks, Hooks] as const;\n}\n\nexport type HookMeta = {\n service: string;\n hook: string;\n name: string;\n type: string;\n};\n\nexport function intercept<T extends Hooks>(service: string, hooks: T): T {\n for (const [hook, handler] of Object.entries(hooks)) {\n handler.intercept({\n register: (info) => {\n const {type, name, fn} = info;\n const meta = {service, hook, name, type};\n\n if (type === 'promise') {\n info.fn = async (...args: unknown[]) => {\n try {\n return await fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else if (type === 'sync') {\n info.fn = (...args: unknown[]) => {\n try {\n return fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else {\n throw new TypeError('Unexpected hook tap type - ' + type);\n }\n\n return info;\n },\n });\n }\n\n return hooks;\n}\n", "import type {Langs} from '~/commands/build/types';\n\nimport {dirname, extname, isAbsolute, join, normalize} from 'node:path';\nimport _normalizePath from 'normalize-path';\n\nimport {isExternalHref} from '~/core/utils';\n\nexport function normalizePath(path: string): NormalizedPath {\n return _normalizePath(normalize(_normalizePath(path, false)), false);\n}\n\nexport function isRelativePath(path: string): path is RelativePath {\n return !isExternalHref(path) && !isAbsolute(path);\n}\n\nexport function langFromPath(path: string, config: {lang?: string; langs: Langs}): string {\n const {lang, langs} = config;\n const pathBaseLang = normalizePath(path).split('/')[0];\n const pathLang =\n langs.some((l) => (typeof l === 'string' ? l === pathBaseLang : l.lang === pathBaseLang)) &&\n pathBaseLang;\n\n const result = pathLang || lang || langs[0];\n return typeof result === 'string' ? result : result.lang;\n}\n\nexport function rebasePath(root: RelativePath, path: RelativePath) {\n return normalizePath(join(dirname(root), path));\n}\n\nexport function fullPath(\n path: AbsolutePath | NormalizedPath,\n root: NormalizedPath,\n): NormalizedPath {\n if (path.match(/^(\\/|\\\\)/)) {\n return normalizePath(path.slice(1));\n } else {\n return normalizePath(join(dirname(root), path));\n }\n}\n\nexport function getDepth(path: string) {\n return path\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/|\\/$/g, '')\n .split('/').length;\n}\n\nexport function getDepthPath(depth: number) {\n return Array(depth).fill('../').join('') || './';\n}\n\nexport function setExt<T extends AnyPath>(path: T, newext: string): T {\n newext = newext.startsWith('.') ? newext.slice(1) : newext;\n\n return (path.slice(0, -extname(path).length) + (newext ? '.' + newext : '')) as T;\n}\n", "export function replaceAll(string: string, match: string, replace: string) {\n if (!string) {\n return string;\n }\n\n const matches = [];\n\n let index = -1;\n while ((index = string.indexOf(match, index + 1)) > -1) {\n matches.push([index, index + match.length]);\n }\n\n return matches.reduceRight((string, match) => {\n return string.slice(0, match[0]) + replace + string.slice(match[1]);\n }, string);\n}\n", "import type {UrlWithStringQuery} from 'node:url';\n\nimport {parse} from 'node:url';\nimport {cloneDeepWith, isString, pick} from 'lodash';\n\nimport {normalizePath} from './path';\n\nexport function isExternalHref(href: string) {\n return /^(\\w{1,10}:)?\\/\\//.test(href) || /^([+\\w]{1,10}:)/.test(href);\n}\n\nexport function longLink(href: string) {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path;\n\n if (result.endsWith('/')) {\n result += 'index.html';\n }\n\n if (result.match(/\\.[^/\\\\]+$/)) {\n result += '.html';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport function shortLink(href: string): string {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path\n .replace(/\\\\/g, '/')\n .replace(/\\/index\\.html$/, '/')\n .replace(/\\/index$/, '/')\n .replace(/^index\\.html$/, '.')\n .replace(/^index$/, '.')\n .replace(/\\.html$/, '');\n\n if (result === '' || result === './') {\n result = '.';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport const MEDIA_FORMATS = /\\.(svg|png|gif|jpe?g|bmp|webp|ico)$/i;\n\n// TODO: should we deprecate this?\nconst DOC_FORMATS = /\\.(txt|pdf|docx|xlsx|csv|vsd|ya?ml)$/i;\n\nexport function isMediaLink(link: string) {\n return MEDIA_FORMATS.test(link) || DOC_FORMATS.test(link);\n}\n\ntype LocalUrlInfo = Pick<UrlWithStringQuery, 'hash' | 'search'> & {\n path: NormalizedPath;\n};\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\n\nfunction unescapeAll(str: string) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n return str;\n }\n\n return str.replace(UNESCAPE_MD_RE, (_match: string, escaped: string) => escaped);\n}\n\nexport function parseLocalUrl<T = LocalUrlInfo>(url: string | undefined) {\n if (!url || isExternalHref(url) || url.startsWith('/')) {\n return null;\n }\n\n try {\n const parsed = parse(unescapeAll(url));\n\n if (parsed.host || parsed.protocol) {\n return null;\n }\n\n if (parsed.path) {\n parsed.path = normalizePath(parsed.path);\n }\n\n return pick(parsed, ['path', 'search', 'hash']) as T;\n } catch {\n return null;\n }\n}\n\nexport const LINK_KEYS_LEADING_CONFIG = ['href'];\nexport const LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [\n 'src',\n 'url',\n 'href',\n 'icon',\n 'image',\n 'desktop',\n 'mobile',\n 'tablet',\n 'previewImg',\n 'image',\n 'avatar',\n 'logo',\n 'light',\n 'dark',\n];\n\nexport const LINK_KEYS = [\n ...new Set([...LINK_KEYS_LEADING_CONFIG, ...LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG]),\n];\n\nexport function walkLinks(object: object, modify: (value: string) => string | void) {\n // Clone the object deeply with a customizer function that modifies matching keys\n return cloneDeepWith(object, (value: unknown, key) => {\n if (LINK_KEYS.includes(key as string) && isString(value)) {\n return modify(value);\n }\n\n return undefined;\n });\n}\n", "import type Token from 'markdown-it/lib/token';\n\ntype TokenWalker = (\n token: Token,\n state: {commented: boolean; index: number},\n) => void | undefined | {skip: number};\n\nexport function filterTokens(tokens: Token[], type: string, handler: TokenWalker) {\n let commented = false;\n\n if (!tokens || !tokens.length) {\n return;\n }\n\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index];\n\n if (token.type === 'html_block') {\n const commentStart = token.content.match('<!--');\n const commentEnd = token.content.match('-->');\n\n if (commentStart && !commentEnd) {\n commented = true;\n }\n\n if (!commentStart && commentEnd) {\n commented = false;\n }\n }\n\n if (token.type === type) {\n const result = handler(token, {commented, index});\n if (result?.skip) {\n index += result?.skip - 1;\n }\n }\n }\n}\n", "import {normalizePath} from './path';\nimport {copyJson} from './common';\n\ntype Formatter<T, O> = (data: T) => O;\n\nconst toString = <T>(data: T) => {\n if (typeof data === 'string') {\n return data;\n }\n\n return JSON.stringify(data);\n};\n\nexport class VFile<T extends string | object = string | object, Info extends Hash = {}> {\n get path(): NormalizedPath {\n return this._path;\n }\n\n set path(value: RelativePath) {\n this._path = normalizePath(value);\n }\n\n get data() {\n return this._data;\n }\n\n set data(value: T) {\n this._data = value;\n }\n\n get info() {\n return this._info;\n }\n\n set info(value: Info) {\n this._info = value;\n }\n\n private _path: NormalizedPath;\n\n private _data: T;\n\n private _info: Info = {} as Info;\n\n private _format: Formatter<T, string>;\n\n constructor(path: RelativePath, data: T, formatter: Formatter<T, string> = toString) {\n this._path = normalizePath(path);\n this._data = data;\n this._format = formatter;\n }\n\n copy(path?: RelativePath) {\n const data = typeof this._data === 'string' ? this._data : copyJson(this._data);\n return new VFile<T>(path || this._path, data as T, this._format);\n }\n\n format(formatter: Formatter<T, string>) {\n this._format = formatter;\n }\n\n toString() {\n return this._format(this._data);\n }\n}\n", "import {DepGraph} from 'dependency-graph';\n\nexport type SerializedGraph<Data = {type: string}> = {\n nodes: Array<{\n name: string;\n data?: Data;\n }>;\n dependencies: Array<{\n from: string;\n to: string;\n }>;\n};\n\nexport class Graph<Data = {type: string}> extends DepGraph<Data> {\n static is<Data = {type: string}>(data: unknown): data is SerializedGraph<Data> {\n if (data instanceof Graph) {\n return true;\n }\n return Boolean(\n data && typeof data === 'object' && '__type' in data && data.__type === '$$Graph',\n );\n }\n\n static deserialize(message: SerializedGraph) {\n return new Graph().consume(message);\n }\n\n constructor() {\n super({circular: true});\n }\n\n /**\n * Extracts a subgraph related to the specified node\n * @param nodeName - name of the node for which to extract the subgraph\n * @returns new Graph instance with the extracted subgraph\n */\n extract(nodeName: string): Graph<Data> {\n const extractedGraph = new Graph<Data>();\n\n if (!this.hasNode(nodeName)) {\n return extractedGraph;\n }\n\n // Recursively copy dependencies (nodes that the initial node depends on)\n this.copyDependenciesRecursively(nodeName, extractedGraph, new Set());\n\n // Recursively copy dependent nodes (nodes that depend on the initial node)\n this.copyDependentsRecursively(nodeName, extractedGraph, new Set());\n\n return extractedGraph;\n }\n\n /**\n * Consumes a serialized graph\n */\n consume(graph: Graph<Data> | SerializedGraph<Data> | undefined): this {\n if (!graph) {\n return this;\n }\n\n if (graph instanceof Graph) {\n graph = graph.serialize();\n }\n\n // First add all nodes\n for (const node of graph.nodes) {\n this.addNode(node.name);\n if (node.data) {\n this.setNodeData(node.name, node.data);\n }\n }\n\n // Then add all dependencies\n for (const dep of graph.dependencies) {\n this.addDependency(dep.from, dep.to);\n }\n\n return this;\n }\n\n /**\n * Removes node from graph\n * If node dependencies has no other dependants, they will be removed too\n * @param nodeName - node name to remove\n */\n release(nodeName: string): this {\n if (!this.hasNode(nodeName)) {\n return this;\n }\n\n // Get direct parents before removing the node\n const directParents = this.directDependenciesOf(nodeName);\n\n // Remove all incoming dependencies (parents -> node)\n for (const parent of directParents) {\n this.removeDependency(nodeName, parent);\n }\n\n // Remove all outgoing dependencies (node -> children)\n const directDependents = this.directDependentsOf(nodeName);\n for (const dependent of directDependents) {\n this.removeDependency(dependent, nodeName);\n }\n\n // Remove the node itself\n this.removeNode(nodeName);\n\n // Recursively remove parents that have no children left\n for (const parent of directParents) {\n if (this.hasNode(parent) && this.directDependentsOf(parent).length === 0) {\n this.release(parent);\n }\n }\n\n return this;\n }\n\n /**\n * Serializes the graph to a format for transfer between threads\n * @returns serialized representation of the graph\n */\n serialize(): SerializedGraph<Data> {\n const nodes: SerializedGraph<Data>['nodes'] = [];\n const dependencies: SerializedGraph['dependencies'] = [];\n\n // Get all nodes in the graph\n const allNodes = this.overallOrder();\n\n for (const nodeName of allNodes) {\n const nodeData = this.getNodeData(nodeName);\n nodes.push({\n name: nodeName,\n // Some data srtuctures can be Proxy objects,\n // which can't be serialized by threads defaultSerializer.\n // So, read data from this Proxy objects and write it as raw json.\n data: JSON.parse(JSON.stringify(nodeData)),\n });\n }\n\n // Get all dependencies\n for (const nodeName of allNodes) {\n const directDeps = this.directDependenciesOf(nodeName);\n for (const dep of directDeps) {\n dependencies.push({\n from: nodeName,\n to: dep,\n });\n }\n }\n\n nodes.sort((a, b) => (a.name > b.name ? 1 : -1));\n dependencies.sort((a, b) => {\n if (a.from === b.from) {\n return a.to > b.to ? 1 : -1;\n }\n return a.from > b.from ? 1 : -1;\n });\n\n return {nodes, dependencies, __type: '$$Graph'} as SerializedGraph<Data>;\n }\n\n /**\n * Recursively copies node dependencies\n */\n private copyDependenciesRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependencies\n const dependencies = this.directDependenciesOf(nodeName);\n for (const dep of dependencies) {\n this.copyDependenciesRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(nodeName, dep);\n }\n }\n\n /**\n * Recursively copies dependent nodes\n */\n private copyDependentsRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependent nodes\n const dependents = this.directDependentsOf(nodeName);\n for (const dep of dependents) {\n this.copyDependentsRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(dep, nodeName);\n }\n }\n}\n", "export type JsonDiff = {\n added: string[];\n changed: string[];\n removed: string[];\n};\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 JSON \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u044F\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @returns \u041E\u0431\u044A\u0435\u043A\u0442 \u0441 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\u043C\u0438 \u043F\u0443\u0442\u0435\u0439 \u043A \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u043C, \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u043C \u0438 \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u043C \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u043C\n */\nexport function compareJson(oldObj: object, newObj: object): JsonDiff {\n const added: string[] = [];\n const changed: string[] = [];\n const removed: string[] = [];\n\n compareObjects(oldObj, newObj, '', added, changed, removed);\n\n return {\n added: added.sort(),\n changed: changed.sort(),\n removed: removed.sort(),\n };\n}\n\n/**\n * \u0420\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0441\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0438 \u0437\u0430\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u0439\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param path - \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0443\u0442\u044C \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435\n * @param added - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param changed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param removed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n */\nfunction compareObjects(\n oldObj: unknown,\n newObj: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n if (isNullable(oldObj) && isNullable(newObj)) {\n return;\n }\n\n compareEntity(oldObj, newObj, path, added, changed, removed);\n}\n\nfunction addAllPaths(obj: unknown, path: string, arr: string[]): void {\n if (path) {\n arr.push(path);\n }\n\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n addAllPaths(obj[i], currentPath, arr);\n }\n return;\n }\n\n for (const key of Object.keys(obj)) {\n const currentPath = path ? `${path}.${key}` : key;\n addAllPaths((obj as Hash)[key], currentPath, arr);\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n */\nfunction compareArrays(\n oldArr: unknown[],\n newArr: unknown[],\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const maxLength = Math.max(oldArr.length, newArr.length);\n\n for (let i = 0; i < maxLength; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n const oldItem = oldArr[i];\n const newItem = newArr[i];\n\n if (i >= oldArr.length) {\n added.push(currentPath);\n } else if (i >= newArr.length) {\n removed.push(currentPath);\n } else {\n compareObjects(oldItem, newItem, currentPath, added, changed, removed);\n }\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0434\u0432\u0443\u0445 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432\n */\nfunction compareObjectProperties(\n oldObj: Hash,\n newObj: Hash,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);\n\n for (const key of allKeys) {\n const currentPath = path ? `${path}.${key}` : key;\n const oldValue = oldObj[key];\n const newValue = newObj[key];\n const isOldMember = key in oldObj;\n const isNewMember = key in newObj;\n\n if (isOldMember && isNewMember) {\n compareEntity(oldValue, newValue, currentPath, added, changed, removed);\n } else if (isNewMember) {\n addAllPaths(newValue, currentPath, added);\n } else if (isOldMember) {\n addAllPaths(oldValue, currentPath, removed);\n }\n }\n}\n\nfunction compareEntity(\n oldValue: unknown,\n newValue: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n) {\n if (\n (isNullable(oldValue) || isNullable(newValue)) &&\n !(isNullable(oldValue) && isNullable(newValue))\n ) {\n changed.push(path);\n } else if (typeof oldValue !== typeof newValue) {\n changed.push(path);\n } else if (typeof oldValue !== 'object' || typeof newValue !== 'object') {\n if (oldValue !== newValue) {\n changed.push(path);\n }\n } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {\n compareArrays(oldValue, newValue, path, added, changed, removed);\n } else if (!Array.isArray(oldValue) && !Array.isArray(newValue)) {\n compareObjectProperties(oldValue as Hash, newValue as Hash, path, added, changed, removed);\n } else {\n changed.push(path);\n }\n}\n\nfunction isNullable(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n", "import {\n copyFile,\n link,\n mkdir,\n readFile,\n realpath,\n rm,\n stat,\n unlink,\n writeFile,\n} from 'node:fs/promises';\nimport {realpathSync, statSync} from 'node:fs';\n\nexport type FileSystem = {\n stat: typeof stat;\n statSync: typeof statSync;\n realpathSync: typeof realpathSync;\n realpath: typeof realpath;\n link: typeof link;\n unlink: typeof unlink;\n copyFile: typeof copyFile;\n mkdir: typeof mkdir;\n rm: typeof rm;\n readFile: typeof readFile;\n writeFile: typeof writeFile;\n};\n\nexport const fs = {\n stat,\n statSync,\n realpathSync,\n realpath,\n rm,\n link,\n unlink,\n copyFile,\n mkdir,\n readFile,\n writeFile,\n};\n", "import {NoValue, evaluate} from '@diplodoc/liquid';\n\ntype WhenValue = string | boolean;\n\ntype BlockWithWhen = {\n when?: WhenValue;\n [key: string]: unknown;\n};\n\nexport function evaluateWhen(\n whenValue: WhenValue,\n vars: Record<string, unknown>,\n skipMissingVars?: boolean,\n): boolean {\n if (typeof whenValue === 'boolean') {\n return whenValue;\n }\n\n if (typeof whenValue === 'string') {\n const evalResult = evaluate(whenValue, vars, skipMissingVars);\n\n if (evalResult === NoValue && skipMissingVars) {\n return true;\n }\n\n return Boolean(evalResult);\n }\n\n return true;\n}\n\nfunction isBlockWithWhen(item: unknown): item is BlockWithWhen {\n return typeof item === 'object' && item !== null && 'when' in item;\n}\n\nexport function filterBlocksByConditions<T>(\n obj: T,\n vars: Record<string, unknown>,\n skipMissingVars: boolean,\n): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => {\n if (isBlockWithWhen(item)) {\n if (item.when === null || item.when === undefined) {\n return true;\n }\n\n return evaluateWhen(item.when, vars, skipMissingVars);\n }\n\n return true;\n })\n .map((item) => {\n if (isBlockWithWhen(item)) {\n const {when: _, ...rest} = item;\n\n return filterBlocksByConditions(rest, vars, skipMissingVars);\n }\n\n return filterBlocksByConditions(item, vars, skipMissingVars);\n }) as T;\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n result[key] = filterBlocksByConditions(value, vars, skipMissingVars);\n }\n\n return result as T;\n }\n\n return obj;\n}\n\nexport function hasWhenConditions(obj: unknown): boolean {\n if (Array.isArray(obj)) {\n return obj.some((item) => hasWhenConditions(item));\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n if ('when' in obj) {\n return true;\n }\n\n return Object.values(obj).some((value) => hasWhenConditions(value));\n }\n\n return false;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["export * from './common';\nexport * from './console';\nexport * from './decorators';\nexport * from './extension';\nexport * from './path';\nexport * from './string';\nexport * from './url';\nexport * from './markdown';\nexport * from './file';\nexport * from './graph';\nexport * from './json';\nexport * from './fs';\nexport * from './conditions';\n", "import {isObject} from 'lodash';\n\nimport {bounded} from './decorators';\n\nexport const all = Promise.all.bind(Promise);\n\nexport const race = Promise.race.bind(Promise);\n\nexport function noop() {}\n\nexport function get<K extends string>(key: K) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function <T extends Record<K, any>>(\n object: T,\n ): T extends Record<K, infer V> ? V : never {\n return object[key];\n };\n}\n\nexport function zip<T = unknown>(keys: string[], values: T[]) {\n return keys.reduce((acc, key, index) => {\n acc[key] = values[index];\n return acc;\n }, {} as Hash<T>);\n}\n\nexport function own<V = unknown, T extends string = string>(\n box: unknown,\n field: T,\n): box is Record<T, V> {\n return (\n Boolean(box && typeof box === 'object') && Object.prototype.hasOwnProperty.call(box, field)\n );\n}\n\nexport function copyJson<T extends object>(\n json: T | undefined,\n): T extends DeepFrozen<infer R> ? R : T | undefined {\n // @ts-ignore\n return json ? JSON.parse(JSON.stringify(json)) : json;\n}\n\nexport function freezeJson<T>(target: T, visited = new Set()): T {\n if (!visited.has(target)) {\n visited.add(target);\n\n if (Array.isArray(target)) {\n target.forEach((item) => freezeJson(item, visited));\n }\n\n if (isObject(target) && !Object.isSealed(target)) {\n Object.freeze(target);\n Object.keys(target).forEach((key) =>\n freezeJson(target[key as keyof typeof target], visited),\n );\n }\n }\n\n return target;\n}\n\nexport function errorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error;\n }\n\n if (own<string, 'message'>(error, 'message')) {\n return error.message;\n }\n\n return String(error);\n}\n\nexport function fallbackLang(lang: string) {\n if (['kz', 'ua', 'be', 'ru'].includes(lang)) {\n return 'ru';\n }\n\n return 'en';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class Defer<T = any> {\n promise: Promise<T>;\n\n resolve!: (result: T) => void;\n\n reject!: (error: unknown) => void;\n\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n\ntype CancelAPI = {\n cancel: () => void;\n skip: () => void;\n};\n\nexport function wait(delay: number, action = () => {}): Promise<void> & CancelAPI {\n let timeout: NodeJS.Timeout;\n const promise = new Promise((resolve) => {\n timeout = setTimeout(resolve, delay);\n }).then(() => action());\n\n Object.assign(promise, {\n cancel: () => clearTimeout(timeout),\n skip: () => {\n action = () => {};\n },\n });\n\n return promise as Promise<void> & CancelAPI;\n}\n\nexport type Bucket<T> = {\n get(): T;\n set(value: T): void;\n};\n\nexport function bucket<T>() {\n let _value: T;\n\n return {\n get: () => _value,\n set: (value: T) => {\n _value = value;\n },\n };\n}\n\nexport class Buckets<T> {\n private scope: Map<string, T> = new Map();\n\n @bounded\n bind(key: string) {\n return {\n get: () => this.get(key),\n set: (value: T) => this.set(key, value),\n };\n }\n\n @bounded\n set(key: string, value: T) {\n this.scope.set(key, value);\n }\n\n @bounded\n get(key: string): T {\n return this.scope.get(key) as T;\n }\n\n @bounded\n delete(key: string) {\n this.scope.delete(key);\n }\n}\n", "export function bounded(_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n this[methodName] = this[methodName].bind(this);\n });\n}\n\nconst Release = Symbol('Cache');\n\ntype DecoratedMethod = Function & {\n [Release](args: unknown[]): void;\n};\n\nexport function memoize(...props: string[] | [Function]) {\n return function (_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n const hash =\n typeof props[0] === 'function'\n ? props[0]\n : function (...args: unknown[]) {\n const mem = args.slice(0, props.length);\n if (!mem.every(isPrimitive)) {\n return null;\n }\n\n return props.map((prop, index) => `${prop}=${mem[index]}`).join('&');\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n const cache = new Map();\n const method = this[methodName];\n\n this[methodName] = function (this: unknown, ...args: unknown[]) {\n const key = hash.call(this, ...args);\n\n if (key === null) {\n return method.call(this, ...args);\n }\n\n if (!cache.has(key)) {\n cache.set(key, method.call(this, ...args));\n }\n\n return cache.get(key);\n };\n this[methodName][Release] = (args: unknown[]) => {\n const key = hash.call(this, ...args);\n\n cache.delete(key);\n };\n });\n };\n}\n\nmemoize.release = (method: Function, ...args: unknown[]) => {\n if (Release in method) {\n (method as DecoratedMethod)[Release](args);\n }\n};\n\nconst PRIMITIVE_TYPES = ['string', 'number', 'symbol', 'boolean', 'undefined'];\n\nfunction isPrimitive(value: unknown) {\n return !value || PRIMITIVE_TYPES.includes(typeof value);\n}\n", "import {Console} from 'node:console';\n\nclass MutableConsole extends Console {\n log(...args: unknown[]) {\n this.write('log', args);\n }\n\n time(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.time(label);\n }\n }\n\n timeEnd(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.timeEnd(label);\n }\n }\n\n private write(level: 'log' | 'error' | 'warn', args: unknown[]) {\n if (process.env.NODE_ENV !== 'test') {\n super[level](...args);\n }\n }\n}\n\nconst _console = new MutableConsole(process.stdout, process.stderr, false);\n\nexport {_console as console};\n", "import type {Hook, HookMap} from 'tapable';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Hooks = Hash<Hook<any, any> | HookMap<any>>;\n\nexport function generateHooksAccess<THooks extends Hooks>(\n name: string,\n hooks: (name: string) => THooks,\n) {\n const Hooks = Symbol(`${name}Hooks`);\n\n function getHooks(program: object | undefined): THooks {\n return (program && (program as {[Hooks]: THooks})[Hooks]) || hooks('Unknown');\n }\n\n function withHooks<T extends ClassType>(Target: T, {kind}: ClassDecoratorContext): T {\n if (kind !== 'class') {\n throw new TypeError(`Decorator 'withHooks' is not applicable to '${kind}'.`);\n }\n\n return class extends Target {\n [Hooks] = intercept(this.name, hooks(this.name || name));\n };\n }\n\n return [getHooks, withHooks, Hooks] as const;\n}\n\nexport type HookMeta = {\n service: string;\n hook: string;\n name: string;\n type: string;\n};\n\nexport function intercept<T extends Hooks>(service: string, hooks: T): T {\n for (const [hook, handler] of Object.entries(hooks)) {\n handler.intercept({\n register: (info) => {\n const {type, name, fn} = info;\n const meta = {service, hook, name, type};\n\n if (type === 'promise') {\n info.fn = async (...args: unknown[]) => {\n try {\n return await fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else if (type === 'sync') {\n info.fn = (...args: unknown[]) => {\n try {\n return fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else {\n throw new TypeError('Unexpected hook tap type - ' + type);\n }\n\n return info;\n },\n });\n }\n\n return hooks;\n}\n", "import type {Langs} from '~/commands/build/types';\n\nimport {dirname, extname, isAbsolute, join, normalize} from 'node:path';\nimport _normalizePath from 'normalize-path';\n\nimport {isExternalHref} from '~/core/utils';\n\nexport function normalizePath(path: string): NormalizedPath {\n return _normalizePath(normalize(_normalizePath(path, false)), false);\n}\n\nexport function isRelativePath(path: string): path is RelativePath {\n return !isExternalHref(path) && !isAbsolute(path);\n}\n\nexport function langFromPath(path: string, config: {lang?: string; langs: Langs}): string {\n const {lang, langs} = config;\n const pathBaseLang = normalizePath(path).split('/')[0];\n const pathLang =\n langs.some((l) => (typeof l === 'string' ? l === pathBaseLang : l.lang === pathBaseLang)) &&\n pathBaseLang;\n\n const result = pathLang || lang || langs[0];\n return typeof result === 'string' ? result : result.lang;\n}\n\nexport function rebasePath(root: RelativePath, path: RelativePath) {\n return normalizePath(join(dirname(root), path));\n}\n\nexport function fullPath(\n path: AbsolutePath | NormalizedPath,\n root: NormalizedPath,\n): NormalizedPath {\n if (path.match(/^(\\/|\\\\)/)) {\n return normalizePath(path.slice(1));\n } else {\n return normalizePath(join(dirname(root), path));\n }\n}\n\nexport function getDepth(path: string) {\n return path\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/|\\/$/g, '')\n .split('/').length;\n}\n\nexport function getDepthPath(depth: number) {\n return Array(depth).fill('../').join('') || './';\n}\n\nexport function setExt<T extends AnyPath>(path: T, newext: string): T {\n newext = newext.startsWith('.') ? newext.slice(1) : newext;\n\n return (path.slice(0, -extname(path).length) + (newext ? '.' + newext : '')) as T;\n}\n", "export function replaceAll(string: string, match: string, replace: string) {\n if (!string) {\n return string;\n }\n\n const matches = [];\n\n let index = -1;\n while ((index = string.indexOf(match, index + 1)) > -1) {\n matches.push([index, index + match.length]);\n }\n\n return matches.reduceRight((string, match) => {\n return string.slice(0, match[0]) + replace + string.slice(match[1]);\n }, string);\n}\n", "import type {UrlWithStringQuery} from 'node:url';\n\nimport {parse} from 'node:url';\nimport {cloneDeepWith, isString, pick} from 'lodash';\n\nimport {normalizePath} from './path';\n\nexport function isExternalHref(href: string) {\n return /^(\\w{1,10}:)?\\/\\//.test(href) || /^([+\\w]{1,10}:)/.test(href);\n}\n\nexport function longLink(href: string) {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path;\n\n if (result.endsWith('/')) {\n result += 'index.html';\n }\n\n if (result.match(/\\.[^/\\\\]+$/)) {\n result += '.html';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport function shortLink(href: string): string {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path\n .replace(/\\\\/g, '/')\n .replace(/\\/index\\.html$/, '/')\n .replace(/\\/index$/, '/')\n .replace(/^index\\.html$/, '.')\n .replace(/^index$/, '.')\n .replace(/\\.html$/, '');\n\n if (result === '' || result === './') {\n result = '.';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport const MEDIA_FORMATS = /\\.(svg|png|gif|jpe?g|bmp|webp|ico)$/i;\n\nconst DOC_FORMATS = /\\.(txt|ya?ml|docx|xlsx|pptx|pdf|csv)$/i;\n\nexport function isMediaLink(link: string) {\n return MEDIA_FORMATS.test(link) || DOC_FORMATS.test(link);\n}\n\ntype LocalUrlInfo = Pick<UrlWithStringQuery, 'hash' | 'search'> & {\n path: NormalizedPath;\n};\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\n\nfunction unescapeAll(str: string) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n return str;\n }\n\n return str.replace(UNESCAPE_MD_RE, (_match: string, escaped: string) => escaped);\n}\n\nexport function parseLocalUrl<T = LocalUrlInfo>(url: string | undefined) {\n if (!url || isExternalHref(url) || url.startsWith('/')) {\n return null;\n }\n\n try {\n const parsed = parse(unescapeAll(url));\n\n if (parsed.host || parsed.protocol) {\n return null;\n }\n\n if (parsed.path) {\n parsed.path = normalizePath(parsed.path);\n }\n\n return pick(parsed, ['path', 'search', 'hash']) as T;\n } catch {\n return null;\n }\n}\n\nexport const LINK_KEYS_LEADING_CONFIG = ['href'];\nexport const LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [\n 'src',\n 'url',\n 'href',\n 'icon',\n 'image',\n 'desktop',\n 'mobile',\n 'tablet',\n 'previewImg',\n 'image',\n 'avatar',\n 'logo',\n 'light',\n 'dark',\n];\n\nexport const LINK_KEYS = [\n ...new Set([...LINK_KEYS_LEADING_CONFIG, ...LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG]),\n];\n\nexport function walkLinks(object: object, modify: (value: string) => string | void) {\n // Clone the object deeply with a customizer function that modifies matching keys\n return cloneDeepWith(object, (value: unknown, key) => {\n if (LINK_KEYS.includes(key as string) && isString(value)) {\n return modify(value);\n }\n\n return undefined;\n });\n}\n", "import type Token from 'markdown-it/lib/token';\n\ntype TokenWalker = (\n token: Token,\n state: {commented: boolean; index: number},\n) => void | undefined | {skip: number};\n\nexport function filterTokens(tokens: Token[], type: string, handler: TokenWalker) {\n let commented = false;\n\n if (!tokens || !tokens.length) {\n return;\n }\n\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index];\n\n if (token.type === 'html_block') {\n const commentStart = token.content.match('<!--');\n const commentEnd = token.content.match('-->');\n\n if (commentStart && !commentEnd) {\n commented = true;\n }\n\n if (!commentStart && commentEnd) {\n commented = false;\n }\n }\n\n if (token.type === type) {\n const result = handler(token, {commented, index});\n if (result?.skip) {\n index += result?.skip - 1;\n }\n }\n }\n}\n", "import {normalizePath} from './path';\nimport {copyJson} from './common';\n\ntype Formatter<T, O> = (data: T) => O;\n\nconst toString = <T>(data: T) => {\n if (typeof data === 'string') {\n return data;\n }\n\n return JSON.stringify(data);\n};\n\nexport class VFile<T extends string | object = string | object, Info extends Hash = {}> {\n get path(): NormalizedPath {\n return this._path;\n }\n\n set path(value: RelativePath) {\n this._path = normalizePath(value);\n }\n\n get data() {\n return this._data;\n }\n\n set data(value: T) {\n this._data = value;\n }\n\n get info() {\n return this._info;\n }\n\n set info(value: Info) {\n this._info = value;\n }\n\n private _path: NormalizedPath;\n\n private _data: T;\n\n private _info: Info = {} as Info;\n\n private _format: Formatter<T, string>;\n\n constructor(path: RelativePath, data: T, formatter: Formatter<T, string> = toString) {\n this._path = normalizePath(path);\n this._data = data;\n this._format = formatter;\n }\n\n copy(path?: RelativePath) {\n const data = typeof this._data === 'string' ? this._data : copyJson(this._data);\n return new VFile<T>(path || this._path, data as T, this._format);\n }\n\n format(formatter: Formatter<T, string>) {\n this._format = formatter;\n }\n\n toString() {\n return this._format(this._data);\n }\n}\n", "import {DepGraph} from 'dependency-graph';\n\nexport type SerializedGraph<Data = {type: string}> = {\n nodes: Array<{\n name: string;\n data?: Data;\n }>;\n dependencies: Array<{\n from: string;\n to: string;\n }>;\n};\n\nexport class Graph<Data = {type: string}> extends DepGraph<Data> {\n static is<Data = {type: string}>(data: unknown): data is SerializedGraph<Data> {\n if (data instanceof Graph) {\n return true;\n }\n return Boolean(\n data && typeof data === 'object' && '__type' in data && data.__type === '$$Graph',\n );\n }\n\n static deserialize(message: SerializedGraph) {\n return new Graph().consume(message);\n }\n\n constructor() {\n super({circular: true});\n }\n\n /**\n * Extracts a subgraph related to the specified node\n * @param nodeName - name of the node for which to extract the subgraph\n * @returns new Graph instance with the extracted subgraph\n */\n extract(nodeName: string): Graph<Data> {\n const extractedGraph = new Graph<Data>();\n\n if (!this.hasNode(nodeName)) {\n return extractedGraph;\n }\n\n // Recursively copy dependencies (nodes that the initial node depends on)\n this.copyDependenciesRecursively(nodeName, extractedGraph, new Set());\n\n // Recursively copy dependent nodes (nodes that depend on the initial node)\n this.copyDependentsRecursively(nodeName, extractedGraph, new Set());\n\n return extractedGraph;\n }\n\n /**\n * Consumes a serialized graph\n */\n consume(graph: Graph<Data> | SerializedGraph<Data> | undefined): this {\n if (!graph) {\n return this;\n }\n\n if (graph instanceof Graph) {\n graph = graph.serialize();\n }\n\n // First add all nodes\n for (const node of graph.nodes) {\n this.addNode(node.name);\n if (node.data) {\n this.setNodeData(node.name, node.data);\n }\n }\n\n // Then add all dependencies\n for (const dep of graph.dependencies) {\n this.addDependency(dep.from, dep.to);\n }\n\n return this;\n }\n\n /**\n * Removes node from graph\n * If node dependencies has no other dependants, they will be removed too\n * @param nodeName - node name to remove\n */\n release(nodeName: string): this {\n if (!this.hasNode(nodeName)) {\n return this;\n }\n\n // Get direct parents before removing the node\n const directParents = this.directDependenciesOf(nodeName);\n\n // Remove all incoming dependencies (parents -> node)\n for (const parent of directParents) {\n this.removeDependency(nodeName, parent);\n }\n\n // Remove all outgoing dependencies (node -> children)\n const directDependents = this.directDependentsOf(nodeName);\n for (const dependent of directDependents) {\n this.removeDependency(dependent, nodeName);\n }\n\n // Remove the node itself\n this.removeNode(nodeName);\n\n // Recursively remove parents that have no children left\n for (const parent of directParents) {\n if (this.hasNode(parent) && this.directDependentsOf(parent).length === 0) {\n this.release(parent);\n }\n }\n\n return this;\n }\n\n /**\n * Serializes the graph to a format for transfer between threads\n * @returns serialized representation of the graph\n */\n serialize(): SerializedGraph<Data> {\n const nodes: SerializedGraph<Data>['nodes'] = [];\n const dependencies: SerializedGraph['dependencies'] = [];\n\n // Get all nodes in the graph\n const allNodes = this.overallOrder();\n\n for (const nodeName of allNodes) {\n const nodeData = this.getNodeData(nodeName);\n nodes.push({\n name: nodeName,\n // Some data srtuctures can be Proxy objects,\n // which can't be serialized by threads defaultSerializer.\n // So, read data from this Proxy objects and write it as raw json.\n data: JSON.parse(JSON.stringify(nodeData)),\n });\n }\n\n // Get all dependencies\n for (const nodeName of allNodes) {\n const directDeps = this.directDependenciesOf(nodeName);\n for (const dep of directDeps) {\n dependencies.push({\n from: nodeName,\n to: dep,\n });\n }\n }\n\n nodes.sort((a, b) => (a.name > b.name ? 1 : -1));\n dependencies.sort((a, b) => {\n if (a.from === b.from) {\n return a.to > b.to ? 1 : -1;\n }\n return a.from > b.from ? 1 : -1;\n });\n\n return {nodes, dependencies, __type: '$$Graph'} as SerializedGraph<Data>;\n }\n\n /**\n * Recursively copies node dependencies\n */\n private copyDependenciesRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependencies\n const dependencies = this.directDependenciesOf(nodeName);\n for (const dep of dependencies) {\n this.copyDependenciesRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(nodeName, dep);\n }\n }\n\n /**\n * Recursively copies dependent nodes\n */\n private copyDependentsRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependent nodes\n const dependents = this.directDependentsOf(nodeName);\n for (const dep of dependents) {\n this.copyDependentsRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(dep, nodeName);\n }\n }\n}\n", "export type JsonDiff = {\n added: string[];\n changed: string[];\n removed: string[];\n};\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 JSON \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u044F\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @returns \u041E\u0431\u044A\u0435\u043A\u0442 \u0441 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\u043C\u0438 \u043F\u0443\u0442\u0435\u0439 \u043A \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u043C, \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u043C \u0438 \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u043C \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u043C\n */\nexport function compareJson(oldObj: object, newObj: object): JsonDiff {\n const added: string[] = [];\n const changed: string[] = [];\n const removed: string[] = [];\n\n compareObjects(oldObj, newObj, '', added, changed, removed);\n\n return {\n added: added.sort(),\n changed: changed.sort(),\n removed: removed.sort(),\n };\n}\n\n/**\n * \u0420\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0441\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0438 \u0437\u0430\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u0439\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param path - \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0443\u0442\u044C \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435\n * @param added - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param changed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param removed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n */\nfunction compareObjects(\n oldObj: unknown,\n newObj: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n if (isNullable(oldObj) && isNullable(newObj)) {\n return;\n }\n\n compareEntity(oldObj, newObj, path, added, changed, removed);\n}\n\nfunction addAllPaths(obj: unknown, path: string, arr: string[]): void {\n if (path) {\n arr.push(path);\n }\n\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n addAllPaths(obj[i], currentPath, arr);\n }\n return;\n }\n\n for (const key of Object.keys(obj)) {\n const currentPath = path ? `${path}.${key}` : key;\n addAllPaths((obj as Hash)[key], currentPath, arr);\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n */\nfunction compareArrays(\n oldArr: unknown[],\n newArr: unknown[],\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const maxLength = Math.max(oldArr.length, newArr.length);\n\n for (let i = 0; i < maxLength; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n const oldItem = oldArr[i];\n const newItem = newArr[i];\n\n if (i >= oldArr.length) {\n added.push(currentPath);\n } else if (i >= newArr.length) {\n removed.push(currentPath);\n } else {\n compareObjects(oldItem, newItem, currentPath, added, changed, removed);\n }\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0434\u0432\u0443\u0445 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432\n */\nfunction compareObjectProperties(\n oldObj: Hash,\n newObj: Hash,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);\n\n for (const key of allKeys) {\n const currentPath = path ? `${path}.${key}` : key;\n const oldValue = oldObj[key];\n const newValue = newObj[key];\n const isOldMember = key in oldObj;\n const isNewMember = key in newObj;\n\n if (isOldMember && isNewMember) {\n compareEntity(oldValue, newValue, currentPath, added, changed, removed);\n } else if (isNewMember) {\n addAllPaths(newValue, currentPath, added);\n } else if (isOldMember) {\n addAllPaths(oldValue, currentPath, removed);\n }\n }\n}\n\nfunction compareEntity(\n oldValue: unknown,\n newValue: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n) {\n if (\n (isNullable(oldValue) || isNullable(newValue)) &&\n !(isNullable(oldValue) && isNullable(newValue))\n ) {\n changed.push(path);\n } else if (typeof oldValue !== typeof newValue) {\n changed.push(path);\n } else if (typeof oldValue !== 'object' || typeof newValue !== 'object') {\n if (oldValue !== newValue) {\n changed.push(path);\n }\n } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {\n compareArrays(oldValue, newValue, path, added, changed, removed);\n } else if (!Array.isArray(oldValue) && !Array.isArray(newValue)) {\n compareObjectProperties(oldValue as Hash, newValue as Hash, path, added, changed, removed);\n } else {\n changed.push(path);\n }\n}\n\nfunction isNullable(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n", "import {\n copyFile,\n link,\n mkdir,\n readFile,\n realpath,\n rm,\n stat,\n unlink,\n writeFile,\n} from 'node:fs/promises';\nimport {realpathSync, statSync} from 'node:fs';\n\nexport type FileSystem = {\n stat: typeof stat;\n statSync: typeof statSync;\n realpathSync: typeof realpathSync;\n realpath: typeof realpath;\n link: typeof link;\n unlink: typeof unlink;\n copyFile: typeof copyFile;\n mkdir: typeof mkdir;\n rm: typeof rm;\n readFile: typeof readFile;\n writeFile: typeof writeFile;\n};\n\nexport const fs = {\n stat,\n statSync,\n realpathSync,\n realpath,\n rm,\n link,\n unlink,\n copyFile,\n mkdir,\n readFile,\n writeFile,\n};\n", "import {NoValue, evaluate} from '@diplodoc/liquid';\n\ntype WhenValue = string | boolean;\n\ntype BlockWithWhen = {\n when?: WhenValue;\n [key: string]: unknown;\n};\n\nexport function evaluateWhen(\n whenValue: WhenValue,\n vars: Record<string, unknown>,\n skipMissingVars?: boolean,\n): boolean {\n if (typeof whenValue === 'boolean') {\n return whenValue;\n }\n\n if (typeof whenValue === 'string') {\n const evalResult = evaluate(whenValue, vars, skipMissingVars);\n\n if (evalResult === NoValue && skipMissingVars) {\n return true;\n }\n\n return Boolean(evalResult);\n }\n\n return true;\n}\n\nfunction isBlockWithWhen(item: unknown): item is BlockWithWhen {\n return typeof item === 'object' && item !== null && 'when' in item;\n}\n\nexport function filterBlocksByConditions<T>(\n obj: T,\n vars: Record<string, unknown>,\n skipMissingVars: boolean,\n): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => {\n if (isBlockWithWhen(item)) {\n if (item.when === null || item.when === undefined) {\n return true;\n }\n\n return evaluateWhen(item.when, vars, skipMissingVars);\n }\n\n return true;\n })\n .map((item) => {\n if (isBlockWithWhen(item)) {\n const {when: _, ...rest} = item;\n\n return filterBlocksByConditions(rest, vars, skipMissingVars);\n }\n\n return filterBlocksByConditions(item, vars, skipMissingVars);\n }) as T;\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n result[key] = filterBlocksByConditions(value, vars, skipMissingVars);\n }\n\n return result as T;\n }\n\n return obj;\n}\n\nexport function hasWhenConditions(obj: unknown): boolean {\n if (Array.isArray(obj)) {\n return obj.some((item) => hasWhenConditions(item));\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n if ('when' in obj) {\n return true;\n }\n\n return Object.values(obj).some((value) => hasWhenConditions(value));\n }\n\n return false;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["isExternalHref", "_normalizePath", "string", "match", "import_lodash", "isExternalHref", "link"]
|
|
7
7
|
}
|
package/lib/utils/index.mjs
CHANGED
|
@@ -392,7 +392,7 @@ function shortLink(href) {
|
|
|
392
392
|
return result;
|
|
393
393
|
}
|
|
394
394
|
var MEDIA_FORMATS = /\.(svg|png|gif|jpe?g|bmp|webp|ico)$/i;
|
|
395
|
-
var DOC_FORMATS = /\.(txt|
|
|
395
|
+
var DOC_FORMATS = /\.(txt|ya?ml|docx|xlsx|pptx|pdf|csv)$/i;
|
|
396
396
|
function isMediaLink(link2) {
|
|
397
397
|
return MEDIA_FORMATS.test(link2) || DOC_FORMATS.test(link2);
|
|
398
398
|
}
|
package/lib/utils/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/core/utils/common.ts", "../../src/core/utils/decorators.ts", "../../src/core/utils/console.ts", "../../src/core/utils/extension.ts", "../../src/core/utils/path.ts", "../../src/core/utils/string.ts", "../../src/core/utils/url.ts", "../../src/core/utils/markdown.ts", "../../src/core/utils/file.ts", "../../src/core/utils/graph/index.ts", "../../src/core/utils/json/index.ts", "../../src/core/utils/fs.ts", "../../src/core/utils/conditions.ts"],
|
|
4
|
-
"sourcesContent": ["import {isObject} from 'lodash';\n\nimport {bounded} from './decorators';\n\nexport const all = Promise.all.bind(Promise);\n\nexport const race = Promise.race.bind(Promise);\n\nexport function noop() {}\n\nexport function get<K extends string>(key: K) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function <T extends Record<K, any>>(\n object: T,\n ): T extends Record<K, infer V> ? V : never {\n return object[key];\n };\n}\n\nexport function zip<T = unknown>(keys: string[], values: T[]) {\n return keys.reduce((acc, key, index) => {\n acc[key] = values[index];\n return acc;\n }, {} as Hash<T>);\n}\n\nexport function own<V = unknown, T extends string = string>(\n box: unknown,\n field: T,\n): box is Record<T, V> {\n return (\n Boolean(box && typeof box === 'object') && Object.prototype.hasOwnProperty.call(box, field)\n );\n}\n\nexport function copyJson<T extends object>(\n json: T | undefined,\n): T extends DeepFrozen<infer R> ? R : T | undefined {\n // @ts-ignore\n return json ? JSON.parse(JSON.stringify(json)) : json;\n}\n\nexport function freezeJson<T>(target: T, visited = new Set()): T {\n if (!visited.has(target)) {\n visited.add(target);\n\n if (Array.isArray(target)) {\n target.forEach((item) => freezeJson(item, visited));\n }\n\n if (isObject(target) && !Object.isSealed(target)) {\n Object.freeze(target);\n Object.keys(target).forEach((key) =>\n freezeJson(target[key as keyof typeof target], visited),\n );\n }\n }\n\n return target;\n}\n\nexport function errorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error;\n }\n\n if (own<string, 'message'>(error, 'message')) {\n return error.message;\n }\n\n return String(error);\n}\n\nexport function fallbackLang(lang: string) {\n if (['kz', 'ua', 'be', 'ru'].includes(lang)) {\n return 'ru';\n }\n\n return 'en';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class Defer<T = any> {\n promise: Promise<T>;\n\n resolve!: (result: T) => void;\n\n reject!: (error: unknown) => void;\n\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n\ntype CancelAPI = {\n cancel: () => void;\n skip: () => void;\n};\n\nexport function wait(delay: number, action = () => {}): Promise<void> & CancelAPI {\n let timeout: NodeJS.Timeout;\n const promise = new Promise((resolve) => {\n timeout = setTimeout(resolve, delay);\n }).then(() => action());\n\n Object.assign(promise, {\n cancel: () => clearTimeout(timeout),\n skip: () => {\n action = () => {};\n },\n });\n\n return promise as Promise<void> & CancelAPI;\n}\n\nexport type Bucket<T> = {\n get(): T;\n set(value: T): void;\n};\n\nexport function bucket<T>() {\n let _value: T;\n\n return {\n get: () => _value,\n set: (value: T) => {\n _value = value;\n },\n };\n}\n\nexport class Buckets<T> {\n private scope: Map<string, T> = new Map();\n\n @bounded\n bind(key: string) {\n return {\n get: () => this.get(key),\n set: (value: T) => this.set(key, value),\n };\n }\n\n @bounded\n set(key: string, value: T) {\n this.scope.set(key, value);\n }\n\n @bounded\n get(key: string): T {\n return this.scope.get(key) as T;\n }\n\n @bounded\n delete(key: string) {\n this.scope.delete(key);\n }\n}\n", "export function bounded(_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n this[methodName] = this[methodName].bind(this);\n });\n}\n\nconst Release = Symbol('Cache');\n\ntype DecoratedMethod = Function & {\n [Release](args: unknown[]): void;\n};\n\nexport function memoize(...props: string[] | [Function]) {\n return function (_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n const hash =\n typeof props[0] === 'function'\n ? props[0]\n : function (...args: unknown[]) {\n const mem = args.slice(0, props.length);\n if (!mem.every(isPrimitive)) {\n return null;\n }\n\n return props.map((prop, index) => `${prop}=${mem[index]}`).join('&');\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n const cache = new Map();\n const method = this[methodName];\n\n this[methodName] = function (this: unknown, ...args: unknown[]) {\n const key = hash.call(this, ...args);\n\n if (key === null) {\n return method.call(this, ...args);\n }\n\n if (!cache.has(key)) {\n cache.set(key, method.call(this, ...args));\n }\n\n return cache.get(key);\n };\n this[methodName][Release] = (args: unknown[]) => {\n const key = hash.call(this, ...args);\n\n cache.delete(key);\n };\n });\n };\n}\n\nmemoize.release = (method: Function, ...args: unknown[]) => {\n if (Release in method) {\n (method as DecoratedMethod)[Release](args);\n }\n};\n\nconst PRIMITIVE_TYPES = ['string', 'number', 'symbol', 'boolean', 'undefined'];\n\nfunction isPrimitive(value: unknown) {\n return !value || PRIMITIVE_TYPES.includes(typeof value);\n}\n", "import {Console} from 'node:console';\n\nclass MutableConsole extends Console {\n log(...args: unknown[]) {\n this.write('log', args);\n }\n\n time(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.time(label);\n }\n }\n\n timeEnd(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.timeEnd(label);\n }\n }\n\n private write(level: 'log' | 'error' | 'warn', args: unknown[]) {\n if (process.env.NODE_ENV !== 'test') {\n super[level](...args);\n }\n }\n}\n\nconst _console = new MutableConsole(process.stdout, process.stderr, false);\n\nexport {_console as console};\n", "import type {Hook, HookMap} from 'tapable';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Hooks = Hash<Hook<any, any> | HookMap<any>>;\n\nexport function generateHooksAccess<THooks extends Hooks>(\n name: string,\n hooks: (name: string) => THooks,\n) {\n const Hooks = Symbol(`${name}Hooks`);\n\n function getHooks(program: object | undefined): THooks {\n return (program && (program as {[Hooks]: THooks})[Hooks]) || hooks('Unknown');\n }\n\n function withHooks<T extends ClassType>(Target: T, {kind}: ClassDecoratorContext): T {\n if (kind !== 'class') {\n throw new TypeError(`Decorator 'withHooks' is not applicable to '${kind}'.`);\n }\n\n return class extends Target {\n [Hooks] = intercept(this.name, hooks(this.name || name));\n };\n }\n\n return [getHooks, withHooks, Hooks] as const;\n}\n\nexport type HookMeta = {\n service: string;\n hook: string;\n name: string;\n type: string;\n};\n\nexport function intercept<T extends Hooks>(service: string, hooks: T): T {\n for (const [hook, handler] of Object.entries(hooks)) {\n handler.intercept({\n register: (info) => {\n const {type, name, fn} = info;\n const meta = {service, hook, name, type};\n\n if (type === 'promise') {\n info.fn = async (...args: unknown[]) => {\n try {\n return await fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else if (type === 'sync') {\n info.fn = (...args: unknown[]) => {\n try {\n return fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else {\n throw new TypeError('Unexpected hook tap type - ' + type);\n }\n\n return info;\n },\n });\n }\n\n return hooks;\n}\n", "import type {Langs} from '~/commands/build/types';\n\nimport {dirname, extname, isAbsolute, join, normalize} from 'node:path';\nimport _normalizePath from 'normalize-path';\n\nimport {isExternalHref} from '~/core/utils';\n\nexport function normalizePath(path: string): NormalizedPath {\n return _normalizePath(normalize(_normalizePath(path, false)), false);\n}\n\nexport function isRelativePath(path: string): path is RelativePath {\n return !isExternalHref(path) && !isAbsolute(path);\n}\n\nexport function langFromPath(path: string, config: {lang?: string; langs: Langs}): string {\n const {lang, langs} = config;\n const pathBaseLang = normalizePath(path).split('/')[0];\n const pathLang =\n langs.some((l) => (typeof l === 'string' ? l === pathBaseLang : l.lang === pathBaseLang)) &&\n pathBaseLang;\n\n const result = pathLang || lang || langs[0];\n return typeof result === 'string' ? result : result.lang;\n}\n\nexport function rebasePath(root: RelativePath, path: RelativePath) {\n return normalizePath(join(dirname(root), path));\n}\n\nexport function fullPath(\n path: AbsolutePath | NormalizedPath,\n root: NormalizedPath,\n): NormalizedPath {\n if (path.match(/^(\\/|\\\\)/)) {\n return normalizePath(path.slice(1));\n } else {\n return normalizePath(join(dirname(root), path));\n }\n}\n\nexport function getDepth(path: string) {\n return path\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/|\\/$/g, '')\n .split('/').length;\n}\n\nexport function getDepthPath(depth: number) {\n return Array(depth).fill('../').join('') || './';\n}\n\nexport function setExt<T extends AnyPath>(path: T, newext: string): T {\n newext = newext.startsWith('.') ? newext.slice(1) : newext;\n\n return (path.slice(0, -extname(path).length) + (newext ? '.' + newext : '')) as T;\n}\n", "export function replaceAll(string: string, match: string, replace: string) {\n if (!string) {\n return string;\n }\n\n const matches = [];\n\n let index = -1;\n while ((index = string.indexOf(match, index + 1)) > -1) {\n matches.push([index, index + match.length]);\n }\n\n return matches.reduceRight((string, match) => {\n return string.slice(0, match[0]) + replace + string.slice(match[1]);\n }, string);\n}\n", "import type {UrlWithStringQuery} from 'node:url';\n\nimport {parse} from 'node:url';\nimport {cloneDeepWith, isString, pick} from 'lodash';\n\nimport {normalizePath} from './path';\n\nexport function isExternalHref(href: string) {\n return /^(\\w{1,10}:)?\\/\\//.test(href) || /^([+\\w]{1,10}:)/.test(href);\n}\n\nexport function longLink(href: string) {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path;\n\n if (result.endsWith('/')) {\n result += 'index.html';\n }\n\n if (result.match(/\\.[^/\\\\]+$/)) {\n result += '.html';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport function shortLink(href: string): string {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path\n .replace(/\\\\/g, '/')\n .replace(/\\/index\\.html$/, '/')\n .replace(/\\/index$/, '/')\n .replace(/^index\\.html$/, '.')\n .replace(/^index$/, '.')\n .replace(/\\.html$/, '');\n\n if (result === '' || result === './') {\n result = '.';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport const MEDIA_FORMATS = /\\.(svg|png|gif|jpe?g|bmp|webp|ico)$/i;\n\n// TODO: should we deprecate this?\nconst DOC_FORMATS = /\\.(txt|pdf|docx|xlsx|csv|vsd|ya?ml)$/i;\n\nexport function isMediaLink(link: string) {\n return MEDIA_FORMATS.test(link) || DOC_FORMATS.test(link);\n}\n\ntype LocalUrlInfo = Pick<UrlWithStringQuery, 'hash' | 'search'> & {\n path: NormalizedPath;\n};\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\n\nfunction unescapeAll(str: string) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n return str;\n }\n\n return str.replace(UNESCAPE_MD_RE, (_match: string, escaped: string) => escaped);\n}\n\nexport function parseLocalUrl<T = LocalUrlInfo>(url: string | undefined) {\n if (!url || isExternalHref(url) || url.startsWith('/')) {\n return null;\n }\n\n try {\n const parsed = parse(unescapeAll(url));\n\n if (parsed.host || parsed.protocol) {\n return null;\n }\n\n if (parsed.path) {\n parsed.path = normalizePath(parsed.path);\n }\n\n return pick(parsed, ['path', 'search', 'hash']) as T;\n } catch {\n return null;\n }\n}\n\nexport const LINK_KEYS_LEADING_CONFIG = ['href'];\nexport const LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [\n 'src',\n 'url',\n 'href',\n 'icon',\n 'image',\n 'desktop',\n 'mobile',\n 'tablet',\n 'previewImg',\n 'image',\n 'avatar',\n 'logo',\n 'light',\n 'dark',\n];\n\nexport const LINK_KEYS = [\n ...new Set([...LINK_KEYS_LEADING_CONFIG, ...LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG]),\n];\n\nexport function walkLinks(object: object, modify: (value: string) => string | void) {\n // Clone the object deeply with a customizer function that modifies matching keys\n return cloneDeepWith(object, (value: unknown, key) => {\n if (LINK_KEYS.includes(key as string) && isString(value)) {\n return modify(value);\n }\n\n return undefined;\n });\n}\n", "import type Token from 'markdown-it/lib/token';\n\ntype TokenWalker = (\n token: Token,\n state: {commented: boolean; index: number},\n) => void | undefined | {skip: number};\n\nexport function filterTokens(tokens: Token[], type: string, handler: TokenWalker) {\n let commented = false;\n\n if (!tokens || !tokens.length) {\n return;\n }\n\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index];\n\n if (token.type === 'html_block') {\n const commentStart = token.content.match('<!--');\n const commentEnd = token.content.match('-->');\n\n if (commentStart && !commentEnd) {\n commented = true;\n }\n\n if (!commentStart && commentEnd) {\n commented = false;\n }\n }\n\n if (token.type === type) {\n const result = handler(token, {commented, index});\n if (result?.skip) {\n index += result?.skip - 1;\n }\n }\n }\n}\n", "import {normalizePath} from './path';\nimport {copyJson} from './common';\n\ntype Formatter<T, O> = (data: T) => O;\n\nconst toString = <T>(data: T) => {\n if (typeof data === 'string') {\n return data;\n }\n\n return JSON.stringify(data);\n};\n\nexport class VFile<T extends string | object = string | object, Info extends Hash = {}> {\n get path(): NormalizedPath {\n return this._path;\n }\n\n set path(value: RelativePath) {\n this._path = normalizePath(value);\n }\n\n get data() {\n return this._data;\n }\n\n set data(value: T) {\n this._data = value;\n }\n\n get info() {\n return this._info;\n }\n\n set info(value: Info) {\n this._info = value;\n }\n\n private _path: NormalizedPath;\n\n private _data: T;\n\n private _info: Info = {} as Info;\n\n private _format: Formatter<T, string>;\n\n constructor(path: RelativePath, data: T, formatter: Formatter<T, string> = toString) {\n this._path = normalizePath(path);\n this._data = data;\n this._format = formatter;\n }\n\n copy(path?: RelativePath) {\n const data = typeof this._data === 'string' ? this._data : copyJson(this._data);\n return new VFile<T>(path || this._path, data as T, this._format);\n }\n\n format(formatter: Formatter<T, string>) {\n this._format = formatter;\n }\n\n toString() {\n return this._format(this._data);\n }\n}\n", "import {DepGraph} from 'dependency-graph';\n\nexport type SerializedGraph<Data = {type: string}> = {\n nodes: Array<{\n name: string;\n data?: Data;\n }>;\n dependencies: Array<{\n from: string;\n to: string;\n }>;\n};\n\nexport class Graph<Data = {type: string}> extends DepGraph<Data> {\n static is<Data = {type: string}>(data: unknown): data is SerializedGraph<Data> {\n if (data instanceof Graph) {\n return true;\n }\n return Boolean(\n data && typeof data === 'object' && '__type' in data && data.__type === '$$Graph',\n );\n }\n\n static deserialize(message: SerializedGraph) {\n return new Graph().consume(message);\n }\n\n constructor() {\n super({circular: true});\n }\n\n /**\n * Extracts a subgraph related to the specified node\n * @param nodeName - name of the node for which to extract the subgraph\n * @returns new Graph instance with the extracted subgraph\n */\n extract(nodeName: string): Graph<Data> {\n const extractedGraph = new Graph<Data>();\n\n if (!this.hasNode(nodeName)) {\n return extractedGraph;\n }\n\n // Recursively copy dependencies (nodes that the initial node depends on)\n this.copyDependenciesRecursively(nodeName, extractedGraph, new Set());\n\n // Recursively copy dependent nodes (nodes that depend on the initial node)\n this.copyDependentsRecursively(nodeName, extractedGraph, new Set());\n\n return extractedGraph;\n }\n\n /**\n * Consumes a serialized graph\n */\n consume(graph: Graph<Data> | SerializedGraph<Data> | undefined): this {\n if (!graph) {\n return this;\n }\n\n if (graph instanceof Graph) {\n graph = graph.serialize();\n }\n\n // First add all nodes\n for (const node of graph.nodes) {\n this.addNode(node.name);\n if (node.data) {\n this.setNodeData(node.name, node.data);\n }\n }\n\n // Then add all dependencies\n for (const dep of graph.dependencies) {\n this.addDependency(dep.from, dep.to);\n }\n\n return this;\n }\n\n /**\n * Removes node from graph\n * If node dependencies has no other dependants, they will be removed too\n * @param nodeName - node name to remove\n */\n release(nodeName: string): this {\n if (!this.hasNode(nodeName)) {\n return this;\n }\n\n // Get direct parents before removing the node\n const directParents = this.directDependenciesOf(nodeName);\n\n // Remove all incoming dependencies (parents -> node)\n for (const parent of directParents) {\n this.removeDependency(nodeName, parent);\n }\n\n // Remove all outgoing dependencies (node -> children)\n const directDependents = this.directDependentsOf(nodeName);\n for (const dependent of directDependents) {\n this.removeDependency(dependent, nodeName);\n }\n\n // Remove the node itself\n this.removeNode(nodeName);\n\n // Recursively remove parents that have no children left\n for (const parent of directParents) {\n if (this.hasNode(parent) && this.directDependentsOf(parent).length === 0) {\n this.release(parent);\n }\n }\n\n return this;\n }\n\n /**\n * Serializes the graph to a format for transfer between threads\n * @returns serialized representation of the graph\n */\n serialize(): SerializedGraph<Data> {\n const nodes: SerializedGraph<Data>['nodes'] = [];\n const dependencies: SerializedGraph['dependencies'] = [];\n\n // Get all nodes in the graph\n const allNodes = this.overallOrder();\n\n for (const nodeName of allNodes) {\n const nodeData = this.getNodeData(nodeName);\n nodes.push({\n name: nodeName,\n // Some data srtuctures can be Proxy objects,\n // which can't be serialized by threads defaultSerializer.\n // So, read data from this Proxy objects and write it as raw json.\n data: JSON.parse(JSON.stringify(nodeData)),\n });\n }\n\n // Get all dependencies\n for (const nodeName of allNodes) {\n const directDeps = this.directDependenciesOf(nodeName);\n for (const dep of directDeps) {\n dependencies.push({\n from: nodeName,\n to: dep,\n });\n }\n }\n\n nodes.sort((a, b) => (a.name > b.name ? 1 : -1));\n dependencies.sort((a, b) => {\n if (a.from === b.from) {\n return a.to > b.to ? 1 : -1;\n }\n return a.from > b.from ? 1 : -1;\n });\n\n return {nodes, dependencies, __type: '$$Graph'} as SerializedGraph<Data>;\n }\n\n /**\n * Recursively copies node dependencies\n */\n private copyDependenciesRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependencies\n const dependencies = this.directDependenciesOf(nodeName);\n for (const dep of dependencies) {\n this.copyDependenciesRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(nodeName, dep);\n }\n }\n\n /**\n * Recursively copies dependent nodes\n */\n private copyDependentsRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependent nodes\n const dependents = this.directDependentsOf(nodeName);\n for (const dep of dependents) {\n this.copyDependentsRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(dep, nodeName);\n }\n }\n}\n", "export type JsonDiff = {\n added: string[];\n changed: string[];\n removed: string[];\n};\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 JSON \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u044F\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @returns \u041E\u0431\u044A\u0435\u043A\u0442 \u0441 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\u043C\u0438 \u043F\u0443\u0442\u0435\u0439 \u043A \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u043C, \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u043C \u0438 \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u043C \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u043C\n */\nexport function compareJson(oldObj: object, newObj: object): JsonDiff {\n const added: string[] = [];\n const changed: string[] = [];\n const removed: string[] = [];\n\n compareObjects(oldObj, newObj, '', added, changed, removed);\n\n return {\n added: added.sort(),\n changed: changed.sort(),\n removed: removed.sort(),\n };\n}\n\n/**\n * \u0420\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0441\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0438 \u0437\u0430\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u0439\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param path - \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0443\u0442\u044C \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435\n * @param added - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param changed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param removed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n */\nfunction compareObjects(\n oldObj: unknown,\n newObj: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n if (isNullable(oldObj) && isNullable(newObj)) {\n return;\n }\n\n compareEntity(oldObj, newObj, path, added, changed, removed);\n}\n\nfunction addAllPaths(obj: unknown, path: string, arr: string[]): void {\n if (path) {\n arr.push(path);\n }\n\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n addAllPaths(obj[i], currentPath, arr);\n }\n return;\n }\n\n for (const key of Object.keys(obj)) {\n const currentPath = path ? `${path}.${key}` : key;\n addAllPaths((obj as Hash)[key], currentPath, arr);\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n */\nfunction compareArrays(\n oldArr: unknown[],\n newArr: unknown[],\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const maxLength = Math.max(oldArr.length, newArr.length);\n\n for (let i = 0; i < maxLength; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n const oldItem = oldArr[i];\n const newItem = newArr[i];\n\n if (i >= oldArr.length) {\n added.push(currentPath);\n } else if (i >= newArr.length) {\n removed.push(currentPath);\n } else {\n compareObjects(oldItem, newItem, currentPath, added, changed, removed);\n }\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0434\u0432\u0443\u0445 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432\n */\nfunction compareObjectProperties(\n oldObj: Hash,\n newObj: Hash,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);\n\n for (const key of allKeys) {\n const currentPath = path ? `${path}.${key}` : key;\n const oldValue = oldObj[key];\n const newValue = newObj[key];\n const isOldMember = key in oldObj;\n const isNewMember = key in newObj;\n\n if (isOldMember && isNewMember) {\n compareEntity(oldValue, newValue, currentPath, added, changed, removed);\n } else if (isNewMember) {\n addAllPaths(newValue, currentPath, added);\n } else if (isOldMember) {\n addAllPaths(oldValue, currentPath, removed);\n }\n }\n}\n\nfunction compareEntity(\n oldValue: unknown,\n newValue: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n) {\n if (\n (isNullable(oldValue) || isNullable(newValue)) &&\n !(isNullable(oldValue) && isNullable(newValue))\n ) {\n changed.push(path);\n } else if (typeof oldValue !== typeof newValue) {\n changed.push(path);\n } else if (typeof oldValue !== 'object' || typeof newValue !== 'object') {\n if (oldValue !== newValue) {\n changed.push(path);\n }\n } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {\n compareArrays(oldValue, newValue, path, added, changed, removed);\n } else if (!Array.isArray(oldValue) && !Array.isArray(newValue)) {\n compareObjectProperties(oldValue as Hash, newValue as Hash, path, added, changed, removed);\n } else {\n changed.push(path);\n }\n}\n\nfunction isNullable(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n", "import {\n copyFile,\n link,\n mkdir,\n readFile,\n realpath,\n rm,\n stat,\n unlink,\n writeFile,\n} from 'node:fs/promises';\nimport {realpathSync, statSync} from 'node:fs';\n\nexport type FileSystem = {\n stat: typeof stat;\n statSync: typeof statSync;\n realpathSync: typeof realpathSync;\n realpath: typeof realpath;\n link: typeof link;\n unlink: typeof unlink;\n copyFile: typeof copyFile;\n mkdir: typeof mkdir;\n rm: typeof rm;\n readFile: typeof readFile;\n writeFile: typeof writeFile;\n};\n\nexport const fs = {\n stat,\n statSync,\n realpathSync,\n realpath,\n rm,\n link,\n unlink,\n copyFile,\n mkdir,\n readFile,\n writeFile,\n};\n", "import {NoValue, evaluate} from '@diplodoc/liquid';\n\ntype WhenValue = string | boolean;\n\ntype BlockWithWhen = {\n when?: WhenValue;\n [key: string]: unknown;\n};\n\nexport function evaluateWhen(\n whenValue: WhenValue,\n vars: Record<string, unknown>,\n skipMissingVars?: boolean,\n): boolean {\n if (typeof whenValue === 'boolean') {\n return whenValue;\n }\n\n if (typeof whenValue === 'string') {\n const evalResult = evaluate(whenValue, vars, skipMissingVars);\n\n if (evalResult === NoValue && skipMissingVars) {\n return true;\n }\n\n return Boolean(evalResult);\n }\n\n return true;\n}\n\nfunction isBlockWithWhen(item: unknown): item is BlockWithWhen {\n return typeof item === 'object' && item !== null && 'when' in item;\n}\n\nexport function filterBlocksByConditions<T>(\n obj: T,\n vars: Record<string, unknown>,\n skipMissingVars: boolean,\n): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => {\n if (isBlockWithWhen(item)) {\n if (item.when === null || item.when === undefined) {\n return true;\n }\n\n return evaluateWhen(item.when, vars, skipMissingVars);\n }\n\n return true;\n })\n .map((item) => {\n if (isBlockWithWhen(item)) {\n const {when: _, ...rest} = item;\n\n return filterBlocksByConditions(rest, vars, skipMissingVars);\n }\n\n return filterBlocksByConditions(item, vars, skipMissingVars);\n }) as T;\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n result[key] = filterBlocksByConditions(value, vars, skipMissingVars);\n }\n\n return result as T;\n }\n\n return obj;\n}\n\nexport function hasWhenConditions(obj: unknown): boolean {\n if (Array.isArray(obj)) {\n return obj.some((item) => hasWhenConditions(item));\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n if ('when' in obj) {\n return true;\n }\n\n return Object.values(obj).some((value) => hasWhenConditions(value));\n }\n\n return false;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {isObject} from 'lodash';\n\nimport {bounded} from './decorators';\n\nexport const all = Promise.all.bind(Promise);\n\nexport const race = Promise.race.bind(Promise);\n\nexport function noop() {}\n\nexport function get<K extends string>(key: K) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function <T extends Record<K, any>>(\n object: T,\n ): T extends Record<K, infer V> ? V : never {\n return object[key];\n };\n}\n\nexport function zip<T = unknown>(keys: string[], values: T[]) {\n return keys.reduce((acc, key, index) => {\n acc[key] = values[index];\n return acc;\n }, {} as Hash<T>);\n}\n\nexport function own<V = unknown, T extends string = string>(\n box: unknown,\n field: T,\n): box is Record<T, V> {\n return (\n Boolean(box && typeof box === 'object') && Object.prototype.hasOwnProperty.call(box, field)\n );\n}\n\nexport function copyJson<T extends object>(\n json: T | undefined,\n): T extends DeepFrozen<infer R> ? R : T | undefined {\n // @ts-ignore\n return json ? JSON.parse(JSON.stringify(json)) : json;\n}\n\nexport function freezeJson<T>(target: T, visited = new Set()): T {\n if (!visited.has(target)) {\n visited.add(target);\n\n if (Array.isArray(target)) {\n target.forEach((item) => freezeJson(item, visited));\n }\n\n if (isObject(target) && !Object.isSealed(target)) {\n Object.freeze(target);\n Object.keys(target).forEach((key) =>\n freezeJson(target[key as keyof typeof target], visited),\n );\n }\n }\n\n return target;\n}\n\nexport function errorMessage(error: unknown): string {\n if (typeof error === 'string') {\n return error;\n }\n\n if (own<string, 'message'>(error, 'message')) {\n return error.message;\n }\n\n return String(error);\n}\n\nexport function fallbackLang(lang: string) {\n if (['kz', 'ua', 'be', 'ru'].includes(lang)) {\n return 'ru';\n }\n\n return 'en';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class Defer<T = any> {\n promise: Promise<T>;\n\n resolve!: (result: T) => void;\n\n reject!: (error: unknown) => void;\n\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n\ntype CancelAPI = {\n cancel: () => void;\n skip: () => void;\n};\n\nexport function wait(delay: number, action = () => {}): Promise<void> & CancelAPI {\n let timeout: NodeJS.Timeout;\n const promise = new Promise((resolve) => {\n timeout = setTimeout(resolve, delay);\n }).then(() => action());\n\n Object.assign(promise, {\n cancel: () => clearTimeout(timeout),\n skip: () => {\n action = () => {};\n },\n });\n\n return promise as Promise<void> & CancelAPI;\n}\n\nexport type Bucket<T> = {\n get(): T;\n set(value: T): void;\n};\n\nexport function bucket<T>() {\n let _value: T;\n\n return {\n get: () => _value,\n set: (value: T) => {\n _value = value;\n },\n };\n}\n\nexport class Buckets<T> {\n private scope: Map<string, T> = new Map();\n\n @bounded\n bind(key: string) {\n return {\n get: () => this.get(key),\n set: (value: T) => this.set(key, value),\n };\n }\n\n @bounded\n set(key: string, value: T) {\n this.scope.set(key, value);\n }\n\n @bounded\n get(key: string): T {\n return this.scope.get(key) as T;\n }\n\n @bounded\n delete(key: string) {\n this.scope.delete(key);\n }\n}\n", "export function bounded(_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n this[methodName] = this[methodName].bind(this);\n });\n}\n\nconst Release = Symbol('Cache');\n\ntype DecoratedMethod = Function & {\n [Release](args: unknown[]): void;\n};\n\nexport function memoize(...props: string[] | [Function]) {\n return function (_originalMethod: unknown, context: ClassMethodDecoratorContext) {\n const methodName = context.name;\n const hash =\n typeof props[0] === 'function'\n ? props[0]\n : function (...args: unknown[]) {\n const mem = args.slice(0, props.length);\n if (!mem.every(isPrimitive)) {\n return null;\n }\n\n return props.map((prop, index) => `${prop}=${mem[index]}`).join('&');\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context.addInitializer(function (this: any) {\n const cache = new Map();\n const method = this[methodName];\n\n this[methodName] = function (this: unknown, ...args: unknown[]) {\n const key = hash.call(this, ...args);\n\n if (key === null) {\n return method.call(this, ...args);\n }\n\n if (!cache.has(key)) {\n cache.set(key, method.call(this, ...args));\n }\n\n return cache.get(key);\n };\n this[methodName][Release] = (args: unknown[]) => {\n const key = hash.call(this, ...args);\n\n cache.delete(key);\n };\n });\n };\n}\n\nmemoize.release = (method: Function, ...args: unknown[]) => {\n if (Release in method) {\n (method as DecoratedMethod)[Release](args);\n }\n};\n\nconst PRIMITIVE_TYPES = ['string', 'number', 'symbol', 'boolean', 'undefined'];\n\nfunction isPrimitive(value: unknown) {\n return !value || PRIMITIVE_TYPES.includes(typeof value);\n}\n", "import {Console} from 'node:console';\n\nclass MutableConsole extends Console {\n log(...args: unknown[]) {\n this.write('log', args);\n }\n\n time(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.time(label);\n }\n }\n\n timeEnd(label: string) {\n if (process.env.NODE_ENV !== 'test') {\n super.timeEnd(label);\n }\n }\n\n private write(level: 'log' | 'error' | 'warn', args: unknown[]) {\n if (process.env.NODE_ENV !== 'test') {\n super[level](...args);\n }\n }\n}\n\nconst _console = new MutableConsole(process.stdout, process.stderr, false);\n\nexport {_console as console};\n", "import type {Hook, HookMap} from 'tapable';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Hooks = Hash<Hook<any, any> | HookMap<any>>;\n\nexport function generateHooksAccess<THooks extends Hooks>(\n name: string,\n hooks: (name: string) => THooks,\n) {\n const Hooks = Symbol(`${name}Hooks`);\n\n function getHooks(program: object | undefined): THooks {\n return (program && (program as {[Hooks]: THooks})[Hooks]) || hooks('Unknown');\n }\n\n function withHooks<T extends ClassType>(Target: T, {kind}: ClassDecoratorContext): T {\n if (kind !== 'class') {\n throw new TypeError(`Decorator 'withHooks' is not applicable to '${kind}'.`);\n }\n\n return class extends Target {\n [Hooks] = intercept(this.name, hooks(this.name || name));\n };\n }\n\n return [getHooks, withHooks, Hooks] as const;\n}\n\nexport type HookMeta = {\n service: string;\n hook: string;\n name: string;\n type: string;\n};\n\nexport function intercept<T extends Hooks>(service: string, hooks: T): T {\n for (const [hook, handler] of Object.entries(hooks)) {\n handler.intercept({\n register: (info) => {\n const {type, name, fn} = info;\n const meta = {service, hook, name, type};\n\n if (type === 'promise') {\n info.fn = async (...args: unknown[]) => {\n try {\n return await fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else if (type === 'sync') {\n info.fn = (...args: unknown[]) => {\n try {\n return fn(...args);\n } catch (error) {\n if (error instanceof Error) {\n Object.assign(error, {hook: meta});\n }\n\n throw error;\n }\n };\n } else {\n throw new TypeError('Unexpected hook tap type - ' + type);\n }\n\n return info;\n },\n });\n }\n\n return hooks;\n}\n", "import type {Langs} from '~/commands/build/types';\n\nimport {dirname, extname, isAbsolute, join, normalize} from 'node:path';\nimport _normalizePath from 'normalize-path';\n\nimport {isExternalHref} from '~/core/utils';\n\nexport function normalizePath(path: string): NormalizedPath {\n return _normalizePath(normalize(_normalizePath(path, false)), false);\n}\n\nexport function isRelativePath(path: string): path is RelativePath {\n return !isExternalHref(path) && !isAbsolute(path);\n}\n\nexport function langFromPath(path: string, config: {lang?: string; langs: Langs}): string {\n const {lang, langs} = config;\n const pathBaseLang = normalizePath(path).split('/')[0];\n const pathLang =\n langs.some((l) => (typeof l === 'string' ? l === pathBaseLang : l.lang === pathBaseLang)) &&\n pathBaseLang;\n\n const result = pathLang || lang || langs[0];\n return typeof result === 'string' ? result : result.lang;\n}\n\nexport function rebasePath(root: RelativePath, path: RelativePath) {\n return normalizePath(join(dirname(root), path));\n}\n\nexport function fullPath(\n path: AbsolutePath | NormalizedPath,\n root: NormalizedPath,\n): NormalizedPath {\n if (path.match(/^(\\/|\\\\)/)) {\n return normalizePath(path.slice(1));\n } else {\n return normalizePath(join(dirname(root), path));\n }\n}\n\nexport function getDepth(path: string) {\n return path\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\/|\\/$/g, '')\n .split('/').length;\n}\n\nexport function getDepthPath(depth: number) {\n return Array(depth).fill('../').join('') || './';\n}\n\nexport function setExt<T extends AnyPath>(path: T, newext: string): T {\n newext = newext.startsWith('.') ? newext.slice(1) : newext;\n\n return (path.slice(0, -extname(path).length) + (newext ? '.' + newext : '')) as T;\n}\n", "export function replaceAll(string: string, match: string, replace: string) {\n if (!string) {\n return string;\n }\n\n const matches = [];\n\n let index = -1;\n while ((index = string.indexOf(match, index + 1)) > -1) {\n matches.push([index, index + match.length]);\n }\n\n return matches.reduceRight((string, match) => {\n return string.slice(0, match[0]) + replace + string.slice(match[1]);\n }, string);\n}\n", "import type {UrlWithStringQuery} from 'node:url';\n\nimport {parse} from 'node:url';\nimport {cloneDeepWith, isString, pick} from 'lodash';\n\nimport {normalizePath} from './path';\n\nexport function isExternalHref(href: string) {\n return /^(\\w{1,10}:)?\\/\\//.test(href) || /^([+\\w]{1,10}:)/.test(href);\n}\n\nexport function longLink(href: string) {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path;\n\n if (result.endsWith('/')) {\n result += 'index.html';\n }\n\n if (result.match(/\\.[^/\\\\]+$/)) {\n result += '.html';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport function shortLink(href: string): string {\n if (isExternalHref(href)) {\n return href;\n }\n\n const [pathWithoutHash, hash] = href.split('#', 2);\n const [path, query] = pathWithoutHash.split('?', 2);\n\n let result = path\n .replace(/\\\\/g, '/')\n .replace(/\\/index\\.html$/, '/')\n .replace(/\\/index$/, '/')\n .replace(/^index\\.html$/, '.')\n .replace(/^index$/, '.')\n .replace(/\\.html$/, '');\n\n if (result === '' || result === './') {\n result = '.';\n }\n\n if (query) {\n result += '?' + query;\n }\n\n if (hash) {\n result += '#' + hash;\n }\n\n return result;\n}\n\nexport const MEDIA_FORMATS = /\\.(svg|png|gif|jpe?g|bmp|webp|ico)$/i;\n\nconst DOC_FORMATS = /\\.(txt|ya?ml|docx|xlsx|pptx|pdf|csv)$/i;\n\nexport function isMediaLink(link: string) {\n return MEDIA_FORMATS.test(link) || DOC_FORMATS.test(link);\n}\n\ntype LocalUrlInfo = Pick<UrlWithStringQuery, 'hash' | 'search'> & {\n path: NormalizedPath;\n};\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g;\n\nfunction unescapeAll(str: string) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n return str;\n }\n\n return str.replace(UNESCAPE_MD_RE, (_match: string, escaped: string) => escaped);\n}\n\nexport function parseLocalUrl<T = LocalUrlInfo>(url: string | undefined) {\n if (!url || isExternalHref(url) || url.startsWith('/')) {\n return null;\n }\n\n try {\n const parsed = parse(unescapeAll(url));\n\n if (parsed.host || parsed.protocol) {\n return null;\n }\n\n if (parsed.path) {\n parsed.path = normalizePath(parsed.path);\n }\n\n return pick(parsed, ['path', 'search', 'hash']) as T;\n } catch {\n return null;\n }\n}\n\nexport const LINK_KEYS_LEADING_CONFIG = ['href'];\nexport const LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [\n 'src',\n 'url',\n 'href',\n 'icon',\n 'image',\n 'desktop',\n 'mobile',\n 'tablet',\n 'previewImg',\n 'image',\n 'avatar',\n 'logo',\n 'light',\n 'dark',\n];\n\nexport const LINK_KEYS = [\n ...new Set([...LINK_KEYS_LEADING_CONFIG, ...LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG]),\n];\n\nexport function walkLinks(object: object, modify: (value: string) => string | void) {\n // Clone the object deeply with a customizer function that modifies matching keys\n return cloneDeepWith(object, (value: unknown, key) => {\n if (LINK_KEYS.includes(key as string) && isString(value)) {\n return modify(value);\n }\n\n return undefined;\n });\n}\n", "import type Token from 'markdown-it/lib/token';\n\ntype TokenWalker = (\n token: Token,\n state: {commented: boolean; index: number},\n) => void | undefined | {skip: number};\n\nexport function filterTokens(tokens: Token[], type: string, handler: TokenWalker) {\n let commented = false;\n\n if (!tokens || !tokens.length) {\n return;\n }\n\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index];\n\n if (token.type === 'html_block') {\n const commentStart = token.content.match('<!--');\n const commentEnd = token.content.match('-->');\n\n if (commentStart && !commentEnd) {\n commented = true;\n }\n\n if (!commentStart && commentEnd) {\n commented = false;\n }\n }\n\n if (token.type === type) {\n const result = handler(token, {commented, index});\n if (result?.skip) {\n index += result?.skip - 1;\n }\n }\n }\n}\n", "import {normalizePath} from './path';\nimport {copyJson} from './common';\n\ntype Formatter<T, O> = (data: T) => O;\n\nconst toString = <T>(data: T) => {\n if (typeof data === 'string') {\n return data;\n }\n\n return JSON.stringify(data);\n};\n\nexport class VFile<T extends string | object = string | object, Info extends Hash = {}> {\n get path(): NormalizedPath {\n return this._path;\n }\n\n set path(value: RelativePath) {\n this._path = normalizePath(value);\n }\n\n get data() {\n return this._data;\n }\n\n set data(value: T) {\n this._data = value;\n }\n\n get info() {\n return this._info;\n }\n\n set info(value: Info) {\n this._info = value;\n }\n\n private _path: NormalizedPath;\n\n private _data: T;\n\n private _info: Info = {} as Info;\n\n private _format: Formatter<T, string>;\n\n constructor(path: RelativePath, data: T, formatter: Formatter<T, string> = toString) {\n this._path = normalizePath(path);\n this._data = data;\n this._format = formatter;\n }\n\n copy(path?: RelativePath) {\n const data = typeof this._data === 'string' ? this._data : copyJson(this._data);\n return new VFile<T>(path || this._path, data as T, this._format);\n }\n\n format(formatter: Formatter<T, string>) {\n this._format = formatter;\n }\n\n toString() {\n return this._format(this._data);\n }\n}\n", "import {DepGraph} from 'dependency-graph';\n\nexport type SerializedGraph<Data = {type: string}> = {\n nodes: Array<{\n name: string;\n data?: Data;\n }>;\n dependencies: Array<{\n from: string;\n to: string;\n }>;\n};\n\nexport class Graph<Data = {type: string}> extends DepGraph<Data> {\n static is<Data = {type: string}>(data: unknown): data is SerializedGraph<Data> {\n if (data instanceof Graph) {\n return true;\n }\n return Boolean(\n data && typeof data === 'object' && '__type' in data && data.__type === '$$Graph',\n );\n }\n\n static deserialize(message: SerializedGraph) {\n return new Graph().consume(message);\n }\n\n constructor() {\n super({circular: true});\n }\n\n /**\n * Extracts a subgraph related to the specified node\n * @param nodeName - name of the node for which to extract the subgraph\n * @returns new Graph instance with the extracted subgraph\n */\n extract(nodeName: string): Graph<Data> {\n const extractedGraph = new Graph<Data>();\n\n if (!this.hasNode(nodeName)) {\n return extractedGraph;\n }\n\n // Recursively copy dependencies (nodes that the initial node depends on)\n this.copyDependenciesRecursively(nodeName, extractedGraph, new Set());\n\n // Recursively copy dependent nodes (nodes that depend on the initial node)\n this.copyDependentsRecursively(nodeName, extractedGraph, new Set());\n\n return extractedGraph;\n }\n\n /**\n * Consumes a serialized graph\n */\n consume(graph: Graph<Data> | SerializedGraph<Data> | undefined): this {\n if (!graph) {\n return this;\n }\n\n if (graph instanceof Graph) {\n graph = graph.serialize();\n }\n\n // First add all nodes\n for (const node of graph.nodes) {\n this.addNode(node.name);\n if (node.data) {\n this.setNodeData(node.name, node.data);\n }\n }\n\n // Then add all dependencies\n for (const dep of graph.dependencies) {\n this.addDependency(dep.from, dep.to);\n }\n\n return this;\n }\n\n /**\n * Removes node from graph\n * If node dependencies has no other dependants, they will be removed too\n * @param nodeName - node name to remove\n */\n release(nodeName: string): this {\n if (!this.hasNode(nodeName)) {\n return this;\n }\n\n // Get direct parents before removing the node\n const directParents = this.directDependenciesOf(nodeName);\n\n // Remove all incoming dependencies (parents -> node)\n for (const parent of directParents) {\n this.removeDependency(nodeName, parent);\n }\n\n // Remove all outgoing dependencies (node -> children)\n const directDependents = this.directDependentsOf(nodeName);\n for (const dependent of directDependents) {\n this.removeDependency(dependent, nodeName);\n }\n\n // Remove the node itself\n this.removeNode(nodeName);\n\n // Recursively remove parents that have no children left\n for (const parent of directParents) {\n if (this.hasNode(parent) && this.directDependentsOf(parent).length === 0) {\n this.release(parent);\n }\n }\n\n return this;\n }\n\n /**\n * Serializes the graph to a format for transfer between threads\n * @returns serialized representation of the graph\n */\n serialize(): SerializedGraph<Data> {\n const nodes: SerializedGraph<Data>['nodes'] = [];\n const dependencies: SerializedGraph['dependencies'] = [];\n\n // Get all nodes in the graph\n const allNodes = this.overallOrder();\n\n for (const nodeName of allNodes) {\n const nodeData = this.getNodeData(nodeName);\n nodes.push({\n name: nodeName,\n // Some data srtuctures can be Proxy objects,\n // which can't be serialized by threads defaultSerializer.\n // So, read data from this Proxy objects and write it as raw json.\n data: JSON.parse(JSON.stringify(nodeData)),\n });\n }\n\n // Get all dependencies\n for (const nodeName of allNodes) {\n const directDeps = this.directDependenciesOf(nodeName);\n for (const dep of directDeps) {\n dependencies.push({\n from: nodeName,\n to: dep,\n });\n }\n }\n\n nodes.sort((a, b) => (a.name > b.name ? 1 : -1));\n dependencies.sort((a, b) => {\n if (a.from === b.from) {\n return a.to > b.to ? 1 : -1;\n }\n return a.from > b.from ? 1 : -1;\n });\n\n return {nodes, dependencies, __type: '$$Graph'} as SerializedGraph<Data>;\n }\n\n /**\n * Recursively copies node dependencies\n */\n private copyDependenciesRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependencies\n const dependencies = this.directDependenciesOf(nodeName);\n for (const dep of dependencies) {\n this.copyDependenciesRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(nodeName, dep);\n }\n }\n\n /**\n * Recursively copies dependent nodes\n */\n private copyDependentsRecursively(\n nodeName: string,\n targetGraph: Graph<Data>,\n processed: Set<string>,\n ): void {\n if (processed.has(nodeName)) {\n return;\n }\n\n processed.add(nodeName);\n\n // Add node to target graph\n if (!targetGraph.hasNode(nodeName)) {\n targetGraph.addNode(nodeName);\n const nodeData = this.getNodeData(nodeName);\n if (nodeData) {\n targetGraph.setNodeData(nodeName, nodeData);\n }\n }\n\n // Recursively process only direct dependent nodes\n const dependents = this.directDependentsOf(nodeName);\n for (const dep of dependents) {\n this.copyDependentsRecursively(dep, targetGraph, processed);\n targetGraph.addDependency(dep, nodeName);\n }\n }\n}\n", "export type JsonDiff = {\n added: string[];\n changed: string[];\n removed: string[];\n};\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 JSON \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u044F\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @returns \u041E\u0431\u044A\u0435\u043A\u0442 \u0441 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\u043C\u0438 \u043F\u0443\u0442\u0435\u0439 \u043A \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u043C, \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u043C \u0438 \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u043C \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u043C\n */\nexport function compareJson(oldObj: object, newObj: object): JsonDiff {\n const added: string[] = [];\n const changed: string[] = [];\n const removed: string[] = [];\n\n compareObjects(oldObj, newObj, '', added, changed, removed);\n\n return {\n added: added.sort(),\n changed: changed.sort(),\n removed: removed.sort(),\n };\n}\n\n/**\n * \u0420\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u0441\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0438 \u0437\u0430\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u0440\u0430\u0437\u043B\u0438\u0447\u0438\u0439\n * @param oldObj - \u0441\u0442\u0430\u0440\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param newObj - \u043D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442\n * @param path - \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0443\u0442\u044C \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435\n * @param added - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param changed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0438\u0437\u043C\u0435\u043D\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n * @param removed - \u043C\u0430\u0441\u0441\u0438\u0432 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0451\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\n */\nfunction compareObjects(\n oldObj: unknown,\n newObj: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n if (isNullable(oldObj) && isNullable(newObj)) {\n return;\n }\n\n compareEntity(oldObj, newObj, path, added, changed, removed);\n}\n\nfunction addAllPaths(obj: unknown, path: string, arr: string[]): void {\n if (path) {\n arr.push(path);\n }\n\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n addAllPaths(obj[i], currentPath, arr);\n }\n return;\n }\n\n for (const key of Object.keys(obj)) {\n const currentPath = path ? `${path}.${key}` : key;\n addAllPaths((obj as Hash)[key], currentPath, arr);\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n */\nfunction compareArrays(\n oldArr: unknown[],\n newArr: unknown[],\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const maxLength = Math.max(oldArr.length, newArr.length);\n\n for (let i = 0; i < maxLength; i++) {\n const currentPath = path ? `${path}[${i}]` : `[${i}]`;\n const oldItem = oldArr[i];\n const newItem = newArr[i];\n\n if (i >= oldArr.length) {\n added.push(currentPath);\n } else if (i >= newArr.length) {\n removed.push(currentPath);\n } else {\n compareObjects(oldItem, newItem, currentPath, added, changed, removed);\n }\n }\n}\n\n/**\n * \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 \u0434\u0432\u0443\u0445 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432\n */\nfunction compareObjectProperties(\n oldObj: Hash,\n newObj: Hash,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n): void {\n const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);\n\n for (const key of allKeys) {\n const currentPath = path ? `${path}.${key}` : key;\n const oldValue = oldObj[key];\n const newValue = newObj[key];\n const isOldMember = key in oldObj;\n const isNewMember = key in newObj;\n\n if (isOldMember && isNewMember) {\n compareEntity(oldValue, newValue, currentPath, added, changed, removed);\n } else if (isNewMember) {\n addAllPaths(newValue, currentPath, added);\n } else if (isOldMember) {\n addAllPaths(oldValue, currentPath, removed);\n }\n }\n}\n\nfunction compareEntity(\n oldValue: unknown,\n newValue: unknown,\n path: string,\n added: string[],\n changed: string[],\n removed: string[],\n) {\n if (\n (isNullable(oldValue) || isNullable(newValue)) &&\n !(isNullable(oldValue) && isNullable(newValue))\n ) {\n changed.push(path);\n } else if (typeof oldValue !== typeof newValue) {\n changed.push(path);\n } else if (typeof oldValue !== 'object' || typeof newValue !== 'object') {\n if (oldValue !== newValue) {\n changed.push(path);\n }\n } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {\n compareArrays(oldValue, newValue, path, added, changed, removed);\n } else if (!Array.isArray(oldValue) && !Array.isArray(newValue)) {\n compareObjectProperties(oldValue as Hash, newValue as Hash, path, added, changed, removed);\n } else {\n changed.push(path);\n }\n}\n\nfunction isNullable(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n", "import {\n copyFile,\n link,\n mkdir,\n readFile,\n realpath,\n rm,\n stat,\n unlink,\n writeFile,\n} from 'node:fs/promises';\nimport {realpathSync, statSync} from 'node:fs';\n\nexport type FileSystem = {\n stat: typeof stat;\n statSync: typeof statSync;\n realpathSync: typeof realpathSync;\n realpath: typeof realpath;\n link: typeof link;\n unlink: typeof unlink;\n copyFile: typeof copyFile;\n mkdir: typeof mkdir;\n rm: typeof rm;\n readFile: typeof readFile;\n writeFile: typeof writeFile;\n};\n\nexport const fs = {\n stat,\n statSync,\n realpathSync,\n realpath,\n rm,\n link,\n unlink,\n copyFile,\n mkdir,\n readFile,\n writeFile,\n};\n", "import {NoValue, evaluate} from '@diplodoc/liquid';\n\ntype WhenValue = string | boolean;\n\ntype BlockWithWhen = {\n when?: WhenValue;\n [key: string]: unknown;\n};\n\nexport function evaluateWhen(\n whenValue: WhenValue,\n vars: Record<string, unknown>,\n skipMissingVars?: boolean,\n): boolean {\n if (typeof whenValue === 'boolean') {\n return whenValue;\n }\n\n if (typeof whenValue === 'string') {\n const evalResult = evaluate(whenValue, vars, skipMissingVars);\n\n if (evalResult === NoValue && skipMissingVars) {\n return true;\n }\n\n return Boolean(evalResult);\n }\n\n return true;\n}\n\nfunction isBlockWithWhen(item: unknown): item is BlockWithWhen {\n return typeof item === 'object' && item !== null && 'when' in item;\n}\n\nexport function filterBlocksByConditions<T>(\n obj: T,\n vars: Record<string, unknown>,\n skipMissingVars: boolean,\n): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => {\n if (isBlockWithWhen(item)) {\n if (item.when === null || item.when === undefined) {\n return true;\n }\n\n return evaluateWhen(item.when, vars, skipMissingVars);\n }\n\n return true;\n })\n .map((item) => {\n if (isBlockWithWhen(item)) {\n const {when: _, ...rest} = item;\n\n return filterBlocksByConditions(rest, vars, skipMissingVars);\n }\n\n return filterBlocksByConditions(item, vars, skipMissingVars);\n }) as T;\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n result[key] = filterBlocksByConditions(value, vars, skipMissingVars);\n }\n\n return result as T;\n }\n\n return obj;\n}\n\nexport function hasWhenConditions(obj: unknown): boolean {\n if (Array.isArray(obj)) {\n return obj.some((item) => hasWhenConditions(item));\n }\n\n if (obj && typeof obj === 'object' && obj !== null) {\n if ('when' in obj) {\n return true;\n }\n\n return Object.values(obj).some((value) => hasWhenConditions(value));\n }\n\n return false;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["string", "match", "isExternalHref", "link"]
|
|
7
7
|
}
|