@diplodoc/cli 4.13.2 → 4.13.3

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/constants.ts", "../src/validator.ts", "../src/cmd/build/index.ts", "../src/services/tocs.ts", "../src/services/metadata.ts", "../src/utils/logger.ts", "../src/utils/markup.ts", "../src/utils/singlePage.ts", "../src/utils/url.ts", "../src/utils/path.ts", "../src/utils/toc.ts", "../src/services/utils.ts", "../src/utils/presets.ts", "../src/utils/glob.ts", "../src/utils/file.ts", "../src/services/authors.ts", "../src/services/contributors.ts", "../src/services/includers/index.ts", "../src/services/includers/batteries/generic.ts", "../src/services/includers/batteries/sourcedocs.ts", "../src/services/includers/batteries/unarchive.ts", "../src/services/preset.ts", "../src/services/argv.ts", "../src/services/leading.ts", "../src/services/plugins.ts", "../src/steps/processAssets.ts", "../src/steps/processExcludedFiles.ts", "../src/steps/processLogs.ts", "../src/steps/processPages.ts", "../src/resolvers/md2md.ts", "../src/resolvers/md2html.ts", "../src/resolvers/lintPage.ts", "../src/vcs-connector/github.ts", "../src/vcs-connector/client/github.ts", "../src/vcs-connector/connector-validator.ts", "../src/vcs-connector/index.ts", "../src/steps/processLinter.ts", "../src/utils/worker.ts", "../src/steps/processServiceFiles.ts", "../src/steps/processMapFile.ts", "../src/cmd/publish/upload.ts", "../src/cmd/publish/index.ts", "../src/cmd/xliff/extract.ts", "../src/cmd/xliff/compose.ts", "../src/cmd/xliff/index.ts", "../src/cmd/translate/index.ts", "../src/packages/credentials/yandex-oauth.ts"],
4
- "sourcesContent": ["import yargs from 'yargs';\nimport {hideBin} from 'yargs/helpers';\nimport log from '@diplodoc/transform/lib/log';\nimport 'threads/register';\n\nimport {MAIN_TIMER_ID} from './constants';\n\nimport {build, publish, translate, xliff} from './cmd';\n\nconsole.time(MAIN_TIMER_ID);\n\nyargs\n .command(build)\n .command(publish)\n .command(xliff)\n .command(translate)\n .option('config', {\n alias: 'c',\n describe: 'YFM configuration file',\n type: 'string',\n })\n .option('strict', {\n alias: 's',\n default: false,\n describe: 'Run in strict mode',\n type: 'boolean',\n })\n .option('quiet', {\n alias: 'q',\n default: false,\n describe: \"Run in quiet mode. Don't write logs to stdout\",\n type: 'boolean',\n })\n .group(['config', 'strict', 'quiet', 'help', 'version'], 'Common options:')\n .version(typeof VERSION !== 'undefined' ? VERSION : '')\n .help()\n .parse(hideBin(process.argv), {}, (err, {strict}, output) => {\n console.timeEnd(MAIN_TIMER_ID);\n\n if (err) {\n console.error(err);\n process.exit(1);\n }\n\n const {warn, error} = log.get();\n\n if ((strict && warn.length) || error.length) {\n process.exit(1);\n }\n\n console.log(output);\n\n process.exit(0);\n });\n", "import {resolve} from 'path';\nconst os = require('os');\nconst notes = require('@diplodoc/transform/lib/plugins/notes');\nconst anchors = require('@diplodoc/transform/lib/plugins/anchors');\nconst code = require('@diplodoc/transform/lib/plugins/code');\nconst cut = require('@diplodoc/transform/lib/plugins/cut');\nconst deflist = require('@diplodoc/transform/lib/plugins/deflist');\nconst imsize = require('@diplodoc/transform/lib/plugins/imsize');\nconst meta = require('@diplodoc/transform/lib/plugins/meta');\nconst sup = require('@diplodoc/transform/lib/plugins/sup');\nconst tabs = require('@diplodoc/transform/lib/plugins/tabs');\nconst video = require('@diplodoc/transform/lib/plugins/video');\nconst includes = require('@diplodoc/transform/lib/plugins/includes');\nconst links = require('@diplodoc/transform/lib/plugins/links');\nconst images = require('@diplodoc/transform/lib/plugins/images');\nconst monospace = require('@diplodoc/transform/lib/plugins/monospace');\nconst table = require('@diplodoc/transform/lib/plugins/table');\nconst term = require('@diplodoc/transform/lib/plugins/term');\nconst blockAnchor = require('@diplodoc/transform/lib/plugins/block-anchor');\nconst changelog = require('@diplodoc/transform/lib/plugins/changelog');\nconst mermaid = require('@diplodoc/mermaid-extension');\nconst latex = require('@diplodoc/latex-extension');\nconst openapi = require('@diplodoc/openapi-extension');\n\nincludes.collect = require('@diplodoc/transform/lib/plugins/includes/collect');\nimages.collect = require('@diplodoc/transform/lib/plugins/images/collect');\nchangelog.collect = require('@diplodoc/transform/lib/plugins/changelog/collect');\n\nexport const ASSETS_FOLDER = resolve(__dirname, '../assets');\nexport const BUNDLE_FOLDER = '_bundle';\nexport const TMP_INPUT_FOLDER = '.tmp_input';\nexport const TMP_OUTPUT_FOLDER = '.tmp_output';\nexport const MAIN_TIMER_ID = 'Build time';\nexport const YFM_CONFIG_FILENAME = '.yfm';\nexport const REDIRECTS_FILENAME = 'redirects.yaml';\nexport const LINT_CONFIG_FILENAME = '.yfmlint';\nexport const SINGLE_PAGE_FILENAME = 'single-page.html';\nexport const SINGLE_PAGE_DATA_FILENAME = 'single-page.json';\nexport const CUSTOM_STYLE = 'custom-style';\n\nexport enum Stage {\n NEW = 'new',\n PREVIEW = 'preview',\n TECH_PREVIEW = 'tech-preview',\n SKIP = 'skip',\n}\n\nexport enum Lang {\n RU = 'ru',\n EN = 'en',\n}\n\nexport enum Platforms {\n WINDOWS = 'win32',\n MAC = 'darwin',\n LINUX = 'linux',\n}\n\nexport enum IncludeMode {\n ROOT_MERGE = 'root_merge',\n MERGE = 'merge',\n LINK = 'link',\n}\n\nexport enum ResourceType {\n style = 'style',\n script = 'script',\n}\n\nexport const YFM_PLUGINS = [\n meta,\n deflist,\n includes,\n cut,\n links,\n images,\n notes,\n anchors,\n tabs,\n code,\n imsize,\n sup,\n video,\n monospace,\n table,\n term,\n openapi.transform(),\n mermaid.transform(),\n latex.transform(),\n changelog,\n blockAnchor,\n];\n\nexport const PROCESSING_FINISHED = 'Processing finished:';\nexport const LINTING_FINISHED = 'Linting finished:';\nexport const GETTING_ALL_CONTRIBUTORS = 'Getting all contributors.';\nexport const ALL_CONTRIBUTORS_RECEIVED = 'All contributors received.';\nexport const getMsg\u0421onfigurationMustBeProvided = (repo: string) =>\n `\u0421onfiguration must be provided for ${repo} like env variables or in .yfm file`;\n\nexport const FIRST_COMMIT_FROM_ROBOT_IN_GITHUB = '2dce14271359cd20d7e874956d604de087560cf4';\n\n// Include example: 'master\\n' or 'nanov94/QUEUE-1234_some_branch_name.1.2.3\\n'\n// Regexp result: 'master' or 'nanov94/QUEUE-1234_some_branch_name'\nexport const REGEXP_BRANCH_NAME = /([\\d\\w\\-_/.]+)(?=\\r?\\n)/g;\n\n// Include example: {% include [createfolder](create-folder.md) %}\n// Regexp result: [createfolder](create-folder.md)\nexport const REGEXP_INCLUDE_CONTENTS = /(?<=[{%]\\sinclude\\s).+(?=\\s[%}])/gm;\n\n// Include example: [createfolder](create-folder.md)\n// Regexp result: create-folder.md\nexport const REGEXP_INCLUDE_FILE_PATH = /(?<=[(]).+(?=[)])/g;\n\n// Include example: author: authorLogin\n// Regexp result: authorLogin\nexport const REGEXP_AUTHOR = /(?<=author:\\s).+(?=\\r?\\n)/g;\n\nexport const MIN_CHUNK_SIZE = Number(process.env.MIN_CHUNK_SIZE) || 1000;\nexport const WORKERS_COUNT = Number(process.env.WORKERS_COUNT) || os.cpus().length - 1;\nexport const PAGE_PROCESS_CONCURRENCY = Number(process.env.PAGE_PROCESS_CONCURRENCY) || 500;\n\nexport const metadataBorder = '---';\n", "import {Arguments} from 'yargs';\nimport {join, resolve} from 'path';\nimport {readFileSync} from 'fs';\nimport {load} from 'js-yaml';\nimport merge from 'lodash/merge';\nimport log from '@diplodoc/transform/lib/log';\nimport {LINT_CONFIG_FILENAME, REDIRECTS_FILENAME, YFM_CONFIG_FILENAME} from './constants';\nimport {ConnectorValidatorProps} from './vcs-connector/connector-models';\n\nfunction notEmptyStringValidator(value: unknown): Boolean {\n if (typeof value === 'string') {\n return Boolean(value);\n }\n\n return false;\n}\n\nfunction requiredValueValidator(value: unknown): Boolean {\n return Boolean(value);\n}\n\nconst validators: Record<string, ConnectorValidatorProps> = {\n storageEndpoint: {\n errorMessage: 'Endpoint of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n },\n storageBucket: {\n errorMessage: 'Bucket name of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n },\n storageKeyId: {\n errorMessage: 'Key Id of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n defaultValue: process.env.YFM_STORAGE_KEY_ID,\n },\n storageSecretKey: {\n errorMessage: 'Secret key of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n defaultValue: process.env.YFM_STORAGE_SECRET_KEY,\n },\n storageRegion: {\n errorMessage: 'Region of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n defaultValue: 'eu-central-1',\n },\n};\n\ninterface Redirect {\n from: string;\n to: string;\n}\n\ninterface RedirectsConfig {\n common: Redirect[];\n [lang: string]: Redirect[];\n}\n\nfunction validateRedirects(redirectsConfig: RedirectsConfig, pathToRedirects: string) {\n const redirects: Redirect[] = Object.keys(redirectsConfig).reduce(\n (res, redirectSectionName) => {\n const sectionRedirects = redirectsConfig[redirectSectionName];\n res.push(...sectionRedirects);\n return res;\n },\n [] as Redirect[],\n );\n\n const getContext = (from: string, to: string) => ` [Context: \\n- from: ${from}\\n- to: ${to} ]`;\n const formatMessage = (message: string, pathname: string, from: string, to: string) =>\n `${pathname}: ${message} ${getContext(from, to)}`;\n\n redirects.forEach((redirect) => {\n const {from, to} = redirect;\n\n if (!from || !to) {\n throw new Error(\n formatMessage('One of the two parameters is missing', pathToRedirects, from, to),\n );\n }\n\n if (from === to) {\n throw new Error(\n formatMessage('Parameters must be different', pathToRedirects, from, to),\n );\n }\n });\n}\n\nexport function argvValidator(argv: Arguments<Object>): Boolean {\n try {\n // Combine passed argv and properties from configuration file.\n const pathToConfig = argv.config\n ? String(argv.config)\n : join(String(argv.input), YFM_CONFIG_FILENAME);\n const content = readFileSync(resolve(pathToConfig), 'utf8');\n Object.assign(argv, load(content) || {});\n } catch (error) {\n if (error.name === 'YAMLException') {\n log.error(`Error to parse ${YFM_CONFIG_FILENAME}: ${error.message}`);\n }\n }\n\n let lintConfig: unknown = {};\n try {\n const pathToConfig = join(String(argv.input), LINT_CONFIG_FILENAME);\n const content = readFileSync(resolve(pathToConfig), 'utf8');\n\n lintConfig = load(content) || {};\n } catch (error) {\n if (error.name === 'YAMLException') {\n log.error(`Error to parse ${LINT_CONFIG_FILENAME}: ${error.message}`);\n }\n } finally {\n const preparedLintConfig = merge(lintConfig, {\n 'log-levels': {\n MD033: argv.allowHTML ? 'disabled' : 'error',\n },\n });\n\n Object.assign(argv, {lintConfig: preparedLintConfig});\n }\n\n try {\n const pathToRedirects = join(String(argv.input), REDIRECTS_FILENAME);\n const redirectsContent = readFileSync(resolve(pathToRedirects), 'utf8');\n const redirects = load(redirectsContent);\n\n validateRedirects(redirects as RedirectsConfig, pathToRedirects);\n } catch (error) {\n if (error.name === 'YAMLException') {\n log.error(`Error to parse ${REDIRECTS_FILENAME}: ${error.message}`);\n }\n\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n\n if (argv.publish) {\n for (const [field, validator] of Object.entries(validators)) {\n const value = argv[field] ?? validator.defaultValue;\n\n if (!validator) {\n continue;\n }\n\n const validateFn = validator.validateFn ?? requiredValueValidator;\n\n if (!validateFn(value)) {\n throw new Error(validator.errorMessage);\n }\n\n argv[field] = value;\n }\n }\n\n return true;\n}\n", "import {Arguments, Argv} from 'yargs';\nimport {\n BUNDLE_FOLDER,\n LINT_CONFIG_FILENAME,\n REDIRECTS_FILENAME,\n Stage,\n TMP_INPUT_FOLDER,\n TMP_OUTPUT_FOLDER,\n YFM_CONFIG_FILENAME,\n} from '../../constants';\nimport {argvValidator} from '../../validator';\nimport {join, resolve} from 'path';\nimport {ArgvService, Includers} from '../../services';\nimport OpenapiIncluder from '@diplodoc/openapi-extension/includer';\nimport {\n initLinterWorkers,\n processAssets,\n processExcludedFiles,\n processLinter,\n processLogs,\n processPages,\n processServiceFiles,\n} from '../../steps';\nimport {prepareMapFile} from '../../steps/processMapFile';\nimport shell from 'shelljs';\nimport {Resources} from '../../models';\nimport {copyFiles, logger} from '../../utils';\nimport {upload as publishFilesToS3} from '../publish/upload';\nimport glob from 'glob';\n\nexport const build = {\n command: ['build', '$0'],\n description: 'Build documentation in target directory',\n handler,\n builder,\n};\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('input', {\n alias: 'i',\n describe: 'Path to input folder with .md files',\n type: 'string',\n group: 'Build options:',\n })\n .option('output', {\n alias: 'o',\n describe: 'Path to output folder',\n type: 'string',\n group: 'Build options:',\n })\n .option('varsPreset', {\n default: 'default',\n describe: 'Target vars preset of documentation <external|internal>',\n group: 'Build options:',\n })\n .option('output-format', {\n default: 'html',\n describe: 'Format of output file <html|md>',\n group: 'Build options:',\n })\n .option('vars', {\n alias: 'v',\n default: '{}',\n describe: 'List of markdown variables',\n group: 'Build options:',\n })\n .option('apply-presets', {\n default: true,\n describe: 'Should apply presets. Only for --output-format=md',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('resolve-conditions', {\n default: true,\n describe: 'Should resolve conditions. Only for --output-format=md',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('conditions-in-code', {\n default: false,\n describe: 'Meet conditions in code blocks',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('disable-liquid', {\n default: false,\n describe: 'Disable template engine',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('allowHTML', {\n default: false,\n describe: 'Allow to use HTML in Markdown files',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('ignore-stage', {\n default: Stage.SKIP,\n describe: 'Ignore tocs with stage',\n group: 'Build options:',\n })\n .option('ignore-author-patterns', {\n default: [] as string[],\n describe: 'Ignore authors if they contain passed string',\n group: 'Build options:',\n type: 'array',\n })\n .option('contributors', {\n default: false,\n describe: 'Should attach contributors into files',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('add-system-meta', {\n default: false,\n describe: 'Should add system section variables form presets into files meta data',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('add-map-file', {\n default: false,\n describe: 'Should add all paths of documentation into file.json',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('single-page', {\n default: false,\n describe: 'Beta functionality: Build a single page in the output folder also',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('publish', {\n default: false,\n describe: 'Should upload output files to S3 storage',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('remove-hidden-toc-items', {\n default: false,\n describe: 'Remove hidden toc items',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('lint-disabled', {\n default: false,\n describe: 'Disable linting',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('build-disabled', {\n default: false,\n describe: 'Disable building',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('allow-custom-resources', {\n default: false,\n describe: 'Allow loading custom resources',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('static-content', {\n default: false,\n describe: 'Include static content in the page',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('need-to-sanitize-html', {\n default: true,\n describe: 'Enable sanitize html',\n type: 'boolean',\n group: 'Build options:',\n })\n .check(argvValidator)\n .example('yfm -i ./input -o ./output', '')\n .demandOption(\n ['input', 'output'],\n 'Please provide input and output arguments to work with this tool',\n );\n}\n\nasync function handler(args: Arguments<any>) {\n const userOutputFolder = resolve(args.output);\n const tmpInputFolder = resolve(args.output, TMP_INPUT_FOLDER);\n const tmpOutputFolder = resolve(args.output, TMP_OUTPUT_FOLDER);\n\n try {\n ArgvService.init({\n ...args,\n rootInput: args.input,\n input: tmpInputFolder,\n output: tmpOutputFolder,\n });\n Includers.init([OpenapiIncluder as any]);\n\n const {\n output: outputFolderPath,\n outputFormat,\n publish,\n lintDisabled,\n buildDisabled,\n addMapFile,\n allowCustomResources,\n resources,\n } = ArgvService.getConfig();\n\n preparingTemporaryFolders(userOutputFolder);\n\n await processServiceFiles();\n processExcludedFiles();\n\n if (addMapFile) {\n prepareMapFile();\n }\n\n const outputBundlePath = join(outputFolderPath, BUNDLE_FOLDER);\n const pathToConfig = args.config || join(args.input, YFM_CONFIG_FILENAME);\n const pathToRedirects = join(args.input, REDIRECTS_FILENAME);\n const pathToLintConfig = join(args.input, LINT_CONFIG_FILENAME);\n\n if (!lintDisabled) {\n /* Initialize workers in advance to avoid a timeout failure due to not receiving a message from them */\n await initLinterWorkers();\n }\n\n const processes = [\n !lintDisabled && processLinter(),\n !buildDisabled && processPages(outputBundlePath),\n ].filter(Boolean) as Promise<void>[];\n\n await Promise.all(processes);\n\n if (!buildDisabled) {\n // process additional files\n switch (outputFormat) {\n case 'html':\n processAssets(outputBundlePath);\n break;\n case 'md': {\n shell.cp(resolve(pathToConfig), tmpOutputFolder);\n shell.cp(resolve(pathToRedirects), tmpOutputFolder);\n shell.cp(resolve(pathToLintConfig), tmpOutputFolder);\n\n if (resources && allowCustomResources) {\n const resourcePaths: string[] = [];\n\n // collect paths of all resources\n Object.keys(resources).forEach(\n (type) =>\n resources[type as keyof Resources]?.forEach((path: string) =>\n resourcePaths.push(path),\n ),\n );\n\n //copy resources\n copyFiles(args.input, tmpOutputFolder, resourcePaths);\n }\n\n break;\n }\n }\n\n // Copy all generated files to user' output folder\n shell.cp(\n '-r',\n [join(tmpOutputFolder, '*'), join(tmpOutputFolder, '.*')],\n userOutputFolder,\n );\n\n if (publish) {\n const DEFAULT_PREFIX = process.env.YFM_STORAGE_PREFIX ?? '';\n const {\n ignore = [],\n storageRegion,\n storageEndpoint: endpoint,\n storageBucket: bucket,\n storagePrefix: prefix = DEFAULT_PREFIX,\n storageKeyId: accessKeyId,\n storageSecretKey: secretAccessKey,\n } = ArgvService.getConfig();\n\n await publishFilesToS3({\n input: userOutputFolder,\n region: storageRegion,\n ignore: [...ignore, TMP_INPUT_FOLDER, TMP_OUTPUT_FOLDER],\n endpoint,\n bucket,\n prefix,\n accessKeyId,\n secretAccessKey,\n });\n }\n }\n } catch (err) {\n logger.error('', err.message);\n } finally {\n processLogs(tmpInputFolder);\n\n shell.rm('-rf', tmpInputFolder, tmpOutputFolder);\n }\n}\n\nfunction preparingTemporaryFolders(userOutputFolder: string) {\n const args = ArgvService.getConfig();\n\n shell.mkdir('-p', userOutputFolder);\n\n // Create temporary input/output folders\n shell.rm('-rf', args.input, args.output);\n shell.mkdir(args.input, args.output);\n\n copyFiles(\n args.rootInput,\n args.input,\n glob.sync('**', {\n cwd: args.rootInput,\n nodir: true,\n follow: true,\n ignore: ['node_modules/**', '*/node_modules/**'],\n }),\n );\n\n shell.chmod('-R', 'u+w', args.input);\n}\n", "import {dirname, extname, join, normalize, parse, relative, resolve, sep} from 'path';\nimport {existsSync, readFileSync, writeFileSync} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport shell from 'shelljs';\nimport walkSync from 'walk-sync';\nimport liquid from '@diplodoc/transform/lib/liquid';\nimport log from '@diplodoc/transform/lib/log';\nimport {bold} from 'chalk';\n\nimport {ArgvService, PresetService} from './index';\nimport {getContentWithUpdatedStaticMetadata} from './metadata';\nimport {YfmToc} from '../models';\nimport {IncludeMode, Stage} from '../constants';\nimport {isExternalHref, logger} from '../utils';\nimport {filterFiles, firstFilterTextItems, liquidField} from './utils';\nimport {IncludersError, applyIncluders} from './includers';\n\nexport interface TocServiceData {\n storage: Map<string, YfmToc>;\n navigationPaths: string[];\n includedTocPaths: Set<string>;\n}\n\nconst storage: TocServiceData['storage'] = new Map();\nlet navigationPaths: TocServiceData['navigationPaths'] = [];\nconst includedTocPaths: TocServiceData['includedTocPaths'] = new Set();\nconst tocFileCopyMap = new Map<string, string>();\n\nasync function add(path: string) {\n const {\n input: inputFolderPath,\n output: outputFolderPath,\n outputFormat,\n ignoreStage,\n vars,\n } = ArgvService.getConfig();\n\n const pathToDir = dirname(path);\n const content = readFileSync(resolve(inputFolderPath, path), 'utf8');\n const parsedToc = load(content) as YfmToc;\n\n // Should ignore toc with specified stage.\n if (parsedToc.stage === ignoreStage) {\n return;\n }\n\n const combinedVars = {\n ...PresetService.get(pathToDir),\n ...vars,\n };\n\n if (parsedToc.title) {\n parsedToc.title = firstFilterTextItems(parsedToc.title, combinedVars, {\n resolveConditions: true,\n });\n }\n\n if (typeof parsedToc.title === 'string') {\n parsedToc.title = liquidField(parsedToc.title, combinedVars, path);\n }\n\n parsedToc.items = await processTocItems(\n path,\n parsedToc.items,\n join(inputFolderPath, pathToDir),\n resolve(inputFolderPath),\n combinedVars,\n );\n\n /* Store parsed toc for .md output format */\n storage.set(path, parsedToc);\n\n /* Store path to toc file to handle relative paths in navigation */\n parsedToc.base = pathToDir;\n\n if (outputFormat === 'md') {\n /* Should copy resolved and filtered toc to output folder */\n const outputPath = resolve(outputFolderPath, path);\n const outputToc = dump(parsedToc);\n shell.mkdir('-p', dirname(outputPath));\n writeFileSync(outputPath, outputToc);\n }\n\n prepareNavigationPaths(parsedToc, pathToDir);\n}\n\nasync function processTocItems(\n path: string,\n items: YfmToc[],\n tocDir: string,\n sourcesDir: string,\n vars: Record<string, string>,\n) {\n const {resolveConditions, removeHiddenTocItems} = ArgvService.getConfig();\n\n let preparedItems = items;\n\n /* Should remove all links with false expressions */\n if (resolveConditions || removeHiddenTocItems) {\n try {\n preparedItems = filterFiles(items, 'items', vars, {\n resolveConditions,\n removeHiddenTocItems,\n });\n } catch (error) {\n log.error(`Error while filtering toc file: ${path}. Error message: ${error}`);\n }\n }\n\n /* Should resolve all includes */\n return _replaceIncludes(path, preparedItems, tocDir, sourcesDir, vars);\n}\n\nfunction getForPath(path: string): YfmToc | undefined {\n return storage.get(path);\n}\n\nfunction getNavigationPaths(): string[] {\n return [...navigationPaths];\n}\n\nfunction getIncludedTocPaths(): string[] {\n return [...includedTocPaths];\n}\n\nfunction prepareNavigationPaths(parsedToc: YfmToc, dirPath: string) {\n function processItems(items: YfmToc[], pathToDir: string) {\n items.forEach((item) => {\n if (!parsedToc.singlePage && item.items) {\n const preparedSubItems = item.items.map((yfmToc: YfmToc, index: number) => {\n // Generate personal id for each navigation item\n yfmToc.id = `${yfmToc.name}-${index}-${Math.random()}`;\n return yfmToc;\n });\n processItems(preparedSubItems, pathToDir);\n }\n\n if (item.href && !isExternalHref(item.href)) {\n const href = join(pathToDir, item.href);\n storage.set(href, parsedToc);\n\n const navigationPath = _normalizeHref(href);\n navigationPaths.push(navigationPath);\n }\n });\n }\n\n processItems([parsedToc], dirPath);\n}\n\n/**\n * Should normalize hrefs. MD and YAML files will be ignored.\n * @param href\n * @return {string}\n * @example instance-groups/create-with-coi/ -> instance-groups/create-with-coi/index.yaml\n * @example instance-groups/create-with-coi -> instance-groups/create-with-coi.md\n * @private\n */\nfunction _normalizeHref(href: string): string {\n const preparedHref = normalize(href);\n\n if (preparedHref.endsWith('.md') || preparedHref.endsWith('.yaml')) {\n return preparedHref;\n }\n\n if (preparedHref.endsWith(sep)) {\n return `${preparedHref}index.yaml`;\n }\n\n return `${preparedHref}.md`;\n}\n\n/**\n * Copies all files of include toc to original dir.\n * @param tocPath\n * @param destDir\n * @return\n * @private\n */\nfunction _copyTocDir(tocPath: string, destDir: string) {\n const {input: inputFolderPath} = ArgvService.getConfig();\n\n const {dir: tocDir} = parse(tocPath);\n const files: string[] = walkSync(tocDir, {\n globs: ['**/*.*'],\n ignore: ['**/toc.yaml'],\n directories: false,\n });\n\n files.forEach((relPath) => {\n const from = resolve(tocDir, relPath);\n const to = resolve(destDir, relPath);\n const fileExtension = extname(relPath);\n const isMdFile = fileExtension === '.md';\n\n shell.mkdir('-p', parse(to).dir);\n\n if (isMdFile) {\n const fileContent = readFileSync(from, 'utf8');\n const sourcePath = relative(inputFolderPath, from);\n const updatedFileContent = getContentWithUpdatedStaticMetadata({\n fileContent,\n sourcePath,\n addSourcePath: true,\n });\n\n writeFileSync(to, updatedFileContent);\n } else {\n shell.cp(from, to);\n }\n\n const relFrom = relative(inputFolderPath, from);\n const relTo = relative(inputFolderPath, to);\n tocFileCopyMap.set(relTo, relFrom);\n });\n}\n\n/**\n * Make hrefs relative to the main toc in the included toc.\n * @param items\n * @param includeTocDir\n * @param tocDir\n * @return\n * @private\n */\nfunction _replaceIncludesHrefs(items: YfmToc[], includeTocDir: string, tocDir: string): YfmToc[] {\n return items.reduce((acc, tocItem) => {\n if (tocItem.href) {\n tocItem.href = relative(tocDir, resolve(includeTocDir, tocItem.href));\n }\n\n if (tocItem.items) {\n tocItem.items = _replaceIncludesHrefs(tocItem.items, includeTocDir, tocDir);\n }\n\n if (tocItem.include) {\n const {path} = tocItem.include;\n tocItem.include.path = relative(tocDir, resolve(includeTocDir, path));\n }\n\n return acc.concat(tocItem);\n }, [] as YfmToc[]);\n}\n\n/**\n * Liquid substitutions in toc file.\n * @param input\n * @param vars\n * @param path\n * @return {string}\n * @private\n */\nfunction _liquidSubstitutions(input: string, vars: Record<string, string>, path: string) {\n const {outputFormat, applyPresets} = ArgvService.getConfig();\n if (outputFormat === 'md' && !applyPresets) {\n return input;\n }\n\n return liquid(input, vars, path, {\n conditions: false,\n substitutions: true,\n });\n}\n\nfunction addIncludeTocPath(includeTocPath: string) {\n includedTocPaths.add(includeTocPath);\n}\n\n/**\n * Replaces include fields in toc file by resolved toc.\n * @param path\n * @param items\n * @param tocDir\n * @param sourcesDir\n * @param vars\n * @return\n * @private\n */\nasync function _replaceIncludes(\n path: string,\n items: YfmToc[],\n tocDir: string,\n sourcesDir: string,\n vars: Record<string, string>,\n): Promise<YfmToc[]> {\n const result: YfmToc[] = [];\n\n for (const item of items) {\n let includedInlineItems: YfmToc[] | null = null;\n\n if (item.name) {\n const tocPath = join(tocDir, 'toc.yaml');\n\n item.name = _liquidSubstitutions(item.name, vars, tocPath);\n }\n\n try {\n await applyIncluders(path, item, vars);\n } catch (err) {\n if (err instanceof Error || err instanceof IncludersError) {\n const message = err.toString();\n\n const file = err instanceof IncludersError ? err.path : path;\n\n logger.error(file, message);\n }\n }\n\n if (item.include) {\n const {mode = IncludeMode.ROOT_MERGE} = item.include;\n const includeTocPath =\n mode === IncludeMode.ROOT_MERGE\n ? resolve(sourcesDir, item.include.path)\n : resolve(tocDir, item.include.path);\n const includeTocDir = dirname(includeTocPath);\n\n try {\n const includeToc = load(readFileSync(includeTocPath, 'utf8')) as YfmToc;\n\n // Should ignore included toc with tech-preview stage.\n if (includeToc.stage === Stage.TECH_PREVIEW) {\n continue;\n }\n\n if (mode === IncludeMode.MERGE || mode === IncludeMode.ROOT_MERGE) {\n _copyTocDir(includeTocPath, tocDir);\n }\n\n /* Save the path to exclude toc from the output directory in the next step */\n addIncludeTocPath(includeTocPath);\n\n let includedTocItems = (item.items || []).concat(includeToc.items);\n\n /* Resolve nested toc inclusions */\n const baseTocDir = mode === IncludeMode.LINK ? includeTocDir : tocDir;\n includedTocItems = await processTocItems(\n path,\n includedTocItems,\n baseTocDir,\n sourcesDir,\n vars,\n );\n\n /* Make hrefs relative to the main toc */\n if (mode === IncludeMode.LINK) {\n includedTocItems = _replaceIncludesHrefs(\n includedTocItems,\n includeTocDir,\n tocDir,\n );\n }\n\n if (item.name) {\n item.items = includedTocItems;\n } else {\n includedInlineItems = includedTocItems;\n }\n } catch (err) {\n const message = `Error while including toc: ${bold(includeTocPath)} to ${bold(\n join(tocDir, 'toc.yaml'),\n )}`;\n\n log.error(message);\n\n continue;\n } finally {\n delete item.include;\n }\n } else if (item.items) {\n item.items = await processTocItems(path, item.items, tocDir, sourcesDir, vars);\n }\n\n if (includedInlineItems) {\n result.push(...includedInlineItems);\n } else {\n result.push(item);\n }\n }\n\n return result;\n}\n\nfunction getTocDir(pagePath: string): string {\n const {input: inputFolderPath} = ArgvService.getConfig();\n\n const tocDir = dirname(pagePath);\n const tocPath = resolve(tocDir, 'toc.yaml');\n\n if (!tocDir.includes(inputFolderPath)) {\n throw new Error('Error while finding toc dir');\n }\n\n if (existsSync(tocPath)) {\n return tocDir;\n }\n\n return getTocDir(tocDir);\n}\n\nfunction setNavigationPaths(paths: TocServiceData['navigationPaths']) {\n navigationPaths = paths;\n}\n\nfunction getCopyFileMap() {\n return tocFileCopyMap;\n}\n\nexport default {\n add,\n getForPath,\n getNavigationPaths,\n getTocDir,\n getIncludedTocPaths,\n setNavigationPaths,\n getCopyFileMap,\n};\n", "import {dump, load} from 'js-yaml';\n\nimport {VCSConnector} from '../vcs-connector/connector-models';\nimport {MetaDataOptions, Metadata, Resources, VarsMetadata} from '../models';\nimport {\n getAuthorDetails,\n updateAuthorMetadataStringByAuthorLogin,\n updateAuthorMetadataStringByFilePath,\n} from './authors';\nimport {\n getFileContributorsMetadata,\n getFileContributorsString,\n getFileIncludes,\n} from './contributors';\nimport {isObject} from './utils';\nimport {\u0441arriage} from '../utils';\nimport {REGEXP_AUTHOR, metadataBorder} from '../constants';\nimport {dirname, relative, resolve} from 'path';\nimport {ArgvService, TocService} from './index';\n\nasync function getContentWithUpdatedMetadata(\n fileContent: string,\n options?: MetaDataOptions,\n systemVars?: unknown,\n metadataVars?: VarsMetadata,\n): Promise<string> {\n let result;\n\n result = getContentWithUpdatedStaticMetadata({\n fileContent,\n sourcePath: options?.fileData?.sourcePath,\n addSystemMeta: options?.addSystemMeta,\n addSourcePath: options?.addSourcePath,\n resources: options?.resources,\n systemVars,\n metadataVars,\n });\n\n result = await getContentWithUpdatedDynamicMetadata(result, options);\n\n return result;\n}\n\nfunction getContentWithUpdatedStaticMetadata({\n fileContent,\n sourcePath,\n addSystemMeta,\n addSourcePath,\n resources,\n systemVars,\n metadataVars = [],\n}: {\n fileContent: string;\n sourcePath?: string;\n addSystemMeta?: boolean;\n addSourcePath?: boolean;\n resources?: Resources;\n systemVars?: unknown;\n metadataVars?: VarsMetadata;\n}): string {\n const newMetadatas: string[] = [];\n\n if (\n (!addSystemMeta || !systemVars) &&\n !addSourcePath &&\n !resources &&\n metadataVars.length === 0\n ) {\n return fileContent;\n }\n\n const matches = matchMetadata(fileContent);\n\n if (addSystemMeta && systemVars && isObject(systemVars)) {\n newMetadatas.push(getSystemVarsMetadataString(systemVars));\n }\n\n if (resources) {\n newMetadatas.push(dump(resources));\n }\n\n if (addSourcePath && sourcePath) {\n const sourcePathMetadataString = `sourcePath: ${sourcePath}`;\n newMetadatas.push(sourcePathMetadataString);\n }\n\n if (matches && matches.length > 0) {\n const [, fileMetadata, , fileMainContent] = matches;\n\n if (!metadataVars.length) {\n return `${getUpdatedMetadataString(newMetadatas, fileMetadata)}${fileMainContent}`;\n }\n\n const parsed = load(fileMetadata) as Record<string, any>;\n\n if (!Array.isArray(parsed.metadata)) {\n parsed.metadata = [parsed.metadata];\n }\n\n parsed.metadata = parsed.metadata.concat(metadataVars).filter(Boolean);\n\n const patchedMetada = dump(parsed);\n\n return `${getUpdatedMetadataString(newMetadatas, patchedMetada)}${fileMainContent}`;\n }\n\n if (metadataVars.length) {\n newMetadatas.push(dump({metadata: metadataVars}));\n }\n\n return `${getUpdatedMetadataString(newMetadatas)}${fileContent}`;\n}\n\nasync function getContentWithUpdatedDynamicMetadata(\n fileContent: string,\n options?: MetaDataOptions,\n): Promise<string> {\n if (!options || !options?.isContributorsEnabled) {\n return fileContent;\n }\n\n let fileMetadata: string | undefined, fileMainContent: string | undefined;\n const matches = matchMetadata(fileContent);\n if (matches && matches.length > 0) {\n const [, matchedFileMetadata, , matchedFileMainContent] = matches;\n fileMetadata = matchedFileMetadata;\n fileMainContent = matchedFileMainContent;\n }\n\n const newMetadatas: string[] = [];\n\n const {isContributorsEnabled} = options;\n\n if (isContributorsEnabled) {\n const contributorsMetaData = await getContributorsMetadataString(options, fileContent);\n if (contributorsMetaData) {\n newMetadatas.push(contributorsMetaData);\n }\n\n const mtimeMetadata = await getModifiedTimeMetadataString(options, fileContent);\n if (mtimeMetadata) {\n newMetadatas.push(mtimeMetadata);\n }\n\n let authorMetadata = '';\n if (fileMetadata) {\n const matchAuthor = fileMetadata.match(REGEXP_AUTHOR);\n if (matchAuthor) {\n const matchedAuthor = matchAuthor[0];\n authorMetadata = await updateAuthorMetadataStringByAuthorLogin(\n matchedAuthor,\n options.vcsConnector,\n );\n }\n }\n\n if (!authorMetadata) {\n const {\n fileData: {tmpInputFilePath, inputFolderPathLength},\n } = options;\n const relativeFilePath = tmpInputFilePath.substring(inputFolderPathLength);\n authorMetadata = await updateAuthorMetadataStringByFilePath(\n relativeFilePath,\n options.vcsConnector,\n );\n }\n\n if (authorMetadata) {\n newMetadatas.push(`author: ${authorMetadata}`);\n }\n }\n\n if (fileMetadata && fileMainContent) {\n let updatedFileMetadata = fileMetadata;\n const matchAuthor = fileMetadata.match(REGEXP_AUTHOR);\n\n const isNewMetadataIncludesAuthor = newMetadatas.some((item) => /^author: /.test(item));\n if (matchAuthor && isNewMetadataIncludesAuthor) {\n updatedFileMetadata = updatedFileMetadata.replace(`author: ${matchAuthor[0]}`, '');\n }\n\n return `${getUpdatedMetadataString(newMetadatas, updatedFileMetadata)}${fileMainContent}`;\n }\n\n return `${getUpdatedMetadataString(newMetadatas)}${fileContent}`;\n}\n\nfunction matchMetadata(fileContent: string) {\n if (!fileContent.startsWith('---')) {\n return null;\n }\n\n // Search by format:\n // ---\n // metaName1: metaValue1\n // metaName2: meta value2\n // incorrectMetadata\n // ---\n const regexpMetadata = '(?<=-{3}\\\\r?\\\\n)((.*\\\\r?\\\\n)*?)(?=-{3}\\\\r?\\\\n)';\n // Search by format:\n // ---\n // main content 123\n const regexpFileContent = '-{3}((.*[\\r?\\n]*)*)';\n\n const regexpParseFileContent = new RegExp(`${regexpMetadata}${regexpFileContent}`, 'gm');\n\n return regexpParseFileContent.exec(fileContent);\n}\n\nasync function getContributorsMetadataString(\n options: MetaDataOptions,\n fileContent: string,\n): Promise<string | undefined> {\n const {isContributorsEnabled, vcsConnector, fileData} = options;\n\n if (isContributorsEnabled && vcsConnector) {\n const updatedFileData = {\n ...fileData,\n fileContent,\n };\n\n return getFileContributorsMetadata(updatedFileData, vcsConnector);\n }\n\n return undefined;\n}\n\nasync function getModifiedTimeMetadataString(options: MetaDataOptions, fileContent: string) {\n const {isContributorsEnabled, vcsConnector, fileData} = options;\n\n const {tmpInputFilePath, inputFolderPathLength} = fileData;\n\n const relativeFilePath = tmpInputFilePath.substring(inputFolderPathLength + 1);\n\n if (!isContributorsEnabled || !vcsConnector) {\n return undefined;\n }\n\n const includedFiles = await getFileIncludes({...fileData, fileContent});\n includedFiles.push(relativeFilePath);\n\n const tocCopyFileMap = TocService.getCopyFileMap();\n\n const mtimeList = includedFiles\n .map((path) => {\n const mappedPath = tocCopyFileMap.get(path) || path;\n return vcsConnector.getModifiedTimeByPath(mappedPath);\n })\n .filter((v) => typeof v === 'number') as number[];\n\n if (mtimeList.length) {\n const mtime = Math.max(...mtimeList);\n return `updatedAt: ${new Date(mtime * 1000).toISOString()}`;\n }\n\n return undefined;\n}\n\nfunction getUpdatedMetadataString(newMetadatas: string[], defaultMetadata = ''): string {\n const newMetadata = newMetadatas.join(\u0441arriage) + (newMetadatas.length ? \u0441arriage : '');\n const preparedDefaultMetadata = defaultMetadata.trimRight();\n const defaultMetadata\u0421arriage = preparedDefaultMetadata ? \u0441arriage : '';\n const updatedMetadata = `${preparedDefaultMetadata}${defaultMetadata\u0421arriage}${newMetadata}`;\n\n return `${metadataBorder}${\u0441arriage}${updatedMetadata}${metadataBorder}${\n defaultMetadata.length ? '' : \u0441arriage\n }`;\n}\n\nasync function getVCSMetadata(\n options: MetaDataOptions,\n fileContent: string,\n meta?: Metadata,\n): Promise<Metadata> {\n const {vcsConnector} = options;\n\n const newMetadata: Metadata = {\n contributors: await getContributorsMetadata(options, fileContent),\n };\n\n if (!meta) {\n return newMetadata;\n }\n\n const updatedAuthor = await getAuthorMetadata(meta as Metadata, vcsConnector);\n\n return {\n ...meta,\n ...newMetadata,\n author: updatedAuthor,\n };\n}\n\nasync function getContributorsMetadata(\n options: MetaDataOptions,\n fileContent: string,\n): Promise<string> {\n const {isContributorsEnabled, vcsConnector, fileData} = options;\n\n if (isContributorsEnabled && vcsConnector) {\n const updatedFileData = {\n ...fileData,\n fileContent,\n };\n\n return getFileContributorsString(updatedFileData, vcsConnector);\n }\n\n return JSON.stringify([]);\n}\n\nasync function getAuthorMetadata(\n meta: Metadata,\n vcsConnector?: VCSConnector,\n): Promise<string | null> {\n if (meta.author && vcsConnector) {\n const updatedAuthor = await getAuthorDetails(vcsConnector, meta.author);\n\n return updatedAuthor;\n }\n\n return null;\n}\n\nfunction getSystemVarsMetadataString(systemVars: object) {\n return `__system: ${JSON.stringify(systemVars)}`;\n}\n\nfunction getAssetsPublicPath(filePath: string) {\n const {input} = ArgvService.getConfig();\n const path: string = resolve(input, filePath);\n\n /* Relative path from folder of .md file to root of user' output folder */\n return relative(dirname(path), resolve(input));\n}\n\nexport {\n getContentWithUpdatedMetadata,\n getContentWithUpdatedStaticMetadata,\n getVCSMetadata,\n getAssetsPublicPath,\n};\n", "import log from '@diplodoc/transform/lib/log';\nimport {blue, green, grey, red, yellow} from 'chalk';\nimport {ArgvService} from '../services';\n\nfunction writeLog(msg: string, fatal = false) {\n const {quiet} = ArgvService.getConfig();\n\n if (quiet && !fatal) {\n return;\n }\n\n console.log(msg);\n}\n\nexport const logger = {\n info: function (pathToFile: string, extraMessage?: string) {\n writeLog(`${grey('INFO')} ${extraMessage} ${pathToFile}`);\n },\n proc: function (pathToFile: string) {\n writeLog(`${blue('PROC')} Processing file ${pathToFile}`);\n },\n copy: function (pathToFile: string) {\n writeLog(`${green('COPY')} Copying file ${pathToFile}`);\n },\n upload: function (pathToFile: string) {\n writeLog(`${green('UPLOAD')} Uploading file ${pathToFile}`);\n },\n warn: function (pathToFile: string, extraMessage: string) {\n const message = `${yellow('WARNING')} file: ${pathToFile} error: ${extraMessage}`;\n\n writeLog(message);\n\n log.warn(`file: ${pathToFile} ${extraMessage}`);\n },\n error: function (pathToFile: string, extraMessage: string) {\n const message = `${red('ERROR')} file: ${pathToFile} error: ${extraMessage}`;\n\n writeLog(message, true);\n\n log.error(`file: ${pathToFile} ${extraMessage}`);\n },\n};\n", "import {join} from 'path';\nimport {platform} from 'process';\n\nimport {CUSTOM_STYLE, Platforms} from '../constants';\nimport {LeadingPage, Resources, SinglePageResult, TextItems, VarsMetadata} from '../models';\nimport {ArgvService, PluginService} from '../services';\nimport {preprocessPageHtmlForSinglePage} from './singlePage';\n\nimport {DocInnerProps, DocPageData, render} from '@diplodoc/client/ssr';\nimport manifest from '@diplodoc/client/manifest';\n\nimport {escape} from 'html-escaper';\n\nconst dst = (bundlePath: string) => (target: string) => join(bundlePath, target);\nexport const \u0441arriage = platform === Platforms.WINDOWS ? '\\r\\n' : '\\n';\n\nexport interface TitleMeta {\n title?: string;\n}\n\nexport type Meta = TitleMeta &\n Resources & {\n metadata: VarsMetadata;\n };\n\nexport function generateStaticMarkup(\n props: DocInnerProps<DocPageData>,\n pathToBundle: string,\n): string {\n const {style, script, metadata, ...restYamlConfigMeta} = (props.data.meta as Meta) || {};\n const {title: tocTitle} = props.data.toc;\n const {title: pageTitle} = props.data;\n\n const title = getTitle({\n metaTitle: props.data.meta.title,\n tocTitle: tocTitle as string,\n pageTitle,\n });\n\n const resources = getResources({style, script});\n\n const {staticContent} = ArgvService.getConfig();\n\n const html = staticContent ? render(props) : '';\n\n return `\n <!DOCTYPE html>\n <html lang=\"${props.lang}\">\n <head>\n <meta charset=\"utf-8\">\n ${getMetadata(metadata, restYamlConfigMeta)}\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${title}</title>\n <style type=\"text/css\">\n body {\n height: 100vh;\n }\n </style>\n ${manifest.css\n .map(dst(pathToBundle))\n .map((src: string) => `<link type=\"text/css\" rel=\"stylesheet\" href=\"${src}\" />`)\n .join('\\n')}\n ${PluginService.getHeadContent()}\n ${resources}\n </head>\n <body class=\"yc-root yc-root_theme_light\">\n <div id=\"root\">${html}</div>\n <script type=\"application/javascript\">\n window.STATIC_CONTENT = ${staticContent}\n window.__DATA__ = ${JSON.stringify(props)};\n </script>\n ${manifest.js\n .map(dst(pathToBundle))\n .map(\n (src: string) =>\n `<script type=\"application/javascript\" src=\"${src}\"></script>`,\n )\n .join('\\n')}\n </body>\n </html>\n `;\n}\n\ninterface GetTitleOptions {\n tocTitle?: string;\n metaTitle?: string;\n pageTitle?: string;\n}\n\nfunction getTitle({tocTitle, metaTitle, pageTitle}: GetTitleOptions) {\n const resultPageTitle = metaTitle || pageTitle;\n\n if (!resultPageTitle && tocTitle) {\n return tocTitle;\n }\n\n if (resultPageTitle && !tocTitle) {\n return resultPageTitle;\n }\n\n return resultPageTitle && tocTitle ? `${resultPageTitle} | ${tocTitle}` : '';\n}\n\nfunction getMetadata(metadata: VarsMetadata | undefined, restMeta: LeadingPage['meta']): string {\n let result = '';\n\n const addMetaTagsFromObject = (value: Record<string, string | boolean | TextItems>) => {\n const args = Object.entries(value).reduce((acc, [name, content]) => {\n return acc + `${escape(name)}=\"${escape(content.toString())}\" `;\n }, '');\n\n if (args.length) {\n result += `<meta ${args} />` + \u0441arriage;\n }\n };\n\n if (metadata) {\n metadata.forEach(addMetaTagsFromObject);\n }\n\n if (restMeta) {\n Object.entries(restMeta)\n .map(([name, value]) => {\n return {name, content: value};\n })\n .forEach(addMetaTagsFromObject);\n }\n\n return result;\n}\n\nfunction getResources({style, script}: Resources) {\n const resourcesTags: string[] = [];\n\n if (style) {\n style.forEach((el, id) =>\n resourcesTags.push(\n `<link rel=\"stylesheet\" type=\"text/css\" href=\"${el}\" ${\n id === 0 && `id=\"${CUSTOM_STYLE}\"`\n }>`,\n ),\n );\n }\n\n if (script) {\n script.forEach((el) => resourcesTags.push(`<script src=\"${el}\"></script>`));\n }\n\n return resourcesTags.join('\\n');\n}\n\nexport function joinSinglePageResults(\n singlePageResults: SinglePageResult[],\n root: string,\n tocDir: string,\n): string {\n const delimeter = `<hr class=\"yfm-page__delimeter\">`;\n return singlePageResults\n .filter(({content}) => content)\n .map(({content, path, title}) =>\n preprocessPageHtmlForSinglePage(content, {root, path, tocDir, title}),\n )\n .join(delimeter);\n}\n\nexport function replaceDoubleToSingleQuotes(str: string): string {\n return str.replace(/\"/g, \"'\");\n}\n", "import HTMLElement from 'node-html-parser/dist/nodes/html';\nimport {parse} from 'node-html-parser';\nimport {relative, resolve, sep} from 'path';\nimport {resolveRelativePath} from '@diplodoc/transform/lib/utilsFS';\nimport url from 'url';\nimport escape from 'lodash/escapeRegExp';\n\nimport {isExternalHref} from './url';\n\ninterface ModifyNode {\n innerHTML: string;\n rawTagName: string;\n attrEntries?: string[][];\n}\n\ninterface PreprocessSinglePageOptions {\n root: string;\n path: string;\n tocDir: string;\n title?: string;\n}\n\nconst HEADERS_SELECTOR = 'h1, h2, h3, h4, h5, h6';\n\nfunction toUrl(path: string) {\n // replace windows backslashes\n return path.replace(new RegExp(escape(sep), 'g'), '/');\n}\n\nfunction getNewNode(options: ModifyNode): HTMLElement | null {\n const {rawTagName, innerHTML, attrEntries} = options;\n\n const nodeNew = parse(`<html><${rawTagName}></${rawTagName}></html>`).querySelector(\n `${rawTagName}`,\n );\n\n if (!nodeNew) {\n return null;\n }\n\n if (attrEntries) {\n for (const [name, value] of attrEntries) {\n nodeNew.setAttribute(name, value);\n }\n }\n\n nodeNew.innerHTML = innerHTML;\n\n return nodeNew;\n}\n\nexport function decreaseHeadingLevels(root: HTMLElement) {\n const headersSelector = 'h1, h2, h3, h4, h5';\n\n root.querySelectorAll(headersSelector).forEach((node) => {\n const {rawTagName} = node;\n const newHeadingLevel = Number(rawTagName.charAt(1)) + 1;\n\n node.rawTagName = `h${newHeadingLevel}`;\n });\n}\n\nexport function tryFixFirstPageHeader(root: HTMLElement) {\n const firstPageHeader = root.querySelector(HEADERS_SELECTOR);\n if (!firstPageHeader || firstPageHeader.rawTagName === 'h1') {\n return;\n }\n\n firstPageHeader.rawTagName = 'h1';\n}\n\nexport function replaceLinks(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {root, path, tocDir} = options;\n\n rootEl.querySelectorAll('a:not(.yfm-anchor):not([target=\"_blank\"])').forEach((node) => {\n const href = node.getAttribute('href') || '';\n\n const resolvedPath = resolve(root, path);\n const linkFullPath = resolveRelativePath(resolvedPath, href);\n const isLinkOutOfToc = !linkFullPath.startsWith(tocDir);\n\n let preparedHref = href;\n\n if (isLinkOutOfToc) {\n preparedHref = relative(tocDir, linkFullPath);\n } else {\n const {pathname, hash} = url.parse(href);\n if (pathname) {\n preparedHref = getSinglePageAnchorId({\n root,\n currentPath: resolvedPath,\n pathname,\n hash,\n });\n } else if (hash) {\n preparedHref = getSinglePageAnchorId({root, currentPath: resolvedPath, hash});\n }\n }\n\n node.setAttribute('href', toUrl(preparedHref));\n });\n}\n\nexport function replaceImages(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {root, path, tocDir} = options;\n\n rootEl.querySelectorAll('img').forEach((node) => {\n const href = node.getAttribute('src') || '';\n\n if (isExternalHref(href)) {\n return;\n }\n\n const resolvedPath = resolve(root, path);\n const linkFullPath = resolveRelativePath(resolvedPath, href);\n const preparedHref = relative(tocDir, linkFullPath);\n\n node.setAttribute('src', toUrl(preparedHref));\n });\n}\n\nfunction prepareAnchorAttr(name: string, value: string, pageId: string) {\n switch (name) {\n case 'href':\n return `#${pageId}_${value.slice(1)}`;\n case 'id':\n return `${pageId}_${value}`;\n default:\n return value;\n }\n}\n\nfunction prepareAnchorAttrs(node: HTMLElement, pageId: string) {\n for (const [name, value] of Object.entries(node.attributes)) {\n const preparedValue = prepareAnchorAttr(name, value, pageId);\n\n node.setAttribute(name, toUrl(preparedValue));\n }\n}\n\nexport function addPagePrefixToAnchors(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {root, path} = options;\n\n const resolvedPath = resolve(root, path);\n const pageIdAnchor = getSinglePageAnchorId({root, currentPath: resolvedPath});\n const originalArticleHref = transformLinkToOriginalArticle({root, currentPath: resolvedPath});\n const pageId = pageIdAnchor.slice(1);\n const anchorSelector = '.yfm-anchor';\n\n // Add the page prefix id to all existing anchors\n rootEl.querySelectorAll(anchorSelector).forEach((node) => {\n prepareAnchorAttrs(node, pageId);\n });\n\n const mainHeader = rootEl.querySelector('h1');\n if (mainHeader) {\n const anchor = parse(\n `<a class=\"yfm-anchor\" aria-hidden=\"true\" href=\"${pageIdAnchor}\" id=\"${pageId}\"></a>`,\n );\n if (!anchor) {\n return;\n }\n\n mainHeader.setAttribute('data-original-article', `${originalArticleHref}.html`);\n mainHeader.appendChild(anchor);\n }\n\n rootEl.querySelectorAll(HEADERS_SELECTOR).forEach((node) => {\n prepareAnchorAttrs(node, pageId);\n });\n}\n\nexport function addMainTitle(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {title} = options;\n\n if (!title) {\n return;\n }\n\n const mainTitle = getNewNode({innerHTML: title, rawTagName: 'h1'});\n\n if (!mainTitle) {\n return;\n }\n\n rootEl.insertAdjacentHTML('afterbegin', mainTitle.toString());\n}\n\nexport function getSinglePageAnchorId(args: {\n root: string;\n currentPath: string;\n pathname?: string;\n hash?: string | null;\n}) {\n const {root, currentPath, pathname, hash} = args;\n let resultAnchor = currentPath;\n\n if (pathname) {\n resultAnchor = resolveRelativePath(currentPath, pathname);\n }\n\n resultAnchor = resultAnchor\n .replace(root, '')\n .replace(/\\.(md|ya?ml|html)$/i, '')\n .replace(new RegExp(escape(sep), 'gi'), '_');\n\n if (hash) {\n resultAnchor = resultAnchor + '_' + hash.slice(1);\n }\n\n return `#${resultAnchor}`;\n}\n\nexport function transformLinkToOriginalArticle(opts: {root: string; currentPath: string}) {\n const {root, currentPath} = opts;\n\n return currentPath.replace(root, '').replace(/\\.(md|ya?ml|html)$/i, '');\n}\n\nexport function preprocessPageHtmlForSinglePage(\n content: string,\n options: PreprocessSinglePageOptions,\n) {\n const root = parse(content);\n\n addMainTitle(root, options);\n tryFixFirstPageHeader(root);\n addPagePrefixToAnchors(root, options);\n decreaseHeadingLevels(root);\n replaceLinks(root, options);\n replaceImages(root, options);\n\n return root.toString();\n}\n", "export function isExternalHref(href: string) {\n return href.startsWith('http') || href.startsWith('//');\n}\n", "import {sep} from 'path';\nimport {Platforms} from '../constants';\n\nexport function addSlashPrefix(path: string): string {\n const slashPrefix = path.startsWith(sep) ? '' : sep;\n\n return `${slashPrefix}${path}`;\n}\n\nexport function convertBackSlashToSlash(path: string): string {\n if (process.platform === Platforms.WINDOWS) {\n return path.replace(/\\\\/g, '/');\n }\n\n return path;\n}\n", "import {basename, dirname, extname, format, join, relative} from 'path';\n\nimport {YfmToc} from '../models';\nimport {filterFiles} from '../services/utils';\nimport {isExternalHref} from './url';\nimport {getSinglePageAnchorId} from './singlePage';\n\nexport function transformToc(toc: YfmToc | null, pathToFileDirectory: string): YfmToc | null {\n if (!toc) {\n return null;\n }\n\n const localToc: YfmToc = JSON.parse(JSON.stringify(toc));\n\n if (localToc.items) {\n localToc.items = filterFiles(\n localToc.items,\n 'items',\n {},\n {\n removeHiddenTocItems: true,\n },\n );\n }\n\n const baseTocPath: string = localToc.base || '';\n const navigationItemQueue = [localToc];\n\n while (navigationItemQueue.length) {\n const navigationItem = navigationItemQueue.shift();\n\n if (!navigationItem) {\n continue;\n }\n\n const {items, href} = navigationItem;\n\n if (items) {\n navigationItemQueue.push(...navigationItem.items);\n }\n\n if (href && !isExternalHref(href)) {\n /* Path to directory with toc.yaml */\n const pathToIndexDirectory: string = relative(pathToFileDirectory, baseTocPath);\n\n const fileExtension: string = extname(href);\n const filename: string = basename(href, fileExtension);\n const transformedFilename: string = format({\n name: filename,\n ext: '.html',\n });\n\n navigationItem.href = join(pathToIndexDirectory, dirname(href), transformedFilename);\n }\n }\n\n return localToc;\n}\n\nexport function transformTocForSinglePage(\n toc: YfmToc | null,\n options: {root: string; currentPath: string},\n) {\n const {root, currentPath} = options;\n\n if (!toc) {\n return null;\n }\n\n const localToc: YfmToc = JSON.parse(JSON.stringify(toc));\n\n if (localToc.items) {\n localToc.items = filterFiles(\n localToc.items,\n 'items',\n {},\n {\n removeHiddenTocItems: true,\n },\n );\n }\n\n function processItems(items: YfmToc[]) {\n items.forEach((item) => {\n if (item.items) {\n processItems(item.items);\n }\n\n if (item.href && !isExternalHref(item.href)) {\n item.href = getSinglePageAnchorId({root, currentPath, pathname: item.href});\n }\n });\n }\n\n processItems(localToc.items);\n\n localToc.singlePage = true;\n\n return localToc;\n}\n", "import evalExp from '@diplodoc/transform/lib/liquid/evaluation';\nimport {Filter, TextItems} from '../models';\nimport liquid from '@diplodoc/transform/lib/liquid';\nimport {ArgvService} from './index';\n\nexport interface FilterFilesOptions {\n resolveConditions?: boolean;\n removeHiddenTocItems?: boolean;\n}\n\n/**\n * Filters file by expression and removes empty file's items.\n * @param items\n * @param itemsKey\n * @param vars\n * @param options\n * @return {T[]}\n */\nexport function filterFiles<T extends Filter>(\n items: T[],\n itemsKey: string,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n): T[] {\n if (!Array.isArray(items)) {\n return [];\n }\n\n const reducer = (results: T[], item: T) => {\n if (shouldProcessItem(item, vars, options)) {\n const prop = item[itemsKey] as T[];\n\n if (prop) {\n const filteredProperty = filterFiles(prop, itemsKey, vars, options);\n\n if (filteredProperty.length) {\n results.push({\n ...item,\n [itemsKey]: filteredProperty,\n });\n }\n } else {\n results.push(item);\n }\n }\n\n return results;\n };\n\n return items.reduce(reducer, []);\n}\n\nexport function filterTextItems(\n items: undefined | TextItems,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n) {\n if (!Array.isArray(items)) {\n return items;\n }\n\n return items.reduce((result: string[], item) => {\n if (!isObject(item)) {\n result.push(item);\n return result;\n }\n\n const useItem = shouldProcessItem(item, vars, options);\n\n if (useItem) {\n if (Array.isArray(item.text)) {\n result.push(...item.text);\n } else {\n result.push(item.text);\n }\n }\n\n return result;\n }, []);\n}\n\nexport function firstFilterTextItems(\n items: TextItems,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n) {\n const filteredItems = filterTextItems(items, vars, options);\n\n if (!Array.isArray(filteredItems)) {\n return filteredItems || '';\n }\n\n return filteredItems[0] || '';\n}\n\nfunction shouldProcessItem<T extends Filter>(\n item: T,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n) {\n const {resolveConditions, removeHiddenTocItems} = options || {};\n let useItem = true;\n\n if (resolveConditions) {\n const {when} = item;\n useItem =\n when === true ||\n when === undefined ||\n (typeof when === 'string' && evalExp(when, vars));\n\n delete item.when;\n }\n\n if (useItem && removeHiddenTocItems) {\n useItem = !item.hidden;\n\n delete item.hidden;\n }\n\n return useItem;\n}\n\nexport function liquidFields(\n fields: undefined | string | string[],\n vars: Record<string, unknown>,\n path: string,\n) {\n if (typeof fields === 'string') {\n return liquidField(fields, vars, path);\n }\n\n if (!Array.isArray(fields)) {\n return fields;\n }\n\n return fields.map((item) => {\n if (typeof item === 'string') {\n return liquidField(item, vars, path);\n }\n return item;\n });\n}\n\nexport function liquidField(input: string, vars: Record<string, unknown>, path: string) {\n const {applyPresets, resolveConditions} = ArgvService.getConfig();\n\n if (!applyPresets && !resolveConditions) {\n return input;\n }\n\n return liquid(input, vars, path, {\n substitutions: applyPresets,\n conditions: resolveConditions,\n keepNotVar: true,\n withSourceMap: false,\n });\n}\n\nexport function isObject(o: unknown): o is object {\n return typeof o === 'object' && o !== null;\n}\n", "import {dirname, relative, resolve} from 'path';\n\nimport {ArgvService, PresetService} from '../services';\nimport {YfmPreset} from '../models';\n\nexport function getVarsPerFile(filePath: string): YfmPreset {\n const {vars: argVars} = ArgvService.getConfig();\n\n const result = {\n ...PresetService.get(dirname(filePath)),\n ...argVars,\n };\n\n return result;\n}\n\nexport function getVarsPerRelativeFile(filePath: string): Record<string, string> {\n const {input} = ArgvService.getConfig();\n const root = resolve(input);\n const relativeFilePath = relative(root, filePath);\n\n return getVarsPerFile(relativeFilePath);\n}\n", "import libglob, {IGlob, IOptions} from 'glob';\n\nexport type Glob = {state: IGlob};\n\nconst glob = async (pattern: string, options: IOptions): Promise<Glob> =>\n new Promise((res, rej) => {\n const state: IGlob = libglob(pattern, options, (err) => (err ? rej(err) : res({state})));\n });\n\nexport {glob};\n\nexport default {glob};\n", "import {dirname, resolve} from 'path';\nimport shell from 'shelljs';\nimport {logger} from './logger';\n\nexport function copyFiles(\n inputFolderPath: string,\n outputFolderPath: string,\n files: string[],\n): void {\n const dirs = new Set<string>();\n\n files.forEach((pathToAsset) => {\n const outputDir = resolve(outputFolderPath, dirname(pathToAsset));\n const from = resolve(inputFolderPath, pathToAsset);\n const to = resolve(outputFolderPath, pathToAsset);\n\n if (!dirs.has(outputDir)) {\n dirs.add(outputDir);\n shell.mkdir('-p', outputDir);\n }\n\n shell.cp(from, to);\n\n logger.copy(pathToAsset);\n });\n}\n", "import {replaceDoubleToSingleQuotes} from '../utils';\nimport {VCSConnector} from '../vcs-connector/connector-models';\n\nasync function updateAuthorMetadataStringByAuthorLogin(\n authorLogin: string,\n vcsConnector?: VCSConnector,\n): Promise<string> {\n if (!vcsConnector) {\n return '';\n }\n\n const user = await getAuthorDetails(vcsConnector, authorLogin);\n\n if (user) {\n return user;\n }\n\n return '';\n}\n\nasync function updateAuthorMetadataStringByFilePath(\n filePath: string,\n vcsConnector?: VCSConnector,\n): Promise<string> {\n if (!vcsConnector) {\n return '';\n }\n\n const user = vcsConnector.getExternalAuthorByPath(filePath);\n\n if (user) {\n const author = replaceDoubleToSingleQuotes(JSON.stringify(user));\n return author;\n }\n\n return '';\n}\n\nasync function getAuthorDetails(\n vcsConnector: VCSConnector,\n author: string | object,\n): Promise<string | null> {\n if (typeof author === 'object') {\n // Avoiding problems when adding to html markup\n return replaceDoubleToSingleQuotes(JSON.stringify(author));\n }\n\n try {\n JSON.parse(author);\n return replaceDoubleToSingleQuotes(author);\n } catch {\n const user = await vcsConnector.getUserByLogin(author);\n\n if (user) {\n return replaceDoubleToSingleQuotes(JSON.stringify(user));\n }\n\n return null;\n }\n}\n\nexport {\n updateAuthorMetadataStringByAuthorLogin,\n updateAuthorMetadataStringByFilePath,\n getAuthorDetails,\n};\n", "import {readFile} from 'fs/promises';\nimport {dirname, join} from 'path';\n\nimport {replaceDoubleToSingleQuotes} from '../utils';\nimport {REGEXP_INCLUDE_CONTENTS, REGEXP_INCLUDE_FILE_PATH} from '../constants';\nimport {Contributor, Contributors, FileData} from '../models';\nimport {FileContributors, VCSConnector} from '../vcs-connector/connector-models';\n\nasync function getFileContributorsMetadata(\n fileData: FileData,\n vcsConnector: VCSConnector,\n): Promise<string> {\n const contributors = await getFileContributorsString(fileData, vcsConnector);\n\n return `contributors: ${contributors}`;\n}\n\nasync function getFileContributorsString(\n fileData: FileData,\n vcsConnector: VCSConnector,\n): Promise<string> {\n const {tmpInputFilePath, inputFolderPathLength} = fileData;\n\n const relativeFilePath = tmpInputFilePath.substring(inputFolderPathLength);\n const fileContributors: FileContributors =\n await vcsConnector.getContributorsByPath(relativeFilePath);\n let nestedContributors: Contributors = {};\n\n if (!fileContributors.hasIncludes) {\n nestedContributors = await getContributorsForNestedFiles(fileData, vcsConnector);\n vcsConnector.addNestedContributorsForPath(relativeFilePath, nestedContributors);\n }\n\n const fileContributorsWithContributorsIncludedFiles: Contributors = {\n ...fileContributors.contributors,\n ...nestedContributors,\n };\n\n const contributorsArray: Contributor[] = Object.entries(\n fileContributorsWithContributorsIncludedFiles,\n ).map(([, contributor]) => contributor);\n\n return replaceDoubleToSingleQuotes(JSON.stringify(contributorsArray));\n}\n\nasync function getContributorsForNestedFiles(\n fileData: FileData,\n vcsConnector: VCSConnector,\n): Promise<Contributors> {\n const {fileContent, inputFolderPathLength} = fileData;\n\n const includeContents = fileContent.match(REGEXP_INCLUDE_CONTENTS);\n if (!includeContents || includeContents.length === 0) {\n return {};\n }\n\n const includesContributors: Contributors[] = [];\n const relativeIncludeFilePaths: Set<string> = getRelativeIncludeFilePaths(\n fileData,\n includeContents,\n );\n\n for (const relativeIncludeFilePath of relativeIncludeFilePaths.values()) {\n const relativeFilePath = relativeIncludeFilePath.substring(inputFolderPathLength);\n const includeContributors = await vcsConnector.getContributorsByPath(relativeFilePath);\n\n let nestedContributors: Contributors = {};\n\n if (!includeContributors.hasIncludes) {\n let contentIncludeFile: string;\n try {\n contentIncludeFile = await readFile(relativeIncludeFilePath, 'utf8');\n } catch (err) {\n if (err.code === 'ENOENT') {\n continue;\n }\n throw err;\n }\n\n const newFileData: FileData = {\n ...fileData,\n fileContent: contentIncludeFile,\n tmpInputFilePath: relativeIncludeFilePath,\n };\n\n nestedContributors = await getContributorsForNestedFiles(newFileData, vcsConnector);\n vcsConnector.addNestedContributorsForPath(relativeFilePath, nestedContributors);\n }\n\n includesContributors.push(includeContributors.contributors);\n includesContributors.push(nestedContributors);\n }\n\n return Object.assign({}, ...includesContributors);\n}\n\nfunction getRelativeIncludeFilePaths(\n fileData: Pick<FileData, 'tmpInputFilePath'>,\n includeContents: string[],\n): Set<string> {\n const {tmpInputFilePath} = fileData;\n const relativeIncludeFilePaths: Set<string> = new Set();\n\n includeContents.forEach((includeContent: string) => {\n const relativeIncludeFilePath = includeContent.match(REGEXP_INCLUDE_FILE_PATH);\n\n if (relativeIncludeFilePath && relativeIncludeFilePath.length !== 0) {\n const relativeIncludeFilePathWithoutHash = relativeIncludeFilePath[0].split('#');\n const includeFilePath = join(\n dirname(tmpInputFilePath),\n relativeIncludeFilePathWithoutHash[0],\n );\n\n relativeIncludeFilePaths.add(includeFilePath);\n }\n });\n\n return relativeIncludeFilePaths;\n}\n\nasync function getFileIncludes(\n fileData: Pick<FileData, 'fileContent' | 'tmpInputFilePath' | 'inputFolderPathLength'>,\n) {\n const {fileContent, tmpInputFilePath, inputFolderPathLength} = fileData;\n\n const results = new Set<string>();\n\n const includeContents = fileContent.match(REGEXP_INCLUDE_CONTENTS);\n if (!includeContents || includeContents.length === 0) {\n return [];\n }\n const relativeIncludeFilePaths: Set<string> = getRelativeIncludeFilePaths(\n {tmpInputFilePath},\n includeContents,\n );\n for (const relativeIncludeFilePath of relativeIncludeFilePaths.values()) {\n const relativeFilePath = relativeIncludeFilePath.substring(inputFolderPathLength + 1);\n if (results.has(relativeFilePath)) continue;\n results.add(relativeFilePath);\n\n let contentIncludeFile: string;\n try {\n contentIncludeFile = await readFile(relativeIncludeFilePath, 'utf8');\n } catch (err) {\n if (err.code === 'ENOENT') {\n continue;\n }\n throw err;\n }\n\n const includedPaths = await getFileIncludes({\n inputFolderPathLength,\n fileContent: contentIncludeFile,\n tmpInputFilePath: relativeIncludeFilePath,\n });\n includedPaths.forEach((path) => results.add(path));\n }\n\n return Array.from(results.values());\n}\n\nexport {getFileContributorsMetadata, getFileContributorsString, getFileIncludes};\n", "import {join} from 'path';\n\nimport {isObject} from 'lodash';\n\nimport {ArgvService} from '../index';\nimport {IncludeMode} from '../../constants';\nimport {generic, sourcedocs, unarchive} from './batteries';\n\nimport type {\n Includer,\n YfmPreset,\n YfmToc,\n YfmTocInclude,\n YfmTocIncluder,\n YfmTocIncluders,\n} from '../../models';\n\nconst includersUsage = `include:\n path: <path-where-to-include>\n includers:\n - name: <includer-name-0>\n <includer-parameter>: <value-for-includer-parameter>\n - name: <includer-name-1>\n <includer-parameter>: <value-for-includer-parameter>\n`;\n\ntype IncludersMap = Record<string, Includer>;\n\nlet includersMap!: IncludersMap;\n\nclass IncludersError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.name = 'IncludersError';\n this.path = path;\n }\n}\n\nfunction init(custom: Includer[] = []) {\n if (includersMap) {\n return;\n }\n\n includersMap = {generic, sourcedocs, unarchive};\n\n for (const includer of custom) {\n includersMap[includer.name] = includer;\n }\n}\n\nasync function applyIncluders(path: string, item: YfmToc, vars: YfmPreset) {\n if (!item.include?.includers) {\n return;\n }\n\n if (!includeValid(item.include)) {\n throw new IncludersError(\"include doesn't comply with includers standard\", path);\n }\n\n // normalize include mode (includers support link mode only)\n item.include.mode = IncludeMode.LINK;\n\n const {status, message} = includersValid(item.include.includers);\n if (!status) {\n throw new IncludersError(message ?? '', path);\n }\n\n let index = 0;\n for (const {name, ...rest} of item.include.includers) {\n const includer = getIncluder(name);\n const passedParams = {...rest};\n\n await applyIncluder({path, item, includer, passedParams, index, vars});\n }\n\n // contract to be fullfilled by the includer:\n // provide builder generated toc.yaml\n item.include.path = join(item.include.path, 'toc.yaml');\n index++;\n}\n\nfunction includeValid(include: YfmTocInclude) {\n return (include.mode === IncludeMode.LINK || !include.mode) && include.path?.length;\n}\n\nfunction includersValid(includers: YfmTocIncluders) {\n for (const includer of includers) {\n const {status, message} = includerValid(includer);\n\n if (!status) {\n return {status, message};\n }\n }\n\n return {status: true};\n}\n\nfunction includerValid(includer: YfmTocIncluder) {\n if (isObject(includer)) {\n if (typeof includer.name !== 'string') {\n return {\n status: false,\n message: 'use string in the includer.name to specify includers name',\n };\n }\n\n if (includerExists(includer)) {\n return {status: true};\n }\n\n return {status: false, message: `includer ${includer.name} not implemented`};\n }\n\n return {\n status: false,\n message: `use appropriate includers format:\\n${includersUsage}`,\n };\n}\n\nfunction getIncluder(includerName: string) {\n return includersMap[includerName];\n}\n\nfunction includerExists(includer: YfmTocIncluder) {\n return includersMap[includer.name as keyof typeof includersMap];\n}\n\nexport type ApplyIncluderParams = {\n path: string;\n item: YfmToc;\n includer: Includer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n passedParams: Record<string, any>;\n index: number;\n vars: YfmPreset;\n};\n\nasync function applyIncluder(args: ApplyIncluderParams) {\n const {rootInput: readBasePath, input: writeBasePath} = ArgvService.getConfig();\n\n const {path, item, includer, passedParams, index, vars} = args;\n\n const params = {\n tocPath: path,\n passedParams,\n index,\n item,\n readBasePath,\n writeBasePath,\n vars,\n };\n\n return await includer.includerFunction(params);\n}\n\nexport {init, applyIncluders, IncludersError};\n", "import {mkdir, readFile, writeFile} from 'fs/promises';\nimport {dirname, join, parse} from 'path';\n\nimport {updateWith} from 'lodash';\nimport {dump} from 'js-yaml';\n\nimport {glob} from '../../../utils/glob';\n\nimport {IncluderFunctionParams} from '../../../models';\n\nclass GenericIncluderError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.name = 'GenericIncluderError';\n this.path = path;\n }\n}\n\nconst name = 'generic';\n\nconst MD_GLOB = '**/*.md';\n\ntype Params = {\n input: string;\n leadingPage: {\n name?: string;\n };\n};\n\nasync function includerFunction(params: IncluderFunctionParams<Params>) {\n const {\n readBasePath,\n writeBasePath,\n tocPath,\n item,\n passedParams: {input, leadingPage},\n index,\n } = params;\n\n if (!input?.length || !item.include?.path) {\n throw new GenericIncluderError('provide includer with input parameter', tocPath);\n }\n\n try {\n const leadingPageName = leadingPage?.name ?? 'Overview';\n\n const tocDirPath = dirname(tocPath);\n\n const contentPath =\n index === 0\n ? join(writeBasePath, tocDirPath, input)\n : join(readBasePath, tocDirPath, input);\n\n let cache = {};\n let found = [];\n\n ({\n state: {found, cache},\n } = await glob(MD_GLOB, {\n cwd: contentPath,\n nosort: true,\n nocase: true,\n cache,\n }));\n\n const writePath = join(writeBasePath, tocDirPath, item.include.path);\n\n await mkdir(writePath, {recursive: true});\n\n for (const filePath of found) {\n const file = await readFile(join(contentPath, filePath));\n\n await mkdir(dirname(join(writePath, filePath)), {recursive: true});\n await writeFile(join(writePath, filePath), file);\n }\n\n const graph = createGraphFromPaths(found);\n\n const toc = createToc(leadingPageName, item.include.path)(graph, []);\n\n await writeFile(join(writePath, 'toc.yaml'), dump(toc));\n } catch (err) {\n throw new GenericIncluderError(err.toString(), tocPath);\n }\n}\n\nfunction createGraphFromPaths(paths: string[]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const graph: Record<string, any> = {};\n\n for (const path of paths) {\n const chunks = path.split('/').filter(Boolean);\n if (chunks.length < 2) {\n if (chunks.length === 1) {\n graph.files = chunks;\n }\n\n continue;\n }\n\n const file = chunks.pop();\n\n updateWith(\n graph,\n chunks,\n (old) => {\n return old ? {files: [...old.files, file]} : {files: [file]};\n },\n Object,\n );\n }\n\n return graph;\n}\n\nfunction createToc(leadingPageName: string, tocName: string) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function createTocRec(\n graph: Record<string, any>,\n cursor: string[],\n ): Record<string, any> {\n const handler = (file: string) => ({\n name: parse(file).name === 'index' ? leadingPageName : file,\n href: join(...cursor, file),\n });\n\n const recurse = (key: string) => createTocRec(graph[key], [...cursor, key]);\n\n const current = {\n name: cursor[cursor.length - 1] ?? tocName,\n items: [\n ...(graph.files ?? []).map(handler),\n ...Object.keys(graph)\n .filter((key) => key !== 'files')\n .map(recurse),\n ],\n };\n\n return current;\n };\n}\n\nexport {name, includerFunction};\n\nexport default {name, includerFunction};\n", "import {logger} from '../../../utils/logger';\n\nimport generic from './generic';\n\nimport {IncluderFunctionParams} from '../../../models';\n\nconst name = 'sourcedocs';\n\nconst usage = `include:\n path: <path-where-to-include>\n includers:\n - name: generic\n input: <path-to-directory-with-markdown>\n leadingPage:\n name: <leading-page-name>\n`;\n\ntype Params = {\n input: string;\n leadingPage: {\n name?: string;\n };\n};\n\nasync function includerFunction(params: IncluderFunctionParams<Params>) {\n logger.warn(\n params.tocPath,\n `sourcedocs inlcuder is getting depricated in favor of generic includer\\n${usage}`,\n );\n\n await generic.includerFunction(params);\n}\n\nexport {name, includerFunction};\n\nexport default {name, includerFunction};\n", "import {createReadStream, createWriteStream, mkdirSync} from 'fs';\nimport {dirname, join} from 'path';\nimport {Headers, extract} from 'tar-stream';\n\nimport type {PassThrough} from 'stream';\n\nimport {IncluderFunctionParams} from '../../../models';\n\nconst name = 'unarchive';\n\nclass UnarchiveIncluderError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.name = 'UnarchiveIncluderError';\n this.path = path;\n }\n}\n\nfunction pipeline(readPath: string, writeBasePath: string): Promise<void> {\n return new Promise((res, rej) => {\n const reader = createReadStream(readPath);\n\n reader.on('error', (err: Error) => {\n rej(err);\n });\n\n const extractor = extract();\n\n extractor.on('error', (err: Error) => {\n rej(err);\n });\n\n mkdirSync(writeBasePath, {recursive: true});\n\n extractor.on('entry', (header: Headers, stream: PassThrough, next: Function) => {\n const {type, name} = header;\n\n const writePath = join(writeBasePath, name);\n\n const writeDirPath = type === 'directory' ? writePath : dirname(writePath);\n\n mkdirSync(writeDirPath, {recursive: true});\n\n if (type !== 'directory') {\n const writer = createWriteStream(writePath, {flags: 'w'});\n\n writer.on('error', (err) => {\n rej(err);\n });\n\n stream.pipe(writer);\n }\n\n stream.on('end', () => {\n next();\n });\n\n stream.resume();\n });\n\n reader.pipe(extractor).on('finish', () => {\n res();\n });\n });\n}\n\ntype Params = {\n input: string;\n output: string;\n};\n\nasync function includerFunction(params: IncluderFunctionParams<Params>) {\n const {\n readBasePath,\n writeBasePath,\n tocPath,\n passedParams: {input, output},\n index,\n } = params;\n\n if (!input?.length || !output?.length) {\n throw new UnarchiveIncluderError('provide includer with input parameter', tocPath);\n }\n\n const contentPath = index === 0 ? join(writeBasePath, input) : join(readBasePath, input);\n\n const writePath = join(writeBasePath, output);\n\n try {\n await pipeline(contentPath, writePath);\n } catch (err) {\n throw new UnarchiveIncluderError(err.toString(), tocPath);\n }\n}\n\nexport {name, includerFunction};\n\nexport default {name, includerFunction};\n", "import {dirname, normalize} from 'path';\n\nimport {DocPreset, YfmPreset} from '../models';\n\nexport type PresetStorage = Map<string, YfmPreset>;\n\nlet presetStorage: PresetStorage = new Map();\n\nfunction add(parsedPreset: DocPreset, path: string, varsPreset: string) {\n const combinedValues = {\n ...(parsedPreset.default || {}),\n ...(parsedPreset[varsPreset] || {}),\n __metadata: parsedPreset.__metadata,\n } as YfmPreset;\n\n const key = dirname(normalize(path));\n presetStorage.set(key, combinedValues);\n}\n\nfunction get(path: string): YfmPreset {\n let combinedValues: YfmPreset = {};\n let localPath = normalize(path);\n\n while (localPath !== '.') {\n const presetValues: YfmPreset = presetStorage.get(localPath) || {};\n localPath = dirname(localPath);\n\n combinedValues = {\n ...presetValues,\n ...combinedValues,\n };\n }\n\n // Add root' presets\n combinedValues = {\n ...presetStorage.get('.'),\n ...combinedValues,\n };\n\n return combinedValues;\n}\n\nfunction getPresetStorage(): Map<string, YfmPreset> {\n return presetStorage;\n}\n\nfunction setPresetStorage(preset: Map<string, YfmPreset>): void {\n presetStorage = preset;\n}\n\nexport default {\n add,\n get,\n getPresetStorage,\n setPresetStorage,\n};\n", "import {YfmArgv} from '../models';\nimport {join} from 'path';\nimport {readFileSync} from 'fs';\n\nlet _argv!: YfmArgv;\n\nfunction getConfig() {\n return _argv;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction init(argv: any) {\n _argv = {\n ...argv,\n ignore: Array.isArray(argv.ignore) ? argv.ignore : [],\n } as YfmArgv;\n\n if (argv.vars) {\n _argv.vars = JSON.parse(argv.vars);\n }\n\n try {\n const ignorefile = readFileSync(join(_argv.rootInput, '.yfmignore'), 'utf8');\n const ignore = ignorefile.split('\\n');\n\n _argv.ignore = _argv.ignore.concat(ignore);\n } catch {}\n}\n\nfunction set(argv: YfmArgv) {\n _argv = argv;\n}\n\nexport default {\n getConfig,\n init,\n set,\n};\n", "import {dirname, resolve} from 'path';\nimport {readFileSync, writeFileSync} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport log from '@diplodoc/transform/lib/log';\n\nimport {ArgvService, PresetService} from './index';\nimport {LeadingPage} from '../models';\nimport {\n filterFiles,\n filterTextItems,\n firstFilterTextItems,\n liquidField,\n liquidFields,\n} from './utils';\n\nfunction filterFile(path: string) {\n const {input: inputFolderPath, vars} = ArgvService.getConfig();\n\n const pathToDir = dirname(path);\n const filePath = resolve(inputFolderPath, path);\n const content = readFileSync(filePath, 'utf8');\n const parsedIndex = load(content) as LeadingPage;\n\n const combinedVars = {\n ...PresetService.get(pathToDir),\n ...vars,\n };\n\n /* Should remove all links with false expressions */\n try {\n const title = firstFilterTextItems(parsedIndex.title, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.title = liquidField(title, combinedVars, path);\n\n const description = filterTextItems(parsedIndex.description, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.description = liquidFields(description, combinedVars, path);\n\n if (parsedIndex.meta?.title) {\n const metaTitle = firstFilterTextItems(parsedIndex.meta.title, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.meta.title = liquidField(metaTitle, combinedVars, path);\n }\n\n if (parsedIndex.meta?.description) {\n const metaDescription = firstFilterTextItems(\n parsedIndex.meta.description,\n combinedVars,\n {resolveConditions: true},\n );\n parsedIndex.meta.description = liquidField(metaDescription, combinedVars, path);\n }\n\n if (parsedIndex.nav) {\n const navTitle = firstFilterTextItems(parsedIndex.nav.title, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.nav.title = liquidField(navTitle, combinedVars, path);\n }\n\n parsedIndex.links = filterFiles(parsedIndex.links, 'links', combinedVars, {\n resolveConditions: true,\n });\n\n parsedIndex.links.forEach((link) => {\n if (link.title) {\n link.title = liquidField(link.title, combinedVars, path);\n }\n if (link.description) {\n link.description = liquidField(link.description, combinedVars, path);\n }\n });\n\n writeFileSync(filePath, dump(parsedIndex));\n } catch (error) {\n log.error(`Error while filtering index file: ${path}. Error message: ${error}`);\n }\n}\n\nexport default {\n filterFile,\n};\n", "import {LintConfig, LintRule} from '@diplodoc/transform/lib/yfmlint';\n\nimport {CollectionOfPluginsFunction, Plugin, PluginOptions} from '../models';\nimport {YFM_PLUGINS} from '../constants';\n\nlet plugins: Function[] | Plugin[];\nlet collectionOfPlugins: CollectionOfPluginsFunction;\n\nexport function setPlugins(): void {\n plugins = getAllPlugins();\n collectionOfPlugins = makeCollectOfPlugins();\n}\n\nexport function getPlugins() {\n return plugins;\n}\n\nexport function getCollectOfPlugins(): CollectionOfPluginsFunction {\n return collectionOfPlugins;\n}\n\nfunction makeCollectOfPlugins(): CollectionOfPluginsFunction {\n const pluginsWithCollect = (plugins as Plugin[]).filter((plugin: Plugin) => {\n return typeof plugin.collect === 'function';\n });\n\n return (output: string, options: PluginOptions) => {\n let collectsOutput = output;\n\n pluginsWithCollect.forEach((plugin: Plugin) => {\n const collectOutput = plugin.collect(collectsOutput, options);\n\n collectsOutput = typeof collectOutput === 'string' ? collectOutput : collectsOutput;\n });\n\n return collectsOutput;\n };\n}\n\nfunction getAllPlugins(): Function[] {\n const customPlugins = getCustomPlugins();\n return [...YFM_PLUGINS, ...customPlugins];\n}\n\nfunction getCustomPlugins(): Function[] {\n try {\n const customPlugins = require(require.resolve('./plugins'));\n return Array.isArray(customPlugins) ? customPlugins : [];\n } catch (e) {\n return [];\n }\n}\n\nexport function getHeadContent(): string {\n try {\n return require(require.resolve('./head-content.js'));\n } catch (e) {\n return '';\n }\n}\n\nexport function getCustomLintRules(): LintRule[] {\n try {\n return require(require.resolve('./lint-rules'));\n } catch (e) {\n return [];\n }\n}\n\nexport function getDefaultLintConfig(): LintConfig | undefined {\n try {\n return require(require.resolve('./default-lint-config'));\n } catch (e) {\n return undefined;\n }\n}\n", "import walkSync from 'walk-sync';\nimport shell from 'shelljs';\n\nimport {ArgvService} from '../services';\nimport {copyFiles} from '../utils';\n\nimport {ASSETS_FOLDER} from '../constants';\n\n/**\n * Processes assets files (everything except .yaml and .md files)\n * @param {string} outputBundlePath\n * @return {void}\n */\nexport function processAssets(outputBundlePath: string) {\n const {input: inputFolderPath, output: outputFolderPath} = ArgvService.getConfig();\n\n const assetFilePath: string[] = walkSync(inputFolderPath, {\n directories: false,\n includeBasePath: false,\n ignore: ['**/*.yaml', '**/*.md'],\n });\n\n copyFiles(inputFolderPath, outputFolderPath, assetFilePath);\n\n /* Copy js bundle to user' output folder */\n shell.mkdir('-p', outputBundlePath);\n shell.cp(ASSETS_FOLDER + '/*', outputBundlePath);\n}\n", "import {relative, resolve} from 'path';\nimport walkSync from 'walk-sync';\nimport shell from 'shelljs';\n\nimport {ArgvService, TocService} from '../services';\nimport {convertBackSlashToSlash} from '../utils';\n\n/**\n * Removes all content files that unspecified in toc files or ignored.\n * @return {void}\n */\nexport function processExcludedFiles() {\n const {input: inputFolderPath, output: outputFolderPath, ignore} = ArgvService.getConfig();\n\n const allContentFiles: string[] = walkSync(inputFolderPath, {\n directories: false,\n includeBasePath: true,\n globs: ['**/*.md', '**/index.yaml', ...ignore],\n // Ignores service directories like \"_includes\", \"_templates\" and etc.\n ignore: ['**/_*/**/*'],\n });\n const navigationPaths = TocService.getNavigationPaths().map((filePath) =>\n convertBackSlashToSlash(resolve(inputFolderPath, filePath)),\n );\n const tocSpecifiedFiles = new Set(navigationPaths);\n const excludedFiles = allContentFiles.filter((filePath) => !tocSpecifiedFiles.has(filePath));\n\n shell.rm('-f', excludedFiles);\n\n const includedTocPaths = TocService.getIncludedTocPaths().map((filePath) => {\n const relativeTocPath = relative(inputFolderPath, filePath);\n const destTocPath = resolve(outputFolderPath, relativeTocPath);\n\n return convertBackSlashToSlash(destTocPath);\n });\n\n shell.rm('-rf', includedTocPaths);\n}\n", "import log from '@diplodoc/transform/lib/log';\nimport _uniq from 'lodash/uniq';\n\nexport function processLogs(inputFolder: string) {\n const replacementRegExp = new RegExp(inputFolder, 'ig');\n const {info, warn, error} = log.get();\n const outputLogs = _uniq(['', ...info, '', ...warn, '', ...error, '']);\n\n for (const outputLog of outputLogs) {\n const preparedLog = outputLog.replace(replacementRegExp, '');\n console.log(preparedLog);\n }\n}\n", "import type {DocInnerProps} from '@diplodoc/client';\nimport {basename, dirname, extname, join, relative, resolve} from 'path';\nimport shell from 'shelljs';\nimport {readFileSync, writeFileSync} from 'fs';\nimport {bold} from 'chalk';\nimport {dump, load} from 'js-yaml';\nimport {asyncify, mapLimit} from 'async';\n\nimport log from '@diplodoc/transform/lib/log';\n\nimport {ArgvService, LeadingService, PluginService, TocService} from '../services';\nimport {resolveMd2HTML, resolveMd2Md} from '../resolvers';\nimport {\n generateStaticMarkup,\n joinSinglePageResults,\n logger,\n transformTocForSinglePage,\n} from '../utils';\nimport {\n LeadingPage,\n MetaDataOptions,\n PathData,\n Resources,\n SinglePageResult,\n YfmToc,\n} from '../models';\nimport {VCSConnector} from '../vcs-connector/connector-models';\nimport {getVCSConnector} from '../vcs-connector';\nimport {\n Lang,\n PAGE_PROCESS_CONCURRENCY,\n ResourceType,\n SINGLE_PAGE_DATA_FILENAME,\n SINGLE_PAGE_FILENAME,\n} from '../constants';\n\nconst singlePageResults: Record<string, SinglePageResult[]> = {};\nconst singlePagePaths: Record<string, Set<string>> = {};\n\n// Processes files of documentation (like index.yaml, *.md)\nexport async function processPages(outputBundlePath: string): Promise<void> {\n const {\n input: inputFolderPath,\n output: outputFolderPath,\n outputFormat,\n singlePage,\n resolveConditions,\n } = ArgvService.getConfig();\n\n const vcsConnector = await getVCSConnector();\n\n PluginService.setPlugins();\n\n const navigationPaths = TocService.getNavigationPaths();\n\n await mapLimit(\n navigationPaths,\n PAGE_PROCESS_CONCURRENCY,\n asyncify(async (pathToFile: string) => {\n const pathData = getPathData(\n pathToFile,\n inputFolderPath,\n outputFolderPath,\n outputFormat,\n outputBundlePath,\n );\n\n logger.proc(pathToFile);\n\n const metaDataOptions = getMetaDataOptions(\n pathData,\n inputFolderPath.length,\n vcsConnector,\n );\n\n await preparingPagesByOutputFormat(\n pathData,\n metaDataOptions,\n resolveConditions,\n singlePage,\n );\n }),\n );\n\n if (singlePage) {\n await saveSinglePages(outputBundlePath);\n }\n}\n\nfunction getPathData(\n pathToFile: string,\n inputFolderPath: string,\n outputFolderPath: string,\n outputFormat: string,\n outputBundlePath: string,\n): PathData {\n const pathToDir: string = dirname(pathToFile);\n const filename: string = basename(pathToFile);\n const fileExtension: string = extname(pathToFile);\n const fileBaseName: string = basename(filename, fileExtension);\n const outputDir = resolve(outputFolderPath, pathToDir);\n const outputFileName = `${fileBaseName}.${outputFormat}`;\n const outputPath = resolve(outputDir, outputFileName);\n const resolvedPathToFile = resolve(inputFolderPath, pathToFile);\n const outputTocDir = TocService.getTocDir(resolvedPathToFile);\n\n const pathData: PathData = {\n pathToFile,\n resolvedPathToFile,\n filename,\n fileBaseName,\n fileExtension,\n outputDir,\n outputPath,\n outputFormat,\n outputBundlePath,\n outputTocDir,\n inputFolderPath,\n outputFolderPath,\n };\n\n return pathData;\n}\n\nasync function saveSinglePages(outputBundlePath: string) {\n const {\n input: inputFolderPath,\n output: outputFolderPath,\n lang,\n resources,\n } = ArgvService.getConfig();\n\n try {\n await Promise.all(\n Object.keys(singlePageResults).map(async (tocDir) => {\n if (!singlePageResults[tocDir].length) {\n return;\n }\n\n const singlePageBody = joinSinglePageResults(\n singlePageResults[tocDir],\n inputFolderPath,\n tocDir,\n );\n const tocPath = join(relative(inputFolderPath, tocDir), 'toc.yaml');\n const toc: YfmToc | null = TocService.getForPath(tocPath) || null;\n const preparedToc = transformTocForSinglePage(toc, {\n root: inputFolderPath,\n currentPath: join(tocDir, SINGLE_PAGE_FILENAME),\n }) as YfmToc;\n\n const pageData = {\n data: {\n leading: false as const,\n html: singlePageBody,\n headings: [],\n meta: resources || {},\n toc: preparedToc,\n },\n router: {\n pathname: SINGLE_PAGE_FILENAME,\n },\n lang: lang || Lang.RU,\n };\n\n const outputTocDir = resolve(outputFolderPath, relative(inputFolderPath, tocDir));\n const relativeOutputBundlePath = relative(outputTocDir, outputBundlePath);\n\n // Save the full single page for viewing locally\n const singlePageFn = join(tocDir, SINGLE_PAGE_FILENAME);\n const singlePageDataFn = join(tocDir, SINGLE_PAGE_DATA_FILENAME);\n const singlePageContent = generateStaticMarkup(pageData, relativeOutputBundlePath);\n\n writeFileSync(singlePageFn, singlePageContent);\n writeFileSync(singlePageDataFn, JSON.stringify(pageData));\n }),\n );\n } catch (error) {\n console.log(error);\n }\n}\n\nfunction savePageResultForSinglePage(pageProps: DocInnerProps, pathData: PathData): void {\n const {pathToFile, outputTocDir} = pathData;\n\n if (pageProps.data.leading) {\n return;\n }\n\n singlePagePaths[outputTocDir] = singlePagePaths[outputTocDir] || new Set();\n\n if (singlePagePaths[outputTocDir].has(pathToFile)) {\n return;\n }\n\n singlePagePaths[outputTocDir].add(pathToFile);\n\n singlePageResults[outputTocDir] = singlePageResults[outputTocDir] || [];\n singlePageResults[outputTocDir].push({\n path: pathToFile,\n content: pageProps.data.html,\n title: pageProps.data.title,\n });\n}\n\nfunction getMetaDataOptions(\n pathData: PathData,\n inputFolderPathLength: number,\n vcsConnector?: VCSConnector,\n): MetaDataOptions {\n const {contributors, addSystemMeta, resources, allowCustomResources} = ArgvService.getConfig();\n\n const metaDataOptions: MetaDataOptions = {\n vcsConnector,\n fileData: {\n tmpInputFilePath: pathData.resolvedPathToFile,\n inputFolderPathLength,\n fileContent: '',\n },\n isContributorsEnabled: Boolean(contributors && vcsConnector),\n addSystemMeta,\n };\n\n if (allowCustomResources && resources) {\n const allowedResources = Object.entries(resources).reduce((acc: Resources, [key, val]) => {\n if (Object.keys(ResourceType).includes(key)) {\n acc[key as keyof typeof ResourceType] = val;\n }\n return acc;\n }, {});\n\n metaDataOptions.resources = allowedResources;\n }\n\n return metaDataOptions;\n}\n\nasync function preparingPagesByOutputFormat(\n path: PathData,\n metaDataOptions: MetaDataOptions,\n resolveConditions: boolean,\n singlePage: boolean,\n): Promise<void> {\n const {\n filename,\n fileExtension,\n fileBaseName,\n outputDir,\n resolvedPathToFile,\n outputFormat,\n pathToFile,\n } = path;\n const {allowCustomResources} = ArgvService.getConfig();\n\n try {\n shell.mkdir('-p', outputDir);\n\n const isYamlFileExtension = fileExtension === '.yaml';\n\n if (resolveConditions && fileBaseName === 'index' && isYamlFileExtension) {\n LeadingService.filterFile(pathToFile);\n }\n\n if (outputFormat === 'md' && isYamlFileExtension && allowCustomResources) {\n processingYamlFile(path, metaDataOptions);\n return;\n }\n\n if (\n (outputFormat === 'md' && isYamlFileExtension) ||\n (outputFormat === 'html' && !isYamlFileExtension && fileExtension !== '.md')\n ) {\n copyFileWithoutChanges(resolvedPathToFile, outputDir, filename);\n return;\n }\n\n switch (outputFormat) {\n case 'md':\n await processingFileToMd(path, metaDataOptions);\n return;\n case 'html': {\n const resolvedFileProps = await processingFileToHtml(path, metaDataOptions);\n\n if (singlePage) {\n savePageResultForSinglePage(resolvedFileProps, path);\n }\n\n return;\n }\n }\n } catch (e) {\n const message = `No such file or has no access to ${bold(resolvedPathToFile)}`;\n console.log(message, e);\n log.error(message);\n }\n}\n//@ts-ignore\nfunction processingYamlFile(path: PathData, metaDataOptions: MetaDataOptions) {\n const {pathToFile, outputFolderPath, inputFolderPath} = path;\n\n const filePath = resolve(inputFolderPath, pathToFile);\n const content = readFileSync(filePath, 'utf8');\n const parsedContent = load(content) as LeadingPage;\n\n if (metaDataOptions.resources) {\n parsedContent.meta = {...parsedContent.meta, ...metaDataOptions.resources};\n }\n\n writeFileSync(resolve(outputFolderPath, pathToFile), dump(parsedContent));\n}\n\nfunction copyFileWithoutChanges(\n resolvedPathToFile: string,\n outputDir: string,\n filename: string,\n): void {\n const from = resolvedPathToFile;\n const to = resolve(outputDir, filename);\n\n shell.cp(from, to);\n}\n\nasync function processingFileToMd(path: PathData, metaDataOptions: MetaDataOptions): Promise<void> {\n const {outputPath, pathToFile} = path;\n\n await resolveMd2Md({\n inputPath: pathToFile,\n outputPath,\n metadata: metaDataOptions,\n });\n}\n\nasync function processingFileToHtml(\n path: PathData,\n metaDataOptions: MetaDataOptions,\n): Promise<DocInnerProps> {\n const {outputBundlePath, filename, fileExtension, outputPath, pathToFile} = path;\n\n return resolveMd2HTML({\n inputPath: pathToFile,\n outputBundlePath,\n fileExtension,\n outputPath,\n filename,\n metadata: metaDataOptions,\n });\n}\n", "import {existsSync, readFileSync, writeFileSync} from 'fs';\nimport {basename, dirname, extname, join, resolve} from 'path';\nimport shell from 'shelljs';\nimport log from '@diplodoc/transform/lib/log';\nimport liquid from '@diplodoc/transform/lib/liquid';\n\nimport {ArgvService, PluginService} from '../services';\nimport {getVarsPerFile, logger} from '../utils';\nimport {PluginOptions, ResolveMd2MdOptions} from '../models';\nimport {PROCESSING_FINISHED} from '../constants';\nimport {getContentWithUpdatedMetadata} from '../services/metadata';\nimport {ChangelogItem} from '@diplodoc/transform/lib/plugins/changelog/types';\n\nexport async function resolveMd2Md(options: ResolveMd2MdOptions): Promise<void> {\n const {inputPath, outputPath, metadata} = options;\n const {input, output} = ArgvService.getConfig();\n const resolvedInputPath = resolve(input, inputPath);\n const vars = getVarsPerFile(inputPath);\n\n const content = await getContentWithUpdatedMetadata(\n readFileSync(resolvedInputPath, 'utf8'),\n metadata,\n vars.__system,\n vars.__metadata,\n );\n\n const {result, changelogs} = transformMd2Md(content, {\n path: resolvedInputPath,\n destPath: outputPath,\n root: resolve(input),\n destRoot: resolve(output),\n collectOfPlugins: PluginService.getCollectOfPlugins(),\n vars,\n log,\n copyFile,\n });\n\n writeFileSync(outputPath, result);\n\n if (changelogs?.length) {\n const mdFilename = basename(outputPath, extname(outputPath));\n const outputDir = dirname(outputPath);\n changelogs.forEach((changes, index) => {\n let changesName;\n const changesDate = changes.date as string | undefined;\n const changesIdx = changes.index as number | undefined;\n if (typeof changesIdx === 'number') {\n changesName = String(changesIdx);\n }\n if (!changesName && changesDate && /^\\d{4}/.test(changesDate)) {\n changesName = Math.trunc(new Date(changesDate).getTime() / 1000);\n }\n if (!changesName) {\n changesName = `name-${mdFilename}-${String(changelogs.length - index).padStart(\n 3,\n '0',\n )}`;\n }\n\n const changesPath = join(outputDir, `changes-${changesName}.json`);\n\n if (existsSync(changesPath)) {\n throw new Error(`Changelog ${changesPath} already exists!`);\n }\n\n writeFileSync(\n changesPath,\n JSON.stringify({\n ...changes,\n source: mdFilename,\n }),\n );\n });\n }\n\n logger.info(inputPath, PROCESSING_FINISHED);\n\n return undefined;\n}\n\nfunction copyFile(targetPath: string, targetDestPath: string, options?: PluginOptions) {\n shell.mkdir('-p', dirname(targetDestPath));\n\n if (options) {\n const sourceIncludeContent = readFileSync(targetPath, 'utf8');\n const {result} = transformMd2Md(sourceIncludeContent, options);\n\n writeFileSync(targetDestPath, result);\n } else {\n shell.cp(targetPath, targetDestPath);\n }\n}\n\nexport function liquidMd2Md(input: string, vars: Record<string, unknown>, path: string) {\n const {applyPresets, resolveConditions, conditionsInCode} = ArgvService.getConfig();\n\n return liquid(input, vars, path, {\n conditions: resolveConditions,\n substitutions: applyPresets,\n conditionsInCode,\n withSourceMap: true,\n keepNotVar: true,\n });\n}\n\nfunction transformMd2Md(input: string, options: PluginOptions) {\n const {disableLiquid} = ArgvService.getConfig();\n const {\n vars = {},\n path,\n root,\n destPath,\n destRoot,\n collectOfPlugins,\n log: pluginLog,\n copyFile: pluginCopyFile,\n } = options;\n\n let output = input;\n const changelogs: ChangelogItem[] = [];\n\n if (!disableLiquid) {\n const liquidResult = liquidMd2Md(input, vars, path);\n\n output = liquidResult.output;\n }\n\n if (collectOfPlugins) {\n output = collectOfPlugins(output, {\n vars,\n path,\n root,\n destPath,\n destRoot,\n log: pluginLog,\n copyFile: pluginCopyFile,\n collectOfPlugins,\n changelogs,\n extractChangelogs: true,\n });\n }\n\n return {\n result: output,\n changelogs,\n logs: pluginLog.get(),\n };\n}\n", "import {basename, dirname, join, relative, resolve, sep} from 'path';\nimport {readFileSync, writeFileSync} from 'fs';\nimport yaml from 'js-yaml';\n\nimport transform, {Output} from '@diplodoc/transform';\nimport log from '@diplodoc/transform/lib/log';\nimport liquid from '@diplodoc/transform/lib/liquid';\n\nimport {LeadingPage, ResolveMd2HTMLResult, ResolverOptions, YfmToc} from '../models';\nimport {ArgvService, PluginService, TocService} from '../services';\nimport {\n generateStaticMarkup,\n getVarsPerFile,\n getVarsPerRelativeFile,\n logger,\n transformToc,\n} from '../utils';\nimport {Lang, PROCESSING_FINISHED} from '../constants';\nimport {getAssetsPublicPath, getVCSMetadata} from '../services/metadata';\nimport {MarkdownItPluginCb} from '@diplodoc/transform/lib/plugins/typings';\n\nexport interface FileTransformOptions {\n path: string;\n root?: string;\n}\n\nconst FileTransformer: Record<string, Function> = {\n '.yaml': YamlFileTransformer,\n '.md': MdFileTransformer,\n};\n\nconst fixRelativePath = (relativeTo: string) => (path: string) => {\n return join(getAssetsPublicPath(relativeTo), path);\n};\n\nexport async function resolveMd2HTML(options: ResolverOptions): Promise<ResolveMd2HTMLResult> {\n const {inputPath, fileExtension, outputPath, outputBundlePath, metadata} = options;\n\n const pathToDir: string = dirname(inputPath);\n const toc: YfmToc | null = TocService.getForPath(inputPath) || null;\n const tocBase: string = toc && toc.base ? toc.base : '';\n const pathToFileDir: string =\n pathToDir === tocBase ? '' : pathToDir.replace(`${tocBase}${sep}`, '');\n const relativePathToIndex = relative(pathToDir, `${tocBase}${sep}`);\n const vars = getVarsPerFile(inputPath);\n\n const {input, lang, allowCustomResources} = ArgvService.getConfig();\n const resolvedPath: string = resolve(input, inputPath);\n const content: string = readFileSync(resolvedPath, 'utf8');\n\n const transformFn: Function = FileTransformer[fileExtension];\n const {result} = transformFn(content, {path: inputPath});\n\n const updatedMetadata = metadata?.isContributorsEnabled\n ? await getVCSMetadata(metadata, content, result?.meta)\n : result.meta;\n\n const fileMeta = fileExtension === '.yaml' ? result.data.meta ?? {} : updatedMetadata;\n\n if (!Array.isArray(fileMeta?.metadata)) {\n fileMeta.metadata = [fileMeta?.metadata].filter(Boolean);\n }\n\n fileMeta.metadata = fileMeta.metadata.concat(vars.__metadata?.filter(Boolean) || []);\n\n if (allowCustomResources) {\n const {script, style} = metadata?.resources || {};\n fileMeta.style = (fileMeta.style || []).concat(style || []).map(fixRelativePath(inputPath));\n fileMeta.script = (fileMeta.script || [])\n .concat(script || [])\n .map(fixRelativePath(inputPath));\n } else {\n fileMeta.style = [];\n fileMeta.script = [];\n }\n\n const props = {\n data: {\n leading: inputPath.endsWith('.yaml'),\n toc: transformToc(toc, pathToDir) || {},\n ...result,\n meta: fileMeta,\n },\n router: {\n pathname: join(relativePathToIndex, pathToFileDir, basename(outputPath)),\n },\n lang: lang || Lang.RU,\n };\n\n const outputDir = dirname(outputPath);\n const relativePathToBundle: string = relative(resolve(outputDir), resolve(outputBundlePath));\n\n const outputFileContent = generateStaticMarkup(props, relativePathToBundle);\n writeFileSync(outputPath, outputFileContent);\n logger.info(inputPath, PROCESSING_FINISHED);\n\n return props;\n}\n\nfunction YamlFileTransformer(content: string): Object {\n let data: LeadingPage | null = null;\n\n try {\n data = yaml.load(content) as LeadingPage;\n } catch (error) {\n log.error(`Yaml transform has been failed. Error: ${error}`);\n }\n\n if (!data) {\n return {\n result: {data: {}},\n };\n }\n\n const links = data?.links?.map((link) =>\n link.href ? {...link, href: link.href.replace(/.md$/gmu, '.html')} : link,\n );\n\n if (links) {\n data.links = links;\n }\n\n return {\n result: {data},\n };\n}\n\nexport function liquidMd2Html(input: string, vars: Record<string, unknown>, path: string) {\n const {conditionsInCode} = ArgvService.getConfig();\n\n return liquid(input, vars, path, {\n conditionsInCode,\n withSourceMap: true,\n });\n}\n\nfunction MdFileTransformer(content: string, transformOptions: FileTransformOptions): Output {\n const {input, ...options} = ArgvService.getConfig();\n const {path: filePath} = transformOptions;\n\n const plugins = PluginService.getPlugins();\n const vars = getVarsPerFile(filePath);\n const root = resolve(input);\n const path: string = resolve(input, filePath);\n\n return transform(content, {\n ...options,\n plugins: plugins as MarkdownItPluginCb<unknown>[],\n vars,\n root,\n path,\n assetsPublicPath: getAssetsPublicPath(filePath),\n getVarsPerFile: getVarsPerRelativeFile,\n extractTitle: true,\n });\n}\n", "import {dirname, relative, resolve} from 'path';\nimport log from '@diplodoc/transform/lib/log';\nimport {\n LintMarkdownFunctionOptions,\n PluginOptions,\n default as yfmlint,\n} from '@diplodoc/transform/lib/yfmlint';\nimport {readFileSync} from 'fs';\nimport {bold} from 'chalk';\n\nimport {ArgvService, PluginService} from '../services';\nimport {getVarsPerFile, getVarsPerRelativeFile} from '../utils';\nimport {liquidMd2Html} from './md2html';\nimport {liquidMd2Md} from './md2md';\n\ninterface FileTransformOptions {\n path: string;\n root?: string;\n}\n\nconst FileLinter: Record<string, Function> = {\n '.md': MdFileLinter,\n};\n\nexport interface ResolverLintOptions {\n inputPath: string;\n fileExtension: string;\n onFinish?: () => void;\n}\n\nexport function lintPage(options: ResolverLintOptions) {\n const {inputPath, fileExtension, onFinish} = options;\n const {input} = ArgvService.getConfig();\n const resolvedPath: string = resolve(input, inputPath);\n\n try {\n const content: string = readFileSync(resolvedPath, 'utf8');\n\n const lintFn: Function = FileLinter[fileExtension];\n if (!lintFn) {\n return;\n }\n\n lintFn(content, {path: inputPath});\n } catch (e) {\n const message = `No such file or has no access to ${bold(resolvedPath)}`;\n console.error(message, e);\n log.error(message);\n }\n\n if (onFinish) {\n onFinish();\n }\n}\n\nfunction MdFileLinter(content: string, lintOptions: FileTransformOptions): void {\n const {input, lintConfig, disableLiquid, outputFormat, ...options} = ArgvService.getConfig();\n const {path: filePath} = lintOptions;\n\n const plugins = outputFormat === 'md' ? [] : PluginService.getPlugins();\n const vars = getVarsPerFile(filePath);\n const root = resolve(input);\n const path: string = resolve(input, filePath);\n let preparedContent = content;\n\n /* Relative path from folder of .md file to root of user' output folder */\n const assetsPublicPath = relative(dirname(path), root);\n\n const lintMarkdown = function lintMarkdown(opts: LintMarkdownFunctionOptions) {\n const {input: localInput, path: localPath, sourceMap} = opts;\n\n const pluginOptions: PluginOptions = {\n ...options,\n vars,\n root,\n path: localPath,\n lintMarkdown, // Should pass the function for linting included files\n assetsPublicPath,\n disableLiquid,\n log,\n getVarsPerFile: getVarsPerRelativeFile,\n };\n\n yfmlint({\n input: localInput,\n lintConfig,\n pluginOptions,\n plugins,\n defaultLintConfig: PluginService.getDefaultLintConfig(),\n customLintRules: PluginService.getCustomLintRules(),\n sourceMap,\n });\n };\n\n let sourceMap;\n if (!disableLiquid) {\n let liquidResult;\n if (outputFormat === 'md') {\n liquidResult = liquidMd2Md(content, vars, path);\n } else {\n liquidResult = liquidMd2Html(content, vars, path);\n }\n\n preparedContent = liquidResult.output;\n sourceMap = liquidResult.sourceMap;\n }\n\n lintMarkdown({\n input: preparedContent,\n path,\n sourceMap,\n });\n}\n", "import {Octokit} from '@octokit/core';\nimport {join, normalize} from 'path';\nimport simpleGit, {SimpleGitOptions} from 'simple-git';\nimport {minimatch} from 'minimatch';\n\nimport github from './client/github';\nimport {ArgvService} from '../services';\nimport {\n CommitInfo,\n Contributor,\n Contributors,\n ContributorsByPathFunction,\n ExternalAuthorByPathFunction,\n NestedContributorsForPathFunction,\n} from '../models';\nimport {\n FileContributors,\n GitHubConnectorFields,\n SourceType,\n VCSConnector,\n} from './connector-models';\nimport {\n ALL_CONTRIBUTORS_RECEIVED,\n FIRST_COMMIT_FROM_ROBOT_IN_GITHUB,\n GETTING_ALL_CONTRIBUTORS,\n} from '../constants';\nimport {addSlashPrefix, logger} from '../utils';\nimport {validateConnectorFields} from './connector-validator';\nimport process from 'process';\n\nconst authorByGitEmail: Map<string, Contributor | null> = new Map();\nconst authorByPath: Map<string, Contributor | null> = new Map();\nconst contributorsByPath: Map<string, FileContributors> = new Map();\nconst contributorsData: Map<string, Contributor | null> = new Map();\nconst loginUserMap: Map<string, Contributor | null> = new Map();\nconst pathMTime = new Map<string, number>();\n\nasync function getGitHubVCSConnector(): Promise<VCSConnector | undefined> {\n const {contributors, rootInput} = ArgvService.getConfig();\n\n const httpClientByToken = getHttpClientByToken();\n if (!httpClientByToken) {\n return undefined;\n }\n\n let addNestedContributorsForPath: NestedContributorsForPathFunction = () => {};\n let getContributorsByPath: ContributorsByPathFunction = () =>\n Promise.resolve({} as FileContributors);\n const getExternalAuthorByPath: ExternalAuthorByPathFunction = (path: string) =>\n authorByPath.get(path) ?? null;\n\n if (contributors) {\n await getFilesMTime(rootInput, pathMTime);\n await getAllContributorsTocFiles(httpClientByToken);\n addNestedContributorsForPath = (path: string, nestedContributors: Contributors) =>\n addNestedContributorsForPathFunction(path, nestedContributors);\n getContributorsByPath = async (path: string) => getFileContributorsByPath(path);\n }\n\n return {\n getExternalAuthorByPath,\n addNestedContributorsForPath,\n getContributorsByPath,\n getUserByLogin: (login: string) => getUserByLogin(httpClientByToken, login),\n getModifiedTimeByPath: (filename: string) => pathMTime.get(filename),\n };\n}\n\nfunction getHttpClientByToken(): Octokit | null {\n const {connector, contributors} = ArgvService.getConfig();\n\n if (!contributors) {\n return null;\n }\n\n const neededProperties = [GitHubConnectorFields.TOKEN, GitHubConnectorFields.ENDPOINT];\n const validatedFileds = validateConnectorFields(SourceType.GITHUB, neededProperties, connector);\n\n if (Object.keys(validatedFileds).length === 0) {\n return null;\n }\n\n const octokit = new Octokit({\n auth: validatedFileds[GitHubConnectorFields.TOKEN] as string,\n baseUrl: validatedFileds[GitHubConnectorFields.ENDPOINT] as string,\n });\n\n return octokit;\n}\n\nasync function getAllContributorsTocFiles(httpClientByToken: Octokit): Promise<void> {\n const {rootInput} = ArgvService.getConfig();\n\n const options: Partial<SimpleGitOptions> = {\n baseDir: rootInput,\n };\n\n logger.info('', GETTING_ALL_CONTRIBUTORS);\n\n const masterDir = './_yfm-master';\n const tmpMasterBranch = 'yfm-tmp-master';\n\n try {\n await simpleGit(options).raw(\n 'worktree',\n 'add',\n '-b',\n tmpMasterBranch,\n masterDir,\n 'origin/master',\n );\n const fullRepoLogString = await simpleGit({\n baseDir: join(rootInput, masterDir),\n }).raw(\n 'log',\n `${FIRST_COMMIT_FROM_ROBOT_IN_GITHUB}..HEAD`,\n '--pretty=format:%ae, %an, %H',\n '--name-only',\n );\n const repoLogs = fullRepoLogString.split('\\n\\n');\n if (process.env.ENABLE_EXPERIMANTAL_AUTHORS) {\n const fullAuthorRepoLogString = await simpleGit({\n baseDir: join(rootInput, masterDir),\n }).raw(\n 'log',\n `${FIRST_COMMIT_FROM_ROBOT_IN_GITHUB}..HEAD`,\n '--diff-filter=A',\n '--pretty=format:%ae;%an;%H',\n '--name-only',\n );\n const authorRepoLog = fullAuthorRepoLogString.split('\\n\\n');\n await matchAuthorsForEachPath(authorRepoLog, httpClientByToken);\n }\n await matchContributionsForEachPath(repoLogs, httpClientByToken);\n } finally {\n await simpleGit(options).raw('worktree', 'remove', masterDir);\n await simpleGit(options).raw('branch', '-d', tmpMasterBranch);\n }\n\n logger.info('', ALL_CONTRIBUTORS_RECEIVED);\n}\n\nasync function matchContributionsForEachPath(\n repoLogs: string[],\n httpClientByToken: Octokit,\n): Promise<void> {\n for (const repoLog of repoLogs) {\n if (!repoLog) {\n continue;\n }\n\n const dataArray = repoLog.split('\\n');\n const userData = dataArray[0];\n const [email, name, hashCommit] = userData.split(', ');\n\n if (shouldAuthorBeIgnored({email, name})) {\n continue;\n }\n\n const hasContributorData = contributorsData.get(email);\n\n let contributorDataByHash;\n\n if (hasContributorData === undefined) {\n logger.info('Contributors: Getting data for', email);\n\n contributorDataByHash = await getContributorDataByHashCommit(\n httpClientByToken,\n hashCommit,\n );\n\n if (contributorDataByHash) {\n const paths = dataArray.splice(1);\n addContributorForPath(paths, {\n [email]: contributorDataByHash,\n });\n }\n contributorsData.set(email, contributorDataByHash);\n } else if (hasContributorData) {\n const paths = dataArray.splice(1);\n addContributorForPath(paths, {\n [email]: hasContributorData,\n });\n }\n }\n}\n\nasync function matchAuthorsForEachPath(authorRepoLogs: string[], httpClientByToken: Octokit) {\n for (const repoLog of authorRepoLogs) {\n if (!repoLog) {\n continue;\n }\n\n const dataArray = repoLog.split('\\n');\n const [userData, ...paths] = dataArray;\n const [email, name, hashCommit] = userData.split(';');\n\n if (shouldAuthorBeIgnored({email, name})) {\n continue;\n }\n\n await getAuthorByPaths({email, hashCommit}, paths, httpClientByToken);\n }\n}\n\nasync function getContributorDataByHashCommit(\n httpClientByToken: Octokit,\n hashCommit: string,\n): Promise<Contributor | null> {\n const repoCommit = await github.getRepoCommitByHash(httpClientByToken, hashCommit);\n\n if (!repoCommit) {\n return null;\n }\n\n const {author, commit} = repoCommit;\n\n if (!author) {\n return null;\n }\n\n const {avatar_url: avatar, html_url: url, login} = author;\n\n return {\n avatar,\n email: commit.author.email,\n login,\n name: commit.author.name,\n url,\n };\n}\n\nasync function getAuthorByPaths(\n commitInfo: CommitInfo,\n paths: string[],\n httpClientByToken: Octokit,\n) {\n for (const path of paths) {\n if (!path) {\n continue;\n }\n const normalizePath = normalize(addSlashPrefix(path));\n const {email, hashCommit} = commitInfo;\n\n let authorToReturn = authorByGitEmail.get(email) || null;\n\n if (!authorToReturn) {\n logger.info('Authors: Getting data for', email);\n\n const repoCommit = await github.getRepoCommitByHash(httpClientByToken, hashCommit);\n if (!repoCommit) {\n continue;\n }\n\n const {author, commit} = repoCommit;\n if (!author) {\n continue;\n }\n\n const {avatar_url: avatar, html_url: url, login} = author;\n authorToReturn = {\n avatar,\n email: commit.author.email,\n login,\n name: commit.author.name,\n url,\n };\n authorByGitEmail.set(email, authorToReturn);\n }\n\n authorByPath.set(normalizePath, authorToReturn);\n }\n}\n\nasync function getFileContributorsByPath(path: string): Promise<FileContributors> {\n if (contributorsData.size === 0 || !contributorsByPath.has(path)) {\n return {} as FileContributors;\n }\n\n return contributorsByPath.get(path) as FileContributors;\n}\n\nasync function getUserByLogin(octokit: Octokit, userLogin: string): Promise<Contributor | null> {\n let result = loginUserMap.get(userLogin);\n if (!result) {\n const user = await github.getRepoUser(octokit, userLogin);\n if (!user) {\n return null;\n }\n\n const {avatar_url: avatar, html_url: url, email, login, name} = user;\n\n result = {\n avatar,\n email,\n login,\n name,\n url,\n };\n\n loginUserMap.set(userLogin, result);\n }\n\n return result;\n}\n\nfunction addNestedContributorsForPathFunction(\n path: string,\n nestedContributors: Contributors,\n): void {\n addContributorForPath([path], nestedContributors, true);\n}\n\nfunction addContributorForPath(\n paths: string[],\n newContributor: Contributors,\n hasIncludes = false,\n): void {\n paths.forEach((path: string) => {\n const normalizePath = normalize(addSlashPrefix(path));\n\n if (!contributorsByPath.has(normalizePath)) {\n contributorsByPath.set(normalizePath, {\n contributors: newContributor,\n hasIncludes,\n });\n return;\n }\n\n const oldContributors = contributorsByPath.get(normalizePath);\n\n contributorsByPath.set(normalizePath, {\n contributors: {\n ...oldContributors?.contributors,\n ...newContributor,\n },\n hasIncludes,\n });\n });\n}\n\ntype ShouldAuthorBeIgnoredArgs = {\n email?: string;\n name?: string;\n};\n\nfunction shouldAuthorBeIgnored({email, name}: ShouldAuthorBeIgnoredArgs) {\n if (!(email || name)) {\n return false;\n }\n\n const {ignoreAuthorPatterns} = ArgvService.getConfig();\n if (!ignoreAuthorPatterns) {\n return false;\n }\n\n for (const pattern of ignoreAuthorPatterns) {\n if (email && minimatch(email, pattern)) {\n return true;\n }\n\n if (name && minimatch(name, pattern)) {\n return true;\n }\n }\n\n return false;\n}\n\nasync function getFilesMTime(repoDir: string, pathMTime: Map<string, number>) {\n const timeFiles = await simpleGit({\n baseDir: repoDir,\n }).raw(\n 'log',\n '--reverse',\n '--before=now',\n '--diff-filter=ADMR',\n '--pretty=format:%ct',\n '--name-status',\n );\n\n const parts = timeFiles.split(/\\n\\n/);\n parts.forEach((part) => {\n const lines = part.trim().split(/\\n/);\n const committerDate = lines.shift();\n const unixtime = Number(committerDate);\n lines.forEach((line) => {\n const [status, from, to] = line.split(/\\t/);\n switch (status[0]) {\n case 'R': {\n pathMTime.delete(from);\n pathMTime.set(to, unixtime);\n break;\n }\n case 'D': {\n pathMTime.delete(from);\n break;\n }\n default: {\n pathMTime.set(from, unixtime);\n }\n }\n });\n });\n return pathMTime;\n}\n\nexport default getGitHubVCSConnector;\n", "import log from '@diplodoc/transform/lib/log';\nimport {Octokit} from '@octokit/core';\nimport {ArgvService} from '../../services';\nimport {\n GitHubConnectorFields,\n GithubCommitDTO,\n GithubUserDTO,\n SourceType,\n} from '../connector-models';\nimport {validateConnectorFields} from '../connector-validator';\n\nasync function getRepoUser(octokit: Octokit, username: string): Promise<GithubUserDTO | null> {\n try {\n const user = await octokit.request('GET /users/{username}', {\n username,\n });\n\n return user.data as GithubUserDTO;\n } catch (error) {\n log.warn(`Getting user for GitHub has been failed. Username: ${username}. Error: ${error}`);\n return null;\n }\n}\n\nasync function getRepoCommitByHash(\n httpClientByToken: Octokit,\n hashCommit: string,\n): Promise<GithubCommitDTO | null> {\n const {connector} = ArgvService.getConfig();\n\n const neededProperties = [GitHubConnectorFields.OWNER, GitHubConnectorFields.REPO];\n const validatedFileds = validateConnectorFields(SourceType.GITHUB, neededProperties, connector);\n\n if (Object.keys(validatedFileds).length === 0) {\n return null;\n }\n\n try {\n const commit = await httpClientByToken.request(\n 'GET /repos/{owner}/{repo}/commits/{commit_sha}',\n {\n owner: validatedFileds[GitHubConnectorFields.OWNER] as string,\n repo: validatedFileds[GitHubConnectorFields.REPO] as string,\n commit_sha: hashCommit,\n },\n );\n\n return commit.data;\n } catch (error) {\n log.warn(\n `Getting commit by sha has been failed for GitHub. SHA commit: ${hashCommit}. Error: ${error}`,\n );\n return null;\n }\n}\n\nexport default {\n getRepoUser,\n getRepoCommitByHash,\n};\n", "import log from '@diplodoc/transform/lib/log';\nimport {\n ConnectorValidatorProps,\n GitHubConnectorFields,\n SourceType,\n VCSConnectorConfig,\n} from './connector-models';\nimport {getMsg\u0421onfigurationMustBeProvided} from '../constants';\n\nconst githubConnectorValidator: Record<string, ConnectorValidatorProps> = {\n [GitHubConnectorFields.ENDPOINT]: {\n warnMessage: `'${GitHubConnectorFields.ENDPOINT}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_BASE_URL,\n },\n [GitHubConnectorFields.TOKEN]: {\n warnMessage: `'${GitHubConnectorFields.TOKEN}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_TOKEN,\n },\n [GitHubConnectorFields.OWNER]: {\n warnMessage: `'${GitHubConnectorFields.OWNER}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_OWNER,\n },\n [GitHubConnectorFields.REPO]: {\n warnMessage: `'${GitHubConnectorFields.REPO}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_REPO,\n },\n};\n\nconst connectorValidator: Record<string, ConnectorValidatorProps> = {\n type: {\n warnMessage: \"'type' must be provided for repo.\",\n validateFn: notEmptyValue,\n },\n [SourceType.GITHUB]: {\n warnMessage: `'${SourceType.GITHUB}' object must be filled needed fields.`,\n validateFn: notEmptyObject,\n relatedValidator: githubConnectorValidator,\n },\n};\n\nfunction notEmptyObject(filed?: unknown): boolean {\n if (typeof filed === 'object') {\n return Boolean(filed && Object.getOwnPropertyNames(filed).length);\n }\n\n return false;\n}\n\nfunction notEmptyValue(value?: unknown): boolean {\n if (typeof value === 'string') {\n return Boolean(value);\n }\n\n return false;\n}\n\nexport function validateConnectorFields(\n sourceType: SourceType,\n fieldNames: GitHubConnectorFields[],\n repoProperties?: VCSConnectorConfig,\n): Record<string, unknown> {\n const repoValidator = connectorValidator[sourceType];\n\n if (!repoValidator) {\n log.error(`Invalid repo type: ${repoValidator}`);\n return {};\n }\n\n const isValidRepo = repoValidator.validateFn(repoProperties && repoProperties[sourceType]);\n const relatedRepoValidator = repoValidator.relatedValidator;\n if (!repoProperties || !isValidRepo || !relatedRepoValidator) {\n createLog(repoValidator);\n return {};\n }\n\n let isValidProperties = true;\n const validatedFields: Record<string, unknown> = {};\n\n for (const property of fieldNames) {\n const propertyValidator = relatedRepoValidator[property];\n\n if (!propertyValidator) {\n log.warn(`The property '${property}' doesn't exist in ${sourceType} repo.`);\n continue;\n }\n\n const propertyValue =\n propertyValidator.defaultValue || repoProperties[sourceType]?.[property];\n\n if (!propertyValidator.validateFn(propertyValue)) {\n createLog(propertyValidator);\n isValidProperties = false;\n }\n\n validatedFields[property] = propertyValue;\n }\n\n if (isValidProperties) {\n return validatedFields;\n }\n\n log.warn(getMsg\u0421onfigurationMustBeProvided(sourceType));\n return {};\n}\n\nfunction createLog(validator: ConnectorValidatorProps): void {\n if (validator.errorMessage) {\n return log.error(validator.errorMessage);\n }\n\n if (validator.warnMessage) {\n return log.warn(validator.warnMessage);\n }\n\n throw new Error(`Invalid validator: ${JSON.stringify(validator)}.`);\n}\n", "import {ArgvService} from '../services';\nimport getGitHubVCSConnector from './github';\nimport {SourceType, VCSConnector} from './connector-models';\n\nexport async function getVCSConnector(): Promise<VCSConnector | undefined> {\n const {connector} = ArgvService.getConfig();\n const connectorType = process.env.VCS_CONNECTOR_TYPE || (connector && connector.type);\n\n switch (connectorType) {\n case SourceType.GITHUB:\n return getGitHubVCSConnector();\n default:\n return undefined;\n }\n}\n", "import log from '@diplodoc/transform/lib/log';\nimport {Thread, Worker, spawn} from 'threads';\nimport {extname} from 'path';\n\nimport {ArgvService, PluginService, PresetService, TocService} from '../services';\nimport {ProcessLinterWorker} from '../workers/linter';\nimport {logger} from '../utils';\nimport {LINTING_FINISHED, MIN_CHUNK_SIZE, WORKERS_COUNT} from '../constants';\nimport {lintPage} from '../resolvers';\nimport {splitOnChunks} from '../utils/worker';\n\nlet processLinterWorkers: (ProcessLinterWorker & Thread)[];\nlet navigationPathsChunks: string[][];\n\nexport async function processLinter(): Promise<void> {\n const argvConfig = ArgvService.getConfig();\n\n const navigationPaths = TocService.getNavigationPaths();\n\n if (!processLinterWorkers) {\n lintPagesFallback(navigationPaths);\n\n return;\n }\n\n const presetStorage = PresetService.getPresetStorage();\n\n /* Subscribe on the linted page event */\n processLinterWorkers.forEach((worker) => {\n worker.getProcessedPages().subscribe((pathToFile) => {\n logger.info(pathToFile as string, LINTING_FINISHED);\n });\n });\n\n /* Run processing the linter */\n await Promise.all(\n processLinterWorkers.map((worker, i) => {\n const navigationPathsChunk = navigationPathsChunks[i];\n\n return worker.run({\n argvConfig,\n presetStorage,\n navigationPaths: navigationPathsChunk,\n });\n }),\n );\n\n /* Unsubscribe from workers */\n await Promise.all(\n processLinterWorkers.map((worker) => {\n return worker.finish().then((logs) => {\n log.add(logs);\n });\n }),\n );\n\n /* Terminate workers */\n await Promise.all(\n processLinterWorkers.map((worker) => {\n return Thread.terminate(worker);\n }),\n );\n}\n\nexport async function initLinterWorkers() {\n const navigationPaths = TocService.getNavigationPaths();\n const chunkSize = getChunkSize(navigationPaths);\n\n if (process.env.DISABLE_PARALLEL_BUILD || chunkSize < MIN_CHUNK_SIZE || WORKERS_COUNT <= 0) {\n return;\n }\n\n navigationPathsChunks = splitOnChunks(navigationPaths, chunkSize).filter((arr) => arr.length);\n\n const workersCount = navigationPathsChunks.length;\n\n processLinterWorkers = await Promise.all(\n new Array(workersCount).fill(null).map(() => {\n // TODO: get linter path from env\n return spawn<ProcessLinterWorker>(new Worker('./linter'), {timeout: 60000});\n }),\n );\n}\n\nfunction getChunkSize(arr: string[]) {\n return Math.ceil(arr.length / WORKERS_COUNT);\n}\n\nfunction lintPagesFallback(navigationPaths: string[]) {\n PluginService.setPlugins();\n\n navigationPaths.forEach((pathToFile) => {\n lintPage({\n inputPath: pathToFile,\n fileExtension: extname(pathToFile),\n onFinish: () => {\n logger.info(pathToFile, LINTING_FINISHED);\n },\n });\n });\n}\n", "export function splitOnChunks<T>(array: T[], chunkSize = 1000) {\n const chunks: T[][] = [];\n\n for (let i = 0, j = array.length; i < j; i += chunkSize) {\n const chunk: T[] = array.slice(i, i + chunkSize);\n chunks.push(chunk);\n }\n\n return chunks;\n}\n", "import {dirname, resolve} from 'path';\nimport walkSync from 'walk-sync';\nimport {readFileSync, writeFileSync} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport log from '@diplodoc/transform/lib/log';\n\nimport {ArgvService, PresetService, TocService} from '../services';\nimport {logger} from '../utils';\nimport {DocPreset} from '../models';\nimport shell from 'shelljs';\n\ntype GetFilePathsByGlobalsFunction = (globs: string[]) => string[];\n\nexport async function processServiceFiles(): Promise<void> {\n const {input: inputFolderPath, ignore = []} = ArgvService.getConfig();\n\n const getFilePathsByGlobals = (globs: string[]): string[] => {\n return walkSync(inputFolderPath, {\n directories: false,\n includeBasePath: false,\n globs,\n ignore,\n });\n };\n\n preparingPresetFiles(getFilePathsByGlobals);\n await preparingTocFiles(getFilePathsByGlobals);\n}\n\nfunction preparingPresetFiles(getFilePathsByGlobals: GetFilePathsByGlobalsFunction): void {\n const {\n input: inputFolderPath,\n varsPreset = '',\n outputFormat,\n applyPresets,\n resolveConditions,\n } = ArgvService.getConfig();\n\n try {\n const presetsFilePaths = getFilePathsByGlobals(['**/presets.yaml']);\n\n for (const path of presetsFilePaths) {\n logger.proc(path);\n\n const pathToPresetFile = resolve(inputFolderPath, path);\n const content = readFileSync(pathToPresetFile, 'utf8');\n const parsedPreset = load(content) as DocPreset;\n\n PresetService.add(parsedPreset, path, varsPreset);\n\n if (outputFormat === 'md' && (!applyPresets || !resolveConditions)) {\n // Should save filtered presets.yaml only when --apply-presets=false or --resolve-conditions=false\n saveFilteredPresets(path, parsedPreset);\n }\n }\n } catch (error) {\n log.error(`Preparing presets.yaml files failed. Error: ${error}`);\n throw error;\n }\n}\n\nfunction saveFilteredPresets(path: string, parsedPreset: DocPreset): void {\n const {output: outputFolderPath, varsPreset = ''} = ArgvService.getConfig();\n\n const outputPath = resolve(outputFolderPath, path);\n const filteredPreset: Record<string, Object> = {\n default: parsedPreset.default,\n };\n\n if (parsedPreset[varsPreset]) {\n filteredPreset[varsPreset] = parsedPreset[varsPreset];\n }\n\n const outputPreset = dump(filteredPreset, {\n lineWidth: 120,\n });\n\n shell.mkdir('-p', dirname(outputPath));\n writeFileSync(outputPath, outputPreset);\n}\n\nasync function preparingTocFiles(\n getFilePathsByGlobals: GetFilePathsByGlobalsFunction,\n): Promise<void> {\n try {\n const tocFilePaths = getFilePathsByGlobals(['**/toc.yaml']);\n\n for (const path of tocFilePaths) {\n logger.proc(path);\n\n await TocService.add(path);\n }\n } catch (error) {\n log.error(`Preparing toc.yaml files failed. Error: ${error}`);\n throw error;\n }\n}\n", "import {writeFileSync} from 'fs';\nimport {extname, join} from 'path';\n\nimport {ArgvService, TocService} from '../services';\nimport {convertBackSlashToSlash} from '../utils';\n\ntype TocItem = {\n name: string;\n items?: TocItems;\n href?: string;\n};\n\ntype TocItems = TocItem[];\n\nexport function prepareMapFile(): void {\n const {output: outputFolderPath} = ArgvService.getConfig();\n\n const navigationPathsWithoutExtensions = TocService.getNavigationPaths().map((path) => {\n let preparedPath = convertBackSlashToSlash(path.replace(extname(path), ''));\n\n if (preparedPath.endsWith('/index')) {\n preparedPath = preparedPath.substring(0, preparedPath.length - 5);\n }\n\n return preparedPath;\n });\n const navigationPaths = {files: [...new Set(navigationPathsWithoutExtensions)]};\n const filesMapBuffer = Buffer.from(JSON.stringify(navigationPaths, null, '\\t'), 'utf8');\n const mapFile = join(outputFolderPath, 'files.json');\n\n writeFileSync(mapFile, filesMapBuffer);\n}\n", "import {createReadStream} from 'fs';\nimport walkSync from 'walk-sync';\nimport {join, resolve} from 'path';\nimport {PutObjectCommand, S3Client} from '@aws-sdk/client-s3';\nimport mime from 'mime-types';\n\nimport {convertBackSlashToSlash, logger} from '../../utils';\nimport {asyncify, mapLimit} from 'async';\n\ninterface UploadProps {\n input: string;\n ignore: string[];\n endpoint: string;\n bucket: string;\n prefix: string;\n accessKeyId: string;\n secretAccessKey: string;\n region: string;\n}\n\nexport async function upload(props: UploadProps): Promise<void> {\n const {\n input,\n ignore = [],\n endpoint,\n region,\n bucket,\n prefix,\n accessKeyId,\n secretAccessKey,\n } = props;\n\n const s3Client = new S3Client({\n endpoint,\n region,\n credentials: {accessKeyId, secretAccessKey},\n });\n\n const filesToPublish: string[] = walkSync(resolve(input), {\n directories: false,\n includeBasePath: false,\n ignore,\n });\n\n await mapLimit(\n filesToPublish,\n 100,\n asyncify(async (pathToFile: string) => {\n const mimeType = mime.lookup(pathToFile);\n\n logger.upload(pathToFile);\n\n try {\n await s3Client.send(\n new PutObjectCommand({\n ContentType: mimeType ? mimeType : undefined,\n Bucket: bucket,\n Key: convertBackSlashToSlash(join(prefix, pathToFile)),\n Body: createReadStream(resolve(input, pathToFile)),\n }),\n );\n } catch (error) {\n logger.error(pathToFile, error.message);\n }\n }),\n );\n}\n", "import {join} from 'path';\nimport {ArgvService} from '../../services';\nimport {logger} from '../../utils';\n\nimport {Arguments, Argv} from 'yargs';\n\nimport {upload} from './upload';\n\nconst command = 'publish';\n\nconst description = 'Upload builded documentation to target S3 bucket';\n\nconst publish = {\n command,\n description,\n handler,\n builder,\n};\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('strict', {\n default: true,\n })\n .option('input', {\n alias: 'i',\n describe: 'Path to folder with builded files',\n type: 'string',\n required: true,\n group: 'Upload options',\n })\n .option('endpoint', {\n describe: 'S3 bucket endpoint',\n default: 'https://s3.amazonaws.com',\n type: 'string',\n group: 'Upload options',\n })\n .option('region', {\n describe: 'S3 bucket region',\n default: 'eu-central-1',\n type: 'string',\n group: 'Upload options',\n })\n .option('bucket', {\n describe: 'S3 bucket name',\n type: 'string',\n required: true,\n group: 'Upload options',\n })\n .option('prefix', {\n describe: 'S3 bucket ',\n default: '',\n type: 'string',\n group: 'Upload options',\n })\n .option('access-key-id', {\n describe: 'S3 bucket AccessKeyId',\n type: 'string',\n required: true,\n group: 'Upload options',\n })\n .option('secret-access-key', {\n describe: 'S3 bucket SecretAccessKey',\n type: 'string',\n required: true,\n group: 'Upload options',\n });\n}\n\ntype Args = {\n input: string;\n endpoint: string;\n region: string;\n bucket: string;\n prefix: string;\n ignore: string[];\n accessKeyId: string;\n secretAccessKey: string;\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nasync function handler(args: Arguments<Args>) {\n ArgvService.init({\n ...args,\n });\n\n const config = ArgvService.getConfig() as unknown as Args;\n const {input, endpoint, bucket, prefix} = config;\n\n logger.info('', `Upload artifacts from ${input} to ${join(endpoint, bucket, prefix)}`);\n\n try {\n await upload(config);\n } catch (error: any) {\n logger.error('', error.message);\n }\n}\n\nexport {publish};\n", "const {\n promises: {readFile, writeFile, mkdir},\n} = require('fs');\nimport {dirname, extname, join} from 'path';\n\nimport markdownTranslation, {ExtractParameters} from '@diplodoc/markdown-translation';\nimport {Arguments, Argv} from 'yargs';\nimport {asyncify, eachLimit} from 'async';\n\nimport {ArgvService} from '../../services';\nimport {glob, logger} from '../../utils';\n\nconst command = 'extract';\n\nconst description = 'extract xliff and skeleton from yfm documentation';\n\nconst extract = {command, description, handler, builder};\n\nconst MD_GLOB = '**/*.md';\n\nconst MAX_CONCURRENCY = 50;\n\nclass ExtractError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.path = path;\n }\n}\n\nconst USAGE = `yfm xliff extract \\\n--input <folder-with-markdown> \\\n--output <folder-to-store-xlff-and-skeleton> \\\n--sll <source-language>-<source-locale> \\\n--tll <target-language>-<target-locale>\n\nwhere <source/target-language> is the language code, as described in ISO 639-1.\n\nwhere <source/target-locale> is the locale code in alpha-2 format, as described in ISO 3166-1`;\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('source-language-locale', {\n alias: 'sll',\n describe: 'source language and locale',\n type: 'string',\n })\n .option('target-language-locale', {\n alias: 'tll',\n describe: 'target language and locale',\n type: 'string',\n })\n .option('input', {\n alias: 'i',\n describe: 'input folder with markdown files',\n type: 'string',\n })\n .option('output', {\n alias: 'o',\n describe: 'output folder to store xliff and skeleton files',\n type: 'string',\n })\n .demandOption(\n ['source-language-locale', 'target-language-locale', 'input', 'output'],\n USAGE,\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function handler(args: Arguments<any>) {\n ArgvService.init({\n ...args,\n });\n\n const {input, output, sourceLanguageLocale, targetLanguageLocale} = args;\n\n let source;\n let target;\n\n try {\n source = parseLanguageLocale(sourceLanguageLocale);\n target = parseLanguageLocale(targetLanguageLocale);\n } catch (err) {\n if (err instanceof Error) {\n logger.error(input, err.message);\n }\n }\n\n let cache = {};\n let found: string[] = [];\n\n try {\n ({\n state: {found, cache},\n } = await glob(join(input, MD_GLOB), {\n nosort: true,\n cache,\n }));\n } catch (err) {\n if (err instanceof Error) {\n logger.error(input, err.message);\n }\n }\n\n const pipelineParameters = {source, target, input, output};\n const configuredPipeline = pipeline(pipelineParameters);\n\n try {\n logger.info(input, 'starting xliff and skeleton generation pipeline');\n\n await eachLimit(found, MAX_CONCURRENCY, asyncify(configuredPipeline));\n\n logger.info(input, 'finished xliff and skeleton generation pipeline');\n } catch (err) {\n if (err instanceof Error || err instanceof ExtractError) {\n const file = err instanceof ExtractError ? err.path : input;\n\n logger.error(file, err.message);\n }\n }\n}\n\nfunction parseLanguageLocale(languageLocale: string) {\n const [language, locale] = languageLocale.split('-');\n if (language?.length && locale?.length) {\n return {language, locale};\n }\n\n throw new Error('invalid language-locale string');\n}\n\nexport type PipelineParameters = {\n input: string;\n output: string;\n source: ExtractParameters['source'];\n target: ExtractParameters['target'];\n};\n\nfunction pipeline(params: PipelineParameters) {\n const {input, output, source, target} = params;\n\n return async (markdownPath: string) => {\n const markdown = await reader({path: markdownPath});\n const extension = extname(markdownPath);\n\n const outputRelativePath = markdownPath.replace(extension, '').slice(input.length);\n\n const outputPath = join(output, outputRelativePath);\n const xlfPath = outputPath + '.xliff';\n const skeletonPath = outputPath + '.skl.md';\n\n const extractParameters = {\n markdownPath,\n skeletonPath,\n markdown,\n source,\n target,\n };\n\n const extracted = await extractor(extractParameters);\n\n const writerParameters = {\n ...extracted,\n xlfPath,\n skeletonPath,\n };\n\n await writer(writerParameters);\n };\n}\n\nexport type ReaderParameters = {\n path: string;\n};\n\nasync function reader(params: ReaderParameters) {\n const {path} = params;\n\n let markdown;\n try {\n logger.info(path, 'reading markdown file');\n\n markdown = await readFile(path, {encoding: 'utf-8'});\n\n logger.info(path, 'finished reading markdown file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ExtractError(err.message, path);\n }\n }\n\n return markdown;\n}\n\nexport type ExtractorParameters = {\n source: ExtractParameters['source'];\n target: ExtractParameters['target'];\n skeletonPath: string;\n markdownPath: string;\n markdown: string;\n};\n\nasync function extractor(params: ExtractorParameters) {\n let extracted;\n\n logger.info(params.markdownPath, 'generating skeleton and xliff from markdown');\n\n try {\n extracted = markdownTranslation.extract(params);\n } catch (err) {\n if (err instanceof Error) {\n throw new ExtractError(err.message, params.markdownPath);\n }\n }\n\n logger.info(params.markdownPath, 'finished generating skeleton and xliff from markdown');\n\n return extracted;\n}\n\nexport type WriterParameters = {\n skeletonPath: string;\n skeleton: string;\n xlfPath: string;\n xlf: string;\n};\n\nasync function writer(params: WriterParameters) {\n const {xlfPath, skeletonPath, xlf, skeleton} = params;\n\n logger.info(params.xlfPath, 'writing xliff file');\n logger.info(params.skeletonPath, 'writing skeleton file');\n\n await mkdir(dirname(xlfPath), {recursive: true});\n\n await Promise.all([writeFile(skeletonPath, skeleton), writeFile(xlfPath, xlf)]);\n\n logger.info(params.xlfPath, 'finished writing xliff file');\n logger.info(params.skeletonPath, 'finished writing skeleton file');\n}\n\nexport {extract};\n\nexport default {extract};\n", "const {\n promises: {readFile, writeFile, mkdir},\n} = require('fs');\nimport {dirname, extname, join} from 'path';\n\nimport markdownTranslation, {ComposeParameters} from '@diplodoc/markdown-translation';\nimport {Arguments, Argv} from 'yargs';\nimport {eachLimit} from 'async';\n\nimport {ArgvService} from '../../services';\nimport {glob, logger} from '../../utils';\n\nconst command = 'compose';\n\nconst description = 'compose xliff and skeleton into documentation';\n\nconst compose = {command, description, handler, builder};\n\nconst SKL_MD_GLOB = '**/*.skl.md';\nconst XLF_GLOB = '**/*.xliff';\nconst MAX_CONCURRENCY = 50;\n\nclass ComposeError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.path = path;\n }\n}\n\nconst USAGE =\n 'yfm xliff compose \\\n--input <folder-with-xliff-and-skeleton> \\\n--ouput <folder-to-store-translated-markdown>';\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('input', {\n alias: 'i',\n describe: 'input folder with xliff and skeleton files',\n type: 'string',\n })\n .option('output', {\n alias: 'o',\n describe: 'output folder where translated markdown will be stored',\n type: 'string',\n })\n .demandOption(['input', 'output'], USAGE);\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nasync function handler(args: Arguments<any>) {\n ArgvService.init({\n ...args,\n });\n\n const {input, output} = args;\n\n let cache = {};\n let skeletonPaths: string[] = [];\n let xliffPaths: string[] = [];\n\n try {\n ({\n state: {found: skeletonPaths, cache},\n } = await glob(join(input, SKL_MD_GLOB), {\n nosort: false,\n cache,\n }));\n\n ({\n state: {found: xliffPaths, cache},\n } = await glob(join(input, XLF_GLOB), {\n nosort: false,\n cache,\n }));\n\n if (xliffPaths.length !== skeletonPaths.length) {\n throw new ComposeError(\"number of xliff and skeleton files does'not match\", input);\n }\n } catch (err) {\n if (err instanceof Error || err instanceof ComposeError) {\n const file = err instanceof ComposeError ? err.path : input;\n\n logger.error(file, err.message);\n }\n }\n\n const pipelineParameters = {input, output};\n const configuredPipeline = pipeline(pipelineParameters);\n\n try {\n logger.info(input, 'staring translated markdown composition pipeline');\n\n await eachLimit(xliffPaths, MAX_CONCURRENCY, configuredPipeline);\n\n logger.info(input, 'finished translated markdown composition pipeline');\n } catch (err) {\n if (err instanceof Error || err instanceof ComposeError) {\n const file = err instanceof ComposeError ? err.path : input;\n\n logger.error(file, err.message);\n }\n }\n}\n\nexport type PipelineParameters = {\n input: string;\n output: string;\n};\n\nfunction pipeline(params: PipelineParameters) {\n const {input, output} = params;\n\n return async (xliffPath: string) => {\n const extension = extname(xliffPath);\n const extensionLessPath = xliffPath.replace(extension, '');\n const skeletonPath = extensionLessPath + '.skl.md';\n\n const readerParameters = {xliffPath, skeletonPath};\n const read = await reader(readerParameters);\n\n const composerParameters = {\n ...read,\n skeletonPath,\n xliffPath,\n };\n const {markdown} = await composer(composerParameters);\n\n const inputRelativePath = extensionLessPath.slice(input.length);\n const markdownPath = join(output, inputRelativePath) + '.md';\n\n const writerParameters = {\n markdown,\n markdownPath,\n };\n await writer(writerParameters);\n };\n}\n\nexport type ReaderParameters = {\n skeletonPath: string;\n xliffPath: string;\n};\n\nasync function reader(params: ReaderParameters) {\n const {skeletonPath, xliffPath} = params;\n\n let skeleton;\n let xlf;\n\n try {\n logger.info(skeletonPath, 'reading skeleton file');\n\n skeleton = await readFile(skeletonPath, {encoding: 'utf-8'});\n\n logger.info(skeletonPath, 'finished reading skeleton file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, skeletonPath);\n }\n }\n\n try {\n logger.info(xliffPath, 'reading xliff file');\n\n xlf = await readFile(xliffPath, {encoding: 'utf-8'});\n\n logger.info(xliffPath, 'finished reading xliff file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, xliffPath);\n }\n }\n\n return {skeleton, xlf};\n}\n\nexport type ComposerParameters = {\n skeletonPath: string;\n xliffPath: string;\n} & ComposeParameters;\n\nasync function composer(params: ComposerParameters) {\n const {skeletonPath, xliffPath} = params;\n let markdown;\n\n try {\n logger.info(skeletonPath, 'composing markdown from xliff and skeleton');\n logger.info(xliffPath, 'composing markdown from xliff and skeleton');\n\n markdown = markdownTranslation.compose(params);\n\n logger.info(skeletonPath, 'finished composing markdown from xliff and skeleton');\n logger.info(xliffPath, 'finished composing markdown from xliff and skeleton');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, `${xliffPath} ${skeletonPath}`);\n }\n }\n\n return {markdown};\n}\n\nexport type WriterParameters = {\n markdown: string;\n markdownPath: string;\n};\n\nasync function writer(params: WriterParameters) {\n const {markdown, markdownPath} = params;\n\n try {\n logger.info(markdownPath, 'writing markdown file');\n\n await mkdir(dirname(markdownPath), {recursive: true});\n await writeFile(markdownPath, markdown);\n\n logger.info(markdownPath, 'finished writing markdown file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, markdownPath);\n }\n }\n}\n\nexport {compose};\n\nexport default {compose};\n", "import {extract} from './extract';\nimport {compose} from './compose';\n\nimport {Argv} from 'yargs';\n\nconst command = 'xliff';\n\nconst description =\n 'extract xliff and skeleton from documentation files\\ncompose xliff and skeleton into documentation';\n\nconst xliff = {\n command,\n description,\n handler: () => {},\n builder,\n};\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .command(extract)\n .command(compose)\n .demandCommand(\n 1,\n `provide one of the folowing ${command} commands: ${extract.command}, ${compose.command}`,\n );\n}\n\nexport {xliff};\n\nexport default {xliff};\n", "import {asyncify, eachLimit, retry} from 'async';\n\nimport {dirname, join, resolve} from 'path';\nimport {mkdir, readFile, writeFile} from 'fs/promises';\nimport {XMLParser} from 'fast-xml-parser';\n\nimport {Session} from '@yandex-cloud/nodejs-sdk/dist/session';\nimport {TranslationServiceClient} from '@yandex-cloud/nodejs-sdk/dist/generated/yandex/cloud/service_clients';\nimport {\n TranslateRequest_Format as Format,\n TranslateRequest,\n} from '@yandex-cloud/nodejs-sdk/dist/generated/yandex/cloud/ai/translate/v2/translation_service';\n\nimport markdownTranslation from '@diplodoc/markdown-translation';\n\nimport {ArgvService} from '../../services';\nimport {getYandexOAuthToken} from '../../packages/credentials';\nimport {glob, logger} from '../../utils';\n\nimport {Arguments, Argv} from 'yargs';\n\nimport {YandexCloudTranslateGlossaryPair} from '../../models';\n\nconst command = 'translate';\n\nconst description = 'translate documentation with Yandex.Cloud Translator API';\n\nconst translate = {\n command,\n description,\n handler,\n builder,\n};\n\nconst MD_GLOB = '**/*.md';\nconst REQUESTS_LIMIT = 20;\nconst BYTES_LIMIT = 10000;\nconst RETRY_LIMIT = 3;\nconst MTRANS_LOCALE = 'MTRANS';\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('source-language', {\n alias: 'sl',\n describe: 'source language code',\n type: 'string',\n })\n .option('target-language', {\n alias: 'tl',\n describe: 'target language code',\n type: 'string',\n })\n .demandOption(\n ['source-language', 'target-language'],\n 'command requires to specify source and target languages',\n );\n}\n\nclass TranslatorError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.path = path;\n }\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nasync function handler(args: Arguments<any>) {\n ArgvService.init({\n ...args,\n });\n\n const {\n input,\n output,\n yandexCloudTranslateFolderId,\n yandexCloudTranslateGlossaryPairs,\n sl: sourceLanguage,\n tl: targetLanguage,\n } = args;\n\n logger.info(\n input,\n `translating documentation from ${sourceLanguage} to ${targetLanguage} language`,\n );\n\n try {\n let found = [];\n\n ({\n state: {found},\n } = await glob(join(input, MD_GLOB), {\n nosort: true,\n }));\n\n const oauthToken = await getYandexOAuthToken();\n\n const translatorParams = {\n input,\n output,\n sourceLanguage,\n targetLanguage,\n yandexCloudTranslateGlossaryPairs,\n folderId: yandexCloudTranslateFolderId,\n oauthToken,\n };\n\n const translateFn = translator(translatorParams);\n\n await eachLimit(found, REQUESTS_LIMIT, asyncify(translateFn));\n } catch (err) {\n if (err instanceof Error || err instanceof TranslatorError) {\n const message = err.message;\n\n const file = err instanceof TranslatorError ? err.path : '';\n\n logger.error(file, message);\n }\n }\n\n logger.info(\n output,\n `translated documentation from ${sourceLanguage} to ${targetLanguage} language`,\n );\n}\n\nexport type TranslatorParams = {\n oauthToken: string;\n folderId: string;\n input: string;\n output: string;\n sourceLanguage: string;\n targetLanguage: string;\n yandexCloudTranslateGlossaryPairs: YandexCloudTranslateGlossaryPair[];\n};\n\nfunction translator(params: TranslatorParams) {\n const {\n oauthToken,\n folderId,\n input,\n output,\n sourceLanguage,\n targetLanguage,\n yandexCloudTranslateGlossaryPairs,\n } = params;\n\n const session = new Session({oauthToken});\n const client = session.client(TranslationServiceClient);\n const request = (texts: string[]) => () =>\n client\n .translate(\n TranslateRequest.fromPartial({\n texts,\n folderId,\n sourceLanguageCode: sourceLanguage,\n targetLanguageCode: targetLanguage,\n glossaryConfig: {\n glossaryData: {\n glossaryPairs: yandexCloudTranslateGlossaryPairs,\n },\n },\n format: Format.PLAIN_TEXT,\n }),\n )\n .then((results) => results.translations.map(({text}) => text));\n\n return async (mdPath: string) => {\n try {\n logger.info(mdPath, 'translating');\n\n const md = await readFile(resolve(mdPath), {encoding: 'utf-8'});\n\n const {xlf, skeleton} = markdownTranslation.extract({\n source: {\n language: sourceLanguage,\n locale: sourceLanguage.toUpperCase(),\n },\n target: {\n language: targetLanguage,\n locale: targetLanguage.toUpperCase(),\n },\n markdown: md,\n markdownPath: mdPath,\n skeletonPath: '',\n });\n\n const texts = parseSourcesFromXLIFF(xlf);\n\n const parts = await Promise.all(\n texts.reduce(\n (\n {\n promises,\n buffer,\n bufferSize,\n }: {\n promises: Promise<string[]>[];\n buffer: string[];\n bufferSize: number;\n },\n text,\n index,\n ) => {\n if (text.length >= BYTES_LIMIT) {\n logger.warn(\n mdPath,\n 'Skip document part for translation. Part is too big.',\n );\n promises.push(Promise.resolve([text]));\n return {promises, buffer, bufferSize};\n }\n\n if (bufferSize + text.length > BYTES_LIMIT || index === texts.length - 1) {\n promises.push(backoff(request(buffer)));\n buffer = [];\n bufferSize = 0;\n }\n\n buffer.push(text);\n bufferSize += text.length;\n\n return {promises, buffer, bufferSize};\n },\n {\n promises: [],\n buffer: [],\n bufferSize: 0,\n },\n ).promises,\n );\n\n const translations = ([] as string[]).concat(...parts);\n\n const translatedXLIFF = createXLIFFDocument({\n sourceLanguage: sourceLanguage + '-' + MTRANS_LOCALE,\n targetLanguage: targetLanguage + '-' + MTRANS_LOCALE,\n sources: texts,\n targets: translations,\n });\n\n const composed = await markdownTranslation.compose({\n xlf: translatedXLIFF,\n skeleton,\n });\n\n const outputPath = mdPath.replace(input, output);\n\n await mkdir(dirname(outputPath), {recursive: true});\n await writeFile(outputPath, composed);\n\n logger.info(outputPath, 'finished translating');\n } catch (err) {\n if (err instanceof Error) {\n throw new TranslatorError(err.toString(), mdPath);\n }\n }\n };\n}\n\nfunction backoff(action: () => Promise<string[]>): Promise<string[]> {\n return retry(\n {\n times: RETRY_LIMIT,\n interval: (count: number) => {\n // eslint-disable-next-line no-bitwise\n return (1 << count) * 1000;\n },\n },\n asyncify(action),\n );\n}\n\nfunction parseSourcesFromXLIFF(xliff: string): string[] {\n const parser = new XMLParser();\n\n const inputs = parser.parse(xliff)?.xliff?.file?.body['trans-unit'] ?? [];\n\n return Array.isArray(inputs)\n ? inputs.map(({source}: {source: string}) => source)\n : [inputs.source];\n}\n\nexport type CreateXLIFFDocumentParams = {\n sourceLanguage: string;\n targetLanguage: string;\n sources: string[];\n targets: string[];\n};\n\nfunction createXLIFFDocument(params: CreateXLIFFDocumentParams) {\n const {sourceLanguage, targetLanguage, sources, targets} = params;\n\n const unit = (text: string, i: number): string => `\n<trans-unit id=\"${i + 1}\">\n <source xml:lang=\"${sourceLanguage}\">${sources[i]}</source>\n <target xml:lang=\"${targetLanguage}\">${text}</target>\n</trans-unit>`;\n\n const doc = `\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<xliff xmlns=\"urn:oasis:names:tc:xliff:document:1.2\" version=\"1.2\">\n <file original=\"\" source-language=\"${sourceLanguage}\" target-language=\"${targetLanguage}\">\n <header>\n <skl><external-file href=\"\" /></skl>\n </header>\n <body>${targets.map(unit)}</body>\n </file>\n</xliff>`;\n\n return doc;\n}\n\nexport {translate};\n\nexport default {translate};\n", "import {readFile} from 'fs/promises';\nimport {env} from 'process';\nimport {homedir} from 'os';\nimport {join} from 'path';\n\nimport {logger} from '../../utils';\n\nconst YANDEX_OAUTH_TOKEN_FILENAME = '.ya_oauth_token';\n\nasync function getYandexOAuthToken() {\n const {YANDEX_OAUTH_TOKEN} = env;\n\n return YANDEX_OAUTH_TOKEN ?? getYandexOAuthTokenFromHomeDir();\n}\n\nasync function getYandexOAuthTokenFromHomeDir() {\n const error = 'failed reading yandex oauth token';\n\n const path = join(homedir(), YANDEX_OAUTH_TOKEN_FILENAME);\n\n let token;\n\n try {\n token = await readFile(path, {encoding: 'utf8'});\n\n token = token.trim();\n\n if (!token?.length) {\n throw new Error(error);\n }\n } catch (err) {\n logger.error(error);\n\n throw err;\n }\n\n return token;\n}\n\nexport {getYandexOAuthToken};\n\nexport default {getYandexOAuthToken};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mBAAkB;AAClB,qBAAsB;AACtB,IAAAA,eAAgB;AAChB,sBAAO;;;ACHP,kBAAsB;AACtB,IAAM,KAAK,QAAQ,IAAI;AACvB,IAAM,QAAQ,QAAQ,uCAAuC;AAC7D,IAAM,UAAU,QAAQ,yCAAyC;AACjE,IAAM,OAAO,QAAQ,sCAAsC;AAC3D,IAAM,MAAM,QAAQ,qCAAqC;AACzD,IAAM,UAAU,QAAQ,yCAAyC;AACjE,IAAM,SAAS,QAAQ,wCAAwC;AAC/D,IAAM,OAAO,QAAQ,sCAAsC;AAC3D,IAAM,MAAM,QAAQ,qCAAqC;AACzD,IAAM,OAAO,QAAQ,sCAAsC;AAC3D,IAAM,QAAQ,QAAQ,uCAAuC;AAC7D,IAAM,WAAW,QAAQ,0CAA0C;AACnE,IAAM,QAAQ,QAAQ,uCAAuC;AAC7D,IAAM,SAAS,QAAQ,wCAAwC;AAC/D,IAAM,YAAY,QAAQ,2CAA2C;AACrE,IAAM,QAAQ,QAAQ,uCAAuC;AAC7D,IAAM,OAAO,QAAQ,sCAAsC;AAC3D,IAAM,cAAc,QAAQ,8CAA8C;AAC1E,IAAM,YAAY,QAAQ,2CAA2C;AACrE,IAAM,UAAU,QAAQ,6BAA6B;AACrD,IAAM,QAAQ,QAAQ,2BAA2B;AACjD,IAAM,UAAU,QAAQ,6BAA6B;AAErD,SAAS,UAAU,QAAQ,kDAAkD;AAC7E,OAAO,UAAU,QAAQ,gDAAgD;AACzE,UAAU,UAAU,QAAQ,mDAAmD;AAExE,IAAM,oBAAgB,qBAAQ,WAAW,WAAW;AACpD,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,gBAAgB;AACtB,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAC3B,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,4BAA4B;AAClC,IAAM,eAAe;AA0BrB,IAAK,eAAL,kBAAKC,kBAAL;AACH,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,YAAS;AAFD,SAAAA;AAAA,GAAA;AAKL,IAAM,cAAc;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,UAAU;AAAA,EAClB,QAAQ,UAAU;AAAA,EAClB,MAAM,UAAU;AAAA,EAChB;AAAA,EACA;AACJ;AAEO,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,2BAA2B;AACjC,IAAM,4BAA4B;AAClC,IAAM,yCAAoC,CAAC,SAC9C,2CAAsC;AAEnC,IAAM,oCAAoC;AAQ1C,IAAM,0BAA0B,WAAC,uCAAiC,IAAE;AAIpE,IAAM,2BAA2B,WAAC,qBAAkB,GAAC;AAIrD,IAAM,gBAAgB,WAAC,gCAA0B,GAAC;AAElD,IAAM,iBAAiB,OAAO,QAAQ,IAAI,cAAc,KAAK;AAC7D,IAAM,gBAAgB,OAAO,QAAQ,IAAI,aAAa,KAAK,GAAG,KAAK,EAAE,SAAS;AAC9E,IAAM,2BAA2B,OAAO,QAAQ,IAAI,wBAAwB,KAAK;AAEjF,IAAM,iBAAiB;;;ACzH9B,IAAAC,eAA4B;AAC5B,gBAA2B;AAC3B,qBAAmB;AACnB,mBAAkB;AAClB,iBAAgB;AAIhB,SAAS,wBAAwB,OAAyB;AACtD,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,QAAQ,KAAK;AAAA,EACxB;AAEA,SAAO;AACX;AAEA,SAAS,uBAAuB,OAAyB;AACrD,SAAO,QAAQ,KAAK;AACxB;AAEA,IAAM,aAAsD;AAAA,EACxD,iBAAiB;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,EAChB;AAAA,EACA,eAAe;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,EAChB;AAAA,EACA,cAAc;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc,QAAQ,IAAI;AAAA,EAC9B;AAAA,EACA,kBAAkB;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc,QAAQ,IAAI;AAAA,EAC9B;AAAA,EACA,eAAe;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc;AAAA,EAClB;AACJ;AAYA,SAAS,kBAAkB,iBAAkC,iBAAyB;AAClF,QAAM,YAAwB,OAAO,KAAK,eAAe,EAAE;AAAA,IACvD,CAAC,KAAK,wBAAwB;AAC1B,YAAM,mBAAmB,gBAAgB,mBAAmB;AAC5D,UAAI,KAAK,GAAG,gBAAgB;AAC5B,aAAO;AAAA,IACX;AAAA,IACA,CAAC;AAAA,EACL;AAEA,QAAM,aAAa,CAAC,MAAc,OAAe;AAAA,UAAwB;AAAA,QAAe;AACxF,QAAM,gBAAgB,CAAC,SAAiB,UAAkB,MAAc,OACpE,GAAG,aAAa,WAAW,WAAW,MAAM,EAAE;AAElD,YAAU,QAAQ,CAAC,aAAa;AAC5B,UAAM,EAAC,MAAM,GAAE,IAAI;AAEnB,QAAI,CAAC,QAAQ,CAAC,IAAI;AACd,YAAM,IAAI;AAAA,QACN,cAAc,wCAAwC,iBAAiB,MAAM,EAAE;AAAA,MACnF;AAAA,IACJ;AAEA,QAAI,SAAS,IAAI;AACb,YAAM,IAAI;AAAA,QACN,cAAc,gCAAgC,iBAAiB,MAAM,EAAE;AAAA,MAC3E;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,cAAc,MAAkC;AAxFhE;AAyFI,MAAI;AAEA,UAAM,eAAe,KAAK,SACpB,OAAO,KAAK,MAAM,QAClB,mBAAK,OAAO,KAAK,KAAK,GAAG,mBAAmB;AAClD,UAAM,cAAU,4BAAa,sBAAQ,YAAY,GAAG,MAAM;AAC1D,WAAO,OAAO,UAAM,qBAAK,OAAO,KAAK,CAAC,CAAC;AAAA,EAC3C,SAAS,OAAP;AACE,QAAI,MAAM,SAAS,iBAAiB;AAChC,iBAAAC,QAAI,MAAM,kBAAkB,wBAAwB,MAAM,SAAS;AAAA,IACvE;AAAA,EACJ;AAEA,MAAI,aAAsB,CAAC;AAC3B,MAAI;AACA,UAAM,mBAAe,mBAAK,OAAO,KAAK,KAAK,GAAG,oBAAoB;AAClE,UAAM,cAAU,4BAAa,sBAAQ,YAAY,GAAG,MAAM;AAE1D,qBAAa,qBAAK,OAAO,KAAK,CAAC;AAAA,EACnC,SAAS,OAAP;AACE,QAAI,MAAM,SAAS,iBAAiB;AAChC,iBAAAA,QAAI,MAAM,kBAAkB,yBAAyB,MAAM,SAAS;AAAA,IACxE;AAAA,EACJ,UAAE;AACE,UAAM,yBAAqB,aAAAC,SAAM,YAAY;AAAA,MACzC,cAAc;AAAA,QACV,OAAO,KAAK,YAAY,aAAa;AAAA,MACzC;AAAA,IACJ,CAAC;AAED,WAAO,OAAO,MAAM,EAAC,YAAY,mBAAkB,CAAC;AAAA,EACxD;AAEA,MAAI;AACA,UAAM,sBAAkB,mBAAK,OAAO,KAAK,KAAK,GAAG,kBAAkB;AACnE,UAAM,uBAAmB,4BAAa,sBAAQ,eAAe,GAAG,MAAM;AACtE,UAAM,gBAAY,qBAAK,gBAAgB;AAEvC,sBAAkB,WAA8B,eAAe;AAAA,EACnE,SAAS,OAAP;AACE,QAAI,MAAM,SAAS,iBAAiB;AAChC,iBAAAD,QAAI,MAAM,kBAAkB,uBAAuB,MAAM,SAAS;AAAA,IACtE;AAEA,QAAI,MAAM,SAAS,UAAU;AACzB,YAAM;AAAA,IACV;AAAA,EACJ;AAEA,MAAI,KAAK,SAAS;AACd,eAAW,CAAC,OAAO,SAAS,KAAK,OAAO,QAAQ,UAAU,GAAG;AACzD,YAAM,SAAQ,UAAK,KAAK,MAAV,YAAe,UAAU;AAEvC,UAAI,CAAC,WAAW;AACZ;AAAA,MACJ;AAEA,YAAM,cAAa,eAAU,eAAV,YAAwB;AAE3C,UAAI,CAAC,WAAW,KAAK,GAAG;AACpB,cAAM,IAAI,MAAM,UAAU,YAAY;AAAA,MAC1C;AAEA,WAAK,KAAK,IAAI;AAAA,IAClB;AAAA,EACJ;AAEA,SAAO;AACX;;;AClJA,IAAAE,gBAA4B;;;ACX5B,IAAAC,gBAA+E;AAC/E,IAAAC,aAAsD;AACtD,IAAAC,kBAAyB;AACzB,IAAAC,kBAAkB;AAClB,uBAAqB;AACrB,IAAAC,iBAAmB;AACnB,IAAAC,cAAgB;AAChB,IAAAC,gBAAmB;;;ACPnB,IAAAC,kBAAyB;;;ACAzB,IAAAC,cAAgB;AAChB,mBAA6C;AAG7C,SAAS,SAAS,KAAa,QAAQ,OAAO;AAC1C,QAAM,EAAC,MAAK,IAAI,aAAY,UAAU;AAEtC,MAAI,SAAS,CAAC,OAAO;AACjB;AAAA,EACJ;AAEA,UAAQ,IAAI,GAAG;AACnB;AAEO,IAAM,SAAS;AAAA,EAClB,MAAM,SAAU,YAAoB,cAAuB;AACvD,aAAS,OAAG,mBAAK,MAAM,KAAK,gBAAgB,YAAY;AAAA,EAC5D;AAAA,EACA,MAAM,SAAU,YAAoB;AAChC,aAAS,OAAG,mBAAK,MAAM,qBAAqB,YAAY;AAAA,EAC5D;AAAA,EACA,MAAM,SAAU,YAAoB;AAChC,aAAS,OAAG,oBAAM,MAAM,kBAAkB,YAAY;AAAA,EAC1D;AAAA,EACA,QAAQ,SAAU,YAAoB;AAClC,aAAS,OAAG,oBAAM,QAAQ,oBAAoB,YAAY;AAAA,EAC9D;AAAA,EACA,MAAM,SAAU,YAAoB,cAAsB;AACtD,UAAM,UAAU,OAAG,qBAAO,SAAS,WAAW,qBAAqB;AAEnE,aAAS,OAAO;AAEhB,gBAAAC,QAAI,KAAK,SAAS,cAAc,cAAc;AAAA,EAClD;AAAA,EACA,OAAO,SAAU,YAAoB,cAAsB;AACvD,UAAM,UAAU,OAAG,kBAAI,OAAO,WAAW,qBAAqB;AAE9D,aAAS,SAAS,IAAI;AAEtB,gBAAAA,QAAI,MAAM,SAAS,cAAc,cAAc;AAAA,EACnD;AACJ;;;ACzCA,IAAAC,eAAmB;AACnB,qBAAuB;;;ACAvB,8BAAoB;AACpB,IAAAC,eAAqC;AACrC,qBAAkC;AAClC,iBAAgB;AAChB,0BAAmB;;;ACLZ,SAAS,eAAe,MAAc;AACzC,SAAO,KAAK,WAAW,MAAM,KAAK,KAAK,WAAW,IAAI;AAC1D;;;ADoBA,IAAM,mBAAmB;AAEzB,SAAS,MAAM,MAAc;AAEzB,SAAO,KAAK,QAAQ,IAAI,WAAO,oBAAAC,SAAO,gBAAG,GAAG,GAAG,GAAG,GAAG;AACzD;AAEA,SAAS,WAAW,SAAyC;AACzD,QAAM,EAAC,YAAY,WAAW,YAAW,IAAI;AAE7C,QAAM,cAAU,+BAAM,UAAU,gBAAgB,oBAAoB,EAAE;AAAA,IAClE,GAAG;AAAA,EACP;AAEA,MAAI,CAAC,SAAS;AACV,WAAO;AAAA,EACX;AAEA,MAAI,aAAa;AACb,eAAW,CAACC,OAAM,KAAK,KAAK,aAAa;AACrC,cAAQ,aAAaA,OAAM,KAAK;AAAA,IACpC;AAAA,EACJ;AAEA,UAAQ,YAAY;AAEpB,SAAO;AACX;AAEO,SAAS,sBAAsB,MAAmB;AACrD,QAAM,kBAAkB;AAExB,OAAK,iBAAiB,eAAe,EAAE,QAAQ,CAAC,SAAS;AACrD,UAAM,EAAC,WAAU,IAAI;AACrB,UAAM,kBAAkB,OAAO,WAAW,OAAO,CAAC,CAAC,IAAI;AAEvD,SAAK,aAAa,IAAI;AAAA,EAC1B,CAAC;AACL;AAEO,SAAS,sBAAsB,MAAmB;AACrD,QAAM,kBAAkB,KAAK,cAAc,gBAAgB;AAC3D,MAAI,CAAC,mBAAmB,gBAAgB,eAAe,MAAM;AACzD;AAAA,EACJ;AAEA,kBAAgB,aAAa;AACjC;AAEO,SAAS,aAAa,QAAqB,SAAsC;AACpF,QAAM,EAAC,MAAM,MAAM,OAAM,IAAI;AAE7B,SAAO,iBAAiB,2CAA2C,EAAE,QAAQ,CAAC,SAAS;AACnF,UAAM,OAAO,KAAK,aAAa,MAAM,KAAK;AAE1C,UAAM,mBAAe,sBAAQ,MAAM,IAAI;AACvC,UAAM,mBAAe,oCAAoB,cAAc,IAAI;AAC3D,UAAM,iBAAiB,CAAC,aAAa,WAAW,MAAM;AAEtD,QAAI,eAAe;AAEnB,QAAI,gBAAgB;AAChB,yBAAe,uBAAS,QAAQ,YAAY;AAAA,IAChD,OAAO;AACH,YAAM,EAAC,UAAU,KAAI,IAAI,WAAAC,QAAI,MAAM,IAAI;AACvC,UAAI,UAAU;AACV,uBAAe,sBAAsB;AAAA,UACjC;AAAA,UACA,aAAa;AAAA,UACb;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,WAAW,MAAM;AACb,uBAAe,sBAAsB,EAAC,MAAM,aAAa,cAAc,KAAI,CAAC;AAAA,MAChF;AAAA,IACJ;AAEA,SAAK,aAAa,QAAQ,MAAM,YAAY,CAAC;AAAA,EACjD,CAAC;AACL;AAEO,SAAS,cAAc,QAAqB,SAAsC;AACrF,QAAM,EAAC,MAAM,MAAM,OAAM,IAAI;AAE7B,SAAO,iBAAiB,KAAK,EAAE,QAAQ,CAAC,SAAS;AAC7C,UAAM,OAAO,KAAK,aAAa,KAAK,KAAK;AAEzC,QAAI,eAAe,IAAI,GAAG;AACtB;AAAA,IACJ;AAEA,UAAM,mBAAe,sBAAQ,MAAM,IAAI;AACvC,UAAM,mBAAe,oCAAoB,cAAc,IAAI;AAC3D,UAAM,mBAAe,uBAAS,QAAQ,YAAY;AAElD,SAAK,aAAa,OAAO,MAAM,YAAY,CAAC;AAAA,EAChD,CAAC;AACL;AAEA,SAAS,kBAAkBD,OAAc,OAAe,QAAgB;AACpE,UAAQA,OAAM;AAAA,IACV,KAAK;AACD,aAAO,IAAI,UAAU,MAAM,MAAM,CAAC;AAAA,IACtC,KAAK;AACD,aAAO,GAAG,UAAU;AAAA,IACxB;AACI,aAAO;AAAA,EACf;AACJ;AAEA,SAAS,mBAAmB,MAAmB,QAAgB;AAC3D,aAAW,CAACA,OAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,UAAU,GAAG;AACzD,UAAM,gBAAgB,kBAAkBA,OAAM,OAAO,MAAM;AAE3D,SAAK,aAAaA,OAAM,MAAM,aAAa,CAAC;AAAA,EAChD;AACJ;AAEO,SAAS,uBAAuB,QAAqB,SAAsC;AAC9F,QAAM,EAAC,MAAM,KAAI,IAAI;AAErB,QAAM,mBAAe,sBAAQ,MAAM,IAAI;AACvC,QAAM,eAAe,sBAAsB,EAAC,MAAM,aAAa,aAAY,CAAC;AAC5E,QAAM,sBAAsB,+BAA+B,EAAC,MAAM,aAAa,aAAY,CAAC;AAC5F,QAAM,SAAS,aAAa,MAAM,CAAC;AACnC,QAAM,iBAAiB;AAGvB,SAAO,iBAAiB,cAAc,EAAE,QAAQ,CAAC,SAAS;AACtD,uBAAmB,MAAM,MAAM;AAAA,EACnC,CAAC;AAED,QAAM,aAAa,OAAO,cAAc,IAAI;AAC5C,MAAI,YAAY;AACZ,UAAM,aAAS;AAAA,MACX,kDAAkD,qBAAqB;AAAA,IAC3E;AACA,QAAI,CAAC,QAAQ;AACT;AAAA,IACJ;AAEA,eAAW,aAAa,yBAAyB,GAAG,0BAA0B;AAC9E,eAAW,YAAY,MAAM;AAAA,EACjC;AAEA,SAAO,iBAAiB,gBAAgB,EAAE,QAAQ,CAAC,SAAS;AACxD,uBAAmB,MAAM,MAAM;AAAA,EACnC,CAAC;AACL;AAEO,SAAS,aAAa,QAAqB,SAAsC;AACpF,QAAM,EAAC,MAAK,IAAI;AAEhB,MAAI,CAAC,OAAO;AACR;AAAA,EACJ;AAEA,QAAM,YAAY,WAAW,EAAC,WAAW,OAAO,YAAY,KAAI,CAAC;AAEjE,MAAI,CAAC,WAAW;AACZ;AAAA,EACJ;AAEA,SAAO,mBAAmB,cAAc,UAAU,SAAS,CAAC;AAChE;AAEO,SAAS,sBAAsB,MAKnC;AACC,QAAM,EAAC,MAAM,aAAa,UAAU,KAAI,IAAI;AAC5C,MAAI,eAAe;AAEnB,MAAI,UAAU;AACV,uBAAe,oCAAoB,aAAa,QAAQ;AAAA,EAC5D;AAEA,iBAAe,aACV,QAAQ,MAAM,EAAE,EAChB,QAAQ,uBAAuB,EAAE,EACjC,QAAQ,IAAI,WAAO,oBAAAD,SAAO,gBAAG,GAAG,IAAI,GAAG,GAAG;AAE/C,MAAI,MAAM;AACN,mBAAe,eAAe,MAAM,KAAK,MAAM,CAAC;AAAA,EACpD;AAEA,SAAO,IAAI;AACf;AAEO,SAAS,+BAA+B,MAA2C;AACtF,QAAM,EAAC,MAAM,YAAW,IAAI;AAE5B,SAAO,YAAY,QAAQ,MAAM,EAAE,EAAE,QAAQ,uBAAuB,EAAE;AAC1E;AAEO,SAAS,gCACZ,SACA,SACF;AACE,QAAM,WAAO,+BAAM,OAAO;AAE1B,eAAa,MAAM,OAAO;AAC1B,wBAAsB,IAAI;AAC1B,yBAAuB,MAAM,OAAO;AACpC,wBAAsB,IAAI;AAC1B,eAAa,MAAM,OAAO;AAC1B,gBAAc,MAAM,OAAO;AAE3B,SAAO,KAAK,SAAS;AACzB;;;ADjOA,iBAAiD;AACjD,sBAAqB;AAErB,0BAAqB;AAErB,IAAM,MAAM,CAAC,eAAuB,CAAC,eAAmB,mBAAK,YAAY,MAAM;AACxE,IAAM,gBAAW,oDAAiC,SAAS;AAW3D,SAAS,qBACZ,OACA,cACM;AACN,QAA0D,WAAM,KAAK,QAAiB,CAAC,GAAhF,SAAO,QAAQ,SA7B1B,IA6B8D,IAAvB,+BAAuB,IAAvB,CAA5B,SAAO,UAAQ;AACtB,QAAM,EAAC,OAAO,SAAQ,IAAI,MAAM,KAAK;AACrC,QAAM,EAAC,OAAO,UAAS,IAAI,MAAM;AAEjC,QAAM,QAAQ,SAAS;AAAA,IACnB,WAAW,MAAM,KAAK,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,EACJ,CAAC;AAED,QAAM,YAAY,aAAa,EAAC,OAAO,OAAM,CAAC;AAE9C,QAAM,EAAC,cAAa,IAAI,aAAY,UAAU;AAE9C,QAAM,OAAO,oBAAgB,mBAAO,KAAK,IAAI;AAE7C,SAAO;AAAA;AAAA,sBAEW,MAAM;AAAA;AAAA;AAAA,kBAGV,YAAY,UAAU,kBAAkB;AAAA;AAAA,yBAEjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAMP,gBAAAG,QAAS,IACN,IAAI,IAAI,YAAY,CAAC,EACrB,IAAI,CAAC,QAAgB,gDAAgD,SAAS,EAC9E,KAAK,IAAI;AAAA,kBACZ,gBAAc,eAAe;AAAA,kBAC7B;AAAA;AAAA;AAAA,iCAGe;AAAA;AAAA,6CAEY;AAAA,uCACN,KAAK,UAAU,KAAK;AAAA;AAAA,kBAEzC,gBAAAA,QAAS,GACN,IAAI,IAAI,YAAY,CAAC,EACrB;AAAA,IACG,CAAC,QACG,8CAA8C;AAAA,EACtD,EACC,KAAK,IAAI;AAAA;AAAA;AAAA;AAI9B;AAQA,SAAS,SAAS,EAAC,UAAU,WAAW,UAAS,GAAoB;AACjE,QAAM,kBAAkB,aAAa;AAErC,MAAI,CAAC,mBAAmB,UAAU;AAC9B,WAAO;AAAA,EACX;AAEA,MAAI,mBAAmB,CAAC,UAAU;AAC9B,WAAO;AAAA,EACX;AAEA,SAAO,mBAAmB,WAAW,GAAG,qBAAqB,aAAa;AAC9E;AAEA,SAAS,YAAY,UAAoC,UAAuC;AAC5F,MAAI,SAAS;AAEb,QAAM,wBAAwB,CAAC,UAAwD;AACnF,UAAM,OAAO,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK,CAACC,OAAM,OAAO,MAAM;AAChE,aAAO,MAAM,OAAG,4BAAOA,KAAI,UAAM,4BAAO,QAAQ,SAAS,CAAC;AAAA,IAC9D,GAAG,EAAE;AAEL,QAAI,KAAK,QAAQ;AACb,gBAAU,SAAS,YAAY;AAAA,IACnC;AAAA,EACJ;AAEA,MAAI,UAAU;AACV,aAAS,QAAQ,qBAAqB;AAAA,EAC1C;AAEA,MAAI,UAAU;AACV,WAAO,QAAQ,QAAQ,EAClB,IAAI,CAAC,CAACA,OAAM,KAAK,MAAM;AACpB,aAAO,EAAC,MAAAA,OAAM,SAAS,MAAK;AAAA,IAChC,CAAC,EACA,QAAQ,qBAAqB;AAAA,EACtC;AAEA,SAAO;AACX;AAEA,SAAS,aAAa,EAAC,OAAO,OAAM,GAAc;AAC9C,QAAM,gBAA0B,CAAC;AAEjC,MAAI,OAAO;AACP,UAAM;AAAA,MAAQ,CAAC,IAAI,OACf,cAAc;AAAA,QACV,gDAAgD,OAC5C,OAAO,KAAK,OAAO;AAAA,MAE3B;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,QAAQ;AACR,WAAO,QAAQ,CAAC,OAAO,cAAc,KAAK,gBAAgB,eAAe,CAAC;AAAA,EAC9E;AAEA,SAAO,cAAc,KAAK,IAAI;AAClC;AAEO,SAAS,sBACZC,oBACA,MACA,QACM;AACN,QAAM,YAAY;AAClB,SAAOA,mBACF,OAAO,CAAC,EAAC,QAAO,MAAM,OAAO,EAC7B;AAAA,IAAI,CAAC,EAAC,SAAS,MAAM,MAAK,MACvB,gCAAgC,SAAS,EAAC,MAAM,MAAM,QAAQ,MAAK,CAAC;AAAA,EACxE,EACC,KAAK,SAAS;AACvB;AAEO,SAAS,4BAA4B,KAAqB;AAC7D,SAAO,IAAI,QAAQ,MAAM,GAAG;AAChC;;;AGvKA,IAAAC,eAAkB;AAGX,SAAS,eAAe,MAAsB;AACjD,QAAM,cAAc,KAAK,WAAW,gBAAG,IAAI,KAAK;AAEhD,SAAO,GAAG,cAAc;AAC5B;AAEO,SAAS,wBAAwB,MAAsB;AAC1D,MAAI,QAAQ,oCAAgC;AACxC,WAAO,KAAK,QAAQ,OAAO,GAAG;AAAA,EAClC;AAEA,SAAO;AACX;;;ACfA,IAAAC,eAAiE;;;ACAjE,wBAAoB;AAEpB,oBAAmB;AAgBZ,SAAS,YACZ,OACA,UACA,MACA,SACG;AACH,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,WAAO,CAAC;AAAA,EACZ;AAEA,QAAM,UAAU,CAAC,SAAc,SAAY;AACvC,QAAI,kBAAkB,MAAM,MAAM,OAAO,GAAG;AACxC,YAAM,OAAO,KAAK,QAAQ;AAE1B,UAAI,MAAM;AACN,cAAM,mBAAmB,YAAY,MAAM,UAAU,MAAM,OAAO;AAElE,YAAI,iBAAiB,QAAQ;AACzB,kBAAQ,KAAK,iCACN,OADM;AAAA,YAET,CAAC,QAAQ,GAAG;AAAA,UAChB,EAAC;AAAA,QACL;AAAA,MACJ,OAAO;AACH,gBAAQ,KAAK,IAAI;AAAA,MACrB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAEA,SAAO,MAAM,OAAO,SAAS,CAAC,CAAC;AACnC;AAEO,SAAS,gBACZ,OACA,MACA,SACF;AACE,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACvB,WAAO;AAAA,EACX;AAEA,SAAO,MAAM,OAAO,CAAC,QAAkB,SAAS;AAC5C,QAAI,CAAC,SAAS,IAAI,GAAG;AACjB,aAAO,KAAK,IAAI;AAChB,aAAO;AAAA,IACX;AAEA,UAAM,UAAU,kBAAkB,MAAM,MAAM,OAAO;AAErD,QAAI,SAAS;AACT,UAAI,MAAM,QAAQ,KAAK,IAAI,GAAG;AAC1B,eAAO,KAAK,GAAG,KAAK,IAAI;AAAA,MAC5B,OAAO;AACH,eAAO,KAAK,KAAK,IAAI;AAAA,MACzB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,GAAG,CAAC,CAAC;AACT;AAEO,SAAS,qBACZ,OACA,MACA,SACF;AACE,QAAM,gBAAgB,gBAAgB,OAAO,MAAM,OAAO;AAE1D,MAAI,CAAC,MAAM,QAAQ,aAAa,GAAG;AAC/B,WAAO,iBAAiB;AAAA,EAC5B;AAEA,SAAO,cAAc,CAAC,KAAK;AAC/B;AAEA,SAAS,kBACL,MACA,MACA,SACF;AACE,QAAM,EAAC,mBAAmB,qBAAoB,IAAI,WAAW,CAAC;AAC9D,MAAI,UAAU;AAEd,MAAI,mBAAmB;AACnB,UAAM,EAAC,KAAI,IAAI;AACf,cACI,SAAS,QACT,SAAS,UACR,OAAO,SAAS,gBAAY,kBAAAC,SAAQ,MAAM,IAAI;AAEnD,WAAO,KAAK;AAAA,EAChB;AAEA,MAAI,WAAW,sBAAsB;AACjC,cAAU,CAAC,KAAK;AAEhB,WAAO,KAAK;AAAA,EAChB;AAEA,SAAO;AACX;AAEO,SAAS,aACZ,QACA,MACA,MACF;AACE,MAAI,OAAO,WAAW,UAAU;AAC5B,WAAO,YAAY,QAAQ,MAAM,IAAI;AAAA,EACzC;AAEA,MAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AACxB,WAAO;AAAA,EACX;AAEA,SAAO,OAAO,IAAI,CAAC,SAAS;AACxB,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO,YAAY,MAAM,MAAM,IAAI;AAAA,IACvC;AACA,WAAO;AAAA,EACX,CAAC;AACL;AAEO,SAAS,YAAY,OAAe,MAA+B,MAAc;AACpF,QAAM,EAAC,cAAc,kBAAiB,IAAI,aAAY,UAAU;AAEhE,MAAI,CAAC,gBAAgB,CAAC,mBAAmB;AACrC,WAAO;AAAA,EACX;AAEA,aAAO,cAAAC,SAAO,OAAO,MAAM,MAAM;AAAA,IAC7B,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,EACnB,CAAC;AACL;AAEO,SAAS,SAAS,GAAyB;AAC9C,SAAO,OAAO,MAAM,YAAY,MAAM;AAC1C;;;ADzJO,SAAS,aAAa,KAAoB,qBAA4C;AACzF,MAAI,CAAC,KAAK;AACN,WAAO;AAAA,EACX;AAEA,QAAM,WAAmB,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAEvD,MAAI,SAAS,OAAO;AAChB,aAAS,QAAQ;AAAA,MACb,SAAS;AAAA,MACT;AAAA,MACA,CAAC;AAAA,MACD;AAAA,QACI,sBAAsB;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAEA,QAAM,cAAsB,SAAS,QAAQ;AAC7C,QAAM,sBAAsB,CAAC,QAAQ;AAErC,SAAO,oBAAoB,QAAQ;AAC/B,UAAM,iBAAiB,oBAAoB,MAAM;AAEjD,QAAI,CAAC,gBAAgB;AACjB;AAAA,IACJ;AAEA,UAAM,EAAC,OAAO,KAAI,IAAI;AAEtB,QAAI,OAAO;AACP,0BAAoB,KAAK,GAAG,eAAe,KAAK;AAAA,IACpD;AAEA,QAAI,QAAQ,CAAC,eAAe,IAAI,GAAG;AAE/B,YAAM,2BAA+B,uBAAS,qBAAqB,WAAW;AAE9E,YAAM,oBAAwB,sBAAQ,IAAI;AAC1C,YAAM,eAAmB,uBAAS,MAAM,aAAa;AACrD,YAAM,0BAA8B,qBAAO;AAAA,QACvC,MAAM;AAAA,QACN,KAAK;AAAA,MACT,CAAC;AAED,qBAAe,WAAO,mBAAK,0BAAsB,sBAAQ,IAAI,GAAG,mBAAmB;AAAA,IACvF;AAAA,EACJ;AAEA,SAAO;AACX;AAEO,SAAS,0BACZ,KACA,SACF;AACE,QAAM,EAAC,MAAM,YAAW,IAAI;AAE5B,MAAI,CAAC,KAAK;AACN,WAAO;AAAA,EACX;AAEA,QAAM,WAAmB,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAEvD,MAAI,SAAS,OAAO;AAChB,aAAS,QAAQ;AAAA,MACb,SAAS;AAAA,MACT;AAAA,MACA,CAAC;AAAA,MACD;AAAA,QACI,sBAAsB;AAAA,MAC1B;AAAA,IACJ;AAAA,EACJ;AAEA,WAAS,aAAa,OAAiB;AACnC,UAAM,QAAQ,CAAC,SAAS;AACpB,UAAI,KAAK,OAAO;AACZ,qBAAa,KAAK,KAAK;AAAA,MAC3B;AAEA,UAAI,KAAK,QAAQ,CAAC,eAAe,KAAK,IAAI,GAAG;AACzC,aAAK,OAAO,sBAAsB,EAAC,MAAM,aAAa,UAAU,KAAK,KAAI,CAAC;AAAA,MAC9E;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,eAAa,SAAS,KAAK;AAE3B,WAAS,aAAa;AAEtB,SAAO;AACX;;;AEnGA,IAAAC,eAAyC;AAKlC,SAAS,eAAe,UAA6B;AACxD,QAAM,EAAC,MAAM,QAAO,IAAI,aAAY,UAAU;AAE9C,QAAM,SAAS,kCACR,eAAc,QAAI,sBAAQ,QAAQ,CAAC,IACnC;AAGP,SAAO;AACX;AAEO,SAAS,uBAAuB,UAA0C;AAC7E,QAAM,EAAC,MAAK,IAAI,aAAY,UAAU;AACtC,QAAM,WAAO,sBAAQ,KAAK;AAC1B,QAAM,uBAAmB,uBAAS,MAAM,QAAQ;AAEhD,SAAO,eAAe,gBAAgB;AAC1C;;;ACtBA,kBAAuC;AAIvC,IAAM,OAAO,CAAO,SAAiB,YAAkC;AACnE,aAAI,QAAQ,CAAC,KAAK,QAAQ;AACtB,UAAM,YAAe,YAAAC,SAAQ,SAAS,SAAS,CAAC,QAAS,MAAM,IAAI,GAAG,IAAI,IAAI,EAAC,MAAK,CAAC,CAAE;AAAA,EAC3F,CAAC;AAAA;;;ACPL,IAAAC,eAA+B;AAC/B,qBAAkB;AAGX,SAAS,UACZ,iBACA,kBACA,OACI;AACJ,QAAM,OAAO,oBAAI,IAAY;AAE7B,QAAM,QAAQ,CAAC,gBAAgB;AAC3B,UAAM,gBAAY,sBAAQ,sBAAkB,sBAAQ,WAAW,CAAC;AAChE,UAAM,WAAO,sBAAQ,iBAAiB,WAAW;AACjD,UAAM,SAAK,sBAAQ,kBAAkB,WAAW;AAEhD,QAAI,CAAC,KAAK,IAAI,SAAS,GAAG;AACtB,WAAK,IAAI,SAAS;AAClB,qBAAAC,QAAM,MAAM,MAAM,SAAS;AAAA,IAC/B;AAEA,mBAAAA,QAAM,GAAG,MAAM,EAAE;AAEjB,WAAO,KAAK,WAAW;AAAA,EAC3B,CAAC;AACL;;;ACtBA,SAAe,wCACX,aACA,cACe;AAAA;AACf,QAAI,CAAC,cAAc;AACf,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,MAAM,iBAAiB,cAAc,WAAW;AAE7D,QAAI,MAAM;AACN,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAAA;AAEA,SAAe,qCACX,UACA,cACe;AAAA;AACf,QAAI,CAAC,cAAc;AACf,aAAO;AAAA,IACX;AAEA,UAAM,OAAO,aAAa,wBAAwB,QAAQ;AAE1D,QAAI,MAAM;AACN,YAAM,SAAS,4BAA4B,KAAK,UAAU,IAAI,CAAC;AAC/D,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAAA;AAEA,SAAe,iBACX,cACA,QACsB;AAAA;AACtB,QAAI,OAAO,WAAW,UAAU;AAE5B,aAAO,4BAA4B,KAAK,UAAU,MAAM,CAAC;AAAA,IAC7D;AAEA,QAAI;AACA,WAAK,MAAM,MAAM;AACjB,aAAO,4BAA4B,MAAM;AAAA,IAC7C,SAAQ,GAAN;AACE,YAAM,OAAO,MAAM,aAAa,eAAe,MAAM;AAErD,UAAI,MAAM;AACN,eAAO,4BAA4B,KAAK,UAAU,IAAI,CAAC;AAAA,MAC3D;AAEA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;;;AC3DA,sBAAuB;AACvB,IAAAC,eAA4B;AAO5B,SAAe,4BACX,UACA,cACe;AAAA;AACf,UAAM,eAAe,MAAM,0BAA0B,UAAU,YAAY;AAE3E,WAAO,iBAAiB;AAAA,EAC5B;AAAA;AAEA,SAAe,0BACX,UACA,cACe;AAAA;AACf,UAAM,EAAC,kBAAkB,sBAAqB,IAAI;AAElD,UAAM,mBAAmB,iBAAiB,UAAU,qBAAqB;AACzE,UAAM,mBACF,MAAM,aAAa,sBAAsB,gBAAgB;AAC7D,QAAI,qBAAmC,CAAC;AAExC,QAAI,CAAC,iBAAiB,aAAa;AAC/B,2BAAqB,MAAM,8BAA8B,UAAU,YAAY;AAC/E,mBAAa,6BAA6B,kBAAkB,kBAAkB;AAAA,IAClF;AAEA,UAAM,gDAA8D,kCAC7D,iBAAiB,eACjB;AAGP,UAAM,oBAAmC,OAAO;AAAA,MAC5C;AAAA,IACJ,EAAE,IAAI,CAAC,CAAC,EAAE,WAAW,MAAM,WAAW;AAEtC,WAAO,4BAA4B,KAAK,UAAU,iBAAiB,CAAC;AAAA,EACxE;AAAA;AAEA,SAAe,8BACX,UACA,cACqB;AAAA;AACrB,UAAM,EAAC,aAAa,sBAAqB,IAAI;AAE7C,UAAM,kBAAkB,YAAY,MAAM,uBAAuB;AACjE,QAAI,CAAC,mBAAmB,gBAAgB,WAAW,GAAG;AAClD,aAAO,CAAC;AAAA,IACZ;AAEA,UAAM,uBAAuC,CAAC;AAC9C,UAAM,2BAAwC;AAAA,MAC1C;AAAA,MACA;AAAA,IACJ;AAEA,eAAW,2BAA2B,yBAAyB,OAAO,GAAG;AACrE,YAAM,mBAAmB,wBAAwB,UAAU,qBAAqB;AAChF,YAAM,sBAAsB,MAAM,aAAa,sBAAsB,gBAAgB;AAErF,UAAI,qBAAmC,CAAC;AAExC,UAAI,CAAC,oBAAoB,aAAa;AAClC,YAAI;AACJ,YAAI;AACA,+BAAqB,UAAM,0BAAS,yBAAyB,MAAM;AAAA,QACvE,SAAS,KAAP;AACE,cAAI,IAAI,SAAS,UAAU;AACvB;AAAA,UACJ;AACA,gBAAM;AAAA,QACV;AAEA,cAAM,cAAwB,iCACvB,WADuB;AAAA,UAE1B,aAAa;AAAA,UACb,kBAAkB;AAAA,QACtB;AAEA,6BAAqB,MAAM,8BAA8B,aAAa,YAAY;AAClF,qBAAa,6BAA6B,kBAAkB,kBAAkB;AAAA,MAClF;AAEA,2BAAqB,KAAK,oBAAoB,YAAY;AAC1D,2BAAqB,KAAK,kBAAkB;AAAA,IAChD;AAEA,WAAO,OAAO,OAAO,CAAC,GAAG,GAAG,oBAAoB;AAAA,EACpD;AAAA;AAEA,SAAS,4BACL,UACA,iBACW;AACX,QAAM,EAAC,iBAAgB,IAAI;AAC3B,QAAM,2BAAwC,oBAAI,IAAI;AAEtD,kBAAgB,QAAQ,CAAC,mBAA2B;AAChD,UAAM,0BAA0B,eAAe,MAAM,wBAAwB;AAE7E,QAAI,2BAA2B,wBAAwB,WAAW,GAAG;AACjE,YAAM,qCAAqC,wBAAwB,CAAC,EAAE,MAAM,GAAG;AAC/E,YAAM,sBAAkB;AAAA,YACpB,sBAAQ,gBAAgB;AAAA,QACxB,mCAAmC,CAAC;AAAA,MACxC;AAEA,+BAAyB,IAAI,eAAe;AAAA,IAChD;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AAEA,SAAe,gBACX,UACF;AAAA;AACE,UAAM,EAAC,aAAa,kBAAkB,sBAAqB,IAAI;AAE/D,UAAM,UAAU,oBAAI,IAAY;AAEhC,UAAM,kBAAkB,YAAY,MAAM,uBAAuB;AACjE,QAAI,CAAC,mBAAmB,gBAAgB,WAAW,GAAG;AAClD,aAAO,CAAC;AAAA,IACZ;AACA,UAAM,2BAAwC;AAAA,MAC1C,EAAC,iBAAgB;AAAA,MACjB;AAAA,IACJ;AACA,eAAW,2BAA2B,yBAAyB,OAAO,GAAG;AACrE,YAAM,mBAAmB,wBAAwB,UAAU,wBAAwB,CAAC;AACpF,UAAI,QAAQ,IAAI,gBAAgB;AAAG;AACnC,cAAQ,IAAI,gBAAgB;AAE5B,UAAI;AACJ,UAAI;AACA,6BAAqB,UAAM,0BAAS,yBAAyB,MAAM;AAAA,MACvE,SAAS,KAAP;AACE,YAAI,IAAI,SAAS,UAAU;AACvB;AAAA,QACJ;AACA,cAAM;AAAA,MACV;AAEA,YAAM,gBAAgB,MAAM,gBAAgB;AAAA,QACxC;AAAA,QACA,aAAa;AAAA,QACb,kBAAkB;AAAA,MACtB,CAAC;AACD,oBAAc,QAAQ,CAAC,SAAS,QAAQ,IAAI,IAAI,CAAC;AAAA,IACrD;AAEA,WAAO,MAAM,KAAK,QAAQ,OAAO,CAAC;AAAA,EACtC;AAAA;;;AZ9IA,IAAAC,gBAAyC;AAGzC,SAAe,8BACX,aACA,SACA,YACA,cACe;AAAA;AAzBnB;AA0BI,QAAI;AAEJ,aAAS,oCAAoC;AAAA,MACzC;AAAA,MACA,aAAY,wCAAS,aAAT,mBAAmB;AAAA,MAC/B,eAAe,mCAAS;AAAA,MACxB,eAAe,mCAAS;AAAA,MACxB,WAAW,mCAAS;AAAA,MACpB;AAAA,MACA;AAAA,IACJ,CAAC;AAED,aAAS,MAAM,qCAAqC,QAAQ,OAAO;AAEnE,WAAO;AAAA,EACX;AAAA;AAEA,SAAS,oCAAoC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,CAAC;AACpB,GAQW;AACP,QAAM,eAAyB,CAAC;AAEhC,OACK,CAAC,iBAAiB,CAAC,eACpB,CAAC,iBACD,CAAC,aACD,aAAa,WAAW,GAC1B;AACE,WAAO;AAAA,EACX;AAEA,QAAM,UAAU,cAAc,WAAW;AAEzC,MAAI,iBAAiB,cAAc,SAAS,UAAU,GAAG;AACrD,iBAAa,KAAK,4BAA4B,UAAU,CAAC;AAAA,EAC7D;AAEA,MAAI,WAAW;AACX,iBAAa,SAAK,sBAAK,SAAS,CAAC;AAAA,EACrC;AAEA,MAAI,iBAAiB,YAAY;AAC7B,UAAM,2BAA2B,eAAe;AAChD,iBAAa,KAAK,wBAAwB;AAAA,EAC9C;AAEA,MAAI,WAAW,QAAQ,SAAS,GAAG;AAC/B,UAAM,CAAC,EAAE,cAAc,EAAE,eAAe,IAAI;AAE5C,QAAI,CAAC,aAAa,QAAQ;AACtB,aAAO,GAAG,yBAAyB,cAAc,YAAY,IAAI;AAAA,IACrE;AAEA,UAAM,aAAS,sBAAK,YAAY;AAEhC,QAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG;AACjC,aAAO,WAAW,CAAC,OAAO,QAAQ;AAAA,IACtC;AAEA,WAAO,WAAW,OAAO,SAAS,OAAO,YAAY,EAAE,OAAO,OAAO;AAErE,UAAM,oBAAgB,sBAAK,MAAM;AAEjC,WAAO,GAAG,yBAAyB,cAAc,aAAa,IAAI;AAAA,EACtE;AAEA,MAAI,aAAa,QAAQ;AACrB,iBAAa,SAAK,sBAAK,EAAC,UAAU,aAAY,CAAC,CAAC;AAAA,EACpD;AAEA,SAAO,GAAG,yBAAyB,YAAY,IAAI;AACvD;AAEA,SAAe,qCACX,aACA,SACe;AAAA;AACf,QAAI,CAAC,WAAW,EAAC,mCAAS,wBAAuB;AAC7C,aAAO;AAAA,IACX;AAEA,QAAI,cAAkC;AACtC,UAAM,UAAU,cAAc,WAAW;AACzC,QAAI,WAAW,QAAQ,SAAS,GAAG;AAC/B,YAAM,CAAC,EAAE,qBAAqB,EAAE,sBAAsB,IAAI;AAC1D,qBAAe;AACf,wBAAkB;AAAA,IACtB;AAEA,UAAM,eAAyB,CAAC;AAEhC,UAAM,EAAC,sBAAqB,IAAI;AAEhC,QAAI,uBAAuB;AACvB,YAAM,uBAAuB,MAAM,8BAA8B,SAAS,WAAW;AACrF,UAAI,sBAAsB;AACtB,qBAAa,KAAK,oBAAoB;AAAA,MAC1C;AAEA,YAAM,gBAAgB,MAAM,8BAA8B,SAAS,WAAW;AAC9E,UAAI,eAAe;AACf,qBAAa,KAAK,aAAa;AAAA,MACnC;AAEA,UAAI,iBAAiB;AACrB,UAAI,cAAc;AACd,cAAM,cAAc,aAAa,MAAM,aAAa;AACpD,YAAI,aAAa;AACb,gBAAM,gBAAgB,YAAY,CAAC;AACnC,2BAAiB,MAAM;AAAA,YACnB;AAAA,YACA,QAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,CAAC,gBAAgB;AACjB,cAAM;AAAA,UACF,UAAU,EAAC,kBAAkB,sBAAqB;AAAA,QACtD,IAAI;AACJ,cAAM,mBAAmB,iBAAiB,UAAU,qBAAqB;AACzE,yBAAiB,MAAM;AAAA,UACnB;AAAA,UACA,QAAQ;AAAA,QACZ;AAAA,MACJ;AAEA,UAAI,gBAAgB;AAChB,qBAAa,KAAK,WAAW,gBAAgB;AAAA,MACjD;AAAA,IACJ;AAEA,QAAI,gBAAgB,iBAAiB;AACjC,UAAI,sBAAsB;AAC1B,YAAM,cAAc,aAAa,MAAM,aAAa;AAEpD,YAAM,8BAA8B,aAAa,KAAK,CAAC,SAAS,YAAY,KAAK,IAAI,CAAC;AACtF,UAAI,eAAe,6BAA6B;AAC5C,8BAAsB,oBAAoB,QAAQ,WAAW,YAAY,CAAC,KAAK,EAAE;AAAA,MACrF;AAEA,aAAO,GAAG,yBAAyB,cAAc,mBAAmB,IAAI;AAAA,IAC5E;AAEA,WAAO,GAAG,yBAAyB,YAAY,IAAI;AAAA,EACvD;AAAA;AAEA,SAAS,cAAc,aAAqB;AACxC,MAAI,CAAC,YAAY,WAAW,KAAK,GAAG;AAChC,WAAO;AAAA,EACX;AAQA,QAAM,iBAAiB;AAIvB,QAAM,oBAAoB;AAE1B,QAAM,yBAAyB,IAAI,OAAO,GAAG,iBAAiB,qBAAqB,IAAI;AAEvF,SAAO,uBAAuB,KAAK,WAAW;AAClD;AAEA,SAAe,8BACX,SACA,aAC2B;AAAA;AAC3B,UAAM,EAAC,uBAAuB,cAAc,SAAQ,IAAI;AAExD,QAAI,yBAAyB,cAAc;AACvC,YAAM,kBAAkB,iCACjB,WADiB;AAAA,QAEpB;AAAA,MACJ;AAEA,aAAO,4BAA4B,iBAAiB,YAAY;AAAA,IACpE;AAEA,WAAO;AAAA,EACX;AAAA;AAEA,SAAe,8BAA8B,SAA0B,aAAqB;AAAA;AACxF,UAAM,EAAC,uBAAuB,cAAc,SAAQ,IAAI;AAExD,UAAM,EAAC,kBAAkB,sBAAqB,IAAI;AAElD,UAAM,mBAAmB,iBAAiB,UAAU,wBAAwB,CAAC;AAE7E,QAAI,CAAC,yBAAyB,CAAC,cAAc;AACzC,aAAO;AAAA,IACX;AAEA,UAAM,gBAAgB,MAAM,gBAAgB,iCAAI,WAAJ,EAAc,YAAW,EAAC;AACtE,kBAAc,KAAK,gBAAgB;AAEnC,UAAM,iBAAiB,aAAW,eAAe;AAEjD,UAAM,YAAY,cACb,IAAI,CAAC,SAAS;AACX,YAAM,aAAa,eAAe,IAAI,IAAI,KAAK;AAC/C,aAAO,aAAa,sBAAsB,UAAU;AAAA,IACxD,CAAC,EACA,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ;AAExC,QAAI,UAAU,QAAQ;AAClB,YAAM,QAAQ,KAAK,IAAI,GAAG,SAAS;AACnC,aAAO,cAAc,IAAI,KAAK,QAAQ,GAAI,EAAE,YAAY;AAAA,IAC5D;AAEA,WAAO;AAAA,EACX;AAAA;AAEA,SAAS,yBAAyB,cAAwB,kBAAkB,IAAY;AACpF,QAAM,cAAc,aAAa,KAAK,aAAQ,KAAK,aAAa,SAAS,gBAAW;AACpF,QAAM,0BAA0B,gBAAgB,UAAU;AAC1D,QAAM,+BAA0B,0BAA0B,gBAAW;AACrE,QAAM,kBAAkB,GAAG,0BAA0B,+BAA0B;AAE/E,SAAO,GAAG,iBAAiB,gBAAW,kBAAkB,iBACpD,gBAAgB,SAAS,KAAK;AAEtC;AAEA,SAAe,eACX,SACA,aACAC,OACiB;AAAA;AACjB,UAAM,EAAC,aAAY,IAAI;AAEvB,UAAM,cAAwB;AAAA,MAC1B,cAAc,MAAM,wBAAwB,SAAS,WAAW;AAAA,IACpE;AAEA,QAAI,CAACA,OAAM;AACP,aAAO;AAAA,IACX;AAEA,UAAM,gBAAgB,MAAM,kBAAkBA,OAAkB,YAAY;AAE5E,WAAO,gDACAA,QACA,cAFA;AAAA,MAGH,QAAQ;AAAA,IACZ;AAAA,EACJ;AAAA;AAEA,SAAe,wBACX,SACA,aACe;AAAA;AACf,UAAM,EAAC,uBAAuB,cAAc,SAAQ,IAAI;AAExD,QAAI,yBAAyB,cAAc;AACvC,YAAM,kBAAkB,iCACjB,WADiB;AAAA,QAEpB;AAAA,MACJ;AAEA,aAAO,0BAA0B,iBAAiB,YAAY;AAAA,IAClE;AAEA,WAAO,KAAK,UAAU,CAAC,CAAC;AAAA,EAC5B;AAAA;AAEA,SAAe,kBACXA,OACA,cACsB;AAAA;AACtB,QAAIA,MAAK,UAAU,cAAc;AAC7B,YAAM,gBAAgB,MAAM,iBAAiB,cAAcA,MAAK,MAAM;AAEtE,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAAA;AAEA,SAAS,4BAA4B,YAAoB;AACrD,SAAO,aAAa,KAAK,UAAU,UAAU;AACjD;AAEA,SAAS,oBAAoB,UAAkB;AAC3C,QAAM,EAAC,MAAK,IAAI,aAAY,UAAU;AACtC,QAAM,WAAe,uBAAQ,OAAO,QAAQ;AAG5C,aAAO,4BAAS,uBAAQ,IAAI,OAAG,uBAAQ,KAAK,CAAC;AACjD;;;Aa9UA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,gBAAmB;AAEnB,IAAAC,iBAAuB;;;ACFvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,mBAAyC;AACzC,IAAAC,gBAAmC;AAEnC,oBAAyB;AACzB,IAAAC,kBAAmB;AAMnB,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAGrC,YAAY,SAAiB,MAAc;AACvC,UAAM,OAAO;AAEb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EAChB;AACJ;AAEA,IAAM,OAAO;AAEb,IAAM,UAAU;AAShB,SAAe,iBAAiB,QAAwC;AAAA;AAhCxE;AAiCI,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,EAAC,OAAO,YAAW;AAAA,MACjC;AAAA,IACJ,IAAI;AAEJ,QAAI,EAAC,+BAAO,WAAU,GAAC,UAAK,YAAL,mBAAc,OAAM;AACvC,YAAM,IAAI,qBAAqB,yCAAyC,OAAO;AAAA,IACnF;AAEA,QAAI;AACA,YAAM,mBAAkB,gDAAa,SAAb,YAAqB;AAE7C,YAAM,iBAAa,uBAAQ,OAAO;AAElC,YAAM,cACF,UAAU,QACJ,oBAAK,eAAe,YAAY,KAAK,QACrC,oBAAK,cAAc,YAAY,KAAK;AAE9C,UAAI,QAAQ,CAAC;AACb,UAAI,QAAQ,CAAC;AAEb,OAAC;AAAA,QACG,OAAO,EAAC,OAAO,MAAK;AAAA,MACxB,IAAI,MAAM,KAAK,SAAS;AAAA,QACpB,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAED,YAAM,gBAAY,oBAAK,eAAe,YAAY,KAAK,QAAQ,IAAI;AAEnE,gBAAM,wBAAM,WAAW,EAAC,WAAW,KAAI,CAAC;AAExC,iBAAW,YAAY,OAAO;AAC1B,cAAM,OAAO,UAAM,+BAAS,oBAAK,aAAa,QAAQ,CAAC;AAEvD,kBAAM,4BAAM,2BAAQ,oBAAK,WAAW,QAAQ,CAAC,GAAG,EAAC,WAAW,KAAI,CAAC;AACjE,kBAAM,gCAAU,oBAAK,WAAW,QAAQ,GAAG,IAAI;AAAA,MACnD;AAEA,YAAM,QAAQ,qBAAqB,KAAK;AAExC,YAAM,MAAM,UAAU,iBAAiB,KAAK,QAAQ,IAAI,EAAE,OAAO,CAAC,CAAC;AAEnE,gBAAM,gCAAU,oBAAK,WAAW,UAAU,OAAG,sBAAK,GAAG,CAAC;AAAA,IAC1D,SAAS,KAAP;AACE,YAAM,IAAI,qBAAqB,IAAI,SAAS,GAAG,OAAO;AAAA,IAC1D;AAAA,EACJ;AAAA;AAEA,SAAS,qBAAqB,OAAiB;AAE3C,QAAM,QAA6B,CAAC;AAEpC,aAAW,QAAQ,OAAO;AACtB,UAAM,SAAS,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAC7C,QAAI,OAAO,SAAS,GAAG;AACnB,UAAI,OAAO,WAAW,GAAG;AACrB,cAAM,QAAQ;AAAA,MAClB;AAEA;AAAA,IACJ;AAEA,UAAM,OAAO,OAAO,IAAI;AAExB;AAAA,MACI;AAAA,MACA;AAAA,MACA,CAAC,QAAQ;AACL,eAAO,MAAM,EAAC,OAAO,CAAC,GAAG,IAAI,OAAO,IAAI,EAAC,IAAI,EAAC,OAAO,CAAC,IAAI,EAAC;AAAA,MAC/D;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AAEA,SAAS,UAAU,iBAAyB,SAAiB;AAEzD,SAAO,SAAS,aACZ,OACA,QACmB;AA3H3B;AA4HQ,UAAMC,WAAU,CAAC,UAAkB;AAAA,MAC/B,UAAM,qBAAM,IAAI,EAAE,SAAS,UAAU,kBAAkB;AAAA,MACvD,UAAM,oBAAK,GAAG,QAAQ,IAAI;AAAA,IAC9B;AAEA,UAAM,UAAU,CAAC,QAAgB,aAAa,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC;AAE1E,UAAM,UAAU;AAAA,MACZ,OAAM,YAAO,OAAO,SAAS,CAAC,MAAxB,YAA6B;AAAA,MACnC,OAAO;AAAA,QACH,KAAI,WAAM,UAAN,YAAe,CAAC,GAAG,IAAIA,QAAO;AAAA,QAClC,GAAG,OAAO,KAAK,KAAK,EACf,OAAO,CAAC,QAAQ,QAAQ,OAAO,EAC/B,IAAI,OAAO;AAAA,MACpB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;AAIA,IAAO,kBAAQ,EAAC,MAAM,iBAAgB;;;ACnJtC;AAAA;AAAA;AAAA,0BAAAC;AAAA,EAAA,YAAAC;AAAA;AAMA,IAAMC,QAAO;AAEb,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBd,SAAeC,kBAAiB,QAAwC;AAAA;AACpE,WAAO;AAAA,MACH,OAAO;AAAA,MACP;AAAA,EAA2E;AAAA,IAC/E;AAEA,UAAM,gBAAQ,iBAAiB,MAAM;AAAA,EACzC;AAAA;AAIA,IAAO,qBAAQ,EAAC,MAAAC,OAAM,kBAAAC,kBAAgB;;;ACnCtC;AAAA;AAAA;AAAA,0BAAAC;AAAA,EAAA,YAAAC;AAAA;AAAA,IAAAC,aAA6D;AAC7D,IAAAC,gBAA4B;AAC5B,wBAA+B;AAM/B,IAAMC,QAAO;AAEb,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAGvC,YAAY,SAAiB,MAAc;AACvC,UAAM,OAAO;AAEb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EAChB;AACJ;AAEA,SAAS,SAAS,UAAkB,eAAsC;AACtE,SAAO,IAAI,QAAQ,CAAC,KAAK,QAAQ;AAC7B,UAAMC,cAAS,6BAAiB,QAAQ;AAExC,IAAAA,QAAO,GAAG,SAAS,CAAC,QAAe;AAC/B,UAAI,GAAG;AAAA,IACX,CAAC;AAED,UAAMC,iBAAY,2BAAQ;AAE1B,IAAAA,WAAU,GAAG,SAAS,CAAC,QAAe;AAClC,UAAI,GAAG;AAAA,IACX,CAAC;AAED,8BAAU,eAAe,EAAC,WAAW,KAAI,CAAC;AAE1C,IAAAA,WAAU,GAAG,SAAS,CAAC,QAAiB,QAAqB,SAAmB;AAC5E,YAAM,EAAC,MAAM,MAAAF,MAAI,IAAI;AAErB,YAAM,gBAAY,oBAAK,eAAeA,KAAI;AAE1C,YAAM,eAAe,SAAS,cAAc,gBAAY,uBAAQ,SAAS;AAEzE,gCAAU,cAAc,EAAC,WAAW,KAAI,CAAC;AAEzC,UAAI,SAAS,aAAa;AACtB,cAAMG,cAAS,8BAAkB,WAAW,EAAC,OAAO,IAAG,CAAC;AAExD,QAAAA,QAAO,GAAG,SAAS,CAAC,QAAQ;AACxB,cAAI,GAAG;AAAA,QACX,CAAC;AAED,eAAO,KAAKA,OAAM;AAAA,MACtB;AAEA,aAAO,GAAG,OAAO,MAAM;AACnB,aAAK;AAAA,MACT,CAAC;AAED,aAAO,OAAO;AAAA,IAClB,CAAC;AAED,IAAAF,QAAO,KAAKC,UAAS,EAAE,GAAG,UAAU,MAAM;AACtC,UAAI;AAAA,IACR,CAAC;AAAA,EACL,CAAC;AACL;AAOA,SAAeE,kBAAiB,QAAwC;AAAA;AACpE,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,EAAC,OAAO,OAAM;AAAA,MAC5B;AAAA,IACJ,IAAI;AAEJ,QAAI,EAAC,+BAAO,WAAU,EAAC,iCAAQ,SAAQ;AACnC,YAAM,IAAI,uBAAuB,yCAAyC,OAAO;AAAA,IACrF;AAEA,UAAM,cAAc,UAAU,QAAI,oBAAK,eAAe,KAAK,QAAI,oBAAK,cAAc,KAAK;AAEvF,UAAM,gBAAY,oBAAK,eAAe,MAAM;AAE5C,QAAI;AACA,YAAM,SAAS,aAAa,SAAS;AAAA,IACzC,SAAS,KAAP;AACE,YAAM,IAAI,uBAAuB,IAAI,SAAS,GAAG,OAAO;AAAA,IAC5D;AAAA,EACJ;AAAA;AAIA,IAAO,oBAAQ,EAAC,MAAAC,OAAM,kBAAAC,kBAAgB;;;AHnFtC,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWvB,IAAI;AAEJ,IAAM,iBAAN,cAA6B,MAAM;AAAA,EAG/B,YAAY,SAAiB,MAAc;AACvC,UAAM,OAAO;AAEb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EAChB;AACJ;AAEA,SAAS,KAAK,SAAqB,CAAC,GAAG;AACnC,MAAI,cAAc;AACd;AAAA,EACJ;AAEA,iBAAe,EAAC,0BAAS,gCAAY,6BAAS;AAE9C,aAAW,YAAY,QAAQ;AAC3B,iBAAa,SAAS,IAAI,IAAI;AAAA,EAClC;AACJ;AAEA,SAAe,eAAe,MAAc,MAAc,MAAiB;AAAA;AArD3E;AAsDI,QAAI,GAAC,UAAK,YAAL,mBAAc,YAAW;AAC1B;AAAA,IACJ;AAEA,QAAI,CAAC,aAAa,KAAK,OAAO,GAAG;AAC7B,YAAM,IAAI,eAAe,kDAAkD,IAAI;AAAA,IACnF;AAGA,SAAK,QAAQ;AAEb,UAAM,EAAC,QAAQ,QAAO,IAAI,eAAe,KAAK,QAAQ,SAAS;AAC/D,QAAI,CAAC,QAAQ;AACT,YAAM,IAAI,eAAe,4BAAW,IAAI,IAAI;AAAA,IAChD;AAEA,QAAI,QAAQ;AACZ,eAAW,MAAmB,KAAK,QAAQ,WAAW;AAAjD,qBAAO,QAAAC,MAvEhB,IAuES,IAAgB,iBAAhB,IAAgB,CAAT;AACR,YAAM,WAAW,YAAYA,KAAI;AACjC,YAAM,eAAe,mBAAI;AAEzB,YAAM,cAAc,EAAC,MAAM,MAAM,UAAU,cAAc,OAAO,KAAI,CAAC;AAAA,IACzE;AAIA,SAAK,QAAQ,WAAO,oBAAK,KAAK,QAAQ,MAAM,UAAU;AACtD;AAAA,EACJ;AAAA;AAEA,SAAS,aAAa,SAAwB;AApF9C;AAqFI,UAAQ,QAAQ,8BAA6B,CAAC,QAAQ,WAAS,aAAQ,SAAR,mBAAc;AACjF;AAEA,SAAS,eAAe,WAA4B;AAChD,aAAW,YAAY,WAAW;AAC9B,UAAM,EAAC,QAAQ,QAAO,IAAI,cAAc,QAAQ;AAEhD,QAAI,CAAC,QAAQ;AACT,aAAO,EAAC,QAAQ,QAAO;AAAA,IAC3B;AAAA,EACJ;AAEA,SAAO,EAAC,QAAQ,KAAI;AACxB;AAEA,SAAS,cAAc,UAA0B;AAC7C,UAAI,yBAAS,QAAQ,GAAG;AACpB,QAAI,OAAO,SAAS,SAAS,UAAU;AACnC,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,SAAS;AAAA,MACb;AAAA,IACJ;AAEA,QAAI,eAAe,QAAQ,GAAG;AAC1B,aAAO,EAAC,QAAQ,KAAI;AAAA,IACxB;AAEA,WAAO,EAAC,QAAQ,OAAO,SAAS,YAAY,SAAS,uBAAsB;AAAA,EAC/E;AAEA,SAAO;AAAA,IACH,QAAQ;AAAA,IACR,SAAS;AAAA,EAAsC;AAAA,EACnD;AACJ;AAEA,SAAS,YAAY,cAAsB;AACvC,SAAO,aAAa,YAAY;AACpC;AAEA,SAAS,eAAe,UAA0B;AAC9C,SAAO,aAAa,SAAS,IAAiC;AAClE;AAYA,SAAe,cAAc,MAA2B;AAAA;AACpD,UAAM,EAAC,WAAW,cAAc,OAAO,cAAa,IAAI,aAAY,UAAU;AAE9E,UAAM,EAAC,MAAM,MAAM,UAAU,cAAc,OAAO,KAAI,IAAI;AAE1D,UAAM,SAAS;AAAA,MACX,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAEA,WAAO,MAAM,SAAS,iBAAiB,MAAM;AAAA,EACjD;AAAA;;;AdrIA,IAAM,UAAqC,oBAAI,IAAI;AACnD,IAAI,kBAAqD,CAAC;AAC1D,IAAM,mBAAuD,oBAAI,IAAI;AACrE,IAAM,iBAAiB,oBAAI,IAAoB;AAE/C,SAAe,IAAI,MAAc;AAAA;AAC7B,UAAM;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,aAAY,UAAU;AAE1B,UAAM,gBAAY,uBAAQ,IAAI;AAC9B,UAAM,cAAU,6BAAa,uBAAQ,iBAAiB,IAAI,GAAG,MAAM;AACnE,UAAM,gBAAY,sBAAK,OAAO;AAG9B,QAAI,UAAU,UAAU,aAAa;AACjC;AAAA,IACJ;AAEA,UAAM,eAAe,kCACd,eAAc,IAAI,SAAS,IAC3B;AAGP,QAAI,UAAU,OAAO;AACjB,gBAAU,QAAQ,qBAAqB,UAAU,OAAO,cAAc;AAAA,QAClE,mBAAmB;AAAA,MACvB,CAAC;AAAA,IACL;AAEA,QAAI,OAAO,UAAU,UAAU,UAAU;AACrC,gBAAU,QAAQ,YAAY,UAAU,OAAO,cAAc,IAAI;AAAA,IACrE;AAEA,cAAU,QAAQ,MAAM;AAAA,MACpB;AAAA,MACA,UAAU;AAAA,UACV,oBAAK,iBAAiB,SAAS;AAAA,UAC/B,uBAAQ,eAAe;AAAA,MACvB;AAAA,IACJ;AAGA,YAAQ,IAAI,MAAM,SAAS;AAG3B,cAAU,OAAO;AAEjB,QAAI,iBAAiB,MAAM;AAEvB,YAAM,iBAAa,uBAAQ,kBAAkB,IAAI;AACjD,YAAM,gBAAY,sBAAK,SAAS;AAChC,sBAAAC,QAAM,MAAM,UAAM,uBAAQ,UAAU,CAAC;AACrC,oCAAc,YAAY,SAAS;AAAA,IACvC;AAEA,2BAAuB,WAAW,SAAS;AAAA,EAC/C;AAAA;AAEA,SAAe,gBACX,MACA,OACA,QACA,YACA,MACF;AAAA;AACE,UAAM,EAAC,mBAAmB,qBAAoB,IAAI,aAAY,UAAU;AAExE,QAAI,gBAAgB;AAGpB,QAAI,qBAAqB,sBAAsB;AAC3C,UAAI;AACA,wBAAgB,YAAY,OAAO,SAAS,MAAM;AAAA,UAC9C;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,SAAS,OAAP;AACE,oBAAAC,QAAI,MAAM,mCAAmC,wBAAwB,OAAO;AAAA,MAChF;AAAA,IACJ;AAGA,WAAO,iBAAiB,MAAM,eAAe,QAAQ,YAAY,IAAI;AAAA,EACzE;AAAA;AAEA,SAAS,WAAW,MAAkC;AAClD,SAAO,QAAQ,IAAI,IAAI;AAC3B;AAEA,SAAS,qBAA+B;AACpC,SAAO,CAAC,GAAG,eAAe;AAC9B;AAEA,SAAS,sBAAgC;AACrC,SAAO,CAAC,GAAG,gBAAgB;AAC/B;AAEA,SAAS,uBAAuB,WAAmB,SAAiB;AAChE,WAAS,aAAa,OAAiB,WAAmB;AACtD,UAAM,QAAQ,CAAC,SAAS;AACpB,UAAI,CAAC,UAAU,cAAc,KAAK,OAAO;AACrC,cAAM,mBAAmB,KAAK,MAAM,IAAI,CAAC,QAAgB,UAAkB;AAEvE,iBAAO,KAAK,GAAG,OAAO,QAAQ,SAAS,KAAK,OAAO;AACnD,iBAAO;AAAA,QACX,CAAC;AACD,qBAAa,kBAAkB,SAAS;AAAA,MAC5C;AAEA,UAAI,KAAK,QAAQ,CAAC,eAAe,KAAK,IAAI,GAAG;AACzC,cAAM,WAAO,oBAAK,WAAW,KAAK,IAAI;AACtC,gBAAQ,IAAI,MAAM,SAAS;AAE3B,cAAM,iBAAiB,eAAe,IAAI;AAC1C,wBAAgB,KAAK,cAAc;AAAA,MACvC;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,eAAa,CAAC,SAAS,GAAG,OAAO;AACrC;AAUA,SAAS,eAAe,MAAsB;AAC1C,QAAM,mBAAe,yBAAU,IAAI;AAEnC,MAAI,aAAa,SAAS,KAAK,KAAK,aAAa,SAAS,OAAO,GAAG;AAChE,WAAO;AAAA,EACX;AAEA,MAAI,aAAa,SAAS,iBAAG,GAAG;AAC5B,WAAO,GAAG;AAAA,EACd;AAEA,SAAO,GAAG;AACd;AASA,SAAS,YAAY,SAAiB,SAAiB;AACnD,QAAM,EAAC,OAAO,gBAAe,IAAI,aAAY,UAAU;AAEvD,QAAM,EAAC,KAAK,OAAM,QAAI,qBAAM,OAAO;AACnC,QAAM,YAAkB,iBAAAC,SAAS,QAAQ;AAAA,IACrC,OAAO,CAAC,QAAQ;AAAA,IAChB,QAAQ,CAAC,aAAa;AAAA,IACtB,aAAa;AAAA,EACjB,CAAC;AAED,QAAM,QAAQ,CAAC,YAAY;AACvB,UAAM,WAAO,uBAAQ,QAAQ,OAAO;AACpC,UAAM,SAAK,uBAAQ,SAAS,OAAO;AACnC,UAAM,oBAAgB,uBAAQ,OAAO;AACrC,UAAM,WAAW,kBAAkB;AAEnC,oBAAAF,QAAM,MAAM,UAAM,qBAAM,EAAE,EAAE,GAAG;AAE/B,QAAI,UAAU;AACV,YAAM,kBAAc,yBAAa,MAAM,MAAM;AAC7C,YAAM,iBAAa,wBAAS,iBAAiB,IAAI;AACjD,YAAM,qBAAqB,oCAAoC;AAAA,QAC3D;AAAA,QACA;AAAA,QACA,eAAe;AAAA,MACnB,CAAC;AAED,oCAAc,IAAI,kBAAkB;AAAA,IACxC,OAAO;AACH,sBAAAA,QAAM,GAAG,MAAM,EAAE;AAAA,IACrB;AAEA,UAAM,cAAU,wBAAS,iBAAiB,IAAI;AAC9C,UAAM,YAAQ,wBAAS,iBAAiB,EAAE;AAC1C,mBAAe,IAAI,OAAO,OAAO;AAAA,EACrC,CAAC;AACL;AAUA,SAAS,sBAAsB,OAAiB,eAAuB,QAA0B;AAC7F,SAAO,MAAM,OAAO,CAAC,KAAK,YAAY;AAClC,QAAI,QAAQ,MAAM;AACd,cAAQ,WAAO,wBAAS,YAAQ,uBAAQ,eAAe,QAAQ,IAAI,CAAC;AAAA,IACxE;AAEA,QAAI,QAAQ,OAAO;AACf,cAAQ,QAAQ,sBAAsB,QAAQ,OAAO,eAAe,MAAM;AAAA,IAC9E;AAEA,QAAI,QAAQ,SAAS;AACjB,YAAM,EAAC,KAAI,IAAI,QAAQ;AACvB,cAAQ,QAAQ,WAAO,wBAAS,YAAQ,uBAAQ,eAAe,IAAI,CAAC;AAAA,IACxE;AAEA,WAAO,IAAI,OAAO,OAAO;AAAA,EAC7B,GAAG,CAAC,CAAa;AACrB;AAUA,SAAS,qBAAqB,OAAe,MAA8B,MAAc;AACrF,QAAM,EAAC,cAAc,aAAY,IAAI,aAAY,UAAU;AAC3D,MAAI,iBAAiB,QAAQ,CAAC,cAAc;AACxC,WAAO;AAAA,EACX;AAEA,aAAO,eAAAG,SAAO,OAAO,MAAM,MAAM;AAAA,IAC7B,YAAY;AAAA,IACZ,eAAe;AAAA,EACnB,CAAC;AACL;AAEA,SAAS,kBAAkB,gBAAwB;AAC/C,mBAAiB,IAAI,cAAc;AACvC;AAYA,SAAe,iBACX,MACA,OACA,QACA,YACA,MACiB;AAAA;AACjB,UAAM,SAAmB,CAAC;AAE1B,eAAW,QAAQ,OAAO;AACtB,UAAI,sBAAuC;AAE3C,UAAI,KAAK,MAAM;AACX,cAAM,cAAU,oBAAK,QAAQ,UAAU;AAEvC,aAAK,OAAO,qBAAqB,KAAK,MAAM,MAAM,OAAO;AAAA,MAC7D;AAEA,UAAI;AACA,cAAM,eAAe,MAAM,MAAM,IAAI;AAAA,MACzC,SAAS,KAAP;AACE,YAAI,eAAe,SAAS,eAAe,gBAAgB;AACvD,gBAAM,UAAU,IAAI,SAAS;AAE7B,gBAAM,OAAO,eAAe,iBAAiB,IAAI,OAAO;AAExD,iBAAO,MAAM,MAAM,OAAO;AAAA,QAC9B;AAAA,MACJ;AAEA,UAAI,KAAK,SAAS;AACd,cAAM,EAAC,qCAA6B,IAAI,KAAK;AAC7C,cAAM,iBACF,6CACM,uBAAQ,YAAY,KAAK,QAAQ,IAAI,QACrC,uBAAQ,QAAQ,KAAK,QAAQ,IAAI;AAC3C,cAAM,oBAAgB,uBAAQ,cAAc;AAE5C,YAAI;AACA,gBAAM,iBAAa,0BAAK,yBAAa,gBAAgB,MAAM,CAAC;AAG5D,cAAI,WAAW,6CAA8B;AACzC;AAAA,UACJ;AAEA,cAAI,gCAA8B,wCAAiC;AAC/D,wBAAY,gBAAgB,MAAM;AAAA,UACtC;AAGA,4BAAkB,cAAc;AAEhC,cAAI,oBAAoB,KAAK,SAAS,CAAC,GAAG,OAAO,WAAW,KAAK;AAGjE,gBAAM,aAAa,6BAA4B,gBAAgB;AAC/D,6BAAmB,MAAM;AAAA,YACrB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAGA,cAAI,4BAA2B;AAC3B,+BAAmB;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAEA,cAAI,KAAK,MAAM;AACX,iBAAK,QAAQ;AAAA,UACjB,OAAO;AACH,kCAAsB;AAAA,UAC1B;AAAA,QACJ,SAAS,KAAP;AACE,gBAAM,UAAU,kCAA8B,oBAAK,cAAc,YAAQ;AAAA,gBACrE,oBAAK,QAAQ,UAAU;AAAA,UAC3B;AAEA,sBAAAF,QAAI,MAAM,OAAO;AAEjB;AAAA,QACJ,UAAE;AACE,iBAAO,KAAK;AAAA,QAChB;AAAA,MACJ,WAAW,KAAK,OAAO;AACnB,aAAK,QAAQ,MAAM,gBAAgB,MAAM,KAAK,OAAO,QAAQ,YAAY,IAAI;AAAA,MACjF;AAEA,UAAI,qBAAqB;AACrB,eAAO,KAAK,GAAG,mBAAmB;AAAA,MACtC,OAAO;AACH,eAAO,KAAK,IAAI;AAAA,MACpB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAEA,SAAS,UAAU,UAA0B;AACzC,QAAM,EAAC,OAAO,gBAAe,IAAI,aAAY,UAAU;AAEvD,QAAM,aAAS,uBAAQ,QAAQ;AAC/B,QAAM,cAAU,uBAAQ,QAAQ,UAAU;AAE1C,MAAI,CAAC,OAAO,SAAS,eAAe,GAAG;AACnC,UAAM,IAAI,MAAM,6BAA6B;AAAA,EACjD;AAEA,UAAI,uBAAW,OAAO,GAAG;AACrB,WAAO;AAAA,EACX;AAEA,SAAO,UAAU,MAAM;AAC3B;AAEA,SAAS,mBAAmB,OAA0C;AAClE,oBAAkB;AACtB;AAEA,SAAS,iBAAiB;AACtB,SAAO;AACX;AAEA,IAAO,eAAQ;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;;;AkB/ZA,IAAAG,gBAAiC;AAMjC,IAAI,gBAA+B,oBAAI,IAAI;AAE3C,SAASC,KAAI,cAAyB,MAAc,YAAoB;AACpE,QAAM,iBAAiB,gDACf,aAAa,WAAW,CAAC,IACzB,aAAa,UAAU,KAAK,CAAC,IAFd;AAAA,IAGnB,YAAY,aAAa;AAAA,EAC7B;AAEA,QAAM,UAAM,2BAAQ,yBAAU,IAAI,CAAC;AACnC,gBAAc,IAAI,KAAK,cAAc;AACzC;AAEA,SAAS,IAAI,MAAyB;AAClC,MAAI,iBAA4B,CAAC;AACjC,MAAI,gBAAY,yBAAU,IAAI;AAE9B,SAAO,cAAc,KAAK;AACtB,UAAM,eAA0B,cAAc,IAAI,SAAS,KAAK,CAAC;AACjE,oBAAY,uBAAQ,SAAS;AAE7B,qBAAiB,kCACV,eACA;AAAA,EAEX;AAGA,mBAAiB,kCACV,cAAc,IAAI,GAAG,IACrB;AAGP,SAAO;AACX;AAEA,SAAS,mBAA2C;AAChD,SAAO;AACX;AAEA,SAAS,iBAAiB,QAAsC;AAC5D,kBAAgB;AACpB;AAEA,IAAO,iBAAQ;AAAA,EACX,KAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;;;ACtDA,IAAAC,gBAAmB;AACnB,IAAAC,aAA2B;AAE3B,IAAI;AAEJ,SAAS,YAAY;AACjB,SAAO;AACX;AAGA,SAASC,MAAK,MAAW;AACrB,UAAQ,iCACD,OADC;AAAA,IAEJ,QAAQ,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,SAAS,CAAC;AAAA,EACxD;AAEA,MAAI,KAAK,MAAM;AACX,UAAM,OAAO,KAAK,MAAM,KAAK,IAAI;AAAA,EACrC;AAEA,MAAI;AACA,UAAM,iBAAa,6BAAa,oBAAK,MAAM,WAAW,YAAY,GAAG,MAAM;AAC3E,UAAM,SAAS,WAAW,MAAM,IAAI;AAEpC,UAAM,SAAS,MAAM,OAAO,OAAO,MAAM;AAAA,EAC7C,SAAQ,GAAN;AAAA,EAAO;AACb;AAEA,SAAS,IAAI,MAAe;AACxB,UAAQ;AACZ;AAEA,IAAO,eAAQ;AAAA,EACX;AAAA,EACA,MAAAA;AAAA,EACA;AACJ;;;ACrCA,IAAAC,gBAA+B;AAC/B,IAAAC,aAA0C;AAC1C,IAAAC,kBAAyB;AACzB,IAAAC,cAAgB;AAYhB,SAAS,WAAW,MAAc;AAflC;AAgBI,QAAM,EAAC,OAAO,iBAAiB,KAAI,IAAI,aAAY,UAAU;AAE7D,QAAM,gBAAY,uBAAQ,IAAI;AAC9B,QAAM,eAAW,uBAAQ,iBAAiB,IAAI;AAC9C,QAAM,cAAU,yBAAa,UAAU,MAAM;AAC7C,QAAM,kBAAc,sBAAK,OAAO;AAEhC,QAAM,eAAe,kCACd,eAAc,IAAI,SAAS,IAC3B;AAIP,MAAI;AACA,UAAM,QAAQ,qBAAqB,YAAY,OAAO,cAAc;AAAA,MAChE,mBAAmB;AAAA,IACvB,CAAC;AACD,gBAAY,QAAQ,YAAY,OAAO,cAAc,IAAI;AAEzD,UAAMC,eAAc,gBAAgB,YAAY,aAAa,cAAc;AAAA,MACvE,mBAAmB;AAAA,IACvB,CAAC;AACD,gBAAY,cAAc,aAAaA,cAAa,cAAc,IAAI;AAEtE,SAAI,iBAAY,SAAZ,mBAAkB,OAAO;AACzB,YAAM,YAAY,qBAAqB,YAAY,KAAK,OAAO,cAAc;AAAA,QACzE,mBAAmB;AAAA,MACvB,CAAC;AACD,kBAAY,KAAK,QAAQ,YAAY,WAAW,cAAc,IAAI;AAAA,IACtE;AAEA,SAAI,iBAAY,SAAZ,mBAAkB,aAAa;AAC/B,YAAM,kBAAkB;AAAA,QACpB,YAAY,KAAK;AAAA,QACjB;AAAA,QACA,EAAC,mBAAmB,KAAI;AAAA,MAC5B;AACA,kBAAY,KAAK,cAAc,YAAY,iBAAiB,cAAc,IAAI;AAAA,IAClF;AAEA,QAAI,YAAY,KAAK;AACjB,YAAM,WAAW,qBAAqB,YAAY,IAAI,OAAO,cAAc;AAAA,QACvE,mBAAmB;AAAA,MACvB,CAAC;AACD,kBAAY,IAAI,QAAQ,YAAY,UAAU,cAAc,IAAI;AAAA,IACpE;AAEA,gBAAY,QAAQ,YAAY,YAAY,OAAO,SAAS,cAAc;AAAA,MACtE,mBAAmB;AAAA,IACvB,CAAC;AAED,gBAAY,MAAM,QAAQ,CAAC,SAAS;AAChC,UAAI,KAAK,OAAO;AACZ,aAAK,QAAQ,YAAY,KAAK,OAAO,cAAc,IAAI;AAAA,MAC3D;AACA,UAAI,KAAK,aAAa;AAClB,aAAK,cAAc,YAAY,KAAK,aAAa,cAAc,IAAI;AAAA,MACvE;AAAA,IACJ,CAAC;AAED,kCAAc,cAAU,sBAAK,WAAW,CAAC;AAAA,EAC7C,SAAS,OAAP;AACE,gBAAAC,QAAI,MAAM,qCAAqC,wBAAwB,OAAO;AAAA,EAClF;AACJ;AAEA,IAAO,kBAAQ;AAAA,EACX;AACJ;;;ACpFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,IAAI;AACJ,IAAI;AAEG,SAAS,aAAmB;AAC/B,YAAU,cAAc;AACxB,wBAAsB,qBAAqB;AAC/C;AAEO,SAAS,aAAa;AACzB,SAAO;AACX;AAEO,SAAS,sBAAmD;AAC/D,SAAO;AACX;AAEA,SAAS,uBAAoD;AACzD,QAAM,qBAAsB,QAAqB,OAAO,CAAC,WAAmB;AACxE,WAAO,OAAO,OAAO,YAAY;AAAA,EACrC,CAAC;AAED,SAAO,CAAC,QAAgB,YAA2B;AAC/C,QAAI,iBAAiB;AAErB,uBAAmB,QAAQ,CAAC,WAAmB;AAC3C,YAAM,gBAAgB,OAAO,QAAQ,gBAAgB,OAAO;AAE5D,uBAAiB,OAAO,kBAAkB,WAAW,gBAAgB;AAAA,IACzE,CAAC;AAED,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,gBAA4B;AACjC,QAAM,gBAAgB,iBAAiB;AACvC,SAAO,CAAC,GAAG,aAAa,GAAG,aAAa;AAC5C;AAEA,SAAS,mBAA+B;AACpC,MAAI;AACA,UAAM,gBAAgB,QAAQ,gBAAgB,WAAW,CAAC;AAC1D,WAAO,MAAM,QAAQ,aAAa,IAAI,gBAAgB,CAAC;AAAA,EAC3D,SAAS,GAAP;AACE,WAAO,CAAC;AAAA,EACZ;AACJ;AAEO,SAAS,iBAAyB;AACrC,MAAI;AACA,WAAO,QAAQ,gBAAgB,mBAAmB,CAAC;AAAA,EACvD,SAAS,GAAP;AACE,WAAO;AAAA,EACX;AACJ;AAEO,SAAS,qBAAiC;AAC7C,MAAI;AACA,WAAO,QAAQ,gBAAgB,cAAc,CAAC;AAAA,EAClD,SAAS,GAAP;AACE,WAAO,CAAC;AAAA,EACZ;AACJ;AAEO,SAAS,uBAA+C;AAC3D,MAAI;AACA,WAAO,QAAQ,gBAAgB,uBAAuB,CAAC;AAAA,EAC3D,SAAS,GAAP;AACE,WAAO;AAAA,EACX;AACJ;;;AtB9DA,sBAA4B;;;AuBb5B,IAAAC,oBAAqB;AACrB,IAAAC,kBAAkB;AAYX,SAAS,cAAc,kBAA0B;AACpD,QAAM,EAAC,OAAO,iBAAiB,QAAQ,iBAAgB,IAAI,aAAY,UAAU;AAEjF,QAAM,oBAA0B,kBAAAC,SAAS,iBAAiB;AAAA,IACtD,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,QAAQ,CAAC,aAAa,SAAS;AAAA,EACnC,CAAC;AAED,YAAU,iBAAiB,kBAAkB,aAAa;AAG1D,kBAAAC,QAAM,MAAM,MAAM,gBAAgB;AAClC,kBAAAA,QAAM,GAAG,gBAAgB,MAAM,gBAAgB;AACnD;;;AC3BA,IAAAC,gBAAgC;AAChC,IAAAC,oBAAqB;AACrB,IAAAC,kBAAkB;AASX,SAAS,uBAAuB;AACnC,QAAM,EAAC,OAAO,iBAAiB,QAAQ,kBAAkB,OAAM,IAAI,aAAY,UAAU;AAEzF,QAAM,sBAA4B,kBAAAC,SAAS,iBAAiB;AAAA,IACxD,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,OAAO,CAAC,WAAW,iBAAiB,GAAG,MAAM;AAAA;AAAA,IAE7C,QAAQ,CAAC,YAAY;AAAA,EACzB,CAAC;AACD,QAAMC,mBAAkB,aAAW,mBAAmB,EAAE;AAAA,IAAI,CAAC,aACzD,4BAAwB,uBAAQ,iBAAiB,QAAQ,CAAC;AAAA,EAC9D;AACA,QAAM,oBAAoB,IAAI,IAAIA,gBAAe;AACjD,QAAM,gBAAgB,gBAAgB,OAAO,CAAC,aAAa,CAAC,kBAAkB,IAAI,QAAQ,CAAC;AAE3F,kBAAAC,QAAM,GAAG,MAAM,aAAa;AAE5B,QAAMC,oBAAmB,aAAW,oBAAoB,EAAE,IAAI,CAAC,aAAa;AACxE,UAAM,sBAAkB,wBAAS,iBAAiB,QAAQ;AAC1D,UAAM,kBAAc,uBAAQ,kBAAkB,eAAe;AAE7D,WAAO,wBAAwB,WAAW;AAAA,EAC9C,CAAC;AAED,kBAAAD,QAAM,GAAG,OAAOC,iBAAgB;AACpC;;;ACrCA,IAAAC,cAAgB;AAChB,kBAAkB;AAEX,SAAS,YAAY,aAAqB;AAC7C,QAAM,oBAAoB,IAAI,OAAO,aAAa,IAAI;AACtD,QAAM,EAAC,MAAM,MAAM,MAAK,IAAI,YAAAC,QAAI,IAAI;AACpC,QAAM,iBAAa,YAAAC,SAAM,CAAC,IAAI,GAAG,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AAErE,aAAW,aAAa,YAAY;AAChC,UAAM,cAAc,UAAU,QAAQ,mBAAmB,EAAE;AAC3D,YAAQ,IAAI,WAAW;AAAA,EAC3B;AACJ;;;ACXA,IAAAC,gBAAkE;AAClE,IAAAC,kBAAkB;AAClB,IAAAC,aAA0C;AAC1C,IAAAC,gBAAmB;AACnB,IAAAC,kBAAyB;AACzB,mBAAiC;AAEjC,IAAAC,eAAgB;;;ACRhB,IAAAC,aAAsD;AACtD,IAAAC,gBAAwD;AACxD,IAAAC,kBAAkB;AAClB,IAAAC,cAAgB;AAChB,IAAAC,iBAAmB;AASnB,SAAsB,aAAa,SAA6C;AAAA;AAC5E,UAAM,EAAC,WAAW,YAAY,SAAQ,IAAI;AAC1C,UAAM,EAAC,OAAO,OAAM,IAAI,aAAY,UAAU;AAC9C,UAAM,wBAAoB,uBAAQ,OAAO,SAAS;AAClD,UAAM,OAAO,eAAe,SAAS;AAErC,UAAM,UAAU,MAAM;AAAA,UAClB,yBAAa,mBAAmB,MAAM;AAAA,MACtC;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AAEA,UAAM,EAAC,QAAQ,WAAU,IAAI,eAAe,SAAS;AAAA,MACjD,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAM,uBAAQ,KAAK;AAAA,MACnB,cAAU,uBAAQ,MAAM;AAAA,MACxB,kBAAkB,gBAAc,oBAAoB;AAAA,MACpD;AAAA,MACA,iBAAAC;AAAA,MACA;AAAA,IACJ,CAAC;AAED,kCAAc,YAAY,MAAM;AAEhC,QAAI,yCAAY,QAAQ;AACpB,YAAM,iBAAa,wBAAS,gBAAY,uBAAQ,UAAU,CAAC;AAC3D,YAAM,gBAAY,uBAAQ,UAAU;AACpC,iBAAW,QAAQ,CAAC,SAAS,UAAU;AACnC,YAAI;AACJ,cAAM,cAAc,QAAQ;AAC5B,cAAM,aAAa,QAAQ;AAC3B,YAAI,OAAO,eAAe,UAAU;AAChC,wBAAc,OAAO,UAAU;AAAA,QACnC;AACA,YAAI,CAAC,eAAe,eAAe,SAAS,KAAK,WAAW,GAAG;AAC3D,wBAAc,KAAK,MAAM,IAAI,KAAK,WAAW,EAAE,QAAQ,IAAI,GAAI;AAAA,QACnE;AACA,YAAI,CAAC,aAAa;AACd,wBAAc,QAAQ,cAAc,OAAO,WAAW,SAAS,KAAK,EAAE;AAAA,YAClE;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AAEA,cAAM,kBAAc,oBAAK,WAAW,WAAW,kBAAkB;AAEjE,gBAAI,uBAAW,WAAW,GAAG;AACzB,gBAAM,IAAI,MAAM,aAAa,6BAA6B;AAAA,QAC9D;AAEA;AAAA,UACI;AAAA,UACA,KAAK,UAAU,iCACR,UADQ;AAAA,YAEX,QAAQ;AAAA,UACZ,EAAC;AAAA,QACL;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,WAAO,KAAK,WAAW,mBAAmB;AAE1C,WAAO;AAAA,EACX;AAAA;AAEA,SAAS,SAAS,YAAoB,gBAAwB,SAAyB;AACnF,kBAAAC,QAAM,MAAM,UAAM,uBAAQ,cAAc,CAAC;AAEzC,MAAI,SAAS;AACT,UAAM,2BAAuB,yBAAa,YAAY,MAAM;AAC5D,UAAM,EAAC,OAAM,IAAI,eAAe,sBAAsB,OAAO;AAE7D,kCAAc,gBAAgB,MAAM;AAAA,EACxC,OAAO;AACH,oBAAAA,QAAM,GAAG,YAAY,cAAc;AAAA,EACvC;AACJ;AAEO,SAAS,YAAY,OAAe,MAA+B,MAAc;AACpF,QAAM,EAAC,cAAc,mBAAmB,iBAAgB,IAAI,aAAY,UAAU;AAElF,aAAO,eAAAC,SAAO,OAAO,MAAM,MAAM;AAAA,IAC7B,YAAY;AAAA,IACZ,eAAe;AAAA,IACf;AAAA,IACA,eAAe;AAAA,IACf,YAAY;AAAA,EAChB,CAAC;AACL;AAEA,SAAS,eAAe,OAAe,SAAwB;AAC3D,QAAM,EAAC,cAAa,IAAI,aAAY,UAAU;AAC9C,QAAM;AAAA,IACF,OAAO,CAAC;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,UAAU;AAAA,EACd,IAAI;AAEJ,MAAI,SAAS;AACb,QAAM,aAA8B,CAAC;AAErC,MAAI,CAAC,eAAe;AAChB,UAAM,eAAe,YAAY,OAAO,MAAM,IAAI;AAElD,aAAS,aAAa;AAAA,EAC1B;AAEA,MAAI,kBAAkB;AAClB,aAAS,iBAAiB,QAAQ;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA,IACvB,CAAC;AAAA,EACL;AAEA,SAAO;AAAA,IACH,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,UAAU,IAAI;AAAA,EACxB;AACJ;;;ACnJA,IAAAC,gBAA8D;AAC9D,IAAAC,aAA0C;AAC1C,IAAAC,kBAAiB;AAEjB,uBAAgC;AAChC,IAAAC,cAAgB;AAChB,IAAAC,iBAAmB;AAoBnB,IAAM,kBAA4C;AAAA,EAC9C,SAAS;AAAA,EACT,OAAO;AACX;AAEA,IAAM,kBAAkB,CAAC,eAAuB,CAAC,SAAiB;AAC9D,aAAO,oBAAK,oBAAoB,UAAU,GAAG,IAAI;AACrD;AAEA,SAAsB,eAAe,SAAyD;AAAA;AAnC9F;AAoCI,UAAM,EAAC,WAAW,eAAe,YAAY,kBAAkB,SAAQ,IAAI;AAE3E,UAAM,gBAAoB,uBAAQ,SAAS;AAC3C,UAAM,MAAqB,aAAW,WAAW,SAAS,KAAK;AAC/D,UAAM,UAAkB,OAAO,IAAI,OAAO,IAAI,OAAO;AACrD,UAAM,gBACF,cAAc,UAAU,KAAK,UAAU,QAAQ,GAAG,UAAU,qBAAO,EAAE;AACzE,UAAM,0BAAsB,wBAAS,WAAW,GAAG,UAAU,mBAAK;AAClE,UAAM,OAAO,eAAe,SAAS;AAErC,UAAM,EAAC,OAAO,MAAM,qBAAoB,IAAI,aAAY,UAAU;AAClE,UAAM,mBAAuB,uBAAQ,OAAO,SAAS;AACrD,UAAM,cAAkB,yBAAa,cAAc,MAAM;AAEzD,UAAM,cAAwB,gBAAgB,aAAa;AAC3D,UAAM,EAAC,OAAM,IAAI,YAAY,SAAS,EAAC,MAAM,UAAS,CAAC;AAEvD,UAAM,mBAAkB,qCAAU,yBAC5B,MAAM,eAAe,UAAU,SAAS,iCAAQ,IAAI,IACpD,OAAO;AAEb,UAAM,WAAW,kBAAkB,WAAU,YAAO,KAAK,SAAZ,YAAoB,CAAC,IAAI;AAEtE,QAAI,CAAC,MAAM,QAAQ,qCAAU,QAAQ,GAAG;AACpC,eAAS,WAAW,CAAC,qCAAU,QAAQ,EAAE,OAAO,OAAO;AAAA,IAC3D;AAEA,aAAS,WAAW,SAAS,SAAS,SAAO,UAAK,eAAL,mBAAiB,OAAO,aAAY,CAAC,CAAC;AAEnF,QAAI,sBAAsB;AACtB,YAAM,EAAC,QAAQ,MAAK,KAAI,qCAAU,cAAa,CAAC;AAChD,eAAS,SAAS,SAAS,SAAS,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,EAAE,IAAI,gBAAgB,SAAS,CAAC;AAC1F,eAAS,UAAU,SAAS,UAAU,CAAC,GAClC,OAAO,UAAU,CAAC,CAAC,EACnB,IAAI,gBAAgB,SAAS,CAAC;AAAA,IACvC,OAAO;AACH,eAAS,QAAQ,CAAC;AAClB,eAAS,SAAS,CAAC;AAAA,IACvB;AAEA,UAAM,QAAQ;AAAA,MACV,MAAM;AAAA,QACF,SAAS,UAAU,SAAS,OAAO;AAAA,QACnC,KAAK,aAAa,KAAK,SAAS,KAAK,CAAC;AAAA,SACnC,SAHD;AAAA,QAIF,MAAM;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACJ,cAAU,oBAAK,qBAAqB,mBAAe,wBAAS,UAAU,CAAC;AAAA,MAC3E;AAAA,MACA,MAAM;AAAA,IACV;AAEA,UAAM,gBAAY,uBAAQ,UAAU;AACpC,UAAM,2BAA+B,4BAAS,uBAAQ,SAAS,OAAG,uBAAQ,gBAAgB,CAAC;AAE3F,UAAM,oBAAoB,qBAAqB,OAAO,oBAAoB;AAC1E,kCAAc,YAAY,iBAAiB;AAC3C,WAAO,KAAK,WAAW,mBAAmB;AAE1C,WAAO;AAAA,EACX;AAAA;AAEA,SAAS,oBAAoB,SAAyB;AAnGtD;AAoGI,MAAI,OAA2B;AAE/B,MAAI;AACA,WAAO,gBAAAC,QAAK,KAAK,OAAO;AAAA,EAC5B,SAAS,OAAP;AACE,gBAAAC,QAAI,MAAM,0CAA0C,OAAO;AAAA,EAC/D;AAEA,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,MACH,QAAQ,EAAC,MAAM,CAAC,EAAC;AAAA,IACrB;AAAA,EACJ;AAEA,QAAMC,UAAQ,kCAAM,UAAN,mBAAa;AAAA,IAAI,CAAC,SAC5B,KAAK,OAAO,iCAAI,OAAJ,EAAU,MAAM,KAAK,KAAK,QAAQ,WAAW,OAAO,EAAC,KAAI;AAAA;AAGzE,MAAIA,QAAO;AACP,SAAK,QAAQA;AAAA,EACjB;AAEA,SAAO;AAAA,IACH,QAAQ,EAAC,KAAI;AAAA,EACjB;AACJ;AAEO,SAAS,cAAc,OAAe,MAA+B,MAAc;AACtF,QAAM,EAAC,iBAAgB,IAAI,aAAY,UAAU;AAEjD,aAAO,eAAAC,SAAO,OAAO,MAAM,MAAM;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,EACnB,CAAC;AACL;AAEA,SAAS,kBAAkB,SAAiB,kBAAgD;AACxF,QAA4B,kBAAY,UAAU,GAA3C,QAzIX,IAyIgC,IAAX,oBAAW,IAAX,CAAV;AACP,QAAM,EAAC,MAAM,SAAQ,IAAI;AAEzB,QAAMC,WAAU,gBAAc,WAAW;AACzC,QAAM,OAAO,eAAe,QAAQ;AACpC,QAAM,WAAO,uBAAQ,KAAK;AAC1B,QAAM,WAAe,uBAAQ,OAAO,QAAQ;AAE5C,aAAO,iBAAAC,SAAU,SAAS,iCACnB,UADmB;AAAA,IAEtB,SAASD;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB,oBAAoB,QAAQ;AAAA,IAC9C,gBAAgB;AAAA,IAChB,cAAc;AAAA,EAClB,EAAC;AACL;;;AC3JA,IAAAE,gBAAyC;AACzC,IAAAC,cAAgB;AAChB,qBAIO;AACP,IAAAC,aAA2B;AAC3B,IAAAC,gBAAmB;AAYnB,IAAM,aAAuC;AAAA,EACzC,OAAO;AACX;AAQO,SAAS,SAAS,SAA8B;AACnD,QAAM,EAAC,WAAW,eAAe,SAAQ,IAAI;AAC7C,QAAM,EAAC,MAAK,IAAI,aAAY,UAAU;AACtC,QAAM,mBAAuB,uBAAQ,OAAO,SAAS;AAErD,MAAI;AACA,UAAM,cAAkB,yBAAa,cAAc,MAAM;AAEzD,UAAM,SAAmB,WAAW,aAAa;AACjD,QAAI,CAAC,QAAQ;AACT;AAAA,IACJ;AAEA,WAAO,SAAS,EAAC,MAAM,UAAS,CAAC;AAAA,EACrC,SAAS,GAAP;AACE,UAAM,UAAU,wCAAoC,oBAAK,YAAY;AACrE,YAAQ,MAAM,SAAS,CAAC;AACxB,gBAAAC,QAAI,MAAM,OAAO;AAAA,EACrB;AAEA,MAAI,UAAU;AACV,aAAS;AAAA,EACb;AACJ;AAEA,SAAS,aAAa,SAAiB,aAAyC;AAC5E,QAAqE,kBAAY,UAAU,GAApF,SAAO,YAAY,eAAe,aAxD7C,IAwDyE,IAAX,oBAAW,IAAX,CAAnD,SAAO,cAAY,iBAAe;AACzC,QAAM,EAAC,MAAM,SAAQ,IAAI;AAEzB,QAAMC,WAAU,iBAAiB,OAAO,CAAC,IAAI,gBAAc,WAAW;AACtE,QAAM,OAAO,eAAe,QAAQ;AACpC,QAAM,WAAO,uBAAQ,KAAK;AAC1B,QAAM,WAAe,uBAAQ,OAAO,QAAQ;AAC5C,MAAI,kBAAkB;AAGtB,QAAM,uBAAmB,4BAAS,uBAAQ,IAAI,GAAG,IAAI;AAErD,QAAM,eAAe,SAASC,cAAa,MAAmC;AAC1E,UAAM,EAAC,OAAO,YAAY,MAAM,WAAW,WAAAC,WAAS,IAAI;AAExD,UAAM,gBAA+B,iCAC9B,UAD8B;AAAA,MAEjC;AAAA,MACA;AAAA,MACA,MAAM;AAAA,MACN,cAAAD;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAAF;AAAA,MACA,gBAAgB;AAAA,IACpB;AAEA,uBAAAI,SAAQ;AAAA,MACJ,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,SAAAH;AAAA,MACA,mBAAmB,gBAAc,qBAAqB;AAAA,MACtD,iBAAiB,gBAAc,mBAAmB;AAAA,MAClD,WAAAE;AAAA,IACJ,CAAC;AAAA,EACL;AAEA,MAAI;AACJ,MAAI,CAAC,eAAe;AAChB,QAAI;AACJ,QAAI,iBAAiB,MAAM;AACvB,qBAAe,YAAY,SAAS,MAAM,IAAI;AAAA,IAClD,OAAO;AACH,qBAAe,cAAc,SAAS,MAAM,IAAI;AAAA,IACpD;AAEA,sBAAkB,aAAa;AAC/B,gBAAY,aAAa;AAAA,EAC7B;AAEA,eAAa;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACJ,CAAC;AACL;;;AChHA,kBAAsB;AACtB,IAAAE,gBAA8B;AAC9B,wBAA0C;AAC1C,uBAAwB;;;ACHxB,IAAAC,eAAgB;;;ACAhB,IAAAC,cAAgB;AAShB,IAAM,2BAAoE;AAAA,EACtE,0BAA+B,GAAG;AAAA,IAC9B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc,QAAQ,IAAI;AAAA,EAC9B;AAAA,EACA,oBAA4B,GAAG;AAAA,IAC3B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc,QAAQ,IAAI;AAAA,EAC9B;AAAA,EACA,oBAA4B,GAAG;AAAA,IAC3B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc,QAAQ,IAAI;AAAA,EAC9B;AAAA,EACA,kBAA2B,GAAG;AAAA,IAC1B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc,QAAQ,IAAI;AAAA,EAC9B;AACJ;AAEA,IAAM,qBAA8D;AAAA,EAChE,MAAM;AAAA,IACF,aAAa;AAAA,IACb,YAAY;AAAA,EAChB;AAAA,EACA,sBAAkB,GAAG;AAAA,IACjB,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,kBAAkB;AAAA,EACtB;AACJ;AAEA,SAAS,eAAe,OAA0B;AAC9C,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,QAAQ,SAAS,OAAO,oBAAoB,KAAK,EAAE,MAAM;AAAA,EACpE;AAEA,SAAO;AACX;AAEA,SAAS,cAAc,OAA0B;AAC7C,MAAI,OAAO,UAAU,UAAU;AAC3B,WAAO,QAAQ,KAAK;AAAA,EACxB;AAEA,SAAO;AACX;AAEO,SAAS,wBACZ,YACA,YACA,gBACuB;AAhE3B;AAiEI,QAAM,gBAAgB,mBAAmB,UAAU;AAEnD,MAAI,CAAC,eAAe;AAChB,gBAAAC,QAAI,MAAM,sBAAsB,eAAe;AAC/C,WAAO,CAAC;AAAA,EACZ;AAEA,QAAM,cAAc,cAAc,WAAW,kBAAkB,eAAe,UAAU,CAAC;AACzF,QAAM,uBAAuB,cAAc;AAC3C,MAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,sBAAsB;AAC1D,cAAU,aAAa;AACvB,WAAO,CAAC;AAAA,EACZ;AAEA,MAAI,oBAAoB;AACxB,QAAM,kBAA2C,CAAC;AAElD,aAAW,YAAY,YAAY;AAC/B,UAAM,oBAAoB,qBAAqB,QAAQ;AAEvD,QAAI,CAAC,mBAAmB;AACpB,kBAAAA,QAAI,KAAK,iBAAiB,8BAA8B,kBAAkB;AAC1E;AAAA,IACJ;AAEA,UAAM,gBACF,kBAAkB,kBAAgB,oBAAe,UAAU,MAAzB,mBAA6B;AAEnE,QAAI,CAAC,kBAAkB,WAAW,aAAa,GAAG;AAC9C,gBAAU,iBAAiB;AAC3B,0BAAoB;AAAA,IACxB;AAEA,oBAAgB,QAAQ,IAAI;AAAA,EAChC;AAEA,MAAI,mBAAmB;AACnB,WAAO;AAAA,EACX;AAEA,cAAAA,QAAI,KAAK,uCAAkC,UAAU,CAAC;AACtD,SAAO,CAAC;AACZ;AAEA,SAAS,UAAU,WAA0C;AACzD,MAAI,UAAU,cAAc;AACxB,WAAO,YAAAA,QAAI,MAAM,UAAU,YAAY;AAAA,EAC3C;AAEA,MAAI,UAAU,aAAa;AACvB,WAAO,YAAAA,QAAI,KAAK,UAAU,WAAW;AAAA,EACzC;AAEA,QAAM,IAAI,MAAM,sBAAsB,KAAK,UAAU,SAAS,IAAI;AACtE;;;AD5GA,SAAe,YAAY,SAAkB,UAAiD;AAAA;AAC1F,QAAI;AACA,YAAM,OAAO,MAAM,QAAQ,QAAQ,yBAAyB;AAAA,QACxD;AAAA,MACJ,CAAC;AAED,aAAO,KAAK;AAAA,IAChB,SAAS,OAAP;AACE,mBAAAC,QAAI,KAAK,sDAAsD,oBAAoB,OAAO;AAC1F,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAEA,SAAe,oBACX,mBACA,YAC+B;AAAA;AAC/B,UAAM,EAAC,UAAS,IAAI,aAAY,UAAU;AAE1C,UAAM,mBAAmB,uCAAwD;AACjF,UAAM,kBAAkB,+CAA2C,kBAAkB,SAAS;AAE9F,QAAI,OAAO,KAAK,eAAe,EAAE,WAAW,GAAG;AAC3C,aAAO;AAAA,IACX;AAEA,QAAI;AACA,YAAM,SAAS,MAAM,kBAAkB;AAAA,QACnC;AAAA,QACA;AAAA,UACI,OAAO,mCAA2C;AAAA,UAClD,MAAM,iCAA0C;AAAA,UAChD,YAAY;AAAA,QAChB;AAAA,MACJ;AAEA,aAAO,OAAO;AAAA,IAClB,SAAS,OAAP;AACE,mBAAAA,QAAI;AAAA,QACA,iEAAiE,sBAAsB;AAAA,MAC3F;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAEA,IAAO,iBAAQ;AAAA,EACX;AAAA,EACA;AACJ;;;AD/BA,IAAAC,kBAAoB;AAEpB,IAAM,mBAAoD,oBAAI,IAAI;AAClE,IAAM,eAAgD,oBAAI,IAAI;AAC9D,IAAM,qBAAoD,oBAAI,IAAI;AAClE,IAAM,mBAAoD,oBAAI,IAAI;AAClE,IAAM,eAAgD,oBAAI,IAAI;AAC9D,IAAM,YAAY,oBAAI,IAAoB;AAE1C,SAAe,wBAA2D;AAAA;AACtE,UAAM,EAAC,cAAc,UAAS,IAAI,aAAY,UAAU;AAExD,UAAM,oBAAoB,qBAAqB;AAC/C,QAAI,CAAC,mBAAmB;AACpB,aAAO;AAAA,IACX;AAEA,QAAI,+BAAkE,MAAM;AAAA,IAAC;AAC7E,QAAI,wBAAoD,MACpD,QAAQ,QAAQ,CAAC,CAAqB;AAC1C,UAAM,0BAAwD,CAAC,SAAc;AAhDjF;AAiDQ,gCAAa,IAAI,IAAI,MAArB,YAA0B;AAAA;AAE9B,QAAI,cAAc;AACd,YAAM,cAAc,WAAW,SAAS;AACxC,YAAM,2BAA2B,iBAAiB;AAClD,qCAA+B,CAAC,MAAc,uBAC1C,qCAAqC,MAAM,kBAAkB;AACjE,8BAAwB,CAAO,SAAc;AAAG,yCAA0B,IAAI;AAAA;AAAA,IAClF;AAEA,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,CAAC,UAAkB,eAAe,mBAAmB,KAAK;AAAA,MAC1E,uBAAuB,CAAC,aAAqB,UAAU,IAAI,QAAQ;AAAA,IACvE;AAAA,EACJ;AAAA;AAEA,SAAS,uBAAuC;AAC5C,QAAM,EAAC,WAAW,aAAY,IAAI,aAAY,UAAU;AAExD,MAAI,CAAC,cAAc;AACf,WAAO;AAAA,EACX;AAEA,QAAM,mBAAmB,+CAA4D;AACrF,QAAM,kBAAkB,+CAA2C,kBAAkB,SAAS;AAE9F,MAAI,OAAO,KAAK,eAAe,EAAE,WAAW,GAAG;AAC3C,WAAO;AAAA,EACX;AAEA,QAAM,UAAU,IAAI,oBAAQ;AAAA,IACxB,MAAM,mCAA2C;AAAA,IACjD,SAAS,yCAA8C;AAAA,EAC3D,CAAC;AAED,SAAO;AACX;AAEA,SAAe,2BAA2B,mBAA2C;AAAA;AACjF,UAAM,EAAC,UAAS,IAAI,aAAY,UAAU;AAE1C,UAAM,UAAqC;AAAA,MACvC,SAAS;AAAA,IACb;AAEA,WAAO,KAAK,IAAI,wBAAwB;AAExC,UAAM,YAAY;AAClB,UAAM,kBAAkB;AAExB,QAAI;AACA,gBAAM,kBAAAC,SAAU,OAAO,EAAE;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AACA,YAAM,oBAAoB,UAAM,kBAAAA,SAAU;AAAA,QACtC,aAAS,oBAAK,WAAW,SAAS;AAAA,MACtC,CAAC,EAAE;AAAA,QACC;AAAA,QACA,GAAG;AAAA,QACH;AAAA,QACA;AAAA,MACJ;AACA,YAAM,WAAW,kBAAkB,MAAM,MAAM;AAC/C,UAAI,gBAAAC,QAAQ,IAAI,6BAA6B;AACzC,cAAM,0BAA0B,UAAM,kBAAAD,SAAU;AAAA,UAC5C,aAAS,oBAAK,WAAW,SAAS;AAAA,QACtC,CAAC,EAAE;AAAA,UACC;AAAA,UACA,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AACA,cAAM,gBAAgB,wBAAwB,MAAM,MAAM;AAC1D,cAAM,wBAAwB,eAAe,iBAAiB;AAAA,MAClE;AACA,YAAM,8BAA8B,UAAU,iBAAiB;AAAA,IACnE,UAAE;AACE,gBAAM,kBAAAA,SAAU,OAAO,EAAE,IAAI,YAAY,UAAU,SAAS;AAC5D,gBAAM,kBAAAA,SAAU,OAAO,EAAE,IAAI,UAAU,MAAM,eAAe;AAAA,IAChE;AAEA,WAAO,KAAK,IAAI,yBAAyB;AAAA,EAC7C;AAAA;AAEA,SAAe,8BACX,UACA,mBACa;AAAA;AACb,eAAW,WAAW,UAAU;AAC5B,UAAI,CAAC,SAAS;AACV;AAAA,MACJ;AAEA,YAAM,YAAY,QAAQ,MAAM,IAAI;AACpC,YAAM,WAAW,UAAU,CAAC;AAC5B,YAAM,CAAC,OAAOE,OAAM,UAAU,IAAI,SAAS,MAAM,IAAI;AAErD,UAAI,sBAAsB,EAAC,OAAO,MAAAA,MAAI,CAAC,GAAG;AACtC;AAAA,MACJ;AAEA,YAAM,qBAAqB,iBAAiB,IAAI,KAAK;AAErD,UAAI;AAEJ,UAAI,uBAAuB,QAAW;AAClC,eAAO,KAAK,kCAAkC,KAAK;AAEnD,gCAAwB,MAAM;AAAA,UAC1B;AAAA,UACA;AAAA,QACJ;AAEA,YAAI,uBAAuB;AACvB,gBAAM,QAAQ,UAAU,OAAO,CAAC;AAChC,gCAAsB,OAAO;AAAA,YACzB,CAAC,KAAK,GAAG;AAAA,UACb,CAAC;AAAA,QACL;AACA,yBAAiB,IAAI,OAAO,qBAAqB;AAAA,MACrD,WAAW,oBAAoB;AAC3B,cAAM,QAAQ,UAAU,OAAO,CAAC;AAChC,8BAAsB,OAAO;AAAA,UACzB,CAAC,KAAK,GAAG;AAAA,QACb,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA;AAEA,SAAe,wBAAwB,gBAA0B,mBAA4B;AAAA;AACzF,eAAW,WAAW,gBAAgB;AAClC,UAAI,CAAC,SAAS;AACV;AAAA,MACJ;AAEA,YAAM,YAAY,QAAQ,MAAM,IAAI;AACpC,YAAM,CAAC,UAAU,GAAG,KAAK,IAAI;AAC7B,YAAM,CAAC,OAAOA,OAAM,UAAU,IAAI,SAAS,MAAM,GAAG;AAEpD,UAAI,sBAAsB,EAAC,OAAO,MAAAA,MAAI,CAAC,GAAG;AACtC;AAAA,MACJ;AAEA,YAAM,iBAAiB,EAAC,OAAO,WAAU,GAAG,OAAO,iBAAiB;AAAA,IACxE;AAAA,EACJ;AAAA;AAEA,SAAe,+BACX,mBACA,YAC2B;AAAA;AAC3B,UAAM,aAAa,MAAM,eAAO,oBAAoB,mBAAmB,UAAU;AAEjF,QAAI,CAAC,YAAY;AACb,aAAO;AAAA,IACX;AAEA,UAAM,EAAC,QAAQ,OAAM,IAAI;AAEzB,QAAI,CAAC,QAAQ;AACT,aAAO;AAAA,IACX;AAEA,UAAM,EAAC,YAAY,QAAQ,UAAUC,MAAK,MAAK,IAAI;AAEnD,WAAO;AAAA,MACH;AAAA,MACA,OAAO,OAAO,OAAO;AAAA,MACrB;AAAA,MACA,MAAM,OAAO,OAAO;AAAA,MACpB,KAAAA;AAAA,IACJ;AAAA,EACJ;AAAA;AAEA,SAAe,iBACX,YACA,OACA,mBACF;AAAA;AACE,eAAW,QAAQ,OAAO;AACtB,UAAI,CAAC,MAAM;AACP;AAAA,MACJ;AACA,YAAM,oBAAgB,yBAAU,eAAe,IAAI,CAAC;AACpD,YAAM,EAAC,OAAO,WAAU,IAAI;AAE5B,UAAI,iBAAiB,iBAAiB,IAAI,KAAK,KAAK;AAEpD,UAAI,CAAC,gBAAgB;AACjB,eAAO,KAAK,6BAA6B,KAAK;AAE9C,cAAM,aAAa,MAAM,eAAO,oBAAoB,mBAAmB,UAAU;AACjF,YAAI,CAAC,YAAY;AACb;AAAA,QACJ;AAEA,cAAM,EAAC,QAAQ,OAAM,IAAI;AACzB,YAAI,CAAC,QAAQ;AACT;AAAA,QACJ;AAEA,cAAM,EAAC,YAAY,QAAQ,UAAUA,MAAK,MAAK,IAAI;AACnD,yBAAiB;AAAA,UACb;AAAA,UACA,OAAO,OAAO,OAAO;AAAA,UACrB;AAAA,UACA,MAAM,OAAO,OAAO;AAAA,UACpB,KAAAA;AAAA,QACJ;AACA,yBAAiB,IAAI,OAAO,cAAc;AAAA,MAC9C;AAEA,mBAAa,IAAI,eAAe,cAAc;AAAA,IAClD;AAAA,EACJ;AAAA;AAEA,SAAe,0BAA0B,MAAyC;AAAA;AAC9E,QAAI,iBAAiB,SAAS,KAAK,CAAC,mBAAmB,IAAI,IAAI,GAAG;AAC9D,aAAO,CAAC;AAAA,IACZ;AAEA,WAAO,mBAAmB,IAAI,IAAI;AAAA,EACtC;AAAA;AAEA,SAAe,eAAe,SAAkB,WAAgD;AAAA;AAC5F,QAAI,SAAS,aAAa,IAAI,SAAS;AACvC,QAAI,CAAC,QAAQ;AACT,YAAM,OAAO,MAAM,eAAO,YAAY,SAAS,SAAS;AACxD,UAAI,CAAC,MAAM;AACP,eAAO;AAAA,MACX;AAEA,YAAM,EAAC,YAAY,QAAQ,UAAUA,MAAK,OAAO,OAAO,MAAAD,MAAI,IAAI;AAEhE,eAAS;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAAA;AAAA,QACA,KAAAC;AAAA,MACJ;AAEA,mBAAa,IAAI,WAAW,MAAM;AAAA,IACtC;AAEA,WAAO;AAAA,EACX;AAAA;AAEA,SAAS,qCACL,MACA,oBACI;AACJ,wBAAsB,CAAC,IAAI,GAAG,oBAAoB,IAAI;AAC1D;AAEA,SAAS,sBACL,OACA,gBACA,cAAc,OACV;AACJ,QAAM,QAAQ,CAAC,SAAiB;AAC5B,UAAM,oBAAgB,yBAAU,eAAe,IAAI,CAAC;AAEpD,QAAI,CAAC,mBAAmB,IAAI,aAAa,GAAG;AACxC,yBAAmB,IAAI,eAAe;AAAA,QAClC,cAAc;AAAA,QACd;AAAA,MACJ,CAAC;AACD;AAAA,IACJ;AAEA,UAAM,kBAAkB,mBAAmB,IAAI,aAAa;AAE5D,uBAAmB,IAAI,eAAe;AAAA,MAClC,cAAc,kCACP,mDAAiB,eACjB;AAAA,MAEP;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;AACL;AAOA,SAAS,sBAAsB,EAAC,OAAO,MAAAD,MAAI,GAA8B;AACrE,MAAI,EAAE,SAASA,QAAO;AAClB,WAAO;AAAA,EACX;AAEA,QAAM,EAAC,qBAAoB,IAAI,aAAY,UAAU;AACrD,MAAI,CAAC,sBAAsB;AACvB,WAAO;AAAA,EACX;AAEA,aAAW,WAAW,sBAAsB;AACxC,QAAI,aAAS,4BAAU,OAAO,OAAO,GAAG;AACpC,aAAO;AAAA,IACX;AAEA,QAAIA,aAAQ,4BAAUA,OAAM,OAAO,GAAG;AAClC,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,SAAO;AACX;AAEA,SAAe,cAAc,SAAiBE,YAAgC;AAAA;AAC1E,UAAM,YAAY,UAAM,kBAAAJ,SAAU;AAAA,MAC9B,SAAS;AAAA,IACb,CAAC,EAAE;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAEA,UAAM,QAAQ,UAAU,MAAM,MAAM;AACpC,UAAM,QAAQ,CAAC,SAAS;AACpB,YAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,IAAI;AACpC,YAAM,gBAAgB,MAAM,MAAM;AAClC,YAAM,WAAW,OAAO,aAAa;AACrC,YAAM,QAAQ,CAAC,SAAS;AACpB,cAAM,CAAC,QAAQ,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI;AAC1C,gBAAQ,OAAO,CAAC,GAAG;AAAA,UACf,KAAK,KAAK;AACN,YAAAI,WAAU,OAAO,IAAI;AACrB,YAAAA,WAAU,IAAI,IAAI,QAAQ;AAC1B;AAAA,UACJ;AAAA,UACA,KAAK,KAAK;AACN,YAAAA,WAAU,OAAO,IAAI;AACrB;AAAA,UACJ;AAAA,UACA,SAAS;AACL,YAAAA,WAAU,IAAI,MAAM,QAAQ;AAAA,UAChC;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AACD,WAAOA;AAAA,EACX;AAAA;AAEA,IAAOC,kBAAQ;;;AGnZf,SAAsB,kBAAqD;AAAA;AACvE,UAAM,EAAC,UAAS,IAAI,aAAY,UAAU;AAC1C,UAAM,gBAAgB,QAAQ,IAAI,sBAAuB,aAAa,UAAU;AAEhF,YAAQ,eAAe;AAAA,MACnB;AACI,eAAOC,gBAAsB;AAAA,MACjC;AACI,eAAO;AAAA,IACf;AAAA,EACJ;AAAA;;;APsBA,IAAM,oBAAwD,CAAC;AAC/D,IAAM,kBAA+C,CAAC;AAGtD,SAAsB,aAAa,kBAAyC;AAAA;AACxE,UAAM;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI,aAAY,UAAU;AAE1B,UAAM,eAAe,MAAM,gBAAgB;AAE3C,oBAAc,WAAW;AAEzB,UAAMC,mBAAkB,aAAW,mBAAmB;AAEtD,cAAM;AAAA,MACFA;AAAA,MACA;AAAA,UACA,uBAAS,CAAO,eAAuB;AACnC,cAAM,WAAW;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAEA,eAAO,KAAK,UAAU;AAEtB,cAAM,kBAAkB;AAAA,UACpB;AAAA,UACA,gBAAgB;AAAA,UAChB;AAAA,QACJ;AAEA,cAAM;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,EAAC;AAAA,IACL;AAEA,QAAI,YAAY;AACZ,YAAM,gBAAgB,gBAAgB;AAAA,IAC1C;AAAA,EACJ;AAAA;AAEA,SAAS,YACL,YACA,iBACA,kBACA,cACA,kBACQ;AACR,QAAM,gBAAoB,uBAAQ,UAAU;AAC5C,QAAM,eAAmB,wBAAS,UAAU;AAC5C,QAAM,oBAAwB,uBAAQ,UAAU;AAChD,QAAM,mBAAuB,wBAAS,UAAU,aAAa;AAC7D,QAAM,gBAAY,uBAAQ,kBAAkB,SAAS;AACrD,QAAM,iBAAiB,GAAG,gBAAgB;AAC1C,QAAM,iBAAa,uBAAQ,WAAW,cAAc;AACpD,QAAM,yBAAqB,uBAAQ,iBAAiB,UAAU;AAC9D,QAAM,eAAe,aAAW,UAAU,kBAAkB;AAE5D,QAAM,WAAqB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,SAAO;AACX;AAEA,SAAe,gBAAgB,kBAA0B;AAAA;AACrD,UAAM;AAAA,MACF,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACJ,IAAI,aAAY,UAAU;AAE1B,QAAI;AACA,YAAM,QAAQ;AAAA,QACV,OAAO,KAAK,iBAAiB,EAAE,IAAI,CAAO,WAAW;AACjD,cAAI,CAAC,kBAAkB,MAAM,EAAE,QAAQ;AACnC;AAAA,UACJ;AAEA,gBAAM,iBAAiB;AAAA,YACnB,kBAAkB,MAAM;AAAA,YACxB;AAAA,YACA;AAAA,UACJ;AACA,gBAAM,cAAU,wBAAK,wBAAS,iBAAiB,MAAM,GAAG,UAAU;AAClE,gBAAM,MAAqB,aAAW,WAAW,OAAO,KAAK;AAC7D,gBAAM,cAAc,0BAA0B,KAAK;AAAA,YAC/C,MAAM;AAAA,YACN,iBAAa,oBAAK,QAAQ,oBAAoB;AAAA,UAClD,CAAC;AAED,gBAAM,WAAW;AAAA,YACb,MAAM;AAAA,cACF,SAAS;AAAA,cACT,MAAM;AAAA,cACN,UAAU,CAAC;AAAA,cACX,MAAM,aAAa,CAAC;AAAA,cACpB,KAAK;AAAA,YACT;AAAA,YACA,QAAQ;AAAA,cACJ,UAAU;AAAA,YACd;AAAA,YACA,MAAM;AAAA,UACV;AAEA,gBAAM,mBAAe,uBAAQ,sBAAkB,wBAAS,iBAAiB,MAAM,CAAC;AAChF,gBAAM,+BAA2B,wBAAS,cAAc,gBAAgB;AAGxE,gBAAM,mBAAe,oBAAK,QAAQ,oBAAoB;AACtD,gBAAM,uBAAmB,oBAAK,QAAQ,yBAAyB;AAC/D,gBAAM,oBAAoB,qBAAqB,UAAU,wBAAwB;AAEjF,wCAAc,cAAc,iBAAiB;AAC7C,wCAAc,kBAAkB,KAAK,UAAU,QAAQ,CAAC;AAAA,QAC5D,EAAC;AAAA,MACL;AAAA,IACJ,SAAS,OAAP;AACE,cAAQ,IAAI,KAAK;AAAA,IACrB;AAAA,EACJ;AAAA;AAEA,SAAS,4BAA4B,WAA0B,UAA0B;AACrF,QAAM,EAAC,YAAY,aAAY,IAAI;AAEnC,MAAI,UAAU,KAAK,SAAS;AACxB;AAAA,EACJ;AAEA,kBAAgB,YAAY,IAAI,gBAAgB,YAAY,KAAK,oBAAI,IAAI;AAEzE,MAAI,gBAAgB,YAAY,EAAE,IAAI,UAAU,GAAG;AAC/C;AAAA,EACJ;AAEA,kBAAgB,YAAY,EAAE,IAAI,UAAU;AAE5C,oBAAkB,YAAY,IAAI,kBAAkB,YAAY,KAAK,CAAC;AACtE,oBAAkB,YAAY,EAAE,KAAK;AAAA,IACjC,MAAM;AAAA,IACN,SAAS,UAAU,KAAK;AAAA,IACxB,OAAO,UAAU,KAAK;AAAA,EAC1B,CAAC;AACL;AAEA,SAAS,mBACL,UACA,uBACA,cACe;AACf,QAAM,EAAC,cAAc,eAAe,WAAW,qBAAoB,IAAI,aAAY,UAAU;AAE7F,QAAM,kBAAmC;AAAA,IACrC;AAAA,IACA,UAAU;AAAA,MACN,kBAAkB,SAAS;AAAA,MAC3B;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,IACA,uBAAuB,QAAQ,gBAAgB,YAAY;AAAA,IAC3D;AAAA,EACJ;AAEA,MAAI,wBAAwB,WAAW;AACnC,UAAM,mBAAmB,OAAO,QAAQ,SAAS,EAAE,OAAO,CAAC,KAAgB,CAAC,KAAK,GAAG,MAAM;AACtF,UAAI,OAAO,KAAK,YAAY,EAAE,SAAS,GAAG,GAAG;AACzC,YAAI,GAAgC,IAAI;AAAA,MAC5C;AACA,aAAO;AAAA,IACX,GAAG,CAAC,CAAC;AAEL,oBAAgB,YAAY;AAAA,EAChC;AAEA,SAAO;AACX;AAEA,SAAe,6BACX,MACA,iBACA,mBACA,YACa;AAAA;AACb,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI;AACJ,UAAM,EAAC,qBAAoB,IAAI,aAAY,UAAU;AAErD,QAAI;AACA,sBAAAC,QAAM,MAAM,MAAM,SAAS;AAE3B,YAAM,sBAAsB,kBAAkB;AAE9C,UAAI,qBAAqB,iBAAiB,WAAW,qBAAqB;AACtE,wBAAe,WAAW,UAAU;AAAA,MACxC;AAEA,UAAI,iBAAiB,QAAQ,uBAAuB,sBAAsB;AACtE,2BAAmB,MAAM,eAAe;AACxC;AAAA,MACJ;AAEA,UACK,iBAAiB,QAAQ,uBACzB,iBAAiB,UAAU,CAAC,uBAAuB,kBAAkB,OACxE;AACE,+BAAuB,oBAAoB,WAAW,QAAQ;AAC9D;AAAA,MACJ;AAEA,cAAQ,cAAc;AAAA,QAClB,KAAK;AACD,gBAAM,mBAAmB,MAAM,eAAe;AAC9C;AAAA,QACJ,KAAK,QAAQ;AACT,gBAAM,oBAAoB,MAAM,qBAAqB,MAAM,eAAe;AAE1E,cAAI,YAAY;AACZ,wCAA4B,mBAAmB,IAAI;AAAA,UACvD;AAEA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,SAAS,GAAP;AACE,YAAM,UAAU,wCAAoC,oBAAK,kBAAkB;AAC3E,cAAQ,IAAI,SAAS,CAAC;AACtB,mBAAAC,QAAI,MAAM,OAAO;AAAA,IACrB;AAAA,EACJ;AAAA;AAEA,SAAS,mBAAmB,MAAgB,iBAAkC;AAC1E,QAAM,EAAC,YAAY,kBAAkB,gBAAe,IAAI;AAExD,QAAM,eAAW,uBAAQ,iBAAiB,UAAU;AACpD,QAAM,cAAU,yBAAa,UAAU,MAAM;AAC7C,QAAM,oBAAgB,sBAAK,OAAO;AAElC,MAAI,gBAAgB,WAAW;AAC3B,kBAAc,OAAO,kCAAI,cAAc,OAAS,gBAAgB;AAAA,EACpE;AAEA,oCAAc,uBAAQ,kBAAkB,UAAU,OAAG,sBAAK,aAAa,CAAC;AAC5E;AAEA,SAAS,uBACL,oBACA,WACA,UACI;AACJ,QAAM,OAAO;AACb,QAAM,SAAK,uBAAQ,WAAW,QAAQ;AAEtC,kBAAAD,QAAM,GAAG,MAAM,EAAE;AACrB;AAEA,SAAe,mBAAmB,MAAgB,iBAAiD;AAAA;AAC/F,UAAM,EAAC,YAAY,WAAU,IAAI;AAEjC,UAAM,aAAa;AAAA,MACf,WAAW;AAAA,MACX;AAAA,MACA,UAAU;AAAA,IACd,CAAC;AAAA,EACL;AAAA;AAEA,SAAe,qBACX,MACA,iBACsB;AAAA;AACtB,UAAM,EAAC,kBAAkB,UAAU,eAAe,YAAY,WAAU,IAAI;AAE5E,WAAO,eAAe;AAAA,MAClB,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACd,CAAC;AAAA,EACL;AAAA;;;AQ1VA,IAAAE,eAAgB;AAChB,qBAAoC;AACpC,IAAAC,gBAAsB;;;ACFf,SAAS,cAAiB,OAAY,YAAY,KAAM;AAC3D,QAAM,SAAgB,CAAC;AAEvB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK,WAAW;AACrD,UAAM,QAAa,MAAM,MAAM,GAAG,IAAI,SAAS;AAC/C,WAAO,KAAK,KAAK;AAAA,EACrB;AAEA,SAAO;AACX;;;ADEA,IAAI;AACJ,IAAI;AAEJ,SAAsB,gBAA+B;AAAA;AACjD,UAAM,aAAa,aAAY,UAAU;AAEzC,UAAMC,mBAAkB,aAAW,mBAAmB;AAEtD,QAAI,CAAC,sBAAsB;AACvB,wBAAkBA,gBAAe;AAEjC;AAAA,IACJ;AAEA,UAAMC,iBAAgB,eAAc,iBAAiB;AAGrD,yBAAqB,QAAQ,CAAC,WAAW;AACrC,aAAO,kBAAkB,EAAE,UAAU,CAAC,eAAe;AACjD,eAAO,KAAK,YAAsB,gBAAgB;AAAA,MACtD,CAAC;AAAA,IACL,CAAC;AAGD,UAAM,QAAQ;AAAA,MACV,qBAAqB,IAAI,CAAC,QAAQ,MAAM;AACpC,cAAM,uBAAuB,sBAAsB,CAAC;AAEpD,eAAO,OAAO,IAAI;AAAA,UACd;AAAA,UACA,eAAAA;AAAA,UACA,iBAAiB;AAAA,QACrB,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAGA,UAAM,QAAQ;AAAA,MACV,qBAAqB,IAAI,CAAC,WAAW;AACjC,eAAO,OAAO,OAAO,EAAE,KAAK,CAAC,SAAS;AAClC,uBAAAC,QAAI,IAAI,IAAI;AAAA,QAChB,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAGA,UAAM,QAAQ;AAAA,MACV,qBAAqB,IAAI,CAAC,WAAW;AACjC,eAAO,sBAAO,UAAU,MAAM;AAAA,MAClC,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAEA,SAAsB,oBAAoB;AAAA;AACtC,UAAMF,mBAAkB,aAAW,mBAAmB;AACtD,UAAM,YAAY,aAAaA,gBAAe;AAE9C,QAAI,QAAQ,IAAI,0BAA0B,YAAY,kBAAkB,iBAAiB,GAAG;AACxF;AAAA,IACJ;AAEA,4BAAwB,cAAcA,kBAAiB,SAAS,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM;AAE5F,UAAM,eAAe,sBAAsB;AAE3C,2BAAuB,MAAM,QAAQ;AAAA,MACjC,IAAI,MAAM,YAAY,EAAE,KAAK,IAAI,EAAE,IAAI,MAAM;AAEzC,mBAAO,sBAA2B,IAAI,sBAAO,UAAU,GAAG,EAAC,SAAS,IAAK,CAAC;AAAA,MAC9E,CAAC;AAAA,IACL;AAAA,EACJ;AAAA;AAEA,SAAS,aAAa,KAAe;AACjC,SAAO,KAAK,KAAK,IAAI,SAAS,aAAa;AAC/C;AAEA,SAAS,kBAAkBA,kBAA2B;AAClD,kBAAc,WAAW;AAEzB,EAAAA,iBAAgB,QAAQ,CAAC,eAAe;AACpC,aAAS;AAAA,MACL,WAAW;AAAA,MACX,mBAAe,uBAAQ,UAAU;AAAA,MACjC,UAAU,MAAM;AACZ,eAAO,KAAK,YAAY,gBAAgB;AAAA,MAC5C;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;AACL;;;AEpGA,IAAAG,gBAA+B;AAC/B,IAAAC,oBAAqB;AACrB,IAAAC,cAA0C;AAC1C,IAAAC,kBAAyB;AACzB,IAAAC,eAAgB;AAKhB,IAAAC,kBAAkB;AAIlB,SAAsB,sBAAqC;AAAA;AACvD,UAAM,EAAC,OAAO,iBAAiB,SAAS,CAAC,EAAC,IAAI,aAAY,UAAU;AAEpE,UAAM,wBAAwB,CAAC,UAA8B;AACzD,iBAAO,kBAAAC,SAAS,iBAAiB;AAAA,QAC7B,aAAa;AAAA,QACb,iBAAiB;AAAA,QACjB;AAAA,QACA;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,yBAAqB,qBAAqB;AAC1C,UAAM,kBAAkB,qBAAqB;AAAA,EACjD;AAAA;AAEA,SAAS,qBAAqB,uBAA4D;AACtF,QAAM;AAAA,IACF,OAAO;AAAA,IACP,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI,aAAY,UAAU;AAE1B,MAAI;AACA,UAAM,mBAAmB,sBAAsB,CAAC,iBAAiB,CAAC;AAElE,eAAW,QAAQ,kBAAkB;AACjC,aAAO,KAAK,IAAI;AAEhB,YAAM,uBAAmB,uBAAQ,iBAAiB,IAAI;AACtD,YAAM,cAAU,0BAAa,kBAAkB,MAAM;AACrD,YAAM,mBAAe,sBAAK,OAAO;AAEjC,qBAAc,IAAI,cAAc,MAAM,UAAU;AAEhD,UAAI,iBAAiB,SAAS,CAAC,gBAAgB,CAAC,oBAAoB;AAEhE,4BAAoB,MAAM,YAAY;AAAA,MAC1C;AAAA,IACJ;AAAA,EACJ,SAAS,OAAP;AACE,iBAAAC,QAAI,MAAM,+CAA+C,OAAO;AAChE,UAAM;AAAA,EACV;AACJ;AAEA,SAAS,oBAAoB,MAAc,cAA+B;AACtE,QAAM,EAAC,QAAQ,kBAAkB,aAAa,GAAE,IAAI,aAAY,UAAU;AAE1E,QAAM,iBAAa,uBAAQ,kBAAkB,IAAI;AACjD,QAAM,iBAAyC;AAAA,IAC3C,SAAS,aAAa;AAAA,EAC1B;AAEA,MAAI,aAAa,UAAU,GAAG;AAC1B,mBAAe,UAAU,IAAI,aAAa,UAAU;AAAA,EACxD;AAEA,QAAM,mBAAe,sBAAK,gBAAgB;AAAA,IACtC,WAAW;AAAA,EACf,CAAC;AAED,kBAAAC,QAAM,MAAM,UAAM,uBAAQ,UAAU,CAAC;AACrC,iCAAc,YAAY,YAAY;AAC1C;AAEA,SAAe,kBACX,uBACa;AAAA;AACb,QAAI;AACA,YAAM,eAAe,sBAAsB,CAAC,aAAa,CAAC;AAE1D,iBAAW,QAAQ,cAAc;AAC7B,eAAO,KAAK,IAAI;AAEhB,cAAM,aAAW,IAAI,IAAI;AAAA,MAC7B;AAAA,IACJ,SAAS,OAAP;AACE,mBAAAD,QAAI,MAAM,2CAA2C,OAAO;AAC5D,YAAM;AAAA,IACV;AAAA,EACJ;AAAA;;;AChGA,IAAAE,cAA4B;AAC5B,IAAAC,gBAA4B;AAarB,SAAS,iBAAuB;AACnC,QAAM,EAAC,QAAQ,iBAAgB,IAAI,aAAY,UAAU;AAEzD,QAAM,mCAAmC,aAAW,mBAAmB,EAAE,IAAI,CAAC,SAAS;AACnF,QAAI,eAAe,wBAAwB,KAAK,YAAQ,uBAAQ,IAAI,GAAG,EAAE,CAAC;AAE1E,QAAI,aAAa,SAAS,QAAQ,GAAG;AACjC,qBAAe,aAAa,UAAU,GAAG,aAAa,SAAS,CAAC;AAAA,IACpE;AAEA,WAAO;AAAA,EACX,CAAC;AACD,QAAMC,mBAAkB,EAAC,OAAO,CAAC,GAAG,IAAI,IAAI,gCAAgC,CAAC,EAAC;AAC9E,QAAM,iBAAiB,OAAO,KAAK,KAAK,UAAUA,kBAAiB,MAAM,GAAI,GAAG,MAAM;AACtF,QAAM,cAAU,oBAAK,kBAAkB,YAAY;AAEnD,iCAAc,SAAS,cAAc;AACzC;;;ArCPA,IAAAC,kBAAkB;;;AsCxBlB,IAAAC,cAA+B;AAC/B,IAAAC,oBAAqB;AACrB,IAAAC,gBAA4B;AAC5B,uBAAyC;AACzC,wBAAiB;AAGjB,IAAAC,gBAAiC;AAajC,SAAsB,OAAO,OAAmC;AAAA;AAC5D,UAAM;AAAA,MACF;AAAA,MACA,SAAS,CAAC;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,IAAI;AAEJ,UAAM,WAAW,IAAI,0BAAS;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,aAAa,EAAC,aAAa,gBAAe;AAAA,IAC9C,CAAC;AAED,UAAM,qBAA2B,kBAAAC,aAAS,uBAAQ,KAAK,GAAG;AAAA,MACtD,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB;AAAA,IACJ,CAAC;AAED,cAAM;AAAA,MACF;AAAA,MACA;AAAA,UACA,wBAAS,CAAO,eAAuB;AACnC,cAAM,WAAW,kBAAAC,QAAK,OAAO,UAAU;AAEvC,eAAO,OAAO,UAAU;AAExB,YAAI;AACA,gBAAM,SAAS;AAAA,YACX,IAAI,kCAAiB;AAAA,cACjB,aAAa,WAAW,WAAW;AAAA,cACnC,QAAQ;AAAA,cACR,KAAK,4BAAwB,oBAAK,QAAQ,UAAU,CAAC;AAAA,cACrD,UAAM,kCAAiB,uBAAQ,OAAO,UAAU,CAAC;AAAA,YACrD,CAAC;AAAA,UACL;AAAA,QACJ,SAAS,OAAP;AACE,iBAAO,MAAM,YAAY,MAAM,OAAO;AAAA,QAC1C;AAAA,MACJ,EAAC;AAAA,IACL;AAAA,EACJ;AAAA;;;AtCtCA,IAAAC,eAAiB;AAEV,IAAM,QAAQ;AAAA,EACjB,SAAS,CAAC,SAAS,IAAI;AAAA,EACvB,aAAa;AAAA,EACb;AAAA,EACA;AACJ;AAEA,SAAS,QAAW,MAAe;AAC/B,SAAO,KACF,OAAO,SAAS;AAAA,IACb,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,UAAU;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,cAAc;AAAA,IAClB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC,EACA,OAAO,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC,EACA,OAAO,QAAQ;AAAA,IACZ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC,EACA,OAAO,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,sBAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,sBAAsB;AAAA,IAC1B,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,kBAAkB;AAAA,IACtB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,aAAa;AAAA,IACjB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,gBAAgB;AAAA,IACpB;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC,EACA,OAAO,0BAA0B;AAAA,IAC9B,SAAS,CAAC;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,IACP,MAAM;AAAA,EACV,CAAC,EACA,OAAO,gBAAgB;AAAA,IACpB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,mBAAmB;AAAA,IACvB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,gBAAgB;AAAA,IACpB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,eAAe;AAAA,IACnB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,WAAW;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,2BAA2B;AAAA,IAC/B,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,kBAAkB;AAAA,IACtB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,0BAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,kBAAkB;AAAA,IACtB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,yBAAyB;AAAA,IAC7B,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,MAAM,aAAa,EACnB,QAAQ,8BAA8B,EAAE,EACxC;AAAA,IACG,CAAC,SAAS,QAAQ;AAAA,IAClB;AAAA,EACJ;AACR;AAEA,SAAe,QAAQ,MAAsB;AAAA;AAtL7C;AAuLI,UAAM,uBAAmB,uBAAQ,KAAK,MAAM;AAC5C,UAAM,qBAAiB,uBAAQ,KAAK,QAAQ,gBAAgB;AAC5D,UAAM,sBAAkB,uBAAQ,KAAK,QAAQ,iBAAiB;AAE9D,QAAI;AACA,mBAAY,KAAK,iCACV,OADU;AAAA,QAEb,WAAW,KAAK;AAAA,QAChB,OAAO;AAAA,QACP,QAAQ;AAAA,MACZ,EAAC;AACD,wBAAU,KAAK,CAAC,gBAAAC,OAAsB,CAAC;AAEvC,YAAM;AAAA,QACF,QAAQ;AAAA,QACR;AAAA,QACA,SAAAC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ,IAAI,aAAY,UAAU;AAE1B,gCAA0B,gBAAgB;AAE1C,YAAM,oBAAoB;AAC1B,2BAAqB;AAErB,UAAI,YAAY;AACZ,uBAAe;AAAA,MACnB;AAEA,YAAM,uBAAmB,oBAAK,kBAAkB,aAAa;AAC7D,YAAM,eAAe,KAAK,cAAU,oBAAK,KAAK,OAAO,mBAAmB;AACxE,YAAM,sBAAkB,oBAAK,KAAK,OAAO,kBAAkB;AAC3D,YAAM,uBAAmB,oBAAK,KAAK,OAAO,oBAAoB;AAE9D,UAAI,CAAC,cAAc;AAEf,cAAM,kBAAkB;AAAA,MAC5B;AAEA,YAAM,YAAY;AAAA,QACd,CAAC,gBAAgB,cAAc;AAAA,QAC/B,CAAC,iBAAiB,aAAa,gBAAgB;AAAA,MACnD,EAAE,OAAO,OAAO;AAEhB,YAAM,QAAQ,IAAI,SAAS;AAE3B,UAAI,CAAC,eAAe;AAEhB,gBAAQ,cAAc;AAAA,UAClB,KAAK;AACD,0BAAc,gBAAgB;AAC9B;AAAA,UACJ,KAAK,MAAM;AACP,4BAAAC,QAAM,OAAG,uBAAQ,YAAY,GAAG,eAAe;AAC/C,4BAAAA,QAAM,OAAG,uBAAQ,eAAe,GAAG,eAAe;AAClD,4BAAAA,QAAM,OAAG,uBAAQ,gBAAgB,GAAG,eAAe;AAEnD,gBAAI,aAAa,sBAAsB;AACnC,oBAAM,gBAA0B,CAAC;AAGjC,qBAAO,KAAK,SAAS,EAAE;AAAA,gBACnB,CAAC,SAAM;AAzPnC,sBAAAC;AA0PgC,0BAAAA,MAAA,UAAU,IAAuB,MAAjC,gBAAAA,IAAoC;AAAA,oBAAQ,CAAC,SACzC,cAAc,KAAK,IAAI;AAAA;AAAA;AAAA,cAEnC;AAGA,wBAAU,KAAK,OAAO,iBAAiB,aAAa;AAAA,YACxD;AAEA;AAAA,UACJ;AAAA,QACJ;AAGA,wBAAAD,QAAM;AAAA,UACF;AAAA,UACA,KAAC,oBAAK,iBAAiB,GAAG,OAAG,oBAAK,iBAAiB,IAAI,CAAC;AAAA,UACxD;AAAA,QACJ;AAEA,YAAID,UAAS;AACT,gBAAM,kBAAiB,aAAQ,IAAI,uBAAZ,YAAkC;AACzD,gBAAM;AAAA,YACF,SAAS,CAAC;AAAA,YACV;AAAA,YACA,iBAAiB;AAAA,YACjB,eAAe;AAAA,YACf,eAAe,SAAS;AAAA,YACxB,cAAc;AAAA,YACd,kBAAkB;AAAA,UACtB,IAAI,aAAY,UAAU;AAE1B,gBAAM,OAAiB;AAAA,YACnB,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ,CAAC,GAAG,QAAQ,kBAAkB,iBAAiB;AAAA,YACvD;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ,SAAS,KAAP;AACE,aAAO,MAAM,IAAI,IAAI,OAAO;AAAA,IAChC,UAAE;AACE,kBAAY,cAAc;AAE1B,sBAAAC,QAAM,GAAG,OAAO,gBAAgB,eAAe;AAAA,IACnD;AAAA,EACJ;AAAA;AAEA,SAAS,0BAA0B,kBAA0B;AACzD,QAAM,OAAO,aAAY,UAAU;AAEnC,kBAAAA,QAAM,MAAM,MAAM,gBAAgB;AAGlC,kBAAAA,QAAM,GAAG,OAAO,KAAK,OAAO,KAAK,MAAM;AACvC,kBAAAA,QAAM,MAAM,KAAK,OAAO,KAAK,MAAM;AAEnC;AAAA,IACI,KAAK;AAAA,IACL,KAAK;AAAA,IACL,aAAAE,QAAK,KAAK,MAAM;AAAA,MACZ,KAAK,KAAK;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,CAAC,mBAAmB,mBAAmB;AAAA,IACnD,CAAC;AAAA,EACL;AAEA,kBAAAF,QAAM,MAAM,MAAM,OAAO,KAAK,KAAK;AACvC;;;AuCpUA,IAAAG,gBAAmB;AAQnB,IAAM,UAAU;AAEhB,IAAM,cAAc;AAEpB,IAAM,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AACJ;AAEA,SAASA,SAAW,MAAe;AAC/B,SAAO,KACF,OAAO,UAAU;AAAA,IACd,SAAS;AAAA,EACb,CAAC,EACA,OAAO,SAAS;AAAA,IACb,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC,EACA,OAAO,YAAY;AAAA,IAChB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,UAAU;AAAA,IACd,UAAU;AAAA,IACV,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,UAAU;AAAA,IACd,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC,EACA,OAAO,UAAU;AAAA,IACd,UAAU;AAAA,IACV,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACX,CAAC,EACA,OAAO,iBAAiB;AAAA,IACrB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC,EACA,OAAO,qBAAqB;AAAA,IACzB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,EACX,CAAC;AACT;AAcA,SAAeD,SAAQ,MAAuB;AAAA;AAC1C,iBAAY,KAAK,mBACV,KACN;AAED,UAAM,SAAS,aAAY,UAAU;AACrC,UAAM,EAAC,OAAO,UAAU,QAAQ,OAAM,IAAI;AAE1C,WAAO,KAAK,IAAI,yBAAyB,gBAAY,oBAAK,UAAU,QAAQ,MAAM,GAAG;AAErF,QAAI;AACA,YAAM,OAAO,MAAM;AAAA,IACvB,SAAS,OAAP;AACE,aAAO,MAAM,IAAI,MAAM,OAAO;AAAA,IAClC;AAAA,EACJ;AAAA;;;AC7FA,IAAAE,gBAAqC;AAErC,kCAAqD;AAErD,IAAAC,gBAAkC;AAPlC,IAAM;AAAA,EACF,UAAU,EAAC,UAAAC,WAAU,WAAAC,YAAW,OAAAC,OAAK;AACzC,IAAI,QAAQ,IAAI;AAUhB,IAAMC,WAAU;AAEhB,IAAMC,eAAc;AAEpB,IAAMC,WAAU,EAAC,SAAAF,UAAS,aAAAC,cAAa,SAAAE,UAAS,SAAAC,SAAO;AAEvD,IAAMC,WAAU;AAEhB,IAAM,kBAAkB;AAExB,IAAM,eAAN,cAA2B,MAAM;AAAA,EAG7B,YAAY,SAAiB,MAAc;AACvC,UAAM,OAAO;AAEb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEA,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAUd,SAASD,SAAW,MAAe;AAC/B,SAAO,KACF,OAAO,0BAA0B;AAAA,IAC9B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA,OAAO,0BAA0B;AAAA,IAC9B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA,OAAO,SAAS;AAAA,IACb,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA,OAAO,UAAU;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA;AAAA,IACG,CAAC,0BAA0B,0BAA0B,SAAS,QAAQ;AAAA,IACtE;AAAA,EACJ;AACR;AAGA,SAAeD,SAAQ,MAAsB;AAAA;AACzC,iBAAY,KAAK,mBACV,KACN;AAED,UAAM,EAAC,OAAO,QAAQ,sBAAsB,qBAAoB,IAAI;AAEpE,QAAI;AACJ,QAAI;AAEJ,QAAI;AACA,eAAS,oBAAoB,oBAAoB;AACjD,eAAS,oBAAoB,oBAAoB;AAAA,IACrD,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,eAAO,MAAM,OAAO,IAAI,OAAO;AAAA,MACnC;AAAA,IACJ;AAEA,QAAI,QAAQ,CAAC;AACb,QAAI,QAAkB,CAAC;AAEvB,QAAI;AACA,OAAC;AAAA,QACG,OAAO,EAAC,OAAO,MAAK;AAAA,MACxB,IAAI,MAAM,SAAK,oBAAK,OAAOE,QAAO,GAAG;AAAA,QACjC,QAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAAA,IACL,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,eAAO,MAAM,OAAO,IAAI,OAAO;AAAA,MACnC;AAAA,IACJ;AAEA,UAAM,qBAAqB,EAAC,QAAQ,QAAQ,OAAO,OAAM;AACzD,UAAM,qBAAqBC,UAAS,kBAAkB;AAEtD,QAAI;AACA,aAAO,KAAK,OAAO,iDAAiD;AAEpE,gBAAM,yBAAU,OAAO,qBAAiB,wBAAS,kBAAkB,CAAC;AAEpE,aAAO,KAAK,OAAO,iDAAiD;AAAA,IACxE,SAAS,KAAP;AACE,UAAI,eAAe,SAAS,eAAe,cAAc;AACrD,cAAM,OAAO,eAAe,eAAe,IAAI,OAAO;AAEtD,eAAO,MAAM,MAAM,IAAI,OAAO;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AAAA;AAEA,SAAS,oBAAoB,gBAAwB;AACjD,QAAM,CAAC,UAAU,MAAM,IAAI,eAAe,MAAM,GAAG;AACnD,OAAI,qCAAU,YAAU,iCAAQ,SAAQ;AACpC,WAAO,EAAC,UAAU,OAAM;AAAA,EAC5B;AAEA,QAAM,IAAI,MAAM,gCAAgC;AACpD;AASA,SAASA,UAAS,QAA4B;AAC1C,QAAM,EAAC,OAAO,QAAQ,QAAQ,OAAM,IAAI;AAExC,SAAO,CAAO,iBAAyB;AACnC,UAAM,WAAW,MAAM,OAAO,EAAC,MAAM,aAAY,CAAC;AAClD,UAAM,gBAAY,uBAAQ,YAAY;AAEtC,UAAM,qBAAqB,aAAa,QAAQ,WAAW,EAAE,EAAE,MAAM,MAAM,MAAM;AAEjF,UAAM,iBAAa,oBAAK,QAAQ,kBAAkB;AAClD,UAAM,UAAU,aAAa;AAC7B,UAAM,eAAe,aAAa;AAElC,UAAM,oBAAoB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAEA,UAAM,YAAY,MAAM,UAAU,iBAAiB;AAEnD,UAAM,mBAAmB,iCAClB,YADkB;AAAA,MAErB;AAAA,MACA;AAAA,IACJ;AAEA,UAAM,OAAO,gBAAgB;AAAA,EACjC;AACJ;AAMA,SAAe,OAAO,QAA0B;AAAA;AAC5C,UAAM,EAAC,KAAI,IAAI;AAEf,QAAI;AACJ,QAAI;AACA,aAAO,KAAK,MAAM,uBAAuB;AAEzC,iBAAW,MAAMT,UAAS,MAAM,EAAC,UAAU,QAAO,CAAC;AAEnD,aAAO,KAAK,MAAM,gCAAgC;AAAA,IACtD,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,cAAM,IAAI,aAAa,IAAI,SAAS,IAAI;AAAA,MAC5C;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA;AAUA,SAAe,UAAU,QAA6B;AAAA;AAClD,QAAI;AAEJ,WAAO,KAAK,OAAO,cAAc,6CAA6C;AAE9E,QAAI;AACA,kBAAY,4BAAAU,QAAoB,QAAQ,MAAM;AAAA,IAClD,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,cAAM,IAAI,aAAa,IAAI,SAAS,OAAO,YAAY;AAAA,MAC3D;AAAA,IACJ;AAEA,WAAO,KAAK,OAAO,cAAc,sDAAsD;AAEvF,WAAO;AAAA,EACX;AAAA;AASA,SAAe,OAAO,QAA0B;AAAA;AAC5C,UAAM,EAAC,SAAS,cAAc,KAAK,SAAQ,IAAI;AAE/C,WAAO,KAAK,OAAO,SAAS,oBAAoB;AAChD,WAAO,KAAK,OAAO,cAAc,uBAAuB;AAExD,UAAMR,WAAM,uBAAQ,OAAO,GAAG,EAAC,WAAW,KAAI,CAAC;AAE/C,UAAM,QAAQ,IAAI,CAACD,WAAU,cAAc,QAAQ,GAAGA,WAAU,SAAS,GAAG,CAAC,CAAC;AAE9E,WAAO,KAAK,OAAO,SAAS,6BAA6B;AACzD,WAAO,KAAK,OAAO,cAAc,gCAAgC;AAAA,EACrE;AAAA;;;AC9OA,IAAAU,gBAAqC;AAErC,IAAAC,+BAAqD;AAErD,IAAAC,gBAAwB;AAPxB,IAAM;AAAA,EACF,UAAU,EAAC,UAAAC,WAAU,WAAAC,YAAW,OAAAC,OAAK;AACzC,IAAI,QAAQ,IAAI;AAUhB,IAAMC,WAAU;AAEhB,IAAMC,eAAc;AAEpB,IAAM,UAAU,EAAC,SAAAD,UAAS,aAAAC,cAAa,SAAAC,UAAS,SAAAC,SAAO;AAEvD,IAAM,cAAc;AACpB,IAAM,WAAW;AACjB,IAAMC,mBAAkB;AAExB,IAAM,eAAN,cAA2B,MAAM;AAAA,EAG7B,YAAY,SAAiB,MAAc;AACvC,UAAM,OAAO;AAEb,SAAK,OAAO;AAAA,EAChB;AACJ;AAEA,IAAMC,SACF;AAIJ,SAASF,SAAW,MAAe;AAC/B,SAAO,KACF,OAAO,SAAS;AAAA,IACb,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA,OAAO,UAAU;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA,aAAa,CAAC,SAAS,QAAQ,GAAGE,MAAK;AAChD;AAGA,SAAeH,SAAQ,MAAsB;AAAA;AACzC,iBAAY,KAAK,mBACV,KACN;AAED,UAAM,EAAC,OAAO,OAAM,IAAI;AAExB,QAAI,QAAQ,CAAC;AACb,QAAI,gBAA0B,CAAC;AAC/B,QAAI,aAAuB,CAAC;AAE5B,QAAI;AACA,OAAC;AAAA,QACG,OAAO,EAAC,OAAO,eAAe,MAAK;AAAA,MACvC,IAAI,MAAM,SAAK,oBAAK,OAAO,WAAW,GAAG;AAAA,QACrC,QAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAED,OAAC;AAAA,QACG,OAAO,EAAC,OAAO,YAAY,MAAK;AAAA,MACpC,IAAI,MAAM,SAAK,oBAAK,OAAO,QAAQ,GAAG;AAAA,QAClC,QAAQ;AAAA,QACR;AAAA,MACJ,CAAC;AAED,UAAI,WAAW,WAAW,cAAc,QAAQ;AAC5C,cAAM,IAAI,aAAa,qDAAqD,KAAK;AAAA,MACrF;AAAA,IACJ,SAAS,KAAP;AACE,UAAI,eAAe,SAAS,eAAe,cAAc;AACrD,cAAM,OAAO,eAAe,eAAe,IAAI,OAAO;AAEtD,eAAO,MAAM,MAAM,IAAI,OAAO;AAAA,MAClC;AAAA,IACJ;AAEA,UAAM,qBAAqB,EAAC,OAAO,OAAM;AACzC,UAAM,qBAAqBI,UAAS,kBAAkB;AAEtD,QAAI;AACA,aAAO,KAAK,OAAO,kDAAkD;AAErE,gBAAM,yBAAU,YAAYF,kBAAiB,kBAAkB;AAE/D,aAAO,KAAK,OAAO,mDAAmD;AAAA,IAC1E,SAAS,KAAP;AACE,UAAI,eAAe,SAAS,eAAe,cAAc;AACrD,cAAM,OAAO,eAAe,eAAe,IAAI,OAAO;AAEtD,eAAO,MAAM,MAAM,IAAI,OAAO;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AAAA;AAOA,SAASE,UAAS,QAA4B;AAC1C,QAAM,EAAC,OAAO,OAAM,IAAI;AAExB,SAAO,CAAO,cAAsB;AAChC,UAAM,gBAAY,uBAAQ,SAAS;AACnC,UAAM,oBAAoB,UAAU,QAAQ,WAAW,EAAE;AACzD,UAAM,eAAe,oBAAoB;AAEzC,UAAM,mBAAmB,EAAC,WAAW,aAAY;AACjD,UAAM,OAAO,MAAMC,QAAO,gBAAgB;AAE1C,UAAM,qBAAqB,iCACpB,OADoB;AAAA,MAEvB;AAAA,MACA;AAAA,IACJ;AACA,UAAM,EAAC,SAAQ,IAAI,MAAM,SAAS,kBAAkB;AAEpD,UAAM,oBAAoB,kBAAkB,MAAM,MAAM,MAAM;AAC9D,UAAM,mBAAe,oBAAK,QAAQ,iBAAiB,IAAI;AAEvD,UAAM,mBAAmB;AAAA,MACrB;AAAA,MACA;AAAA,IACJ;AACA,UAAMC,QAAO,gBAAgB;AAAA,EACjC;AACJ;AAOA,SAAeD,QAAO,QAA0B;AAAA;AAC5C,UAAM,EAAC,cAAc,UAAS,IAAI;AAElC,QAAI;AACJ,QAAI;AAEJ,QAAI;AACA,aAAO,KAAK,cAAc,uBAAuB;AAEjD,iBAAW,MAAMV,UAAS,cAAc,EAAC,UAAU,QAAO,CAAC;AAE3D,aAAO,KAAK,cAAc,gCAAgC;AAAA,IAC9D,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,cAAM,IAAI,aAAa,IAAI,SAAS,YAAY;AAAA,MACpD;AAAA,IACJ;AAEA,QAAI;AACA,aAAO,KAAK,WAAW,oBAAoB;AAE3C,YAAM,MAAMA,UAAS,WAAW,EAAC,UAAU,QAAO,CAAC;AAEnD,aAAO,KAAK,WAAW,6BAA6B;AAAA,IACxD,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,cAAM,IAAI,aAAa,IAAI,SAAS,SAAS;AAAA,MACjD;AAAA,IACJ;AAEA,WAAO,EAAC,UAAU,IAAG;AAAA,EACzB;AAAA;AAOA,SAAe,SAAS,QAA4B;AAAA;AAChD,UAAM,EAAC,cAAc,UAAS,IAAI;AAClC,QAAI;AAEJ,QAAI;AACA,aAAO,KAAK,cAAc,4CAA4C;AACtE,aAAO,KAAK,WAAW,4CAA4C;AAEnE,iBAAW,6BAAAY,QAAoB,QAAQ,MAAM;AAE7C,aAAO,KAAK,cAAc,qDAAqD;AAC/E,aAAO,KAAK,WAAW,qDAAqD;AAAA,IAChF,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,cAAM,IAAI,aAAa,IAAI,SAAS,GAAG,aAAa,cAAc;AAAA,MACtE;AAAA,IACJ;AAEA,WAAO,EAAC,SAAQ;AAAA,EACpB;AAAA;AAOA,SAAeD,QAAO,QAA0B;AAAA;AAC5C,UAAM,EAAC,UAAU,aAAY,IAAI;AAEjC,QAAI;AACA,aAAO,KAAK,cAAc,uBAAuB;AAEjD,YAAMT,WAAM,uBAAQ,YAAY,GAAG,EAAC,WAAW,KAAI,CAAC;AACpD,YAAMD,WAAU,cAAc,QAAQ;AAEtC,aAAO,KAAK,cAAc,gCAAgC;AAAA,IAC9D,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,cAAM,IAAI,aAAa,IAAI,SAAS,YAAY;AAAA,MACpD;AAAA,IACJ;AAAA,EACJ;AAAA;;;AC7NA,IAAMY,WAAU;AAEhB,IAAMC,eACF;AAEJ,IAAM,QAAQ;AAAA,EACV,SAAAD;AAAA,EACA,aAAAC;AAAA,EACA,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,SAAAC;AACJ;AAEA,SAASA,SAAW,MAAe;AAC/B,SAAO,KACF,QAAQC,QAAO,EACf,QAAQ,OAAO,EACf;AAAA,IACG;AAAA,IACA,+BAA+BH,sBAAqBG,SAAQ,YAAY,QAAQ;AAAA,EACpF;AACR;;;ACzBA,IAAAC,gBAAyC;AAEzC,IAAAC,gBAAqC;AACrC,IAAAC,mBAAyC;AACzC,6BAAwB;AAExB,qBAAsB;AACtB,6BAAuC;AACvC,iCAGO;AAEP,IAAAC,+BAAgC;;;ACbhC,IAAAC,mBAAuB;AACvB,IAAAC,kBAAkB;AAClB,gBAAsB;AACtB,IAAAC,gBAAmB;AAInB,IAAM,8BAA8B;AAEpC,SAAe,sBAAsB;AAAA;AACjC,UAAM,EAAC,mBAAkB,IAAI;AAE7B,WAAO,kDAAsB,+BAA+B;AAAA,EAChE;AAAA;AAEA,SAAe,iCAAiC;AAAA;AAC5C,UAAM,QAAQ;AAEd,UAAM,WAAO,wBAAK,mBAAQ,GAAG,2BAA2B;AAExD,QAAI;AAEJ,QAAI;AACA,cAAQ,UAAM,2BAAS,MAAM,EAAC,UAAU,OAAM,CAAC;AAE/C,cAAQ,MAAM,KAAK;AAEnB,UAAI,EAAC,+BAAO,SAAQ;AAChB,cAAM,IAAI,MAAM,KAAK;AAAA,MACzB;AAAA,IACJ,SAAS,KAAP;AACE,aAAO,MAAM,KAAK;AAElB,YAAM;AAAA,IACV;AAEA,WAAO;AAAA,EACX;AAAA;;;ADdA,IAAMC,WAAU;AAEhB,IAAMC,eAAc;AAEpB,IAAM,YAAY;AAAA,EACd,SAAAD;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AACJ;AAEA,IAAMC,WAAU;AAChB,IAAM,iBAAiB;AACvB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAEtB,SAASD,SAAW,MAAe;AAC/B,SAAO,KACF,OAAO,mBAAmB;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA,OAAO,mBAAmB;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,EACV,CAAC,EACA;AAAA,IACG,CAAC,mBAAmB,iBAAiB;AAAA,IACrC;AAAA,EACJ;AACR;AAEA,IAAM,kBAAN,cAA8B,MAAM;AAAA,EAGhC,YAAY,SAAiB,MAAc;AACvC,UAAM,OAAO;AAEb,SAAK,OAAO;AAAA,EAChB;AACJ;AAGA,SAAeD,SAAQ,MAAsB;AAAA;AACzC,iBAAY,KAAK,mBACV,KACN;AAED,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,IACR,IAAI;AAEJ,WAAO;AAAA,MACH;AAAA,MACA,kCAAkC,qBAAqB;AAAA,IAC3D;AAEA,QAAI;AACA,UAAI,QAAQ,CAAC;AAEb,OAAC;AAAA,QACG,OAAO,EAAC,MAAK;AAAA,MACjB,IAAI,MAAM,SAAK,oBAAK,OAAOE,QAAO,GAAG;AAAA,QACjC,QAAQ;AAAA,MACZ,CAAC;AAED,YAAM,aAAa,MAAM,oBAAoB;AAE7C,YAAM,mBAAmB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACJ;AAEA,YAAM,cAAc,WAAW,gBAAgB;AAE/C,gBAAM,yBAAU,OAAO,oBAAgB,wBAAS,WAAW,CAAC;AAAA,IAChE,SAAS,KAAP;AACE,UAAI,eAAe,SAAS,eAAe,iBAAiB;AACxD,cAAM,UAAU,IAAI;AAEpB,cAAM,OAAO,eAAe,kBAAkB,IAAI,OAAO;AAEzD,eAAO,MAAM,MAAM,OAAO;AAAA,MAC9B;AAAA,IACJ;AAEA,WAAO;AAAA,MACH;AAAA,MACA,iCAAiC,qBAAqB;AAAA,IAC1D;AAAA,EACJ;AAAA;AAYA,SAAS,WAAW,QAA0B;AAC1C,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAEJ,QAAM,UAAU,IAAI,uBAAQ,EAAC,WAAU,CAAC;AACxC,QAAM,SAAS,QAAQ,OAAO,+CAAwB;AACtD,QAAM,UAAU,CAAC,UAAoB,MACjC,OACK;AAAA,IACG,4CAAiB,YAAY;AAAA,MACzB;AAAA,MACA;AAAA,MACA,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,QACZ,cAAc;AAAA,UACV,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,QAAQ,2BAAAC,wBAAO;AAAA,IACnB,CAAC;AAAA,EACL,EACC,KAAK,CAAC,YAAY,QAAQ,aAAa,IAAI,CAAC,EAAC,KAAI,MAAM,IAAI,CAAC;AAErE,SAAO,CAAO,WAAmB;AAC7B,QAAI;AACA,aAAO,KAAK,QAAQ,aAAa;AAEjC,YAAM,KAAK,UAAM,+BAAS,uBAAQ,MAAM,GAAG,EAAC,UAAU,QAAO,CAAC;AAE9D,YAAM,EAAC,KAAK,SAAQ,IAAI,6BAAAC,QAAoB,QAAQ;AAAA,QAChD,QAAQ;AAAA,UACJ,UAAU;AAAA,UACV,QAAQ,eAAe,YAAY;AAAA,QACvC;AAAA,QACA,QAAQ;AAAA,UACJ,UAAU;AAAA,UACV,QAAQ,eAAe,YAAY;AAAA,QACvC;AAAA,QACA,UAAU;AAAA,QACV,cAAc;AAAA,QACd,cAAc;AAAA,MAClB,CAAC;AAED,YAAM,QAAQ,sBAAsB,GAAG;AAEvC,YAAM,QAAQ,MAAM,QAAQ;AAAA,QACxB,MAAM;AAAA,UACF,CACI;AAAA,YACI;AAAA,YACA;AAAA,YACA;AAAA,UACJ,GAKA,MACA,UACC;AACD,gBAAI,KAAK,UAAU,aAAa;AAC5B,qBAAO;AAAA,gBACH;AAAA,gBACA;AAAA,cACJ;AACA,uBAAS,KAAK,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,qBAAO,EAAC,UAAU,QAAQ,WAAU;AAAA,YACxC;AAEA,gBAAI,aAAa,KAAK,SAAS,eAAe,UAAU,MAAM,SAAS,GAAG;AACtE,uBAAS,KAAK,QAAQ,QAAQ,MAAM,CAAC,CAAC;AACtC,uBAAS,CAAC;AACV,2BAAa;AAAA,YACjB;AAEA,mBAAO,KAAK,IAAI;AAChB,0BAAc,KAAK;AAEnB,mBAAO,EAAC,UAAU,QAAQ,WAAU;AAAA,UACxC;AAAA,UACA;AAAA,YACI,UAAU,CAAC;AAAA,YACX,QAAQ,CAAC;AAAA,YACT,YAAY;AAAA,UAChB;AAAA,QACJ,EAAE;AAAA,MACN;AAEA,YAAM,eAAgB,CAAC,EAAe,OAAO,GAAG,KAAK;AAErD,YAAM,kBAAkB,oBAAoB;AAAA,QACxC,gBAAgB,iBAAiB,MAAM;AAAA,QACvC,gBAAgB,iBAAiB,MAAM;AAAA,QACvC,SAAS;AAAA,QACT,SAAS;AAAA,MACb,CAAC;AAED,YAAM,WAAW,MAAM,6BAAAA,QAAoB,QAAQ;AAAA,QAC/C,KAAK;AAAA,QACL;AAAA,MACJ,CAAC;AAED,YAAM,aAAa,OAAO,QAAQ,OAAO,MAAM;AAE/C,gBAAM,4BAAM,uBAAQ,UAAU,GAAG,EAAC,WAAW,KAAI,CAAC;AAClD,gBAAM,4BAAU,YAAY,QAAQ;AAEpC,aAAO,KAAK,YAAY,sBAAsB;AAAA,IAClD,SAAS,KAAP;AACE,UAAI,eAAe,OAAO;AACtB,cAAM,IAAI,gBAAgB,IAAI,SAAS,GAAG,MAAM;AAAA,MACpD;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,QAAQ,QAAoD;AACjE,aAAO;AAAA,IACH;AAAA,MACI,OAAO;AAAA,MACP,UAAU,CAAC,UAAkB;AAEzB,gBAAQ,KAAK,SAAS;AAAA,MAC1B;AAAA,IACJ;AAAA,QACA,wBAAS,MAAM;AAAA,EACnB;AACJ;AAEA,SAAS,sBAAsBC,QAAyB;AAnRxD;AAoRI,QAAM,SAAS,IAAI,iCAAU;AAE7B,QAAM,UAAS,8BAAO,MAAMA,MAAK,MAAlB,mBAAqB,UAArB,mBAA4B,SAA5B,mBAAkC,KAAK,kBAAvC,YAAwD,CAAC;AAExE,SAAO,MAAM,QAAQ,MAAM,IACrB,OAAO,IAAI,CAAC,EAAC,OAAM,MAAwB,MAAM,IACjD,CAAC,OAAO,MAAM;AACxB;AASA,SAAS,oBAAoB,QAAmC;AAC5D,QAAM,EAAC,gBAAgB,gBAAgB,SAAS,QAAO,IAAI;AAE3D,QAAM,OAAO,CAAC,MAAc,MAAsB;AAAA,kBACpC,IAAI;AAAA,wBACE,mBAAmB,QAAQ,CAAC;AAAA,wBAC5B,mBAAmB;AAAA;AAGvC,QAAM,MAAM;AAAA;AAAA;AAAA,yCAGyB,oCAAoC;AAAA;AAAA;AAAA;AAAA,gBAI7D,QAAQ,IAAI,IAAI;AAAA;AAAA;AAI5B,SAAO;AACX;;;A9ChTA,QAAQ,KAAK,aAAa;AAE1B,aAAAC,QACK,QAAQ,KAAK,EACb,QAAQ,OAAO,EACf,QAAQ,KAAK,EACb,QAAQ,SAAS,EACjB,OAAO,UAAU;AAAA,EACd,OAAO;AAAA,EACP,UAAU;AAAA,EACV,MAAM;AACV,CAAC,EACA,OAAO,UAAU;AAAA,EACd,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AACV,CAAC,EACA,OAAO,SAAS;AAAA,EACb,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AACV,CAAC,EACA,MAAM,CAAC,UAAU,UAAU,SAAS,QAAQ,SAAS,GAAG,iBAAiB,EACzE,QAAQ,OAAiC,WAAU,EAAE,EACrD,KAAK,EACL,UAAM,wBAAQ,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAC,OAAM,GAAG,WAAW;AACzD,UAAQ,QAAQ,aAAa;AAE7B,MAAI,KAAK;AACL,YAAQ,MAAM,GAAG;AACjB,YAAQ,KAAK,CAAC;AAAA,EAClB;AAEA,QAAM,EAAC,MAAM,MAAK,IAAI,aAAAC,QAAI,IAAI;AAE9B,MAAK,UAAU,KAAK,UAAW,MAAM,QAAQ;AACzC,YAAQ,KAAK,CAAC;AAAA,EAClB;AAEA,UAAQ,IAAI,MAAM;AAElB,UAAQ,KAAK,CAAC;AAClB,CAAC;",
6
- "names": ["import_log", "ResourceType", "import_path", "log", "merge", "import_path", "import_path", "import_fs", "import_js_yaml", "import_shelljs", "import_liquid", "import_log", "import_chalk", "import_js_yaml", "import_log", "log", "import_path", "import_path", "escape", "name", "url", "manifest", "name", "singlePageResults", "import_path", "import_path", "evalExp", "liquid", "import_path", "libglob", "import_path", "shell", "import_path", "import_path", "meta", "import_path", "import_lodash", "import_promises", "import_path", "import_js_yaml", "handler", "includerFunction", "name", "name", "includerFunction", "name", "includerFunction", "includerFunction", "name", "import_fs", "import_path", "name", "reader", "extractor", "writer", "includerFunction", "name", "includerFunction", "name", "shell", "log", "walkSync", "liquid", "import_path", "add", "import_path", "import_fs", "init", "import_path", "import_fs", "import_js_yaml", "import_log", "description", "log", "import_walk_sync", "import_shelljs", "walkSync", "shell", "import_path", "import_walk_sync", "import_shelljs", "walkSync", "navigationPaths", "shell", "includedTocPaths", "import_log", "log", "_uniq", "import_path", "import_shelljs", "import_fs", "import_chalk", "import_js_yaml", "import_log", "import_fs", "import_path", "import_shelljs", "import_log", "import_liquid", "log", "shell", "liquid", "import_path", "import_fs", "import_js_yaml", "import_log", "import_liquid", "yaml", "log", "links", "liquid", "plugins", "transform", "import_path", "import_log", "import_fs", "import_chalk", "log", "plugins", "lintMarkdown", "sourceMap", "yfmlint", "import_path", "import_log", "import_log", "log", "log", "import_process", "simpleGit", "process", "name", "url", "pathMTime", "github_default", "github_default", "navigationPaths", "shell", "log", "import_log", "import_path", "navigationPaths", "presetStorage", "log", "import_path", "import_walk_sync", "import_fs", "import_js_yaml", "import_log", "import_shelljs", "walkSync", "log", "shell", "import_fs", "import_path", "navigationPaths", "import_shelljs", "import_fs", "import_walk_sync", "import_path", "import_async", "walkSync", "mime", "import_glob", "OpenapiIncluder", "publish", "shell", "_a", "glob", "import_path", "handler", "builder", "import_path", "import_async", "readFile", "writeFile", "mkdir", "command", "description", "extract", "handler", "builder", "MD_GLOB", "pipeline", "markdownTranslation", "import_path", "import_markdown_translation", "import_async", "readFile", "writeFile", "mkdir", "command", "description", "handler", "builder", "MAX_CONCURRENCY", "USAGE", "pipeline", "reader", "writer", "markdownTranslation", "command", "description", "builder", "extract", "import_async", "import_path", "import_promises", "import_markdown_translation", "import_promises", "import_process", "import_path", "command", "description", "handler", "builder", "MD_GLOB", "Format", "markdownTranslation", "xliff", "yargs", "log"]
4
+ "sourcesContent": ["import yargs from 'yargs';\nimport {hideBin} from 'yargs/helpers';\nimport log from '@diplodoc/transform/lib/log';\nimport 'threads/register';\n\nimport {MAIN_TIMER_ID} from './constants';\n\nimport {build, publish, translate, xliff} from './cmd';\n\nconsole.time(MAIN_TIMER_ID);\n\nyargs\n .command(build)\n .command(publish)\n .command(xliff)\n .command(translate)\n .option('config', {\n alias: 'c',\n describe: 'YFM configuration file',\n type: 'string',\n })\n .option('strict', {\n alias: 's',\n default: false,\n describe: 'Run in strict mode',\n type: 'boolean',\n })\n .option('quiet', {\n alias: 'q',\n default: false,\n describe: \"Run in quiet mode. Don't write logs to stdout\",\n type: 'boolean',\n })\n .group(['config', 'strict', 'quiet', 'help', 'version'], 'Common options:')\n .version(typeof VERSION !== 'undefined' ? VERSION : '')\n .help()\n .parse(hideBin(process.argv), {}, (err, {strict}, output) => {\n console.timeEnd(MAIN_TIMER_ID);\n\n if (err) {\n console.error(err);\n process.exit(1);\n }\n\n const {warn, error} = log.get();\n\n if ((strict && warn.length) || error.length) {\n process.exit(1);\n }\n\n console.log(output);\n\n process.exit(0);\n });\n", "import {resolve} from 'path';\nconst os = require('os');\nconst notes = require('@diplodoc/transform/lib/plugins/notes');\nconst anchors = require('@diplodoc/transform/lib/plugins/anchors');\nconst code = require('@diplodoc/transform/lib/plugins/code');\nconst cut = require('@diplodoc/transform/lib/plugins/cut');\nconst deflist = require('@diplodoc/transform/lib/plugins/deflist');\nconst imsize = require('@diplodoc/transform/lib/plugins/imsize');\nconst meta = require('@diplodoc/transform/lib/plugins/meta');\nconst sup = require('@diplodoc/transform/lib/plugins/sup');\nconst tabs = require('@diplodoc/transform/lib/plugins/tabs');\nconst video = require('@diplodoc/transform/lib/plugins/video');\nconst includes = require('@diplodoc/transform/lib/plugins/includes');\nconst links = require('@diplodoc/transform/lib/plugins/links');\nconst images = require('@diplodoc/transform/lib/plugins/images');\nconst monospace = require('@diplodoc/transform/lib/plugins/monospace');\nconst table = require('@diplodoc/transform/lib/plugins/table');\nconst term = require('@diplodoc/transform/lib/plugins/term');\nconst blockAnchor = require('@diplodoc/transform/lib/plugins/block-anchor');\nconst changelog = require('@diplodoc/transform/lib/plugins/changelog');\nconst mermaid = require('@diplodoc/mermaid-extension');\nconst latex = require('@diplodoc/latex-extension');\nconst openapi = require('@diplodoc/openapi-extension');\n\nincludes.collect = require('@diplodoc/transform/lib/plugins/includes/collect');\nimages.collect = require('@diplodoc/transform/lib/plugins/images/collect');\nchangelog.collect = require('@diplodoc/transform/lib/plugins/changelog/collect');\n\nexport const ASSETS_FOLDER = resolve(__dirname, '../assets');\nexport const BUNDLE_FOLDER = '_bundle';\nexport const TMP_INPUT_FOLDER = '.tmp_input';\nexport const TMP_OUTPUT_FOLDER = '.tmp_output';\nexport const MAIN_TIMER_ID = 'Build time';\nexport const YFM_CONFIG_FILENAME = '.yfm';\nexport const REDIRECTS_FILENAME = 'redirects.yaml';\nexport const LINT_CONFIG_FILENAME = '.yfmlint';\nexport const SINGLE_PAGE_FILENAME = 'single-page.html';\nexport const SINGLE_PAGE_DATA_FILENAME = 'single-page.json';\nexport const CUSTOM_STYLE = 'custom-style';\n\nexport enum Stage {\n NEW = 'new',\n PREVIEW = 'preview',\n TECH_PREVIEW = 'tech-preview',\n SKIP = 'skip',\n}\n\nexport enum Lang {\n RU = 'ru',\n EN = 'en',\n}\n\nexport enum Platforms {\n WINDOWS = 'win32',\n MAC = 'darwin',\n LINUX = 'linux',\n}\n\nexport enum IncludeMode {\n ROOT_MERGE = 'root_merge',\n MERGE = 'merge',\n LINK = 'link',\n}\n\nexport enum ResourceType {\n style = 'style',\n script = 'script',\n}\n\nexport const YFM_PLUGINS = [\n meta,\n deflist,\n includes,\n cut,\n links,\n images,\n notes,\n anchors,\n tabs,\n code,\n imsize,\n sup,\n video,\n monospace,\n table,\n term,\n openapi.transform(),\n mermaid.transform(),\n latex.transform(),\n changelog,\n blockAnchor,\n];\n\nexport const PROCESSING_FINISHED = 'Processing finished:';\nexport const LINTING_FINISHED = 'Linting finished:';\nexport const GETTING_ALL_CONTRIBUTORS = 'Getting all contributors.';\nexport const ALL_CONTRIBUTORS_RECEIVED = 'All contributors received.';\nexport const getMsg\u0421onfigurationMustBeProvided = (repo: string) =>\n `\u0421onfiguration must be provided for ${repo} like env variables or in .yfm file`;\n\nexport const FIRST_COMMIT_FROM_ROBOT_IN_GITHUB = '2dce14271359cd20d7e874956d604de087560cf4';\n\n// Include example: 'master\\n' or 'nanov94/QUEUE-1234_some_branch_name.1.2.3\\n'\n// Regexp result: 'master' or 'nanov94/QUEUE-1234_some_branch_name'\nexport const REGEXP_BRANCH_NAME = /([\\d\\w\\-_/.]+)(?=\\r?\\n)/g;\n\n// Include example: {% include [createfolder](create-folder.md) %}\n// Regexp result: [createfolder](create-folder.md)\nexport const REGEXP_INCLUDE_CONTENTS = /(?<=[{%]\\sinclude\\s).+(?=\\s[%}])/gm;\n\n// Include example: [createfolder](create-folder.md)\n// Regexp result: create-folder.md\nexport const REGEXP_INCLUDE_FILE_PATH = /(?<=[(]).+(?=[)])/g;\n\n// Include example: author: authorLogin\n// Regexp result: authorLogin\nexport const REGEXP_AUTHOR = /(?<=author:\\s).+(?=\\r?\\n)/g;\n\nexport const MIN_CHUNK_SIZE = Number(process.env.MIN_CHUNK_SIZE) || 1000;\nexport const WORKERS_COUNT = Number(process.env.WORKERS_COUNT) || os.cpus().length - 1;\nexport const PAGE_PROCESS_CONCURRENCY = Number(process.env.PAGE_PROCESS_CONCURRENCY) || 500;\n\nexport const metadataBorder = '---';\n", "import {Arguments} from 'yargs';\nimport {join, resolve} from 'path';\nimport {readFileSync} from 'fs';\nimport {load} from 'js-yaml';\nimport merge from 'lodash/merge';\nimport log from '@diplodoc/transform/lib/log';\nimport {LINT_CONFIG_FILENAME, REDIRECTS_FILENAME, YFM_CONFIG_FILENAME} from './constants';\nimport {ConnectorValidatorProps} from './vcs-connector/connector-models';\n\nfunction notEmptyStringValidator(value: unknown): Boolean {\n if (typeof value === 'string') {\n return Boolean(value);\n }\n\n return false;\n}\n\nfunction requiredValueValidator(value: unknown): Boolean {\n return Boolean(value);\n}\n\nconst validators: Record<string, ConnectorValidatorProps> = {\n storageEndpoint: {\n errorMessage: 'Endpoint of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n },\n storageBucket: {\n errorMessage: 'Bucket name of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n },\n storageKeyId: {\n errorMessage: 'Key Id of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n defaultValue: process.env.YFM_STORAGE_KEY_ID,\n },\n storageSecretKey: {\n errorMessage: 'Secret key of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n defaultValue: process.env.YFM_STORAGE_SECRET_KEY,\n },\n storageRegion: {\n errorMessage: 'Region of S3 storage must be provided when publishes.',\n validateFn: notEmptyStringValidator,\n defaultValue: 'eu-central-1',\n },\n};\n\ninterface Redirect {\n from: string;\n to: string;\n}\n\ninterface RedirectsConfig {\n common: Redirect[];\n [lang: string]: Redirect[];\n}\n\nfunction validateRedirects(redirectsConfig: RedirectsConfig, pathToRedirects: string) {\n const redirects: Redirect[] = Object.keys(redirectsConfig).reduce(\n (res, redirectSectionName) => {\n const sectionRedirects = redirectsConfig[redirectSectionName];\n res.push(...sectionRedirects);\n return res;\n },\n [] as Redirect[],\n );\n\n const getContext = (from: string, to: string) => ` [Context: \\n- from: ${from}\\n- to: ${to} ]`;\n const formatMessage = (message: string, pathname: string, from: string, to: string) =>\n `${pathname}: ${message} ${getContext(from, to)}`;\n\n redirects.forEach((redirect) => {\n const {from, to} = redirect;\n\n if (!from || !to) {\n throw new Error(\n formatMessage('One of the two parameters is missing', pathToRedirects, from, to),\n );\n }\n\n if (from === to) {\n throw new Error(\n formatMessage('Parameters must be different', pathToRedirects, from, to),\n );\n }\n });\n}\n\nexport function argvValidator(argv: Arguments<Object>): Boolean {\n try {\n // Combine passed argv and properties from configuration file.\n const pathToConfig = argv.config\n ? String(argv.config)\n : join(String(argv.input), YFM_CONFIG_FILENAME);\n const content = readFileSync(resolve(pathToConfig), 'utf8');\n Object.assign(argv, load(content) || {});\n } catch (error) {\n if (error.name === 'YAMLException') {\n log.error(`Error to parse ${YFM_CONFIG_FILENAME}: ${error.message}`);\n }\n }\n\n let lintConfig: unknown = {};\n try {\n const pathToConfig = join(String(argv.input), LINT_CONFIG_FILENAME);\n const content = readFileSync(resolve(pathToConfig), 'utf8');\n\n lintConfig = load(content) || {};\n } catch (error) {\n if (error.name === 'YAMLException') {\n log.error(`Error to parse ${LINT_CONFIG_FILENAME}: ${error.message}`);\n }\n } finally {\n const preparedLintConfig = merge(lintConfig, {\n 'log-levels': {\n MD033: argv.allowHTML ? 'disabled' : 'error',\n },\n });\n\n Object.assign(argv, {lintConfig: preparedLintConfig});\n }\n\n try {\n const pathToRedirects = join(String(argv.input), REDIRECTS_FILENAME);\n const redirectsContent = readFileSync(resolve(pathToRedirects), 'utf8');\n const redirects = load(redirectsContent);\n\n validateRedirects(redirects as RedirectsConfig, pathToRedirects);\n } catch (error) {\n if (error.name === 'YAMLException') {\n log.error(`Error to parse ${REDIRECTS_FILENAME}: ${error.message}`);\n }\n\n if (error.code !== 'ENOENT') {\n throw error;\n }\n }\n\n if (argv.publish) {\n for (const [field, validator] of Object.entries(validators)) {\n const value = argv[field] ?? validator.defaultValue;\n\n if (!validator) {\n continue;\n }\n\n const validateFn = validator.validateFn ?? requiredValueValidator;\n\n if (!validateFn(value)) {\n throw new Error(validator.errorMessage);\n }\n\n argv[field] = value;\n }\n }\n\n return true;\n}\n", "import {Arguments, Argv} from 'yargs';\nimport {\n BUNDLE_FOLDER,\n LINT_CONFIG_FILENAME,\n REDIRECTS_FILENAME,\n Stage,\n TMP_INPUT_FOLDER,\n TMP_OUTPUT_FOLDER,\n YFM_CONFIG_FILENAME,\n} from '../../constants';\nimport {argvValidator} from '../../validator';\nimport {join, resolve} from 'path';\nimport {ArgvService, Includers} from '../../services';\nimport OpenapiIncluder from '@diplodoc/openapi-extension/includer';\nimport {\n initLinterWorkers,\n processAssets,\n processExcludedFiles,\n processLinter,\n processLogs,\n processPages,\n processServiceFiles,\n} from '../../steps';\nimport {prepareMapFile} from '../../steps/processMapFile';\nimport shell from 'shelljs';\nimport {Resources} from '../../models';\nimport {copyFiles, logger} from '../../utils';\nimport {upload as publishFilesToS3} from '../publish/upload';\nimport glob from 'glob';\n\nexport const build = {\n command: ['build', '$0'],\n description: 'Build documentation in target directory',\n handler,\n builder,\n};\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('input', {\n alias: 'i',\n describe: 'Path to input folder with .md files',\n type: 'string',\n group: 'Build options:',\n })\n .option('output', {\n alias: 'o',\n describe: 'Path to output folder',\n type: 'string',\n group: 'Build options:',\n })\n .option('varsPreset', {\n default: 'default',\n describe: 'Target vars preset of documentation <external|internal>',\n group: 'Build options:',\n })\n .option('output-format', {\n default: 'html',\n describe: 'Format of output file <html|md>',\n group: 'Build options:',\n })\n .option('vars', {\n alias: 'v',\n default: '{}',\n describe: 'List of markdown variables',\n group: 'Build options:',\n })\n .option('apply-presets', {\n default: true,\n describe: 'Should apply presets. Only for --output-format=md',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('resolve-conditions', {\n default: true,\n describe: 'Should resolve conditions. Only for --output-format=md',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('conditions-in-code', {\n default: false,\n describe: 'Meet conditions in code blocks',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('disable-liquid', {\n default: false,\n describe: 'Disable template engine',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('allowHTML', {\n default: false,\n describe: 'Allow to use HTML in Markdown files',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('ignore-stage', {\n default: Stage.SKIP,\n describe: 'Ignore tocs with stage',\n group: 'Build options:',\n })\n .option('ignore-author-patterns', {\n default: [] as string[],\n describe: 'Ignore authors if they contain passed string',\n group: 'Build options:',\n type: 'array',\n })\n .option('contributors', {\n default: false,\n describe: 'Should attach contributors into files',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('add-system-meta', {\n default: false,\n describe: 'Should add system section variables form presets into files meta data',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('add-map-file', {\n default: false,\n describe: 'Should add all paths of documentation into file.json',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('single-page', {\n default: false,\n describe: 'Beta functionality: Build a single page in the output folder also',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('publish', {\n default: false,\n describe: 'Should upload output files to S3 storage',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('remove-hidden-toc-items', {\n default: false,\n describe: 'Remove hidden toc items',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('lint-disabled', {\n default: false,\n describe: 'Disable linting',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('build-disabled', {\n default: false,\n describe: 'Disable building',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('allow-custom-resources', {\n default: false,\n describe: 'Allow loading custom resources',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('static-content', {\n default: false,\n describe: 'Include static content in the page',\n type: 'boolean',\n group: 'Build options:',\n })\n .option('need-to-sanitize-html', {\n default: true,\n describe: 'Enable sanitize html',\n type: 'boolean',\n group: 'Build options:',\n })\n .check(argvValidator)\n .example('yfm -i ./input -o ./output', '')\n .demandOption(\n ['input', 'output'],\n 'Please provide input and output arguments to work with this tool',\n );\n}\n\nasync function handler(args: Arguments<any>) {\n const userOutputFolder = resolve(args.output);\n const tmpInputFolder = resolve(args.output, TMP_INPUT_FOLDER);\n const tmpOutputFolder = resolve(args.output, TMP_OUTPUT_FOLDER);\n\n try {\n ArgvService.init({\n ...args,\n rootInput: args.input,\n input: tmpInputFolder,\n output: tmpOutputFolder,\n });\n Includers.init([OpenapiIncluder as any]);\n\n const {\n output: outputFolderPath,\n outputFormat,\n publish,\n lintDisabled,\n buildDisabled,\n addMapFile,\n allowCustomResources,\n resources,\n } = ArgvService.getConfig();\n\n preparingTemporaryFolders(userOutputFolder);\n\n await processServiceFiles();\n processExcludedFiles();\n\n if (addMapFile) {\n prepareMapFile();\n }\n\n const outputBundlePath = join(outputFolderPath, BUNDLE_FOLDER);\n const pathToConfig = args.config || join(args.input, YFM_CONFIG_FILENAME);\n const pathToRedirects = join(args.input, REDIRECTS_FILENAME);\n const pathToLintConfig = join(args.input, LINT_CONFIG_FILENAME);\n\n if (!lintDisabled) {\n /* Initialize workers in advance to avoid a timeout failure due to not receiving a message from them */\n await initLinterWorkers();\n }\n\n const processes = [\n !lintDisabled && processLinter(),\n !buildDisabled && processPages(outputBundlePath),\n ].filter(Boolean) as Promise<void>[];\n\n await Promise.all(processes);\n\n if (!buildDisabled) {\n // process additional files\n switch (outputFormat) {\n case 'html':\n processAssets(outputBundlePath);\n break;\n case 'md': {\n shell.cp(resolve(pathToConfig), tmpOutputFolder);\n shell.cp(resolve(pathToRedirects), tmpOutputFolder);\n shell.cp(resolve(pathToLintConfig), tmpOutputFolder);\n\n if (resources && allowCustomResources) {\n const resourcePaths: string[] = [];\n\n // collect paths of all resources\n Object.keys(resources).forEach(\n (type) =>\n resources[type as keyof Resources]?.forEach((path: string) =>\n resourcePaths.push(path),\n ),\n );\n\n //copy resources\n copyFiles(args.input, tmpOutputFolder, resourcePaths);\n }\n\n break;\n }\n }\n\n // Copy all generated files to user' output folder\n shell.cp(\n '-r',\n [join(tmpOutputFolder, '*'), join(tmpOutputFolder, '.*')],\n userOutputFolder,\n );\n\n if (publish) {\n const DEFAULT_PREFIX = process.env.YFM_STORAGE_PREFIX ?? '';\n const {\n ignore = [],\n storageRegion,\n storageEndpoint: endpoint,\n storageBucket: bucket,\n storagePrefix: prefix = DEFAULT_PREFIX,\n storageKeyId: accessKeyId,\n storageSecretKey: secretAccessKey,\n } = ArgvService.getConfig();\n\n await publishFilesToS3({\n input: userOutputFolder,\n region: storageRegion,\n ignore: [...ignore, TMP_INPUT_FOLDER, TMP_OUTPUT_FOLDER],\n endpoint,\n bucket,\n prefix,\n accessKeyId,\n secretAccessKey,\n });\n }\n }\n } catch (err) {\n logger.error('', err.message);\n } finally {\n processLogs(tmpInputFolder);\n\n shell.rm('-rf', tmpInputFolder, tmpOutputFolder);\n }\n}\n\nfunction preparingTemporaryFolders(userOutputFolder: string) {\n const args = ArgvService.getConfig();\n\n shell.mkdir('-p', userOutputFolder);\n\n // Create temporary input/output folders\n shell.rm('-rf', args.input, args.output);\n shell.mkdir(args.input, args.output);\n\n copyFiles(\n args.rootInput,\n args.input,\n glob.sync('**', {\n cwd: args.rootInput,\n nodir: true,\n follow: true,\n ignore: ['node_modules/**', '*/node_modules/**'],\n }),\n );\n\n shell.chmod('-R', 'u+w', args.input);\n}\n", "import {dirname, extname, join, normalize, parse, relative, resolve, sep} from 'path';\nimport {existsSync, readFileSync, writeFileSync} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport shell from 'shelljs';\nimport walkSync from 'walk-sync';\nimport liquid from '@diplodoc/transform/lib/liquid';\nimport log from '@diplodoc/transform/lib/log';\nimport {bold} from 'chalk';\n\nimport {ArgvService, PresetService} from './index';\nimport {getContentWithUpdatedStaticMetadata} from './metadata';\nimport {YfmToc} from '../models';\nimport {IncludeMode, Stage} from '../constants';\nimport {isExternalHref, logger} from '../utils';\nimport {filterFiles, firstFilterTextItems, liquidField} from './utils';\nimport {IncludersError, applyIncluders} from './includers';\n\nexport interface TocServiceData {\n storage: Map<string, YfmToc>;\n navigationPaths: string[];\n includedTocPaths: Set<string>;\n}\n\nconst storage: TocServiceData['storage'] = new Map();\nlet navigationPaths: TocServiceData['navigationPaths'] = [];\nconst includedTocPaths: TocServiceData['includedTocPaths'] = new Set();\nconst tocFileCopyMap = new Map<string, string>();\n\nasync function add(path: string) {\n const {\n input: inputFolderPath,\n output: outputFolderPath,\n outputFormat,\n ignoreStage,\n vars,\n } = ArgvService.getConfig();\n\n const pathToDir = dirname(path);\n const content = readFileSync(resolve(inputFolderPath, path), 'utf8');\n const parsedToc = load(content) as YfmToc;\n\n // Should ignore toc with specified stage.\n if (parsedToc.stage === ignoreStage) {\n return;\n }\n\n const combinedVars = {\n ...PresetService.get(pathToDir),\n ...vars,\n };\n\n if (parsedToc.title) {\n parsedToc.title = firstFilterTextItems(parsedToc.title, combinedVars, {\n resolveConditions: true,\n });\n }\n\n if (typeof parsedToc.title === 'string') {\n parsedToc.title = liquidField(parsedToc.title, combinedVars, path);\n }\n\n parsedToc.items = await processTocItems(\n path,\n parsedToc.items,\n join(inputFolderPath, pathToDir),\n resolve(inputFolderPath),\n combinedVars,\n );\n\n /* Store parsed toc for .md output format */\n storage.set(path, parsedToc);\n\n /* Store path to toc file to handle relative paths in navigation */\n parsedToc.base = pathToDir;\n\n if (outputFormat === 'md') {\n /* Should copy resolved and filtered toc to output folder */\n const outputPath = resolve(outputFolderPath, path);\n const outputToc = dump(parsedToc);\n shell.mkdir('-p', dirname(outputPath));\n writeFileSync(outputPath, outputToc);\n }\n\n prepareNavigationPaths(parsedToc, pathToDir);\n}\n\nasync function processTocItems(\n path: string,\n items: YfmToc[],\n tocDir: string,\n sourcesDir: string,\n vars: Record<string, string>,\n) {\n const {resolveConditions, removeHiddenTocItems} = ArgvService.getConfig();\n\n let preparedItems = items;\n\n /* Should remove all links with false expressions */\n if (resolveConditions || removeHiddenTocItems) {\n try {\n preparedItems = filterFiles(items, 'items', vars, {\n resolveConditions,\n removeHiddenTocItems,\n });\n } catch (error) {\n log.error(`Error while filtering toc file: ${path}. Error message: ${error}`);\n }\n }\n\n /* Should resolve all includes */\n return _replaceIncludes(path, preparedItems, tocDir, sourcesDir, vars);\n}\n\nfunction getForPath(path: string): YfmToc | undefined {\n return storage.get(path);\n}\n\nfunction getNavigationPaths(): string[] {\n return [...navigationPaths];\n}\n\nfunction getIncludedTocPaths(): string[] {\n return [...includedTocPaths];\n}\n\nfunction prepareNavigationPaths(parsedToc: YfmToc, dirPath: string) {\n function processItems(items: YfmToc[], pathToDir: string) {\n items.forEach((item) => {\n if (!parsedToc.singlePage && item.items) {\n const preparedSubItems = item.items.map((yfmToc: YfmToc, index: number) => {\n // Generate personal id for each navigation item\n yfmToc.id = `${yfmToc.name}-${index}-${Math.random()}`;\n return yfmToc;\n });\n processItems(preparedSubItems, pathToDir);\n }\n\n if (item.href && !isExternalHref(item.href)) {\n const href = join(pathToDir, item.href);\n storage.set(href, parsedToc);\n\n const navigationPath = _normalizeHref(href);\n navigationPaths.push(navigationPath);\n }\n });\n }\n\n processItems([parsedToc], dirPath);\n}\n\n/**\n * Should normalize hrefs. MD and YAML files will be ignored.\n * @param href\n * @return {string}\n * @example instance-groups/create-with-coi/ -> instance-groups/create-with-coi/index.yaml\n * @example instance-groups/create-with-coi -> instance-groups/create-with-coi.md\n * @private\n */\nfunction _normalizeHref(href: string): string {\n const preparedHref = normalize(href);\n\n if (preparedHref.endsWith('.md') || preparedHref.endsWith('.yaml')) {\n return preparedHref;\n }\n\n if (preparedHref.endsWith(sep)) {\n return `${preparedHref}index.yaml`;\n }\n\n return `${preparedHref}.md`;\n}\n\n/**\n * Copies all files of include toc to original dir.\n * @param tocPath\n * @param destDir\n * @return\n * @private\n */\nfunction _copyTocDir(tocPath: string, destDir: string) {\n const {input: inputFolderPath} = ArgvService.getConfig();\n\n const {dir: tocDir} = parse(tocPath);\n const files: string[] = walkSync(tocDir, {\n globs: ['**/*.*'],\n ignore: ['**/toc.yaml'],\n directories: false,\n });\n\n files.forEach((relPath) => {\n const from = resolve(tocDir, relPath);\n const to = resolve(destDir, relPath);\n const fileExtension = extname(relPath);\n const isMdFile = fileExtension === '.md';\n\n shell.mkdir('-p', parse(to).dir);\n\n if (isMdFile) {\n const fileContent = readFileSync(from, 'utf8');\n const sourcePath = relative(inputFolderPath, from);\n const updatedFileContent = getContentWithUpdatedStaticMetadata({\n fileContent,\n sourcePath,\n addSourcePath: true,\n });\n\n writeFileSync(to, updatedFileContent);\n } else {\n shell.cp(from, to);\n }\n\n const relFrom = relative(inputFolderPath, from);\n const relTo = relative(inputFolderPath, to);\n tocFileCopyMap.set(relTo, relFrom);\n });\n}\n\n/**\n * Make hrefs relative to the main toc in the included toc.\n * @param items\n * @param includeTocDir\n * @param tocDir\n * @return\n * @private\n */\nfunction _replaceIncludesHrefs(items: YfmToc[], includeTocDir: string, tocDir: string): YfmToc[] {\n return items.reduce((acc, tocItem) => {\n if (tocItem.href) {\n tocItem.href = relative(tocDir, resolve(includeTocDir, tocItem.href));\n }\n\n if (tocItem.items) {\n tocItem.items = _replaceIncludesHrefs(tocItem.items, includeTocDir, tocDir);\n }\n\n if (tocItem.include) {\n const {path} = tocItem.include;\n tocItem.include.path = relative(tocDir, resolve(includeTocDir, path));\n }\n\n return acc.concat(tocItem);\n }, [] as YfmToc[]);\n}\n\n/**\n * Liquid substitutions in toc file.\n * @param input\n * @param vars\n * @param path\n * @return {string}\n * @private\n */\nfunction _liquidSubstitutions(input: string, vars: Record<string, string>, path: string) {\n const {outputFormat, applyPresets} = ArgvService.getConfig();\n if (outputFormat === 'md' && !applyPresets) {\n return input;\n }\n\n return liquid(input, vars, path, {\n conditions: false,\n substitutions: true,\n });\n}\n\nfunction addIncludeTocPath(includeTocPath: string) {\n includedTocPaths.add(includeTocPath);\n}\n\n/**\n * Replaces include fields in toc file by resolved toc.\n * @param path\n * @param items\n * @param tocDir\n * @param sourcesDir\n * @param vars\n * @return\n * @private\n */\nasync function _replaceIncludes(\n path: string,\n items: YfmToc[],\n tocDir: string,\n sourcesDir: string,\n vars: Record<string, string>,\n): Promise<YfmToc[]> {\n const result: YfmToc[] = [];\n\n for (const item of items) {\n let includedInlineItems: YfmToc[] | null = null;\n\n if (item.name) {\n const tocPath = join(tocDir, 'toc.yaml');\n\n item.name = _liquidSubstitutions(item.name, vars, tocPath);\n }\n\n try {\n await applyIncluders(path, item, vars);\n } catch (err) {\n if (err instanceof Error || err instanceof IncludersError) {\n const message = err.toString();\n\n const file = err instanceof IncludersError ? err.path : path;\n\n logger.error(file, message);\n }\n }\n\n if (item.include) {\n const {mode = IncludeMode.ROOT_MERGE} = item.include;\n const includeTocPath =\n mode === IncludeMode.ROOT_MERGE\n ? resolve(sourcesDir, item.include.path)\n : resolve(tocDir, item.include.path);\n const includeTocDir = dirname(includeTocPath);\n\n try {\n const includeToc = load(readFileSync(includeTocPath, 'utf8')) as YfmToc;\n\n // Should ignore included toc with tech-preview stage.\n if (includeToc.stage === Stage.TECH_PREVIEW) {\n continue;\n }\n\n if (mode === IncludeMode.MERGE || mode === IncludeMode.ROOT_MERGE) {\n _copyTocDir(includeTocPath, tocDir);\n }\n\n /* Save the path to exclude toc from the output directory in the next step */\n addIncludeTocPath(includeTocPath);\n\n let includedTocItems = (item.items || []).concat(includeToc.items);\n\n /* Resolve nested toc inclusions */\n const baseTocDir = mode === IncludeMode.LINK ? includeTocDir : tocDir;\n includedTocItems = await processTocItems(\n path,\n includedTocItems,\n baseTocDir,\n sourcesDir,\n vars,\n );\n\n /* Make hrefs relative to the main toc */\n if (mode === IncludeMode.LINK) {\n includedTocItems = _replaceIncludesHrefs(\n includedTocItems,\n includeTocDir,\n tocDir,\n );\n }\n\n if (item.name) {\n item.items = includedTocItems;\n } else {\n includedInlineItems = includedTocItems;\n }\n } catch (err) {\n const message = `Error while including toc: ${bold(includeTocPath)} to ${bold(\n join(tocDir, 'toc.yaml'),\n )}`;\n\n log.error(message);\n\n continue;\n } finally {\n delete item.include;\n }\n } else if (item.items) {\n item.items = await processTocItems(path, item.items, tocDir, sourcesDir, vars);\n }\n\n if (includedInlineItems) {\n result.push(...includedInlineItems);\n } else {\n result.push(item);\n }\n }\n\n return result;\n}\n\nfunction getTocDir(pagePath: string): string {\n const {input: inputFolderPath} = ArgvService.getConfig();\n\n const tocDir = dirname(pagePath);\n const tocPath = resolve(tocDir, 'toc.yaml');\n\n if (!tocDir.includes(inputFolderPath)) {\n throw new Error('Error while finding toc dir');\n }\n\n if (existsSync(tocPath)) {\n return tocDir;\n }\n\n return getTocDir(tocDir);\n}\n\nfunction setNavigationPaths(paths: TocServiceData['navigationPaths']) {\n navigationPaths = paths;\n}\n\nfunction getCopyFileMap() {\n return tocFileCopyMap;\n}\n\nexport default {\n add,\n getForPath,\n getNavigationPaths,\n getTocDir,\n getIncludedTocPaths,\n setNavigationPaths,\n getCopyFileMap,\n};\n", "import {dump, load} from 'js-yaml';\n\nimport {VCSConnector} from '../vcs-connector/connector-models';\nimport {MetaDataOptions, Metadata, Resources, VarsMetadata} from '../models';\nimport {\n getAuthorDetails,\n updateAuthorMetadataStringByAuthorLogin,\n updateAuthorMetadataStringByFilePath,\n} from './authors';\nimport {\n getFileContributorsMetadata,\n getFileContributorsString,\n getFileIncludes,\n} from './contributors';\nimport {isObject} from './utils';\nimport {\u0441arriage} from '../utils';\nimport {REGEXP_AUTHOR, metadataBorder} from '../constants';\nimport {dirname, relative, resolve} from 'path';\nimport {ArgvService, TocService} from './index';\n\nasync function getContentWithUpdatedMetadata(\n fileContent: string,\n options?: MetaDataOptions,\n systemVars?: unknown,\n metadataVars?: VarsMetadata,\n): Promise<string> {\n let result;\n\n result = getContentWithUpdatedStaticMetadata({\n fileContent,\n sourcePath: options?.fileData?.sourcePath,\n addSystemMeta: options?.addSystemMeta,\n addSourcePath: options?.addSourcePath,\n resources: options?.resources,\n systemVars,\n metadataVars,\n });\n\n result = await getContentWithUpdatedDynamicMetadata(result, options);\n\n return result;\n}\n\nfunction getContentWithUpdatedStaticMetadata({\n fileContent,\n sourcePath,\n addSystemMeta,\n addSourcePath,\n resources,\n systemVars,\n metadataVars = [],\n}: {\n fileContent: string;\n sourcePath?: string;\n addSystemMeta?: boolean;\n addSourcePath?: boolean;\n resources?: Resources;\n systemVars?: unknown;\n metadataVars?: VarsMetadata;\n}): string {\n const newMetadatas: string[] = [];\n\n if (\n (!addSystemMeta || !systemVars) &&\n !addSourcePath &&\n !resources &&\n metadataVars.length === 0\n ) {\n return fileContent;\n }\n\n const matches = matchMetadata(fileContent);\n\n if (addSystemMeta && systemVars && isObject(systemVars)) {\n newMetadatas.push(getSystemVarsMetadataString(systemVars));\n }\n\n if (resources) {\n newMetadatas.push(dump(resources));\n }\n\n if (addSourcePath && sourcePath) {\n const sourcePathMetadataString = `sourcePath: ${sourcePath}`;\n newMetadatas.push(sourcePathMetadataString);\n }\n\n if (matches && matches.length > 0) {\n const [, fileMetadata, , fileMainContent] = matches;\n\n if (!metadataVars.length) {\n return `${getUpdatedMetadataString(newMetadatas, fileMetadata)}${fileMainContent}`;\n }\n\n const parsed = load(fileMetadata) as Record<string, any>;\n\n if (!Array.isArray(parsed.metadata)) {\n parsed.metadata = [parsed.metadata];\n }\n\n parsed.metadata = parsed.metadata.concat(metadataVars).filter(Boolean);\n\n const patchedMetada = dump(parsed);\n\n return `${getUpdatedMetadataString(newMetadatas, patchedMetada)}${fileMainContent}`;\n }\n\n if (metadataVars.length) {\n newMetadatas.push(dump({metadata: metadataVars}));\n }\n\n return `${getUpdatedMetadataString(newMetadatas)}${fileContent}`;\n}\n\nasync function getContentWithUpdatedDynamicMetadata(\n fileContent: string,\n options?: MetaDataOptions,\n): Promise<string> {\n if (!options || !options?.isContributorsEnabled) {\n return fileContent;\n }\n\n let fileMetadata: string | undefined, fileMainContent: string | undefined;\n const matches = matchMetadata(fileContent);\n if (matches && matches.length > 0) {\n const [, matchedFileMetadata, , matchedFileMainContent] = matches;\n fileMetadata = matchedFileMetadata;\n fileMainContent = matchedFileMainContent;\n }\n\n const newMetadatas: string[] = [];\n\n const {isContributorsEnabled} = options;\n\n if (isContributorsEnabled) {\n const contributorsMetaData = await getContributorsMetadataString(options, fileContent);\n if (contributorsMetaData) {\n newMetadatas.push(contributorsMetaData);\n }\n\n const mtimeMetadata = await getModifiedTimeMetadataString(options, fileContent);\n if (mtimeMetadata) {\n newMetadatas.push(mtimeMetadata);\n }\n\n let authorMetadata = '';\n if (fileMetadata) {\n const matchAuthor = fileMetadata.match(REGEXP_AUTHOR);\n if (matchAuthor) {\n const matchedAuthor = matchAuthor[0];\n authorMetadata = await updateAuthorMetadataStringByAuthorLogin(\n matchedAuthor,\n options.vcsConnector,\n );\n }\n }\n\n if (!authorMetadata) {\n const {\n fileData: {tmpInputFilePath, inputFolderPathLength},\n } = options;\n const relativeFilePath = tmpInputFilePath.substring(inputFolderPathLength);\n authorMetadata = await updateAuthorMetadataStringByFilePath(\n relativeFilePath,\n options.vcsConnector,\n );\n }\n\n if (authorMetadata) {\n newMetadatas.push(`author: ${authorMetadata}`);\n }\n }\n\n if (fileMetadata && fileMainContent) {\n let updatedFileMetadata = fileMetadata;\n const matchAuthor = fileMetadata.match(REGEXP_AUTHOR);\n\n const isNewMetadataIncludesAuthor = newMetadatas.some((item) => /^author: /.test(item));\n if (matchAuthor && isNewMetadataIncludesAuthor) {\n updatedFileMetadata = updatedFileMetadata.replace(`author: ${matchAuthor[0]}`, '');\n }\n\n return `${getUpdatedMetadataString(newMetadatas, updatedFileMetadata)}${fileMainContent}`;\n }\n\n return `${getUpdatedMetadataString(newMetadatas)}${fileContent}`;\n}\n\nfunction matchMetadata(fileContent: string) {\n if (!fileContent.startsWith('---')) {\n return null;\n }\n\n // Search by format:\n // ---\n // metaName1: metaValue1\n // metaName2: meta value2\n // incorrectMetadata\n // ---\n const regexpMetadata = '(?<=-{3}\\\\r?\\\\n)((.*\\\\r?\\\\n)*?)(?=-{3}\\\\r?\\\\n)';\n // Search by format:\n // ---\n // main content 123\n const regexpFileContent = '-{3}((.*[\\r?\\n]*)*)';\n\n const regexpParseFileContent = new RegExp(`${regexpMetadata}${regexpFileContent}`, 'gm');\n\n return regexpParseFileContent.exec(fileContent);\n}\n\nasync function getContributorsMetadataString(\n options: MetaDataOptions,\n fileContent: string,\n): Promise<string | undefined> {\n const {isContributorsEnabled, vcsConnector, fileData} = options;\n\n if (isContributorsEnabled && vcsConnector) {\n const updatedFileData = {\n ...fileData,\n fileContent,\n };\n\n return getFileContributorsMetadata(updatedFileData, vcsConnector);\n }\n\n return undefined;\n}\n\nasync function getModifiedTimeMetadataString(options: MetaDataOptions, fileContent: string) {\n const {isContributorsEnabled, vcsConnector, fileData} = options;\n\n const {tmpInputFilePath, inputFolderPathLength} = fileData;\n\n const relativeFilePath = tmpInputFilePath.substring(inputFolderPathLength + 1);\n\n if (!isContributorsEnabled || !vcsConnector) {\n return undefined;\n }\n\n const includedFiles = await getFileIncludes({...fileData, fileContent});\n includedFiles.push(relativeFilePath);\n\n const tocCopyFileMap = TocService.getCopyFileMap();\n\n const mtimeList = includedFiles\n .map((path) => {\n const mappedPath = tocCopyFileMap.get(path) || path;\n return vcsConnector.getModifiedTimeByPath(mappedPath);\n })\n .filter((v) => typeof v === 'number') as number[];\n\n if (mtimeList.length) {\n const mtime = Math.max(...mtimeList);\n return `updatedAt: ${new Date(mtime * 1000).toISOString()}`;\n }\n\n return undefined;\n}\n\nfunction getUpdatedMetadataString(newMetadatas: string[], defaultMetadata = ''): string {\n const newMetadata = newMetadatas.join(\u0441arriage) + (newMetadatas.length ? \u0441arriage : '');\n const preparedDefaultMetadata = defaultMetadata.trimRight();\n const defaultMetadata\u0421arriage = preparedDefaultMetadata ? \u0441arriage : '';\n const updatedMetadata = `${preparedDefaultMetadata}${defaultMetadata\u0421arriage}${newMetadata}`;\n\n return `${metadataBorder}${\u0441arriage}${updatedMetadata}${metadataBorder}${\n defaultMetadata.length ? '' : \u0441arriage\n }`;\n}\n\nasync function getVCSMetadata(\n options: MetaDataOptions,\n fileContent: string,\n meta?: Metadata,\n): Promise<Metadata> {\n const {vcsConnector} = options;\n\n const newMetadata: Metadata = {\n contributors: await getContributorsMetadata(options, fileContent),\n };\n\n if (!meta) {\n return newMetadata;\n }\n\n const updatedAuthor = await getAuthorMetadata(meta as Metadata, vcsConnector);\n\n return {\n ...meta,\n ...newMetadata,\n author: updatedAuthor,\n };\n}\n\nasync function getContributorsMetadata(\n options: MetaDataOptions,\n fileContent: string,\n): Promise<string> {\n const {isContributorsEnabled, vcsConnector, fileData} = options;\n\n if (isContributorsEnabled && vcsConnector) {\n const updatedFileData = {\n ...fileData,\n fileContent,\n };\n\n return getFileContributorsString(updatedFileData, vcsConnector);\n }\n\n return JSON.stringify([]);\n}\n\nasync function getAuthorMetadata(\n meta: Metadata,\n vcsConnector?: VCSConnector,\n): Promise<string | null> {\n if (meta.author && vcsConnector) {\n const updatedAuthor = await getAuthorDetails(vcsConnector, meta.author);\n\n return updatedAuthor;\n }\n\n return null;\n}\n\nfunction getSystemVarsMetadataString(systemVars: object) {\n return `__system: ${JSON.stringify(systemVars)}`;\n}\n\nfunction getAssetsPublicPath(filePath: string) {\n const {input} = ArgvService.getConfig();\n const path: string = resolve(input, filePath);\n\n /* Relative path from folder of .md file to root of user' output folder */\n return relative(dirname(path), resolve(input));\n}\n\nexport {\n getContentWithUpdatedMetadata,\n getContentWithUpdatedStaticMetadata,\n getVCSMetadata,\n getAssetsPublicPath,\n};\n", "import log from '@diplodoc/transform/lib/log';\nimport {blue, green, grey, red, yellow} from 'chalk';\nimport {ArgvService} from '../services';\n\nfunction writeLog(msg: string, fatal = false) {\n const {quiet} = ArgvService.getConfig();\n\n if (quiet && !fatal) {\n return;\n }\n\n console.log(msg);\n}\n\nexport const logger = {\n info: function (pathToFile: string, extraMessage?: string) {\n writeLog(`${grey('INFO')} ${extraMessage} ${pathToFile}`);\n },\n proc: function (pathToFile: string) {\n writeLog(`${blue('PROC')} Processing file ${pathToFile}`);\n },\n copy: function (pathToFile: string) {\n writeLog(`${green('COPY')} Copying file ${pathToFile}`);\n },\n upload: function (pathToFile: string) {\n writeLog(`${green('UPLOAD')} Uploading file ${pathToFile}`);\n },\n warn: function (pathToFile: string, extraMessage: string) {\n const message = `${yellow('WARNING')} file: ${pathToFile} error: ${extraMessage}`;\n\n writeLog(message);\n\n log.warn(`file: ${pathToFile} ${extraMessage}`);\n },\n error: function (pathToFile: string, extraMessage: string) {\n const message = `${red('ERROR')} file: ${pathToFile} error: ${extraMessage}`;\n\n writeLog(message, true);\n\n log.error(`file: ${pathToFile} ${extraMessage}`);\n },\n};\n", "import {join} from 'path';\nimport {platform} from 'process';\n\nimport {CUSTOM_STYLE, Platforms} from '../constants';\nimport {LeadingPage, Resources, SinglePageResult, TextItems, VarsMetadata} from '../models';\nimport {ArgvService, PluginService} from '../services';\nimport {preprocessPageHtmlForSinglePage} from './singlePage';\n\nimport {DocInnerProps, DocPageData, render} from '@diplodoc/client/ssr';\nimport manifest from '@diplodoc/client/manifest';\n\nimport {escape} from 'html-escaper';\n\nconst dst = (bundlePath: string) => (target: string) => join(bundlePath, target);\nexport const \u0441arriage = platform === Platforms.WINDOWS ? '\\r\\n' : '\\n';\n\nexport interface TitleMeta {\n title?: string;\n}\n\nexport type Meta = TitleMeta &\n Resources & {\n metadata: VarsMetadata;\n };\n\nexport function generateStaticMarkup(\n props: DocInnerProps<DocPageData>,\n pathToBundle: string,\n): string {\n const {style, script, metadata, ...restYamlConfigMeta} = (props.data.meta as Meta) || {};\n const {title: tocTitle} = props.data.toc;\n const {title: pageTitle} = props.data;\n\n const title = getTitle({\n metaTitle: props.data.meta.title,\n tocTitle: tocTitle as string,\n pageTitle,\n });\n\n const resources = getResources({style, script});\n\n const {staticContent} = ArgvService.getConfig();\n\n const html = staticContent ? render(props) : '';\n\n return `\n <!DOCTYPE html>\n <html lang=\"${props.lang}\">\n <head>\n <meta charset=\"utf-8\">\n ${getMetadata(metadata, restYamlConfigMeta)}\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${title}</title>\n <style type=\"text/css\">\n body {\n height: 100vh;\n }\n </style>\n ${manifest.css\n .map(dst(pathToBundle))\n .map((src: string) => `<link type=\"text/css\" rel=\"stylesheet\" href=\"${src}\" />`)\n .join('\\n')}\n ${PluginService.getHeadContent()}\n ${resources}\n </head>\n <body class=\"yc-root yc-root_theme_light\">\n <div id=\"root\">${html}</div>\n <script type=\"application/javascript\">\n window.STATIC_CONTENT = ${staticContent}\n window.__DATA__ = ${JSON.stringify(props)};\n </script>\n ${manifest.js\n .map(dst(pathToBundle))\n .map(\n (src: string) =>\n `<script type=\"application/javascript\" src=\"${src}\"></script>`,\n )\n .join('\\n')}\n </body>\n </html>\n `;\n}\n\ninterface GetTitleOptions {\n tocTitle?: string;\n metaTitle?: string;\n pageTitle?: string;\n}\n\nfunction getTitle({tocTitle, metaTitle, pageTitle}: GetTitleOptions) {\n const resultPageTitle = metaTitle || pageTitle;\n\n if (!resultPageTitle && tocTitle) {\n return tocTitle;\n }\n\n if (resultPageTitle && !tocTitle) {\n return resultPageTitle;\n }\n\n return resultPageTitle && tocTitle ? `${resultPageTitle} | ${tocTitle}` : '';\n}\n\nfunction getMetadata(metadata: VarsMetadata | undefined, restMeta: LeadingPage['meta']): string {\n let result = '';\n\n const addMetaTagsFromObject = (value: Record<string, string | boolean | TextItems>) => {\n const args = Object.entries(value).reduce((acc, [name, content]) => {\n return acc + `${escape(name)}=\"${escape(content.toString())}\" `;\n }, '');\n\n if (args.length) {\n result += `<meta ${args} />` + \u0441arriage;\n }\n };\n\n if (metadata) {\n metadata.forEach(addMetaTagsFromObject);\n }\n\n if (restMeta) {\n Object.entries(restMeta)\n .map(([name, value]) => {\n return {name, content: value};\n })\n .forEach(addMetaTagsFromObject);\n }\n\n return result;\n}\n\nfunction getResources({style, script}: Resources) {\n const resourcesTags: string[] = [];\n\n if (style) {\n style.forEach((el, id) =>\n resourcesTags.push(\n `<link rel=\"stylesheet\" type=\"text/css\" href=\"${el}\" ${\n id === 0 && `id=\"${CUSTOM_STYLE}\"`\n }>`,\n ),\n );\n }\n\n if (script) {\n script.forEach((el) => resourcesTags.push(`<script src=\"${el}\"></script>`));\n }\n\n return resourcesTags.join('\\n');\n}\n\nexport function joinSinglePageResults(\n singlePageResults: SinglePageResult[],\n root: string,\n tocDir: string,\n): string {\n const delimeter = `<hr class=\"yfm-page__delimeter\">`;\n return singlePageResults\n .filter(({content}) => content)\n .map(({content, path, title}) =>\n preprocessPageHtmlForSinglePage(content, {root, path, tocDir, title}),\n )\n .join(delimeter);\n}\n\nexport function replaceDoubleToSingleQuotes(str: string): string {\n return str.replace(/\"/g, \"'\");\n}\n", "import HTMLElement from 'node-html-parser/dist/nodes/html';\nimport {parse} from 'node-html-parser';\nimport {relative, resolve, sep} from 'path';\nimport {resolveRelativePath} from '@diplodoc/transform/lib/utilsFS';\nimport url from 'url';\nimport escape from 'lodash/escapeRegExp';\n\nimport {isExternalHref} from './url';\n\ninterface ModifyNode {\n innerHTML: string;\n rawTagName: string;\n attrEntries?: string[][];\n}\n\ninterface PreprocessSinglePageOptions {\n root: string;\n path: string;\n tocDir: string;\n title?: string;\n}\n\nconst HEADERS_SELECTOR = 'h1, h2, h3, h4, h5, h6';\n\nfunction toUrl(path: string) {\n // replace windows backslashes\n return path.replace(new RegExp(escape(sep), 'g'), '/');\n}\n\nfunction getNewNode(options: ModifyNode): HTMLElement | null {\n const {rawTagName, innerHTML, attrEntries} = options;\n\n const nodeNew = parse(`<html><${rawTagName}></${rawTagName}></html>`).querySelector(\n `${rawTagName}`,\n );\n\n if (!nodeNew) {\n return null;\n }\n\n if (attrEntries) {\n for (const [name, value] of attrEntries) {\n nodeNew.setAttribute(name, value);\n }\n }\n\n nodeNew.innerHTML = innerHTML;\n\n return nodeNew;\n}\n\nexport function decreaseHeadingLevels(root: HTMLElement) {\n const headersSelector = 'h1, h2, h3, h4, h5';\n\n root.querySelectorAll(headersSelector).forEach((node) => {\n const {rawTagName} = node;\n const newHeadingLevel = Number(rawTagName.charAt(1)) + 1;\n\n node.rawTagName = `h${newHeadingLevel}`;\n });\n}\n\nexport function tryFixFirstPageHeader(root: HTMLElement) {\n const firstPageHeader = root.querySelector(HEADERS_SELECTOR);\n if (!firstPageHeader || firstPageHeader.rawTagName === 'h1') {\n return;\n }\n\n firstPageHeader.rawTagName = 'h1';\n}\n\nexport function replaceLinks(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {root, path, tocDir} = options;\n\n rootEl.querySelectorAll('a:not(.yfm-anchor):not([target=\"_blank\"])').forEach((node) => {\n const href = node.getAttribute('href') || '';\n\n const resolvedPath = resolve(root, path);\n const linkFullPath = resolveRelativePath(resolvedPath, href);\n const isLinkOutOfToc = !linkFullPath.startsWith(tocDir);\n\n let preparedHref = href;\n\n if (isLinkOutOfToc) {\n preparedHref = relative(tocDir, linkFullPath);\n } else {\n const {pathname, hash} = url.parse(href);\n if (pathname) {\n preparedHref = getSinglePageAnchorId({\n root,\n currentPath: resolvedPath,\n pathname,\n hash,\n });\n } else if (hash) {\n preparedHref = getSinglePageAnchorId({root, currentPath: resolvedPath, hash});\n }\n }\n\n node.setAttribute('href', toUrl(preparedHref));\n });\n}\n\nexport function replaceImages(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {root, path, tocDir} = options;\n\n rootEl.querySelectorAll('img').forEach((node) => {\n const href = node.getAttribute('src') || '';\n\n if (isExternalHref(href)) {\n return;\n }\n\n const resolvedPath = resolve(root, path);\n const linkFullPath = resolveRelativePath(resolvedPath, href);\n const preparedHref = relative(tocDir, linkFullPath);\n\n node.setAttribute('src', toUrl(preparedHref));\n });\n}\n\nfunction prepareAnchorAttr(name: string, value: string, pageId: string) {\n switch (name) {\n case 'href':\n return `#${pageId}_${value.slice(1)}`;\n case 'id':\n return `${pageId}_${value}`;\n default:\n return value;\n }\n}\n\nfunction prepareAnchorAttrs(node: HTMLElement, pageId: string) {\n for (const [name, value] of Object.entries(node.attributes)) {\n const preparedValue = prepareAnchorAttr(name, value, pageId);\n\n node.setAttribute(name, toUrl(preparedValue));\n }\n}\n\nexport function addPagePrefixToAnchors(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {root, path} = options;\n\n const resolvedPath = resolve(root, path);\n const pageIdAnchor = getSinglePageAnchorId({root, currentPath: resolvedPath});\n const originalArticleHref = transformLinkToOriginalArticle({root, currentPath: resolvedPath});\n const pageId = pageIdAnchor.slice(1);\n const anchorSelector = '.yfm-anchor';\n\n // Add the page prefix id to all existing anchors\n rootEl.querySelectorAll(anchorSelector).forEach((node) => {\n prepareAnchorAttrs(node, pageId);\n });\n\n const mainHeader = rootEl.querySelector('h1');\n if (mainHeader) {\n const anchor = parse(\n `<a class=\"yfm-anchor\" aria-hidden=\"true\" href=\"${pageIdAnchor}\" id=\"${pageId}\"></a>`,\n );\n if (!anchor) {\n return;\n }\n\n mainHeader.setAttribute('data-original-article', `${originalArticleHref}.html`);\n mainHeader.appendChild(anchor);\n }\n\n rootEl.querySelectorAll(HEADERS_SELECTOR).forEach((node) => {\n prepareAnchorAttrs(node, pageId);\n });\n}\n\nexport function addMainTitle(rootEl: HTMLElement, options: PreprocessSinglePageOptions) {\n const {title} = options;\n\n if (!title) {\n return;\n }\n\n const mainTitle = getNewNode({innerHTML: title, rawTagName: 'h1'});\n\n if (!mainTitle) {\n return;\n }\n\n rootEl.insertAdjacentHTML('afterbegin', mainTitle.toString());\n}\n\nexport function getSinglePageAnchorId(args: {\n root: string;\n currentPath: string;\n pathname?: string;\n hash?: string | null;\n}) {\n const {root, currentPath, pathname, hash} = args;\n let resultAnchor = currentPath;\n\n if (pathname) {\n resultAnchor = resolveRelativePath(currentPath, pathname);\n }\n\n resultAnchor = resultAnchor\n .replace(root, '')\n .replace(/\\.(md|ya?ml|html)$/i, '')\n .replace(new RegExp(escape(sep), 'gi'), '_');\n\n if (hash) {\n resultAnchor = resultAnchor + '_' + hash.slice(1);\n }\n\n return `#${resultAnchor}`;\n}\n\nexport function transformLinkToOriginalArticle(opts: {root: string; currentPath: string}) {\n const {root, currentPath} = opts;\n\n return currentPath.replace(root, '').replace(/\\.(md|ya?ml|html)$/i, '');\n}\n\nexport function preprocessPageHtmlForSinglePage(\n content: string,\n options: PreprocessSinglePageOptions,\n) {\n const root = parse(content);\n\n addMainTitle(root, options);\n tryFixFirstPageHeader(root);\n addPagePrefixToAnchors(root, options);\n decreaseHeadingLevels(root);\n replaceLinks(root, options);\n replaceImages(root, options);\n\n return root.toString();\n}\n", "export function isExternalHref(href: string) {\n return href.startsWith('http') || href.startsWith('//');\n}\n", "import {sep} from 'path';\nimport {Platforms} from '../constants';\n\nexport function addSlashPrefix(path: string): string {\n const slashPrefix = path.startsWith(sep) ? '' : sep;\n\n return `${slashPrefix}${path}`;\n}\n\nexport function convertBackSlashToSlash(path: string): string {\n if (process.platform === Platforms.WINDOWS) {\n return path.replace(/\\\\/g, '/');\n }\n\n return path;\n}\n", "import {basename, dirname, extname, format, join, relative} from 'path';\n\nimport {YfmToc} from '../models';\nimport {filterFiles} from '../services/utils';\nimport {isExternalHref} from './url';\nimport {getSinglePageAnchorId} from './singlePage';\n\nexport function transformToc(toc: YfmToc | null, pathToFileDirectory: string): YfmToc | null {\n if (!toc) {\n return null;\n }\n\n const localToc: YfmToc = JSON.parse(JSON.stringify(toc));\n\n if (localToc.items) {\n localToc.items = filterFiles(\n localToc.items,\n 'items',\n {},\n {\n removeHiddenTocItems: true,\n },\n );\n }\n\n const baseTocPath: string = localToc.base || '';\n const navigationItemQueue = [localToc];\n\n while (navigationItemQueue.length) {\n const navigationItem = navigationItemQueue.shift();\n\n if (!navigationItem) {\n continue;\n }\n\n const {items, href} = navigationItem;\n\n if (items) {\n navigationItemQueue.push(...navigationItem.items);\n }\n\n if (href && !isExternalHref(href)) {\n /* Path to directory with toc.yaml */\n const pathToIndexDirectory: string = relative(pathToFileDirectory, baseTocPath);\n\n const fileExtension: string = extname(href);\n const filename: string = basename(href, fileExtension);\n const transformedFilename: string = format({\n name: filename,\n ext: '.html',\n });\n\n navigationItem.href = join(pathToIndexDirectory, dirname(href), transformedFilename);\n }\n }\n\n return localToc;\n}\n\nexport function transformTocForSinglePage(\n toc: YfmToc | null,\n options: {root: string; currentPath: string},\n) {\n const {root, currentPath} = options;\n\n if (!toc) {\n return null;\n }\n\n const localToc: YfmToc = JSON.parse(JSON.stringify(toc));\n\n if (localToc.items) {\n localToc.items = filterFiles(\n localToc.items,\n 'items',\n {},\n {\n removeHiddenTocItems: true,\n },\n );\n }\n\n function processItems(items: YfmToc[]) {\n items.forEach((item) => {\n if (item.items) {\n processItems(item.items);\n }\n\n if (item.href && !isExternalHref(item.href)) {\n item.href = getSinglePageAnchorId({root, currentPath, pathname: item.href});\n }\n });\n }\n\n processItems(localToc.items);\n\n localToc.singlePage = true;\n\n return localToc;\n}\n", "import evalExp from '@diplodoc/transform/lib/liquid/evaluation';\nimport {Filter, TextItems} from '../models';\nimport liquid from '@diplodoc/transform/lib/liquid';\nimport {ArgvService} from './index';\n\nexport interface FilterFilesOptions {\n resolveConditions?: boolean;\n removeHiddenTocItems?: boolean;\n}\n\n/**\n * Filters file by expression and removes empty file's items.\n * @param items\n * @param itemsKey\n * @param vars\n * @param options\n * @return {T[]}\n */\nexport function filterFiles<T extends Filter>(\n items: T[],\n itemsKey: string,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n): T[] {\n if (!Array.isArray(items)) {\n return [];\n }\n\n const reducer = (results: T[], item: T) => {\n if (shouldProcessItem(item, vars, options)) {\n const prop = item[itemsKey] as T[];\n\n if (prop) {\n const filteredProperty = filterFiles(prop, itemsKey, vars, options);\n\n if (filteredProperty.length) {\n results.push({\n ...item,\n [itemsKey]: filteredProperty,\n });\n }\n } else {\n results.push(item);\n }\n }\n\n return results;\n };\n\n return items.reduce(reducer, []);\n}\n\nexport function filterTextItems(\n items: undefined | TextItems,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n) {\n if (!Array.isArray(items)) {\n return items;\n }\n\n return items.reduce((result: string[], item) => {\n if (!isObject(item)) {\n result.push(item);\n return result;\n }\n\n const useItem = shouldProcessItem(item, vars, options);\n\n if (useItem) {\n if (Array.isArray(item.text)) {\n result.push(...item.text);\n } else {\n result.push(item.text);\n }\n }\n\n return result;\n }, []);\n}\n\nexport function firstFilterTextItems(\n items: TextItems,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n) {\n const filteredItems = filterTextItems(items, vars, options);\n\n if (!Array.isArray(filteredItems)) {\n return filteredItems || '';\n }\n\n return filteredItems[0] || '';\n}\n\nfunction shouldProcessItem<T extends Filter>(\n item: T,\n vars: Record<string, string>,\n options?: FilterFilesOptions,\n) {\n const {resolveConditions, removeHiddenTocItems} = options || {};\n let useItem = true;\n\n if (resolveConditions) {\n const {when} = item;\n useItem =\n when === true ||\n when === undefined ||\n (typeof when === 'string' && evalExp(when, vars));\n\n delete item.when;\n }\n\n if (useItem && removeHiddenTocItems) {\n useItem = !item.hidden;\n\n delete item.hidden;\n }\n\n return useItem;\n}\n\nexport function liquidFields(\n fields: undefined | string | string[],\n vars: Record<string, unknown>,\n path: string,\n) {\n if (typeof fields === 'string') {\n return liquidField(fields, vars, path);\n }\n\n if (!Array.isArray(fields)) {\n return fields;\n }\n\n return fields.map((item) => {\n if (typeof item === 'string') {\n return liquidField(item, vars, path);\n }\n return item;\n });\n}\n\nexport function liquidField(input: string, vars: Record<string, unknown>, path: string) {\n const {applyPresets, resolveConditions} = ArgvService.getConfig();\n\n if (!applyPresets && !resolveConditions) {\n return input;\n }\n\n return liquid(input, vars, path, {\n substitutions: applyPresets,\n conditions: resolveConditions,\n keepNotVar: true,\n withSourceMap: false,\n });\n}\n\nexport function isObject(o: unknown): o is object {\n return typeof o === 'object' && o !== null;\n}\n", "import {dirname, relative, resolve} from 'path';\n\nimport {ArgvService, PresetService} from '../services';\nimport {YfmPreset} from '../models';\n\nexport function getVarsPerFile(filePath: string): YfmPreset {\n const {vars: argVars} = ArgvService.getConfig();\n\n const result = {\n ...PresetService.get(dirname(filePath)),\n ...argVars,\n };\n\n return result;\n}\n\nexport function getVarsPerRelativeFile(filePath: string): Record<string, string> {\n const {input} = ArgvService.getConfig();\n const root = resolve(input);\n const relativeFilePath = relative(root, filePath);\n\n return getVarsPerFile(relativeFilePath);\n}\n", "import libglob, {IGlob, IOptions} from 'glob';\n\nexport type Glob = {state: IGlob};\n\nconst glob = async (pattern: string, options: IOptions): Promise<Glob> =>\n new Promise((res, rej) => {\n const state: IGlob = libglob(pattern, options, (err) => (err ? rej(err) : res({state})));\n });\n\nexport {glob};\n\nexport default {glob};\n", "import {dirname, resolve} from 'path';\nimport shell from 'shelljs';\nimport {logger} from './logger';\n\nexport function copyFiles(\n inputFolderPath: string,\n outputFolderPath: string,\n files: string[],\n): void {\n const dirs = new Set<string>();\n\n files.forEach((pathToAsset) => {\n const outputDir = resolve(outputFolderPath, dirname(pathToAsset));\n const from = resolve(inputFolderPath, pathToAsset);\n const to = resolve(outputFolderPath, pathToAsset);\n\n if (!dirs.has(outputDir)) {\n dirs.add(outputDir);\n shell.mkdir('-p', outputDir);\n }\n\n shell.cp(from, to);\n\n logger.copy(pathToAsset);\n });\n}\n", "import {replaceDoubleToSingleQuotes} from '../utils';\nimport {VCSConnector} from '../vcs-connector/connector-models';\n\nasync function updateAuthorMetadataStringByAuthorLogin(\n authorLogin: string,\n vcsConnector?: VCSConnector,\n): Promise<string> {\n if (!vcsConnector) {\n return '';\n }\n\n const user = await getAuthorDetails(vcsConnector, authorLogin);\n\n if (user) {\n return user;\n }\n\n return '';\n}\n\nasync function updateAuthorMetadataStringByFilePath(\n filePath: string,\n vcsConnector?: VCSConnector,\n): Promise<string> {\n if (!vcsConnector) {\n return '';\n }\n\n const user = vcsConnector.getExternalAuthorByPath(filePath);\n\n if (user) {\n const author = replaceDoubleToSingleQuotes(JSON.stringify(user));\n return author;\n }\n\n return '';\n}\n\nasync function getAuthorDetails(\n vcsConnector: VCSConnector,\n author: string | object,\n): Promise<string | null> {\n if (typeof author === 'object') {\n // Avoiding problems when adding to html markup\n return replaceDoubleToSingleQuotes(JSON.stringify(author));\n }\n\n try {\n JSON.parse(author);\n return replaceDoubleToSingleQuotes(author);\n } catch {\n const user = await vcsConnector.getUserByLogin(author);\n\n if (user) {\n return replaceDoubleToSingleQuotes(JSON.stringify(user));\n }\n\n return null;\n }\n}\n\nexport {\n updateAuthorMetadataStringByAuthorLogin,\n updateAuthorMetadataStringByFilePath,\n getAuthorDetails,\n};\n", "import {readFile} from 'fs/promises';\nimport {dirname, join} from 'path';\n\nimport {replaceDoubleToSingleQuotes} from '../utils';\nimport {REGEXP_INCLUDE_CONTENTS, REGEXP_INCLUDE_FILE_PATH} from '../constants';\nimport {Contributor, Contributors, FileData} from '../models';\nimport {FileContributors, VCSConnector} from '../vcs-connector/connector-models';\n\nasync function getFileContributorsMetadata(\n fileData: FileData,\n vcsConnector: VCSConnector,\n): Promise<string> {\n const contributors = await getFileContributorsString(fileData, vcsConnector);\n\n return `contributors: ${contributors}`;\n}\n\nasync function getFileContributorsString(\n fileData: FileData,\n vcsConnector: VCSConnector,\n): Promise<string> {\n const {tmpInputFilePath, inputFolderPathLength} = fileData;\n\n const relativeFilePath = tmpInputFilePath.substring(inputFolderPathLength);\n const fileContributors: FileContributors =\n await vcsConnector.getContributorsByPath(relativeFilePath);\n let nestedContributors: Contributors = {};\n\n if (!fileContributors.hasIncludes) {\n nestedContributors = await getContributorsForNestedFiles(fileData, vcsConnector);\n vcsConnector.addNestedContributorsForPath(relativeFilePath, nestedContributors);\n }\n\n const fileContributorsWithContributorsIncludedFiles: Contributors = {\n ...fileContributors.contributors,\n ...nestedContributors,\n };\n\n const contributorsArray: Contributor[] = Object.entries(\n fileContributorsWithContributorsIncludedFiles,\n ).map(([, contributor]) => contributor);\n\n return replaceDoubleToSingleQuotes(JSON.stringify(contributorsArray));\n}\n\nasync function getContributorsForNestedFiles(\n fileData: FileData,\n vcsConnector: VCSConnector,\n): Promise<Contributors> {\n const {fileContent, inputFolderPathLength} = fileData;\n\n const includeContents = fileContent.match(REGEXP_INCLUDE_CONTENTS);\n if (!includeContents || includeContents.length === 0) {\n return {};\n }\n\n const includesContributors: Contributors[] = [];\n const relativeIncludeFilePaths: Set<string> = getRelativeIncludeFilePaths(\n fileData,\n includeContents,\n );\n\n for (const relativeIncludeFilePath of relativeIncludeFilePaths.values()) {\n const relativeFilePath = relativeIncludeFilePath.substring(inputFolderPathLength);\n const includeContributors = await vcsConnector.getContributorsByPath(relativeFilePath);\n\n let nestedContributors: Contributors = {};\n\n if (!includeContributors.hasIncludes) {\n let contentIncludeFile: string;\n try {\n contentIncludeFile = await readFile(relativeIncludeFilePath, 'utf8');\n } catch (err) {\n if (err.code === 'ENOENT') {\n continue;\n }\n throw err;\n }\n\n const newFileData: FileData = {\n ...fileData,\n fileContent: contentIncludeFile,\n tmpInputFilePath: relativeIncludeFilePath,\n };\n\n nestedContributors = await getContributorsForNestedFiles(newFileData, vcsConnector);\n vcsConnector.addNestedContributorsForPath(relativeFilePath, nestedContributors);\n }\n\n includesContributors.push(includeContributors.contributors);\n includesContributors.push(nestedContributors);\n }\n\n return Object.assign({}, ...includesContributors);\n}\n\nfunction getRelativeIncludeFilePaths(\n fileData: Pick<FileData, 'tmpInputFilePath'>,\n includeContents: string[],\n): Set<string> {\n const {tmpInputFilePath} = fileData;\n const relativeIncludeFilePaths: Set<string> = new Set();\n\n includeContents.forEach((includeContent: string) => {\n const relativeIncludeFilePath = includeContent.match(REGEXP_INCLUDE_FILE_PATH);\n\n if (relativeIncludeFilePath && relativeIncludeFilePath.length !== 0) {\n const relativeIncludeFilePathWithoutHash = relativeIncludeFilePath[0].split('#');\n const includeFilePath = join(\n dirname(tmpInputFilePath),\n relativeIncludeFilePathWithoutHash[0],\n );\n\n relativeIncludeFilePaths.add(includeFilePath);\n }\n });\n\n return relativeIncludeFilePaths;\n}\n\nasync function getFileIncludes(\n fileData: Pick<FileData, 'fileContent' | 'tmpInputFilePath' | 'inputFolderPathLength'>,\n) {\n const {fileContent, tmpInputFilePath, inputFolderPathLength} = fileData;\n\n const results = new Set<string>();\n\n const includeContents = fileContent.match(REGEXP_INCLUDE_CONTENTS);\n if (!includeContents || includeContents.length === 0) {\n return [];\n }\n const relativeIncludeFilePaths: Set<string> = getRelativeIncludeFilePaths(\n {tmpInputFilePath},\n includeContents,\n );\n for (const relativeIncludeFilePath of relativeIncludeFilePaths.values()) {\n const relativeFilePath = relativeIncludeFilePath.substring(inputFolderPathLength + 1);\n if (results.has(relativeFilePath)) continue;\n results.add(relativeFilePath);\n\n let contentIncludeFile: string;\n try {\n contentIncludeFile = await readFile(relativeIncludeFilePath, 'utf8');\n } catch (err) {\n if (err.code === 'ENOENT') {\n continue;\n }\n throw err;\n }\n\n const includedPaths = await getFileIncludes({\n inputFolderPathLength,\n fileContent: contentIncludeFile,\n tmpInputFilePath: relativeIncludeFilePath,\n });\n includedPaths.forEach((path) => results.add(path));\n }\n\n return Array.from(results.values());\n}\n\nexport {getFileContributorsMetadata, getFileContributorsString, getFileIncludes};\n", "import {join} from 'path';\n\nimport {isObject} from 'lodash';\n\nimport {ArgvService} from '../index';\nimport {IncludeMode} from '../../constants';\nimport {generic, sourcedocs, unarchive} from './batteries';\n\nimport type {\n Includer,\n YfmPreset,\n YfmToc,\n YfmTocInclude,\n YfmTocIncluder,\n YfmTocIncluders,\n} from '../../models';\n\nconst includersUsage = `include:\n path: <path-where-to-include>\n includers:\n - name: <includer-name-0>\n <includer-parameter>: <value-for-includer-parameter>\n - name: <includer-name-1>\n <includer-parameter>: <value-for-includer-parameter>\n`;\n\ntype IncludersMap = Record<string, Includer>;\n\nlet includersMap!: IncludersMap;\n\nclass IncludersError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.name = 'IncludersError';\n this.path = path;\n }\n}\n\nfunction init(custom: Includer[] = []) {\n if (includersMap) {\n return;\n }\n\n includersMap = {generic, sourcedocs, unarchive};\n\n for (const includer of custom) {\n includersMap[includer.name] = includer;\n }\n}\n\nasync function applyIncluders(path: string, item: YfmToc, vars: YfmPreset) {\n if (!item.include?.includers) {\n return;\n }\n\n if (!includeValid(item.include)) {\n throw new IncludersError(\"include doesn't comply with includers standard\", path);\n }\n\n // normalize include mode (includers support link mode only)\n item.include.mode = IncludeMode.LINK;\n\n const {status, message} = includersValid(item.include.includers);\n if (!status) {\n throw new IncludersError(message ?? '', path);\n }\n\n let index = 0;\n for (const {name, ...rest} of item.include.includers) {\n const includer = getIncluder(name);\n const passedParams = {...rest};\n\n await applyIncluder({path, item, includer, passedParams, index, vars});\n }\n\n // contract to be fullfilled by the includer:\n // provide builder generated toc.yaml\n item.include.path = join(item.include.path, 'toc.yaml');\n index++;\n}\n\nfunction includeValid(include: YfmTocInclude) {\n return (include.mode === IncludeMode.LINK || !include.mode) && include.path?.length;\n}\n\nfunction includersValid(includers: YfmTocIncluders) {\n for (const includer of includers) {\n const {status, message} = includerValid(includer);\n\n if (!status) {\n return {status, message};\n }\n }\n\n return {status: true};\n}\n\nfunction includerValid(includer: YfmTocIncluder) {\n if (isObject(includer)) {\n if (typeof includer.name !== 'string') {\n return {\n status: false,\n message: 'use string in the includer.name to specify includers name',\n };\n }\n\n if (includerExists(includer)) {\n return {status: true};\n }\n\n return {status: false, message: `includer ${includer.name} not implemented`};\n }\n\n return {\n status: false,\n message: `use appropriate includers format:\\n${includersUsage}`,\n };\n}\n\nfunction getIncluder(includerName: string) {\n return includersMap[includerName];\n}\n\nfunction includerExists(includer: YfmTocIncluder) {\n return includersMap[includer.name as keyof typeof includersMap];\n}\n\nexport type ApplyIncluderParams = {\n path: string;\n item: YfmToc;\n includer: Includer;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n passedParams: Record<string, any>;\n index: number;\n vars: YfmPreset;\n};\n\nasync function applyIncluder(args: ApplyIncluderParams) {\n const {rootInput: readBasePath, input: writeBasePath} = ArgvService.getConfig();\n\n const {path, item, includer, passedParams, index, vars} = args;\n\n const params = {\n tocPath: path,\n passedParams,\n index,\n item,\n readBasePath,\n writeBasePath,\n vars,\n };\n\n return await includer.includerFunction(params);\n}\n\nexport {init, applyIncluders, IncludersError};\n", "import {mkdir, readFile, writeFile} from 'fs/promises';\nimport {dirname, join, parse} from 'path';\n\nimport {updateWith} from 'lodash';\nimport {dump} from 'js-yaml';\n\nimport {glob} from '../../../utils/glob';\n\nimport {IncluderFunctionParams} from '../../../models';\n\nclass GenericIncluderError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.name = 'GenericIncluderError';\n this.path = path;\n }\n}\n\nconst name = 'generic';\n\nconst MD_GLOB = '**/*.md';\n\ntype Params = {\n input: string;\n leadingPage: {\n name?: string;\n };\n};\n\nasync function includerFunction(params: IncluderFunctionParams<Params>) {\n const {\n readBasePath,\n writeBasePath,\n tocPath,\n item,\n passedParams: {input, leadingPage},\n index,\n } = params;\n\n if (!input?.length || !item.include?.path) {\n throw new GenericIncluderError('provide includer with input parameter', tocPath);\n }\n\n try {\n const leadingPageName = leadingPage?.name ?? 'Overview';\n\n const tocDirPath = dirname(tocPath);\n\n const contentPath =\n index === 0\n ? join(writeBasePath, tocDirPath, input)\n : join(readBasePath, tocDirPath, input);\n\n let cache = {};\n let found = [];\n\n ({\n state: {found, cache},\n } = await glob(MD_GLOB, {\n cwd: contentPath,\n nosort: true,\n nocase: true,\n cache,\n }));\n\n const writePath = join(writeBasePath, tocDirPath, item.include.path);\n\n await mkdir(writePath, {recursive: true});\n\n for (const filePath of found) {\n const file = await readFile(join(contentPath, filePath));\n\n await mkdir(dirname(join(writePath, filePath)), {recursive: true});\n await writeFile(join(writePath, filePath), file);\n }\n\n const graph = createGraphFromPaths(found);\n\n const toc = createToc(leadingPageName, item.include.path)(graph, []);\n\n await writeFile(join(writePath, 'toc.yaml'), dump(toc));\n } catch (err) {\n throw new GenericIncluderError(err.toString(), tocPath);\n }\n}\n\nfunction createGraphFromPaths(paths: string[]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const graph: Record<string, any> = {};\n\n for (const path of paths) {\n const chunks = path.split('/').filter(Boolean);\n if (chunks.length < 2) {\n if (chunks.length === 1) {\n graph.files = chunks;\n }\n\n continue;\n }\n\n const file = chunks.pop();\n\n updateWith(\n graph,\n chunks,\n (old) => {\n return old ? {files: [...old.files, file]} : {files: [file]};\n },\n Object,\n );\n }\n\n return graph;\n}\n\nfunction createToc(leadingPageName: string, tocName: string) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function createTocRec(\n graph: Record<string, any>,\n cursor: string[],\n ): Record<string, any> {\n const handler = (file: string) => ({\n name: parse(file).name === 'index' ? leadingPageName : file,\n href: join(...cursor, file),\n });\n\n const recurse = (key: string) => createTocRec(graph[key], [...cursor, key]);\n\n const current = {\n name: cursor[cursor.length - 1] ?? tocName,\n items: [\n ...(graph.files ?? []).map(handler),\n ...Object.keys(graph)\n .filter((key) => key !== 'files')\n .map(recurse),\n ],\n };\n\n return current;\n };\n}\n\nexport {name, includerFunction};\n\nexport default {name, includerFunction};\n", "import {logger} from '../../../utils/logger';\n\nimport generic from './generic';\n\nimport {IncluderFunctionParams} from '../../../models';\n\nconst name = 'sourcedocs';\n\nconst usage = `include:\n path: <path-where-to-include>\n includers:\n - name: generic\n input: <path-to-directory-with-markdown>\n leadingPage:\n name: <leading-page-name>\n`;\n\ntype Params = {\n input: string;\n leadingPage: {\n name?: string;\n };\n};\n\nasync function includerFunction(params: IncluderFunctionParams<Params>) {\n logger.warn(\n params.tocPath,\n `sourcedocs inlcuder is getting depricated in favor of generic includer\\n${usage}`,\n );\n\n await generic.includerFunction(params);\n}\n\nexport {name, includerFunction};\n\nexport default {name, includerFunction};\n", "import {createReadStream, createWriteStream, mkdirSync} from 'fs';\nimport {dirname, join} from 'path';\nimport {Headers, extract} from 'tar-stream';\n\nimport type {PassThrough} from 'stream';\n\nimport {IncluderFunctionParams} from '../../../models';\n\nconst name = 'unarchive';\n\nclass UnarchiveIncluderError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.name = 'UnarchiveIncluderError';\n this.path = path;\n }\n}\n\nfunction pipeline(readPath: string, writeBasePath: string): Promise<void> {\n return new Promise((res, rej) => {\n const reader = createReadStream(readPath);\n\n reader.on('error', (err: Error) => {\n rej(err);\n });\n\n const extractor = extract();\n\n extractor.on('error', (err: Error) => {\n rej(err);\n });\n\n mkdirSync(writeBasePath, {recursive: true});\n\n extractor.on('entry', (header: Headers, stream: PassThrough, next: Function) => {\n const {type, name} = header;\n\n const writePath = join(writeBasePath, name);\n\n const writeDirPath = type === 'directory' ? writePath : dirname(writePath);\n\n mkdirSync(writeDirPath, {recursive: true});\n\n if (type !== 'directory') {\n const writer = createWriteStream(writePath, {flags: 'w'});\n\n writer.on('error', (err) => {\n rej(err);\n });\n\n stream.pipe(writer);\n }\n\n stream.on('end', () => {\n next();\n });\n\n stream.resume();\n });\n\n reader.pipe(extractor).on('finish', () => {\n res();\n });\n });\n}\n\ntype Params = {\n input: string;\n output: string;\n};\n\nasync function includerFunction(params: IncluderFunctionParams<Params>) {\n const {\n readBasePath,\n writeBasePath,\n tocPath,\n passedParams: {input, output},\n index,\n } = params;\n\n if (!input?.length || !output?.length) {\n throw new UnarchiveIncluderError('provide includer with input parameter', tocPath);\n }\n\n const contentPath = index === 0 ? join(writeBasePath, input) : join(readBasePath, input);\n\n const writePath = join(writeBasePath, output);\n\n try {\n await pipeline(contentPath, writePath);\n } catch (err) {\n throw new UnarchiveIncluderError(err.toString(), tocPath);\n }\n}\n\nexport {name, includerFunction};\n\nexport default {name, includerFunction};\n", "import {dirname, normalize} from 'path';\n\nimport {DocPreset, YfmPreset} from '../models';\n\nexport type PresetStorage = Map<string, YfmPreset>;\n\nlet presetStorage: PresetStorage = new Map();\n\nfunction add(parsedPreset: DocPreset, path: string, varsPreset: string) {\n const combinedValues = {\n ...(parsedPreset.default || {}),\n ...(parsedPreset[varsPreset] || {}),\n __metadata: parsedPreset.__metadata,\n } as YfmPreset;\n\n const key = dirname(normalize(path));\n presetStorage.set(key, combinedValues);\n}\n\nfunction get(path: string): YfmPreset {\n let combinedValues: YfmPreset = {};\n let localPath = normalize(path);\n\n while (localPath !== '.') {\n const presetValues: YfmPreset = presetStorage.get(localPath) || {};\n localPath = dirname(localPath);\n\n combinedValues = {\n ...presetValues,\n ...combinedValues,\n };\n }\n\n // Add root' presets\n combinedValues = {\n ...presetStorage.get('.'),\n ...combinedValues,\n };\n\n return combinedValues;\n}\n\nfunction getPresetStorage(): Map<string, YfmPreset> {\n return presetStorage;\n}\n\nfunction setPresetStorage(preset: Map<string, YfmPreset>): void {\n presetStorage = preset;\n}\n\nexport default {\n add,\n get,\n getPresetStorage,\n setPresetStorage,\n};\n", "import {YfmArgv} from '../models';\nimport {join} from 'path';\nimport {readFileSync} from 'fs';\n\nlet _argv!: YfmArgv;\n\nfunction getConfig() {\n return _argv;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction init(argv: any) {\n _argv = {\n ...argv,\n ignore: Array.isArray(argv.ignore) ? argv.ignore : [],\n } as YfmArgv;\n\n if (argv.vars) {\n _argv.vars = JSON.parse(argv.vars);\n }\n\n try {\n const ignorefile = readFileSync(join(_argv.rootInput, '.yfmignore'), 'utf8');\n const ignore = ignorefile.split('\\n');\n\n _argv.ignore = _argv.ignore.concat(ignore);\n } catch {}\n}\n\nfunction set(argv: YfmArgv) {\n _argv = argv;\n}\n\nexport default {\n getConfig,\n init,\n set,\n};\n", "import {dirname, resolve} from 'path';\nimport {readFileSync, writeFileSync} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport log from '@diplodoc/transform/lib/log';\n\nimport {ArgvService, PresetService} from './index';\nimport {LeadingPage} from '../models';\nimport {\n filterFiles,\n filterTextItems,\n firstFilterTextItems,\n liquidField,\n liquidFields,\n} from './utils';\n\nfunction filterFile(path: string) {\n const {input: inputFolderPath, vars} = ArgvService.getConfig();\n\n const pathToDir = dirname(path);\n const filePath = resolve(inputFolderPath, path);\n const content = readFileSync(filePath, 'utf8');\n const parsedIndex = load(content) as LeadingPage;\n\n const combinedVars = {\n ...PresetService.get(pathToDir),\n ...vars,\n };\n\n /* Should remove all links with false expressions */\n try {\n const title = firstFilterTextItems(parsedIndex.title, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.title = liquidField(title, combinedVars, path);\n\n const description = filterTextItems(parsedIndex.description, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.description = liquidFields(description, combinedVars, path);\n\n if (parsedIndex.meta?.title) {\n const metaTitle = firstFilterTextItems(parsedIndex.meta.title, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.meta.title = liquidField(metaTitle, combinedVars, path);\n }\n\n if (parsedIndex.meta?.description) {\n const metaDescription = firstFilterTextItems(\n parsedIndex.meta.description,\n combinedVars,\n {resolveConditions: true},\n );\n parsedIndex.meta.description = liquidField(metaDescription, combinedVars, path);\n }\n\n if (parsedIndex.nav) {\n const navTitle = firstFilterTextItems(parsedIndex.nav.title, combinedVars, {\n resolveConditions: true,\n });\n parsedIndex.nav.title = liquidField(navTitle, combinedVars, path);\n }\n\n parsedIndex.links = filterFiles(parsedIndex.links, 'links', combinedVars, {\n resolveConditions: true,\n });\n\n parsedIndex.links.forEach((link) => {\n if (link.title) {\n link.title = liquidField(link.title, combinedVars, path);\n }\n if (link.description) {\n link.description = liquidField(link.description, combinedVars, path);\n }\n });\n\n writeFileSync(filePath, dump(parsedIndex));\n } catch (error) {\n log.error(`Error while filtering index file: ${path}. Error message: ${error}`);\n }\n}\n\nexport default {\n filterFile,\n};\n", "import {LintConfig, LintRule} from '@diplodoc/transform/lib/yfmlint';\n\nimport {CollectionOfPluginsFunction, Plugin, PluginOptions} from '../models';\nimport {YFM_PLUGINS} from '../constants';\n\nlet plugins: Function[] | Plugin[];\nlet collectionOfPlugins: CollectionOfPluginsFunction;\n\nexport function setPlugins(): void {\n plugins = getAllPlugins();\n collectionOfPlugins = makeCollectOfPlugins();\n}\n\nexport function getPlugins() {\n return plugins;\n}\n\nexport function getCollectOfPlugins(): CollectionOfPluginsFunction {\n return collectionOfPlugins;\n}\n\nfunction makeCollectOfPlugins(): CollectionOfPluginsFunction {\n const pluginsWithCollect = (plugins as Plugin[]).filter((plugin: Plugin) => {\n return typeof plugin.collect === 'function';\n });\n\n return (output: string, options: PluginOptions) => {\n let collectsOutput = output;\n\n pluginsWithCollect.forEach((plugin: Plugin) => {\n const collectOutput = plugin.collect(collectsOutput, options);\n\n collectsOutput = typeof collectOutput === 'string' ? collectOutput : collectsOutput;\n });\n\n return collectsOutput;\n };\n}\n\nfunction getAllPlugins(): Function[] {\n const customPlugins = getCustomPlugins();\n return [...YFM_PLUGINS, ...customPlugins];\n}\n\nfunction getCustomPlugins(): Function[] {\n try {\n const customPlugins = require(require.resolve('./plugins'));\n return Array.isArray(customPlugins) ? customPlugins : [];\n } catch (e) {\n return [];\n }\n}\n\nexport function getHeadContent(): string {\n try {\n return require(require.resolve('./head-content.js'));\n } catch (e) {\n return '';\n }\n}\n\nexport function getCustomLintRules(): LintRule[] {\n try {\n return require(require.resolve('./lint-rules'));\n } catch (e) {\n return [];\n }\n}\n\nexport function getDefaultLintConfig(): LintConfig | undefined {\n try {\n return require(require.resolve('./default-lint-config'));\n } catch (e) {\n return undefined;\n }\n}\n", "import walkSync from 'walk-sync';\nimport shell from 'shelljs';\n\nimport {ArgvService} from '../services';\nimport {copyFiles} from '../utils';\n\nimport {ASSETS_FOLDER} from '../constants';\n\n/**\n * Processes assets files (everything except .yaml and .md files)\n * @param {string} outputBundlePath\n * @return {void}\n */\nexport function processAssets(outputBundlePath: string) {\n const {input: inputFolderPath, output: outputFolderPath} = ArgvService.getConfig();\n\n const assetFilePath: string[] = walkSync(inputFolderPath, {\n directories: false,\n includeBasePath: false,\n ignore: ['**/*.yaml', '**/*.md'],\n });\n\n copyFiles(inputFolderPath, outputFolderPath, assetFilePath);\n\n /* Copy js bundle to user' output folder */\n shell.mkdir('-p', outputBundlePath);\n shell.cp(ASSETS_FOLDER + '/*', outputBundlePath);\n}\n", "import {relative, resolve} from 'path';\nimport walkSync from 'walk-sync';\nimport shell from 'shelljs';\n\nimport {ArgvService, TocService} from '../services';\nimport {convertBackSlashToSlash} from '../utils';\n\n/**\n * Removes all content files that unspecified in toc files or ignored.\n * @return {void}\n */\nexport function processExcludedFiles() {\n const {input: inputFolderPath, output: outputFolderPath, ignore} = ArgvService.getConfig();\n\n const allContentFiles: string[] = walkSync(inputFolderPath, {\n directories: false,\n includeBasePath: true,\n globs: ['**/*.md', '**/index.yaml', ...ignore],\n // Ignores service directories like \"_includes\", \"_templates\" and etc.\n ignore: ['**/_*/**/*'],\n });\n const navigationPaths = TocService.getNavigationPaths().map((filePath) =>\n convertBackSlashToSlash(resolve(inputFolderPath, filePath)),\n );\n const tocSpecifiedFiles = new Set(navigationPaths);\n const excludedFiles = allContentFiles.filter((filePath) => !tocSpecifiedFiles.has(filePath));\n\n shell.rm('-f', excludedFiles);\n\n const includedTocPaths = TocService.getIncludedTocPaths().map((filePath) => {\n const relativeTocPath = relative(inputFolderPath, filePath);\n const destTocPath = resolve(outputFolderPath, relativeTocPath);\n\n return convertBackSlashToSlash(destTocPath);\n });\n\n shell.rm('-rf', includedTocPaths);\n}\n", "import log from '@diplodoc/transform/lib/log';\nimport _uniq from 'lodash/uniq';\n\nexport function processLogs(inputFolder: string) {\n const replacementRegExp = new RegExp(inputFolder, 'ig');\n const {info, warn, error} = log.get();\n const outputLogs = _uniq(['', ...info, '', ...warn, '', ...error, '']);\n\n for (const outputLog of outputLogs) {\n const preparedLog = outputLog.replace(replacementRegExp, '');\n console.log(preparedLog);\n }\n}\n", "import type {DocInnerProps} from '@diplodoc/client';\nimport {basename, dirname, extname, join, relative, resolve} from 'path';\nimport shell from 'shelljs';\nimport {readFileSync, writeFileSync} from 'fs';\nimport {bold} from 'chalk';\nimport {dump, load} from 'js-yaml';\nimport {asyncify, mapLimit} from 'async';\n\nimport log from '@diplodoc/transform/lib/log';\n\nimport {ArgvService, LeadingService, PluginService, TocService} from '../services';\nimport {resolveMd2HTML, resolveMd2Md} from '../resolvers';\nimport {\n generateStaticMarkup,\n joinSinglePageResults,\n logger,\n transformTocForSinglePage,\n} from '../utils';\nimport {\n LeadingPage,\n MetaDataOptions,\n PathData,\n Resources,\n SinglePageResult,\n YfmToc,\n} from '../models';\nimport {VCSConnector} from '../vcs-connector/connector-models';\nimport {getVCSConnector} from '../vcs-connector';\nimport {\n Lang,\n PAGE_PROCESS_CONCURRENCY,\n ResourceType,\n SINGLE_PAGE_DATA_FILENAME,\n SINGLE_PAGE_FILENAME,\n} from '../constants';\n\nconst singlePageResults: Record<string, SinglePageResult[]> = {};\nconst singlePagePaths: Record<string, Set<string>> = {};\n\n// Processes files of documentation (like index.yaml, *.md)\nexport async function processPages(outputBundlePath: string): Promise<void> {\n const {\n input: inputFolderPath,\n output: outputFolderPath,\n outputFormat,\n singlePage,\n resolveConditions,\n } = ArgvService.getConfig();\n\n const vcsConnector = await getVCSConnector();\n\n PluginService.setPlugins();\n\n const navigationPaths = TocService.getNavigationPaths();\n\n await mapLimit(\n navigationPaths,\n PAGE_PROCESS_CONCURRENCY,\n asyncify(async (pathToFile: string) => {\n const pathData = getPathData(\n pathToFile,\n inputFolderPath,\n outputFolderPath,\n outputFormat,\n outputBundlePath,\n );\n\n logger.proc(pathToFile);\n\n const metaDataOptions = getMetaDataOptions(\n pathData,\n inputFolderPath.length,\n vcsConnector,\n );\n\n await preparingPagesByOutputFormat(\n pathData,\n metaDataOptions,\n resolveConditions,\n singlePage,\n );\n }),\n );\n\n if (singlePage) {\n await saveSinglePages(outputBundlePath);\n }\n}\n\nfunction getPathData(\n pathToFile: string,\n inputFolderPath: string,\n outputFolderPath: string,\n outputFormat: string,\n outputBundlePath: string,\n): PathData {\n const pathToDir: string = dirname(pathToFile);\n const filename: string = basename(pathToFile);\n const fileExtension: string = extname(pathToFile);\n const fileBaseName: string = basename(filename, fileExtension);\n const outputDir = resolve(outputFolderPath, pathToDir);\n const outputFileName = `${fileBaseName}.${outputFormat}`;\n const outputPath = resolve(outputDir, outputFileName);\n const resolvedPathToFile = resolve(inputFolderPath, pathToFile);\n const outputTocDir = TocService.getTocDir(resolvedPathToFile);\n\n const pathData: PathData = {\n pathToFile,\n resolvedPathToFile,\n filename,\n fileBaseName,\n fileExtension,\n outputDir,\n outputPath,\n outputFormat,\n outputBundlePath,\n outputTocDir,\n inputFolderPath,\n outputFolderPath,\n };\n\n return pathData;\n}\n\nasync function saveSinglePages(outputBundlePath: string) {\n const {\n input: inputFolderPath,\n output: outputFolderPath,\n lang,\n resources,\n } = ArgvService.getConfig();\n\n try {\n await Promise.all(\n Object.keys(singlePageResults).map(async (tocDir) => {\n if (!singlePageResults[tocDir].length) {\n return;\n }\n\n const singlePageBody = joinSinglePageResults(\n singlePageResults[tocDir],\n inputFolderPath,\n tocDir,\n );\n const tocPath = join(relative(inputFolderPath, tocDir), 'toc.yaml');\n const toc: YfmToc | null = TocService.getForPath(tocPath) || null;\n const preparedToc = transformTocForSinglePage(toc, {\n root: inputFolderPath,\n currentPath: join(tocDir, SINGLE_PAGE_FILENAME),\n }) as YfmToc;\n\n const pageData = {\n data: {\n leading: false as const,\n html: singlePageBody,\n headings: [],\n meta: resources || {},\n toc: preparedToc,\n },\n router: {\n pathname: SINGLE_PAGE_FILENAME,\n },\n lang: lang || Lang.RU,\n };\n\n const outputTocDir = resolve(outputFolderPath, relative(inputFolderPath, tocDir));\n const relativeOutputBundlePath = relative(outputTocDir, outputBundlePath);\n\n // Save the full single page for viewing locally\n const singlePageFn = join(tocDir, SINGLE_PAGE_FILENAME);\n const singlePageDataFn = join(tocDir, SINGLE_PAGE_DATA_FILENAME);\n const singlePageContent = generateStaticMarkup(pageData, relativeOutputBundlePath);\n\n writeFileSync(singlePageFn, singlePageContent);\n writeFileSync(singlePageDataFn, JSON.stringify(pageData));\n }),\n );\n } catch (error) {\n console.log(error);\n }\n}\n\nfunction savePageResultForSinglePage(pageProps: DocInnerProps, pathData: PathData): void {\n const {pathToFile, outputTocDir} = pathData;\n\n if (pageProps.data.leading) {\n return;\n }\n\n singlePagePaths[outputTocDir] = singlePagePaths[outputTocDir] || new Set();\n\n if (singlePagePaths[outputTocDir].has(pathToFile)) {\n return;\n }\n\n singlePagePaths[outputTocDir].add(pathToFile);\n\n singlePageResults[outputTocDir] = singlePageResults[outputTocDir] || [];\n singlePageResults[outputTocDir].push({\n path: pathToFile,\n content: pageProps.data.html,\n title: pageProps.data.title,\n });\n}\n\nfunction getMetaDataOptions(\n pathData: PathData,\n inputFolderPathLength: number,\n vcsConnector?: VCSConnector,\n): MetaDataOptions {\n const {contributors, addSystemMeta, resources, allowCustomResources} = ArgvService.getConfig();\n\n const metaDataOptions: MetaDataOptions = {\n vcsConnector,\n fileData: {\n tmpInputFilePath: pathData.resolvedPathToFile,\n inputFolderPathLength,\n fileContent: '',\n },\n isContributorsEnabled: Boolean(contributors && vcsConnector),\n addSystemMeta,\n };\n\n if (allowCustomResources && resources) {\n const allowedResources = Object.entries(resources).reduce((acc: Resources, [key, val]) => {\n if (Object.keys(ResourceType).includes(key)) {\n acc[key as keyof typeof ResourceType] = val;\n }\n return acc;\n }, {});\n\n metaDataOptions.resources = allowedResources;\n }\n\n return metaDataOptions;\n}\n\nasync function preparingPagesByOutputFormat(\n path: PathData,\n metaDataOptions: MetaDataOptions,\n resolveConditions: boolean,\n singlePage: boolean,\n): Promise<void> {\n const {\n filename,\n fileExtension,\n fileBaseName,\n outputDir,\n resolvedPathToFile,\n outputFormat,\n pathToFile,\n } = path;\n const {allowCustomResources} = ArgvService.getConfig();\n\n try {\n shell.mkdir('-p', outputDir);\n\n const isYamlFileExtension = fileExtension === '.yaml';\n\n if (resolveConditions && fileBaseName === 'index' && isYamlFileExtension) {\n LeadingService.filterFile(pathToFile);\n }\n\n if (outputFormat === 'md' && isYamlFileExtension && allowCustomResources) {\n processingYamlFile(path, metaDataOptions);\n return;\n }\n\n if (\n (outputFormat === 'md' && isYamlFileExtension) ||\n (outputFormat === 'html' && !isYamlFileExtension && fileExtension !== '.md')\n ) {\n copyFileWithoutChanges(resolvedPathToFile, outputDir, filename);\n return;\n }\n\n switch (outputFormat) {\n case 'md':\n await processingFileToMd(path, metaDataOptions);\n return;\n case 'html': {\n const resolvedFileProps = await processingFileToHtml(path, metaDataOptions);\n\n if (singlePage) {\n savePageResultForSinglePage(resolvedFileProps, path);\n }\n\n return;\n }\n }\n } catch (e) {\n const message = `No such file or has no access to ${bold(resolvedPathToFile)}`;\n console.log(message, e);\n log.error(message);\n }\n}\n//@ts-ignore\nfunction processingYamlFile(path: PathData, metaDataOptions: MetaDataOptions) {\n const {pathToFile, outputFolderPath, inputFolderPath} = path;\n\n const filePath = resolve(inputFolderPath, pathToFile);\n const content = readFileSync(filePath, 'utf8');\n const parsedContent = load(content) as LeadingPage;\n\n if (metaDataOptions.resources) {\n parsedContent.meta = {...parsedContent.meta, ...metaDataOptions.resources};\n }\n\n writeFileSync(resolve(outputFolderPath, pathToFile), dump(parsedContent));\n}\n\nfunction copyFileWithoutChanges(\n resolvedPathToFile: string,\n outputDir: string,\n filename: string,\n): void {\n const from = resolvedPathToFile;\n const to = resolve(outputDir, filename);\n\n shell.cp(from, to);\n}\n\nasync function processingFileToMd(path: PathData, metaDataOptions: MetaDataOptions): Promise<void> {\n const {outputPath, pathToFile} = path;\n\n await resolveMd2Md({\n inputPath: pathToFile,\n outputPath,\n metadata: metaDataOptions,\n });\n}\n\nasync function processingFileToHtml(\n path: PathData,\n metaDataOptions: MetaDataOptions,\n): Promise<DocInnerProps> {\n const {outputBundlePath, filename, fileExtension, outputPath, pathToFile} = path;\n\n return resolveMd2HTML({\n inputPath: pathToFile,\n outputBundlePath,\n fileExtension,\n outputPath,\n filename,\n metadata: metaDataOptions,\n });\n}\n", "import {existsSync, readFileSync, writeFileSync} from 'fs';\nimport {basename, dirname, extname, join, resolve} from 'path';\nimport shell from 'shelljs';\nimport log from '@diplodoc/transform/lib/log';\nimport liquid from '@diplodoc/transform/lib/liquid';\n\nimport {ArgvService, PluginService} from '../services';\nimport {getVarsPerFile, logger} from '../utils';\nimport {PluginOptions, ResolveMd2MdOptions} from '../models';\nimport {PROCESSING_FINISHED} from '../constants';\nimport {getContentWithUpdatedMetadata} from '../services/metadata';\nimport {ChangelogItem} from '@diplodoc/transform/lib/plugins/changelog/types';\n\nexport async function resolveMd2Md(options: ResolveMd2MdOptions): Promise<void> {\n const {inputPath, outputPath, metadata} = options;\n const {input, output} = ArgvService.getConfig();\n const resolvedInputPath = resolve(input, inputPath);\n const vars = getVarsPerFile(inputPath);\n\n const content = await getContentWithUpdatedMetadata(\n readFileSync(resolvedInputPath, 'utf8'),\n metadata,\n vars.__system,\n vars.__metadata,\n );\n\n const {result, changelogs} = transformMd2Md(content, {\n path: resolvedInputPath,\n destPath: outputPath,\n root: resolve(input),\n destRoot: resolve(output),\n collectOfPlugins: PluginService.getCollectOfPlugins(),\n vars,\n log,\n copyFile,\n });\n\n writeFileSync(outputPath, result);\n\n if (changelogs?.length) {\n const mdFilename = basename(outputPath, extname(outputPath));\n const outputDir = dirname(outputPath);\n changelogs.forEach((changes, index) => {\n let changesName;\n const changesDate = changes.date as string | undefined;\n const changesIdx = changes.index as number | undefined;\n if (typeof changesIdx === 'number') {\n changesName = String(changesIdx);\n }\n if (!changesName && changesDate && /^\\d{4}/.test(changesDate)) {\n changesName = Math.trunc(new Date(changesDate).getTime() / 1000);\n }\n if (!changesName) {\n changesName = `name-${mdFilename}-${String(changelogs.length - index).padStart(\n 3,\n '0',\n )}`;\n }\n\n const changesPath = join(outputDir, `changes-${changesName}.json`);\n\n if (existsSync(changesPath)) {\n throw new Error(`Changelog ${changesPath} already exists!`);\n }\n\n writeFileSync(\n changesPath,\n JSON.stringify({\n ...changes,\n source: mdFilename,\n }),\n );\n });\n }\n\n logger.info(inputPath, PROCESSING_FINISHED);\n\n return undefined;\n}\n\nfunction copyFile(targetPath: string, targetDestPath: string, options?: PluginOptions) {\n shell.mkdir('-p', dirname(targetDestPath));\n\n if (options) {\n const sourceIncludeContent = readFileSync(targetPath, 'utf8');\n const {result} = transformMd2Md(sourceIncludeContent, options);\n\n writeFileSync(targetDestPath, result);\n } else {\n shell.cp(targetPath, targetDestPath);\n }\n}\n\nexport function liquidMd2Md(input: string, vars: Record<string, unknown>, path: string) {\n const {applyPresets, resolveConditions, conditionsInCode} = ArgvService.getConfig();\n\n return liquid(input, vars, path, {\n conditions: resolveConditions,\n substitutions: applyPresets,\n conditionsInCode,\n withSourceMap: true,\n keepNotVar: true,\n });\n}\n\nfunction transformMd2Md(input: string, options: PluginOptions) {\n const {disableLiquid} = ArgvService.getConfig();\n const {\n vars = {},\n path,\n root,\n destPath,\n destRoot,\n collectOfPlugins,\n log: pluginLog,\n copyFile: pluginCopyFile,\n } = options;\n\n let output = input;\n const changelogs: ChangelogItem[] = [];\n\n if (!disableLiquid) {\n const liquidResult = liquidMd2Md(input, vars, path);\n\n output = liquidResult.output;\n }\n\n if (collectOfPlugins) {\n output = collectOfPlugins(output, {\n vars,\n path,\n root,\n destPath,\n destRoot,\n log: pluginLog,\n copyFile: pluginCopyFile,\n collectOfPlugins,\n changelogs,\n extractChangelogs: true,\n });\n }\n\n return {\n result: output,\n changelogs,\n logs: pluginLog.get(),\n };\n}\n", "import {basename, dirname, join, relative, resolve, sep} from 'path';\nimport {readFileSync, writeFileSync} from 'fs';\nimport yaml from 'js-yaml';\n\nimport transform, {Output} from '@diplodoc/transform';\nimport log from '@diplodoc/transform/lib/log';\nimport liquid from '@diplodoc/transform/lib/liquid';\n\nimport {LeadingPage, ResolveMd2HTMLResult, ResolverOptions, YfmToc} from '../models';\nimport {ArgvService, PluginService, TocService} from '../services';\nimport {\n generateStaticMarkup,\n getVarsPerFile,\n getVarsPerRelativeFile,\n logger,\n transformToc,\n} from '../utils';\nimport {Lang, PROCESSING_FINISHED} from '../constants';\nimport {getAssetsPublicPath, getVCSMetadata} from '../services/metadata';\nimport {MarkdownItPluginCb} from '@diplodoc/transform/lib/plugins/typings';\n\nexport interface FileTransformOptions {\n path: string;\n root?: string;\n}\n\nconst FileTransformer: Record<string, Function> = {\n '.yaml': YamlFileTransformer,\n '.md': MdFileTransformer,\n};\n\nconst fixRelativePath = (relativeTo: string) => (path: string) => {\n return join(getAssetsPublicPath(relativeTo), path);\n};\n\nexport async function resolveMd2HTML(options: ResolverOptions): Promise<ResolveMd2HTMLResult> {\n const {inputPath, fileExtension, outputPath, outputBundlePath, metadata} = options;\n\n const pathToDir: string = dirname(inputPath);\n const toc: YfmToc | null = TocService.getForPath(inputPath) || null;\n const tocBase: string = toc && toc.base ? toc.base : '';\n const pathToFileDir: string =\n pathToDir === tocBase ? '' : pathToDir.replace(`${tocBase}${sep}`, '');\n const relativePathToIndex = relative(pathToDir, `${tocBase}${sep}`);\n const vars = getVarsPerFile(inputPath);\n\n const {input, lang, allowCustomResources} = ArgvService.getConfig();\n const resolvedPath: string = resolve(input, inputPath);\n const content: string = readFileSync(resolvedPath, 'utf8');\n\n const transformFn: Function = FileTransformer[fileExtension];\n const {result} = transformFn(content, {path: inputPath});\n\n const updatedMetadata = metadata?.isContributorsEnabled\n ? await getVCSMetadata(metadata, content, result?.meta)\n : result.meta;\n\n const fileMeta = fileExtension === '.yaml' ? result.data.meta ?? {} : updatedMetadata;\n\n if (!Array.isArray(fileMeta?.metadata)) {\n fileMeta.metadata = [fileMeta?.metadata].filter(Boolean);\n }\n\n fileMeta.metadata = fileMeta.metadata.concat(vars.__metadata?.filter(Boolean) || []);\n\n if (allowCustomResources) {\n const {script, style} = metadata?.resources || {};\n fileMeta.style = (fileMeta.style || []).concat(style || []).map(fixRelativePath(inputPath));\n fileMeta.script = (fileMeta.script || [])\n .concat(script || [])\n .map(fixRelativePath(inputPath));\n } else {\n fileMeta.style = [];\n fileMeta.script = [];\n }\n\n const props = {\n data: {\n leading: inputPath.endsWith('.yaml'),\n toc: transformToc(toc, pathToDir) || {},\n ...result,\n meta: fileMeta,\n },\n router: {\n pathname: join(relativePathToIndex, pathToFileDir, basename(outputPath)),\n },\n lang: lang || Lang.RU,\n };\n\n const outputDir = dirname(outputPath);\n const relativePathToBundle: string = relative(resolve(outputDir), resolve(outputBundlePath));\n\n const outputFileContent = generateStaticMarkup(props, relativePathToBundle);\n writeFileSync(outputPath, outputFileContent);\n logger.info(inputPath, PROCESSING_FINISHED);\n\n return props;\n}\n\nfunction YamlFileTransformer(content: string): Object {\n let data: LeadingPage | null = null;\n\n try {\n data = yaml.load(content) as LeadingPage;\n } catch (error) {\n log.error(`Yaml transform has been failed. Error: ${error}`);\n }\n\n if (!data) {\n return {\n result: {data: {}},\n };\n }\n\n const links = data?.links?.map((link) =>\n link.href ? {...link, href: link.href.replace(/.md$/gmu, '.html')} : link,\n );\n\n if (links) {\n data.links = links;\n }\n\n return {\n result: {data},\n };\n}\n\nexport function liquidMd2Html(input: string, vars: Record<string, unknown>, path: string) {\n const {conditionsInCode} = ArgvService.getConfig();\n\n return liquid(input, vars, path, {\n conditionsInCode,\n withSourceMap: true,\n });\n}\n\nfunction MdFileTransformer(content: string, transformOptions: FileTransformOptions): Output {\n const {input, ...options} = ArgvService.getConfig();\n const {path: filePath} = transformOptions;\n\n const plugins = PluginService.getPlugins();\n const vars = getVarsPerFile(filePath);\n const root = resolve(input);\n const path: string = resolve(input, filePath);\n\n return transform(content, {\n ...options,\n plugins: plugins as MarkdownItPluginCb<unknown>[],\n vars,\n root,\n path,\n assetsPublicPath: getAssetsPublicPath(filePath),\n getVarsPerFile: getVarsPerRelativeFile,\n extractTitle: true,\n });\n}\n", "import {dirname, relative, resolve} from 'path';\nimport log from '@diplodoc/transform/lib/log';\nimport {\n LintMarkdownFunctionOptions,\n PluginOptions,\n default as yfmlint,\n} from '@diplodoc/transform/lib/yfmlint';\nimport {readFileSync} from 'fs';\nimport {bold} from 'chalk';\n\nimport {ArgvService, PluginService} from '../services';\nimport {getVarsPerFile, getVarsPerRelativeFile} from '../utils';\nimport {liquidMd2Html} from './md2html';\nimport {liquidMd2Md} from './md2md';\n\ninterface FileTransformOptions {\n path: string;\n root?: string;\n}\n\nconst FileLinter: Record<string, Function> = {\n '.md': MdFileLinter,\n};\n\nexport interface ResolverLintOptions {\n inputPath: string;\n fileExtension: string;\n onFinish?: () => void;\n}\n\nexport function lintPage(options: ResolverLintOptions) {\n const {inputPath, fileExtension, onFinish} = options;\n const {input} = ArgvService.getConfig();\n const resolvedPath: string = resolve(input, inputPath);\n\n try {\n const content: string = readFileSync(resolvedPath, 'utf8');\n\n const lintFn: Function = FileLinter[fileExtension];\n if (!lintFn) {\n return;\n }\n\n lintFn(content, {path: inputPath});\n } catch (e) {\n const message = `No such file or has no access to ${bold(resolvedPath)}`;\n console.error(message, e);\n log.error(message);\n }\n\n if (onFinish) {\n onFinish();\n }\n}\n\nfunction MdFileLinter(content: string, lintOptions: FileTransformOptions): void {\n const {input, lintConfig, disableLiquid, outputFormat, ...options} = ArgvService.getConfig();\n const {path: filePath} = lintOptions;\n\n const plugins = outputFormat === 'md' ? [] : PluginService.getPlugins();\n const vars = getVarsPerFile(filePath);\n const root = resolve(input);\n const path: string = resolve(input, filePath);\n let preparedContent = content;\n\n /* Relative path from folder of .md file to root of user' output folder */\n const assetsPublicPath = relative(dirname(path), root);\n\n const lintMarkdown = function lintMarkdown(opts: LintMarkdownFunctionOptions) {\n const {input: localInput, path: localPath, sourceMap} = opts;\n\n const pluginOptions: PluginOptions = {\n ...options,\n vars,\n root,\n path: localPath,\n lintMarkdown, // Should pass the function for linting included files\n assetsPublicPath,\n disableLiquid,\n log,\n getVarsPerFile: getVarsPerRelativeFile,\n };\n\n yfmlint({\n input: localInput,\n lintConfig,\n pluginOptions,\n plugins,\n defaultLintConfig: PluginService.getDefaultLintConfig(),\n customLintRules: PluginService.getCustomLintRules(),\n sourceMap,\n });\n };\n\n let sourceMap;\n if (!disableLiquid) {\n let liquidResult;\n if (outputFormat === 'md') {\n liquidResult = liquidMd2Md(content, vars, path);\n } else {\n liquidResult = liquidMd2Html(content, vars, path);\n }\n\n preparedContent = liquidResult.output;\n sourceMap = liquidResult.sourceMap;\n }\n\n lintMarkdown({\n input: preparedContent,\n path,\n sourceMap,\n });\n}\n", "import {Octokit} from '@octokit/core';\nimport {join, normalize} from 'path';\nimport simpleGit, {SimpleGitOptions} from 'simple-git';\nimport {minimatch} from 'minimatch';\n\nimport github from './client/github';\nimport {ArgvService} from '../services';\nimport {\n CommitInfo,\n Contributor,\n Contributors,\n ContributorsByPathFunction,\n ExternalAuthorByPathFunction,\n NestedContributorsForPathFunction,\n} from '../models';\nimport {\n FileContributors,\n GitHubConnectorFields,\n SourceType,\n VCSConnector,\n} from './connector-models';\nimport {\n ALL_CONTRIBUTORS_RECEIVED,\n FIRST_COMMIT_FROM_ROBOT_IN_GITHUB,\n GETTING_ALL_CONTRIBUTORS,\n} from '../constants';\nimport {addSlashPrefix, logger} from '../utils';\nimport {validateConnectorFields} from './connector-validator';\nimport process from 'process';\n\nconst authorByGitEmail: Map<string, Contributor | null> = new Map();\nconst authorByPath: Map<string, Contributor | null> = new Map();\nconst contributorsByPath: Map<string, FileContributors> = new Map();\nconst contributorsData: Map<string, Contributor | null> = new Map();\nconst loginUserMap: Map<string, Contributor | null> = new Map();\nconst pathMTime = new Map<string, number>();\n\nasync function getGitHubVCSConnector(): Promise<VCSConnector | undefined> {\n const {contributors, rootInput} = ArgvService.getConfig();\n\n const httpClientByToken = getHttpClientByToken();\n if (!httpClientByToken) {\n return undefined;\n }\n\n let addNestedContributorsForPath: NestedContributorsForPathFunction = () => {};\n let getContributorsByPath: ContributorsByPathFunction = () =>\n Promise.resolve({} as FileContributors);\n const getExternalAuthorByPath: ExternalAuthorByPathFunction = (path: string) =>\n authorByPath.get(path) ?? null;\n\n if (contributors) {\n await getFilesMTime(rootInput, pathMTime);\n await getAllContributorsTocFiles(httpClientByToken);\n addNestedContributorsForPath = (path: string, nestedContributors: Contributors) =>\n addNestedContributorsForPathFunction(path, nestedContributors);\n getContributorsByPath = async (path: string) => getFileContributorsByPath(path);\n }\n\n return {\n getExternalAuthorByPath,\n addNestedContributorsForPath,\n getContributorsByPath,\n getUserByLogin: (login: string) => getUserByLogin(httpClientByToken, login),\n getModifiedTimeByPath: (filename: string) => pathMTime.get(filename),\n };\n}\n\nfunction getHttpClientByToken(): Octokit | null {\n const {connector, contributors} = ArgvService.getConfig();\n\n if (!contributors) {\n return null;\n }\n\n const neededProperties = [GitHubConnectorFields.TOKEN, GitHubConnectorFields.ENDPOINT];\n const validatedFileds = validateConnectorFields(SourceType.GITHUB, neededProperties, connector);\n\n if (Object.keys(validatedFileds).length === 0) {\n return null;\n }\n\n const octokit = new Octokit({\n auth: validatedFileds[GitHubConnectorFields.TOKEN] as string,\n baseUrl: validatedFileds[GitHubConnectorFields.ENDPOINT] as string,\n });\n\n return octokit;\n}\n\nasync function getAllContributorsTocFiles(httpClientByToken: Octokit): Promise<void> {\n const {rootInput} = ArgvService.getConfig();\n\n const options: Partial<SimpleGitOptions> = {\n baseDir: rootInput,\n };\n\n logger.info('', GETTING_ALL_CONTRIBUTORS);\n\n const masterDir = './_yfm-master';\n const tmpMasterBranch = 'yfm-tmp-master';\n\n try {\n await simpleGit(options).raw(\n 'worktree',\n 'add',\n '-b',\n tmpMasterBranch,\n masterDir,\n 'origin/master',\n );\n const fullRepoLogString = await simpleGit({\n baseDir: join(rootInput, masterDir),\n }).raw(\n 'log',\n `${FIRST_COMMIT_FROM_ROBOT_IN_GITHUB}..HEAD`,\n '--pretty=format:%ae, %an, %H',\n '--name-only',\n );\n const repoLogs = fullRepoLogString.split('\\n\\n');\n if (process.env.ENABLE_EXPERIMANTAL_AUTHORS) {\n const fullAuthorRepoLogString = await simpleGit({\n baseDir: join(rootInput, masterDir),\n }).raw(\n 'log',\n `${FIRST_COMMIT_FROM_ROBOT_IN_GITHUB}..HEAD`,\n '--diff-filter=A',\n '--pretty=format:%ae;%an;%H',\n '--name-only',\n );\n const authorRepoLog = fullAuthorRepoLogString.split('\\n\\n');\n await matchAuthorsForEachPath(authorRepoLog, httpClientByToken);\n }\n await matchContributionsForEachPath(repoLogs, httpClientByToken);\n } finally {\n await simpleGit(options).raw('worktree', 'remove', masterDir);\n await simpleGit(options).raw('branch', '-d', tmpMasterBranch);\n }\n\n logger.info('', ALL_CONTRIBUTORS_RECEIVED);\n}\n\nasync function matchContributionsForEachPath(\n repoLogs: string[],\n httpClientByToken: Octokit,\n): Promise<void> {\n for (const repoLog of repoLogs) {\n if (!repoLog) {\n continue;\n }\n\n const dataArray = repoLog.split('\\n');\n const userData = dataArray[0];\n const [email, name, hashCommit] = userData.split(', ');\n\n if (shouldAuthorBeIgnored({email, name})) {\n continue;\n }\n\n const hasContributorData = contributorsData.get(email);\n\n let contributorDataByHash;\n\n if (hasContributorData === undefined) {\n logger.info('Contributors: Getting data for', email);\n\n contributorDataByHash = await getContributorDataByHashCommit(\n httpClientByToken,\n hashCommit,\n );\n\n if (contributorDataByHash) {\n const paths = dataArray.splice(1);\n addContributorForPath(paths, {\n [email]: contributorDataByHash,\n });\n }\n contributorsData.set(email, contributorDataByHash);\n } else if (hasContributorData) {\n const paths = dataArray.splice(1);\n addContributorForPath(paths, {\n [email]: hasContributorData,\n });\n }\n }\n}\n\nasync function matchAuthorsForEachPath(authorRepoLogs: string[], httpClientByToken: Octokit) {\n for (const repoLog of authorRepoLogs) {\n if (!repoLog) {\n continue;\n }\n\n const dataArray = repoLog.split('\\n');\n const [userData, ...paths] = dataArray;\n const [email, name, hashCommit] = userData.split(';');\n\n if (shouldAuthorBeIgnored({email, name})) {\n continue;\n }\n\n await getAuthorByPaths({email, hashCommit}, paths, httpClientByToken);\n }\n}\n\nasync function getContributorDataByHashCommit(\n httpClientByToken: Octokit,\n hashCommit: string,\n): Promise<Contributor | null> {\n const repoCommit = await github.getRepoCommitByHash(httpClientByToken, hashCommit);\n\n if (!repoCommit) {\n return null;\n }\n\n const {author, commit} = repoCommit;\n\n if (!author) {\n return null;\n }\n\n const {avatar_url: avatar, html_url: url, login} = author;\n\n return {\n avatar,\n email: commit.author.email,\n login,\n name: commit.author.name,\n url,\n };\n}\n\nasync function getAuthorByPaths(\n commitInfo: CommitInfo,\n paths: string[],\n httpClientByToken: Octokit,\n) {\n for (const path of paths) {\n if (!path) {\n continue;\n }\n const normalizePath = normalize(addSlashPrefix(path));\n const {email, hashCommit} = commitInfo;\n\n let authorToReturn = authorByGitEmail.get(email) || null;\n\n if (!authorToReturn) {\n logger.info('Authors: Getting data for', email);\n\n const repoCommit = await github.getRepoCommitByHash(httpClientByToken, hashCommit);\n if (!repoCommit) {\n continue;\n }\n\n const {author, commit} = repoCommit;\n if (!author) {\n continue;\n }\n\n const {avatar_url: avatar, html_url: url, login} = author;\n authorToReturn = {\n avatar,\n email: commit.author.email,\n login,\n name: commit.author.name,\n url,\n };\n authorByGitEmail.set(email, authorToReturn);\n }\n\n authorByPath.set(normalizePath, authorToReturn);\n }\n}\n\nasync function getFileContributorsByPath(path: string): Promise<FileContributors> {\n if (contributorsData.size === 0 || !contributorsByPath.has(path)) {\n return {} as FileContributors;\n }\n\n return contributorsByPath.get(path) as FileContributors;\n}\n\nasync function getUserByLogin(octokit: Octokit, userLogin: string): Promise<Contributor | null> {\n let result = loginUserMap.get(userLogin);\n if (!result) {\n const user = await github.getRepoUser(octokit, userLogin);\n if (!user) {\n return null;\n }\n\n const {avatar_url: avatar, html_url: url, email, login, name} = user;\n\n result = {\n avatar,\n email,\n login,\n name,\n url,\n };\n\n loginUserMap.set(userLogin, result);\n }\n\n return result;\n}\n\nfunction addNestedContributorsForPathFunction(\n path: string,\n nestedContributors: Contributors,\n): void {\n addContributorForPath([path], nestedContributors, true);\n}\n\nfunction addContributorForPath(\n paths: string[],\n newContributor: Contributors,\n hasIncludes = false,\n): void {\n paths.forEach((path: string) => {\n const normalizePath = normalize(addSlashPrefix(path));\n\n if (!contributorsByPath.has(normalizePath)) {\n contributorsByPath.set(normalizePath, {\n contributors: newContributor,\n hasIncludes,\n });\n return;\n }\n\n const oldContributors = contributorsByPath.get(normalizePath);\n\n contributorsByPath.set(normalizePath, {\n contributors: {\n ...oldContributors?.contributors,\n ...newContributor,\n },\n hasIncludes,\n });\n });\n}\n\ntype ShouldAuthorBeIgnoredArgs = {\n email?: string;\n name?: string;\n};\n\nfunction shouldAuthorBeIgnored({email, name}: ShouldAuthorBeIgnoredArgs) {\n if (!(email || name)) {\n return false;\n }\n\n const {ignoreAuthorPatterns} = ArgvService.getConfig();\n if (!ignoreAuthorPatterns) {\n return false;\n }\n\n for (const pattern of ignoreAuthorPatterns) {\n if (email && minimatch(email, pattern)) {\n return true;\n }\n\n if (name && minimatch(name, pattern)) {\n return true;\n }\n }\n\n return false;\n}\n\nasync function getFilesMTime(repoDir: string, pathMTime: Map<string, number>) {\n const timeFiles = await simpleGit({\n baseDir: repoDir,\n }).raw(\n 'log',\n '--reverse',\n '--before=now',\n '--diff-filter=ADMR',\n '--pretty=format:%ct',\n '--name-status',\n );\n\n const parts = timeFiles.split(/\\n\\n/);\n parts.forEach((part) => {\n const lines = part.trim().split(/\\n/);\n const committerDate = lines.shift();\n const unixtime = Number(committerDate);\n lines.forEach((line) => {\n const [status, from, to] = line.split(/\\t/);\n switch (status[0]) {\n case 'R': {\n pathMTime.delete(from);\n pathMTime.set(to, unixtime);\n break;\n }\n case 'D': {\n pathMTime.delete(from);\n break;\n }\n default: {\n pathMTime.set(from, unixtime);\n }\n }\n });\n });\n return pathMTime;\n}\n\nexport default getGitHubVCSConnector;\n", "import log from '@diplodoc/transform/lib/log';\nimport {Octokit} from '@octokit/core';\nimport {ArgvService} from '../../services';\nimport {\n GitHubConnectorFields,\n GithubCommitDTO,\n GithubUserDTO,\n SourceType,\n} from '../connector-models';\nimport {validateConnectorFields} from '../connector-validator';\n\nasync function getRepoUser(octokit: Octokit, username: string): Promise<GithubUserDTO | null> {\n try {\n const user = await octokit.request('GET /users/{username}', {\n username,\n });\n\n return user.data as GithubUserDTO;\n } catch (error) {\n log.warn(`Getting user for GitHub has been failed. Username: ${username}. Error: ${error}`);\n return null;\n }\n}\n\nasync function getRepoCommitByHash(\n httpClientByToken: Octokit,\n hashCommit: string,\n): Promise<GithubCommitDTO | null> {\n const {connector} = ArgvService.getConfig();\n\n const neededProperties = [GitHubConnectorFields.OWNER, GitHubConnectorFields.REPO];\n const validatedFileds = validateConnectorFields(SourceType.GITHUB, neededProperties, connector);\n\n if (Object.keys(validatedFileds).length === 0) {\n return null;\n }\n\n try {\n const commit = await httpClientByToken.request(\n 'GET /repos/{owner}/{repo}/commits/{commit_sha}',\n {\n owner: validatedFileds[GitHubConnectorFields.OWNER] as string,\n repo: validatedFileds[GitHubConnectorFields.REPO] as string,\n commit_sha: hashCommit,\n },\n );\n\n return commit.data;\n } catch (error) {\n log.warn(\n `Getting commit by sha has been failed for GitHub. SHA commit: ${hashCommit}. Error: ${error}`,\n );\n return null;\n }\n}\n\nexport default {\n getRepoUser,\n getRepoCommitByHash,\n};\n", "import log from '@diplodoc/transform/lib/log';\nimport {\n ConnectorValidatorProps,\n GitHubConnectorFields,\n SourceType,\n VCSConnectorConfig,\n} from './connector-models';\nimport {getMsg\u0421onfigurationMustBeProvided} from '../constants';\n\nconst githubConnectorValidator: Record<string, ConnectorValidatorProps> = {\n [GitHubConnectorFields.ENDPOINT]: {\n warnMessage: `'${GitHubConnectorFields.ENDPOINT}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_BASE_URL,\n },\n [GitHubConnectorFields.TOKEN]: {\n warnMessage: `'${GitHubConnectorFields.TOKEN}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_TOKEN,\n },\n [GitHubConnectorFields.OWNER]: {\n warnMessage: `'${GitHubConnectorFields.OWNER}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_OWNER,\n },\n [GitHubConnectorFields.REPO]: {\n warnMessage: `'${GitHubConnectorFields.REPO}' must be provided for GitHub repo.`,\n validateFn: notEmptyValue,\n defaultValue: process.env.GITHUB_REPO,\n },\n};\n\nconst connectorValidator: Record<string, ConnectorValidatorProps> = {\n type: {\n warnMessage: \"'type' must be provided for repo.\",\n validateFn: notEmptyValue,\n },\n [SourceType.GITHUB]: {\n warnMessage: `'${SourceType.GITHUB}' object must be filled needed fields.`,\n validateFn: notEmptyObject,\n relatedValidator: githubConnectorValidator,\n },\n};\n\nfunction notEmptyObject(filed?: unknown): boolean {\n if (typeof filed === 'object') {\n return Boolean(filed && Object.getOwnPropertyNames(filed).length);\n }\n\n return false;\n}\n\nfunction notEmptyValue(value?: unknown): boolean {\n if (typeof value === 'string') {\n return Boolean(value);\n }\n\n return false;\n}\n\nexport function validateConnectorFields(\n sourceType: SourceType,\n fieldNames: GitHubConnectorFields[],\n repoProperties?: VCSConnectorConfig,\n): Record<string, unknown> {\n const repoValidator = connectorValidator[sourceType];\n\n if (!repoValidator) {\n log.error(`Invalid repo type: ${repoValidator}`);\n return {};\n }\n\n const isValidRepo = repoValidator.validateFn(repoProperties && repoProperties[sourceType]);\n const relatedRepoValidator = repoValidator.relatedValidator;\n if (!repoProperties || !isValidRepo || !relatedRepoValidator) {\n createLog(repoValidator);\n return {};\n }\n\n let isValidProperties = true;\n const validatedFields: Record<string, unknown> = {};\n\n for (const property of fieldNames) {\n const propertyValidator = relatedRepoValidator[property];\n\n if (!propertyValidator) {\n log.warn(`The property '${property}' doesn't exist in ${sourceType} repo.`);\n continue;\n }\n\n const propertyValue =\n propertyValidator.defaultValue || repoProperties[sourceType]?.[property];\n\n if (!propertyValidator.validateFn(propertyValue)) {\n createLog(propertyValidator);\n isValidProperties = false;\n }\n\n validatedFields[property] = propertyValue;\n }\n\n if (isValidProperties) {\n return validatedFields;\n }\n\n log.warn(getMsg\u0421onfigurationMustBeProvided(sourceType));\n return {};\n}\n\nfunction createLog(validator: ConnectorValidatorProps): void {\n if (validator.errorMessage) {\n return log.error(validator.errorMessage);\n }\n\n if (validator.warnMessage) {\n return log.warn(validator.warnMessage);\n }\n\n throw new Error(`Invalid validator: ${JSON.stringify(validator)}.`);\n}\n", "import {ArgvService} from '../services';\nimport getGitHubVCSConnector from './github';\nimport {SourceType, VCSConnector} from './connector-models';\n\nexport async function getVCSConnector(): Promise<VCSConnector | undefined> {\n const {connector} = ArgvService.getConfig();\n const connectorType = process.env.VCS_CONNECTOR_TYPE || (connector && connector.type);\n\n switch (connectorType) {\n case SourceType.GITHUB:\n return getGitHubVCSConnector();\n default:\n return undefined;\n }\n}\n", "import log from '@diplodoc/transform/lib/log';\nimport {Thread, Worker, spawn} from 'threads';\nimport {extname} from 'path';\n\nimport {ArgvService, PluginService, PresetService, TocService} from '../services';\nimport {ProcessLinterWorker} from '../workers/linter';\nimport {logger} from '../utils';\nimport {LINTING_FINISHED, MIN_CHUNK_SIZE, WORKERS_COUNT} from '../constants';\nimport {lintPage} from '../resolvers';\nimport {splitOnChunks} from '../utils/worker';\n\nlet processLinterWorkers: (ProcessLinterWorker & Thread)[];\nlet navigationPathsChunks: string[][];\n\nexport async function processLinter(): Promise<void> {\n const argvConfig = ArgvService.getConfig();\n\n const navigationPaths = TocService.getNavigationPaths();\n\n if (!processLinterWorkers) {\n lintPagesFallback(navigationPaths);\n\n return;\n }\n\n const presetStorage = PresetService.getPresetStorage();\n\n /* Subscribe on the linted page event */\n processLinterWorkers.forEach((worker) => {\n worker.getProcessedPages().subscribe((pathToFile) => {\n logger.info(pathToFile as string, LINTING_FINISHED);\n });\n });\n\n /* Run processing the linter */\n await Promise.all(\n processLinterWorkers.map((worker, i) => {\n const navigationPathsChunk = navigationPathsChunks[i];\n\n return worker.run({\n argvConfig,\n presetStorage,\n navigationPaths: navigationPathsChunk,\n });\n }),\n );\n\n /* Unsubscribe from workers */\n await Promise.all(\n processLinterWorkers.map((worker) => {\n return worker.finish().then((logs) => {\n log.add(logs);\n });\n }),\n );\n\n /* Terminate workers */\n await Promise.all(\n processLinterWorkers.map((worker) => {\n return Thread.terminate(worker);\n }),\n );\n}\n\nexport async function initLinterWorkers() {\n const navigationPaths = TocService.getNavigationPaths();\n const chunkSize = getChunkSize(navigationPaths);\n\n if (process.env.DISABLE_PARALLEL_BUILD || chunkSize < MIN_CHUNK_SIZE || WORKERS_COUNT <= 0) {\n return;\n }\n\n navigationPathsChunks = splitOnChunks(navigationPaths, chunkSize).filter((arr) => arr.length);\n\n const workersCount = navigationPathsChunks.length;\n\n processLinterWorkers = await Promise.all(\n new Array(workersCount).fill(null).map(() => {\n // TODO: get linter path from env\n return spawn<ProcessLinterWorker>(new Worker('./linter'), {timeout: 60000});\n }),\n );\n}\n\nfunction getChunkSize(arr: string[]) {\n return Math.ceil(arr.length / WORKERS_COUNT);\n}\n\nfunction lintPagesFallback(navigationPaths: string[]) {\n PluginService.setPlugins();\n\n navigationPaths.forEach((pathToFile) => {\n lintPage({\n inputPath: pathToFile,\n fileExtension: extname(pathToFile),\n onFinish: () => {\n logger.info(pathToFile, LINTING_FINISHED);\n },\n });\n });\n}\n", "export function splitOnChunks<T>(array: T[], chunkSize = 1000) {\n const chunks: T[][] = [];\n\n for (let i = 0, j = array.length; i < j; i += chunkSize) {\n const chunk: T[] = array.slice(i, i + chunkSize);\n chunks.push(chunk);\n }\n\n return chunks;\n}\n", "import {dirname, resolve} from 'path';\nimport walkSync from 'walk-sync';\nimport {readFileSync, writeFileSync} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport log from '@diplodoc/transform/lib/log';\n\nimport {ArgvService, PresetService, TocService} from '../services';\nimport {logger} from '../utils';\nimport {DocPreset} from '../models';\nimport shell from 'shelljs';\n\ntype GetFilePathsByGlobalsFunction = (globs: string[]) => string[];\n\nexport async function processServiceFiles(): Promise<void> {\n const {input: inputFolderPath, ignore = []} = ArgvService.getConfig();\n\n const getFilePathsByGlobals = (globs: string[]): string[] => {\n return walkSync(inputFolderPath, {\n directories: false,\n includeBasePath: false,\n globs,\n ignore,\n });\n };\n\n preparingPresetFiles(getFilePathsByGlobals);\n await preparingTocFiles(getFilePathsByGlobals);\n}\n\nfunction preparingPresetFiles(getFilePathsByGlobals: GetFilePathsByGlobalsFunction): void {\n const {\n input: inputFolderPath,\n varsPreset = '',\n outputFormat,\n applyPresets,\n resolveConditions,\n } = ArgvService.getConfig();\n\n try {\n const presetsFilePaths = getFilePathsByGlobals(['**/presets.yaml']);\n\n for (const path of presetsFilePaths) {\n logger.proc(path);\n\n const pathToPresetFile = resolve(inputFolderPath, path);\n const content = readFileSync(pathToPresetFile, 'utf8');\n const parsedPreset = load(content) as DocPreset;\n\n PresetService.add(parsedPreset, path, varsPreset);\n\n if (outputFormat === 'md' && (!applyPresets || !resolveConditions)) {\n // Should save filtered presets.yaml only when --apply-presets=false or --resolve-conditions=false\n saveFilteredPresets(path, parsedPreset);\n }\n }\n } catch (error) {\n log.error(`Preparing presets.yaml files failed. Error: ${error}`);\n throw error;\n }\n}\n\nfunction saveFilteredPresets(path: string, parsedPreset: DocPreset): void {\n const {output: outputFolderPath, varsPreset = ''} = ArgvService.getConfig();\n\n const outputPath = resolve(outputFolderPath, path);\n const filteredPreset: Record<string, Object> = {\n default: parsedPreset.default,\n };\n\n if (parsedPreset[varsPreset]) {\n filteredPreset[varsPreset] = parsedPreset[varsPreset];\n }\n\n const outputPreset = dump(filteredPreset, {\n lineWidth: 120,\n });\n\n shell.mkdir('-p', dirname(outputPath));\n writeFileSync(outputPath, outputPreset);\n}\n\nasync function preparingTocFiles(\n getFilePathsByGlobals: GetFilePathsByGlobalsFunction,\n): Promise<void> {\n try {\n const tocFilePaths = getFilePathsByGlobals(['**/toc.yaml']);\n\n for (const path of tocFilePaths) {\n logger.proc(path);\n\n await TocService.add(path);\n }\n } catch (error) {\n log.error(`Preparing toc.yaml files failed. Error: ${error}`);\n throw error;\n }\n}\n", "import {writeFileSync} from 'fs';\nimport {extname, join} from 'path';\n\nimport {ArgvService, TocService} from '../services';\nimport {convertBackSlashToSlash} from '../utils';\n\ntype TocItem = {\n name: string;\n items?: TocItems;\n href?: string;\n};\n\ntype TocItems = TocItem[];\n\nexport function prepareMapFile(): void {\n const {output: outputFolderPath} = ArgvService.getConfig();\n\n const navigationPathsWithoutExtensions = TocService.getNavigationPaths().map((path) => {\n let preparedPath = convertBackSlashToSlash(path.replace(extname(path), ''));\n\n if (preparedPath.endsWith('/index')) {\n preparedPath = preparedPath.substring(0, preparedPath.length - 5);\n }\n\n return preparedPath;\n });\n const navigationPaths = {files: [...new Set(navigationPathsWithoutExtensions)]};\n const filesMapBuffer = Buffer.from(JSON.stringify(navigationPaths, null, '\\t'), 'utf8');\n const mapFile = join(outputFolderPath, 'files.json');\n\n writeFileSync(mapFile, filesMapBuffer);\n}\n", "import {createReadStream} from 'fs';\nimport walkSync from 'walk-sync';\nimport {join, resolve} from 'path';\nimport {PutObjectCommand, S3Client} from '@aws-sdk/client-s3';\nimport mime from 'mime-types';\n\nimport {convertBackSlashToSlash, logger} from '../../utils';\nimport {asyncify, mapLimit} from 'async';\n\ninterface UploadProps {\n input: string;\n ignore: string[];\n endpoint: string;\n bucket: string;\n prefix: string;\n accessKeyId: string;\n secretAccessKey: string;\n region: string;\n}\n\nexport async function upload(props: UploadProps): Promise<void> {\n const {\n input,\n ignore = [],\n endpoint,\n region,\n bucket,\n prefix,\n accessKeyId,\n secretAccessKey,\n } = props;\n\n const s3Client = new S3Client({\n endpoint,\n region,\n credentials: {accessKeyId, secretAccessKey},\n });\n\n const filesToPublish: string[] = walkSync(resolve(input), {\n directories: false,\n includeBasePath: false,\n ignore,\n });\n\n await mapLimit(\n filesToPublish,\n 100,\n asyncify(async (pathToFile: string) => {\n const mimeType = mime.lookup(pathToFile);\n\n logger.upload(pathToFile);\n\n try {\n await s3Client.send(\n new PutObjectCommand({\n ContentType: mimeType ? mimeType : undefined,\n Bucket: bucket,\n Key: convertBackSlashToSlash(join(prefix, pathToFile)),\n Body: createReadStream(resolve(input, pathToFile)),\n }),\n );\n } catch (error) {\n logger.error(pathToFile, error.message);\n }\n }),\n );\n}\n", "import {join} from 'path';\nimport {ArgvService} from '../../services';\nimport {logger} from '../../utils';\n\nimport {Arguments, Argv} from 'yargs';\n\nimport {upload} from './upload';\n\nconst command = 'publish';\n\nconst description = 'Upload builded documentation to target S3 bucket';\n\nconst publish = {\n command,\n description,\n handler,\n builder,\n};\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('strict', {\n default: true,\n })\n .option('input', {\n alias: 'i',\n describe: 'Path to folder with builded files',\n type: 'string',\n required: true,\n group: 'Upload options',\n })\n .option('endpoint', {\n describe: 'S3 bucket endpoint',\n default: 'https://s3.amazonaws.com',\n type: 'string',\n group: 'Upload options',\n })\n .option('region', {\n describe: 'S3 bucket region',\n default: 'eu-central-1',\n type: 'string',\n group: 'Upload options',\n })\n .option('bucket', {\n describe: 'S3 bucket name',\n type: 'string',\n required: true,\n group: 'Upload options',\n })\n .option('prefix', {\n describe: 'S3 bucket ',\n default: '',\n type: 'string',\n group: 'Upload options',\n })\n .option('access-key-id', {\n describe: 'S3 bucket AccessKeyId',\n type: 'string',\n required: true,\n group: 'Upload options',\n })\n .option('secret-access-key', {\n describe: 'S3 bucket SecretAccessKey',\n type: 'string',\n required: true,\n group: 'Upload options',\n });\n}\n\ntype Args = {\n input: string;\n endpoint: string;\n region: string;\n bucket: string;\n prefix: string;\n ignore: string[];\n accessKeyId: string;\n secretAccessKey: string;\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nasync function handler(args: Arguments<Args>) {\n ArgvService.init({\n ...args,\n });\n\n const config = ArgvService.getConfig() as unknown as Args;\n const {input, endpoint, bucket, prefix} = config;\n\n logger.info('', `Upload artifacts from ${input} to ${join(endpoint, bucket, prefix)}`);\n\n try {\n await upload(config);\n } catch (error: any) {\n logger.error('', error.message);\n }\n}\n\nexport {publish};\n", "const {\n promises: {readFile, writeFile, mkdir},\n} = require('fs');\nimport {dirname, extname, join} from 'path';\n\nimport markdownTranslation, {ExtractParameters} from '@diplodoc/markdown-translation';\nimport {Arguments, Argv} from 'yargs';\nimport {asyncify, eachLimit} from 'async';\n\nimport {ArgvService} from '../../services';\nimport {glob, logger} from '../../utils';\n\nconst command = 'extract';\n\nconst description = 'extract xliff and skeleton from yfm documentation';\n\nconst extract = {command, description, handler, builder};\n\nconst MD_GLOB = '**/*.md';\n\nconst MAX_CONCURRENCY = 50;\n\nclass ExtractError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.path = path;\n }\n}\n\nconst USAGE = `yfm xliff extract \\\n--input <folder-with-markdown> \\\n--output <folder-to-store-xlff-and-skeleton> \\\n--sll <source-language>-<source-locale> \\\n--tll <target-language>-<target-locale>\n\nwhere <source/target-language> is the language code, as described in ISO 639-1.\n\nwhere <source/target-locale> is the locale code in alpha-2 format, as described in ISO 3166-1`;\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('source-language-locale', {\n alias: 'sll',\n describe: 'source language and locale',\n type: 'string',\n })\n .option('target-language-locale', {\n alias: 'tll',\n describe: 'target language and locale',\n type: 'string',\n })\n .option('input', {\n alias: 'i',\n describe: 'input folder with markdown files',\n type: 'string',\n })\n .option('output', {\n alias: 'o',\n describe: 'output folder to store xliff and skeleton files',\n type: 'string',\n })\n .demandOption(\n ['source-language-locale', 'target-language-locale', 'input', 'output'],\n USAGE,\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function handler(args: Arguments<any>) {\n ArgvService.init({\n ...args,\n });\n\n const {input, output, sourceLanguageLocale, targetLanguageLocale} = args;\n\n let source;\n let target;\n\n try {\n source = parseLanguageLocale(sourceLanguageLocale);\n target = parseLanguageLocale(targetLanguageLocale);\n } catch (err) {\n if (err instanceof Error) {\n logger.error(input, err.message);\n }\n }\n\n let cache = {};\n let found: string[] = [];\n\n try {\n ({\n state: {found, cache},\n } = await glob(join(input, MD_GLOB), {\n nosort: true,\n cache,\n }));\n } catch (err) {\n if (err instanceof Error) {\n logger.error(input, err.message);\n }\n }\n\n const pipelineParameters = {source, target, input, output};\n const configuredPipeline = pipeline(pipelineParameters);\n\n try {\n logger.info(input, 'starting xliff and skeleton generation pipeline');\n\n await eachLimit(found, MAX_CONCURRENCY, asyncify(configuredPipeline));\n\n logger.info(input, 'finished xliff and skeleton generation pipeline');\n } catch (err) {\n if (err instanceof Error || err instanceof ExtractError) {\n const file = err instanceof ExtractError ? err.path : input;\n\n logger.error(file, err.message);\n }\n }\n}\n\nfunction parseLanguageLocale(languageLocale: string) {\n const [language, locale] = languageLocale.split('-');\n if (language?.length && locale?.length) {\n return {language, locale};\n }\n\n throw new Error('invalid language-locale string');\n}\n\nexport type PipelineParameters = {\n input: string;\n output: string;\n source: ExtractParameters['source'];\n target: ExtractParameters['target'];\n};\n\nfunction pipeline(params: PipelineParameters) {\n const {input, output, source, target} = params;\n\n return async (markdownPath: string) => {\n const markdown = await reader({path: markdownPath});\n const extension = extname(markdownPath);\n\n const outputRelativePath = markdownPath.replace(extension, '').slice(input.length);\n\n const outputPath = join(output, outputRelativePath);\n const xlfPath = outputPath + '.xliff';\n const skeletonPath = outputPath + '.skl.md';\n\n const extractParameters = {\n markdownPath,\n skeletonPath,\n markdown,\n source,\n target,\n };\n\n const extracted = await extractor(extractParameters);\n\n const writerParameters = {\n ...extracted,\n xlfPath,\n skeletonPath,\n };\n\n await writer(writerParameters);\n };\n}\n\nexport type ReaderParameters = {\n path: string;\n};\n\nasync function reader(params: ReaderParameters) {\n const {path} = params;\n\n let markdown;\n try {\n logger.info(path, 'reading markdown file');\n\n markdown = await readFile(path, {encoding: 'utf-8'});\n\n logger.info(path, 'finished reading markdown file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ExtractError(err.message, path);\n }\n }\n\n return markdown;\n}\n\nexport type ExtractorParameters = {\n source: ExtractParameters['source'];\n target: ExtractParameters['target'];\n skeletonPath: string;\n markdownPath: string;\n markdown: string;\n};\n\nasync function extractor(params: ExtractorParameters) {\n let extracted;\n\n logger.info(params.markdownPath, 'generating skeleton and xliff from markdown');\n\n try {\n extracted = markdownTranslation.extract(params);\n } catch (err) {\n if (err instanceof Error) {\n throw new ExtractError(err.message, params.markdownPath);\n }\n }\n\n logger.info(params.markdownPath, 'finished generating skeleton and xliff from markdown');\n\n return extracted;\n}\n\nexport type WriterParameters = {\n skeletonPath: string;\n skeleton: string;\n xlfPath: string;\n xlf: string;\n};\n\nasync function writer(params: WriterParameters) {\n const {xlfPath, skeletonPath, xlf, skeleton} = params;\n\n logger.info(params.xlfPath, 'writing xliff file');\n logger.info(params.skeletonPath, 'writing skeleton file');\n\n await mkdir(dirname(xlfPath), {recursive: true});\n\n await Promise.all([writeFile(skeletonPath, skeleton), writeFile(xlfPath, xlf)]);\n\n logger.info(params.xlfPath, 'finished writing xliff file');\n logger.info(params.skeletonPath, 'finished writing skeleton file');\n}\n\nexport {extract};\n\nexport default {extract};\n", "const {\n promises: {readFile, writeFile, mkdir},\n} = require('fs');\nimport {dirname, extname, join} from 'path';\n\nimport markdownTranslation, {ComposeParameters} from '@diplodoc/markdown-translation';\nimport {Arguments, Argv} from 'yargs';\nimport {eachLimit} from 'async';\n\nimport {ArgvService} from '../../services';\nimport {glob, logger} from '../../utils';\n\nconst command = 'compose';\n\nconst description = 'compose xliff and skeleton into documentation';\n\nconst compose = {command, description, handler, builder};\n\nconst SKL_MD_GLOB = '**/*.skl.md';\nconst XLF_GLOB = '**/*.xliff';\nconst MAX_CONCURRENCY = 50;\n\nclass ComposeError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.path = path;\n }\n}\n\nconst USAGE =\n 'yfm xliff compose \\\n--input <folder-with-xliff-and-skeleton> \\\n--ouput <folder-to-store-translated-markdown>';\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('input', {\n alias: 'i',\n describe: 'input folder with xliff and skeleton files',\n type: 'string',\n })\n .option('output', {\n alias: 'o',\n describe: 'output folder where translated markdown will be stored',\n type: 'string',\n })\n .demandOption(['input', 'output'], USAGE);\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nasync function handler(args: Arguments<any>) {\n ArgvService.init({\n ...args,\n });\n\n const {input, output} = args;\n\n let cache = {};\n let skeletonPaths: string[] = [];\n let xliffPaths: string[] = [];\n\n try {\n ({\n state: {found: skeletonPaths, cache},\n } = await glob(join(input, SKL_MD_GLOB), {\n nosort: false,\n cache,\n }));\n\n ({\n state: {found: xliffPaths, cache},\n } = await glob(join(input, XLF_GLOB), {\n nosort: false,\n cache,\n }));\n\n if (xliffPaths.length !== skeletonPaths.length) {\n throw new ComposeError(\"number of xliff and skeleton files does'not match\", input);\n }\n } catch (err) {\n if (err instanceof Error || err instanceof ComposeError) {\n const file = err instanceof ComposeError ? err.path : input;\n\n logger.error(file, err.message);\n }\n }\n\n const pipelineParameters = {input, output};\n const configuredPipeline = pipeline(pipelineParameters);\n\n try {\n logger.info(input, 'staring translated markdown composition pipeline');\n\n await eachLimit(xliffPaths, MAX_CONCURRENCY, configuredPipeline);\n\n logger.info(input, 'finished translated markdown composition pipeline');\n } catch (err) {\n if (err instanceof Error || err instanceof ComposeError) {\n const file = err instanceof ComposeError ? err.path : input;\n\n logger.error(file, err.message);\n }\n }\n}\n\nexport type PipelineParameters = {\n input: string;\n output: string;\n};\n\nfunction pipeline(params: PipelineParameters) {\n const {input, output} = params;\n\n return async (xliffPath: string) => {\n const extension = extname(xliffPath);\n const extensionLessPath = xliffPath.replace(extension, '');\n const skeletonPath = extensionLessPath + '.skl.md';\n\n const readerParameters = {xliffPath, skeletonPath};\n const read = await reader(readerParameters);\n\n const composerParameters = {\n ...read,\n skeletonPath,\n xliffPath,\n };\n const {markdown} = await composer(composerParameters);\n\n const inputRelativePath = extensionLessPath.slice(input.length);\n const markdownPath = join(output, inputRelativePath) + '.md';\n\n const writerParameters = {\n markdown,\n markdownPath,\n };\n await writer(writerParameters);\n };\n}\n\nexport type ReaderParameters = {\n skeletonPath: string;\n xliffPath: string;\n};\n\nasync function reader(params: ReaderParameters) {\n const {skeletonPath, xliffPath} = params;\n\n let skeleton;\n let xlf;\n\n try {\n logger.info(skeletonPath, 'reading skeleton file');\n\n skeleton = await readFile(skeletonPath, {encoding: 'utf-8'});\n\n logger.info(skeletonPath, 'finished reading skeleton file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, skeletonPath);\n }\n }\n\n try {\n logger.info(xliffPath, 'reading xliff file');\n\n xlf = await readFile(xliffPath, {encoding: 'utf-8'});\n\n logger.info(xliffPath, 'finished reading xliff file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, xliffPath);\n }\n }\n\n return {skeleton, xlf};\n}\n\nexport type ComposerParameters = {\n skeletonPath: string;\n xliffPath: string;\n} & ComposeParameters;\n\nasync function composer(params: ComposerParameters) {\n const {skeletonPath, xliffPath} = params;\n let markdown;\n\n try {\n logger.info(skeletonPath, 'composing markdown from xliff and skeleton');\n logger.info(xliffPath, 'composing markdown from xliff and skeleton');\n\n markdown = markdownTranslation.compose(params);\n\n logger.info(skeletonPath, 'finished composing markdown from xliff and skeleton');\n logger.info(xliffPath, 'finished composing markdown from xliff and skeleton');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, `${xliffPath} ${skeletonPath}`);\n }\n }\n\n return {markdown};\n}\n\nexport type WriterParameters = {\n markdown: string;\n markdownPath: string;\n};\n\nasync function writer(params: WriterParameters) {\n const {markdown, markdownPath} = params;\n\n try {\n logger.info(markdownPath, 'writing markdown file');\n\n await mkdir(dirname(markdownPath), {recursive: true});\n await writeFile(markdownPath, markdown);\n\n logger.info(markdownPath, 'finished writing markdown file');\n } catch (err) {\n if (err instanceof Error) {\n throw new ComposeError(err.message, markdownPath);\n }\n }\n}\n\nexport {compose};\n\nexport default {compose};\n", "import {extract} from './extract';\nimport {compose} from './compose';\n\nimport {Argv} from 'yargs';\n\nconst command = 'xliff';\n\nconst description =\n 'extract xliff and skeleton from documentation files\\ncompose xliff and skeleton into documentation';\n\nconst xliff = {\n command,\n description,\n handler: () => {},\n builder,\n};\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .command(extract)\n .command(compose)\n .demandCommand(\n 1,\n `provide one of the folowing ${command} commands: ${extract.command}, ${compose.command}`,\n );\n}\n\nexport {xliff};\n\nexport default {xliff};\n", "import glob from 'glob';\nimport {ok} from 'assert';\nimport {asyncify, eachLimit, retry} from 'async';\n\nimport {basename, dirname, join, resolve} from 'path';\nimport {mkdir, readFile, writeFile} from 'fs/promises';\n\nimport {Session} from '@yandex-cloud/nodejs-sdk/dist/session';\nimport {TranslationServiceClient} from '@yandex-cloud/nodejs-sdk/dist/generated/yandex/cloud/service_clients';\nimport {\n TranslateRequest_Format as Format,\n TranslateRequest,\n} from '@yandex-cloud/nodejs-sdk/dist/generated/yandex/cloud/ai/translate/v2/translation_service';\n\n// @ts-ignore\nimport {compose, extract} from '@diplodoc/markdown-translation';\n\nimport {ArgvService} from '../../services';\nimport {getYandexOAuthToken} from '../../packages/credentials';\nimport {logger} from '../../utils';\n\nimport {Arguments, Argv} from 'yargs';\n\n// import {YandexCloudTranslateGlossaryPair} from '../../models';\nimport {argvValidator} from '../../validator';\n\nconst command = 'translate';\n\nconst description = 'translate documentation with Yandex.Cloud Translator API';\n\nconst translate = {\n command,\n description,\n handler,\n builder,\n};\n\nconst REQUESTS_LIMIT = 20;\nconst BYTES_LIMIT = 10000;\nconst RETRY_LIMIT = 3;\n\nfunction builder<T>(argv: Argv<T>) {\n return argv\n .option('folder-id', {\n describe: 'folder id',\n type: 'string',\n })\n .option('source-language', {\n alias: 'sl',\n describe: 'source language code',\n type: 'string',\n })\n .option('target-language', {\n alias: 'tl',\n describe: 'target language code',\n type: 'string',\n })\n .check(argvValidator);\n // .demandOption(\n // ['source-language', 'target-language'],\n // 'command requires to specify source and target languages',\n // );\n}\n\nclass TranslatorError extends Error {\n path: string;\n\n constructor(message: string, path: string) {\n super(message);\n\n this.path = path;\n }\n}\n\ntype TranslateConfig = {\n input: string;\n output?: string;\n sourceLanguage: string;\n targetLanguage: string;\n folderId?: string;\n glossary?: string;\n include?: string[];\n exclude?: string[];\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nasync function handler(args: Arguments<any>) {\n ArgvService.init({\n ...(args.translate || {}),\n ...args,\n });\n\n const {\n folderId,\n // yandexCloudTranslateGlossaryPairs,\n sourceLanguage,\n targetLanguage,\n exclude = [],\n } = ArgvService.getConfig() as unknown as TranslateConfig;\n\n let {input, output, include = []} = ArgvService.getConfig() as unknown as TranslateConfig;\n\n logger.info(\n input,\n `translating documentation from ${sourceLanguage} to ${targetLanguage} language`,\n );\n\n output = output || input;\n\n ok(input, 'Required param input is not configured');\n ok(sourceLanguage, 'Required param sourceLanguage is not configured');\n ok(targetLanguage, 'Required param targetLanguage is not configured');\n\n try {\n if (input.endsWith('.md')) {\n include = [basename(input)];\n input = dirname(input);\n } else if (!include.length) {\n include.push('**/*');\n }\n\n const files = ([] as string[]).concat(\n ...include.map((match) =>\n glob.sync(match, {\n cwd: join(input, sourceLanguage),\n ignore: exclude,\n }),\n ),\n );\n const found = [...new Set(files)];\n\n const oauthToken = await getYandexOAuthToken();\n\n const translatorParams = {\n input,\n output,\n sourceLanguage,\n targetLanguage,\n // yandexCloudTranslateGlossaryPairs,\n folderId,\n oauthToken,\n };\n\n const translateFn = translator(translatorParams);\n\n await eachLimit(found, REQUESTS_LIMIT, asyncify(translateFn));\n } catch (err) {\n if (err instanceof Error || err instanceof TranslatorError) {\n const message = err.message;\n\n const file = err instanceof TranslatorError ? err.path : '';\n\n logger.error(file, message);\n }\n }\n\n logger.info(\n output,\n `translated documentation from ${sourceLanguage} to ${targetLanguage} language`,\n );\n}\n\nexport type TranslatorParams = {\n oauthToken: string;\n folderId: string | undefined;\n input: string;\n output: string;\n sourceLanguage: string;\n targetLanguage: string;\n // yandexCloudTranslateGlossaryPairs: YandexCloudTranslateGlossaryPair[];\n};\n\nfunction translator(params: TranslatorParams) {\n const {\n oauthToken,\n folderId,\n input,\n output,\n sourceLanguage,\n targetLanguage,\n // yandexCloudTranslateGlossaryPairs,\n } = params;\n\n const tmap = new Map<string, Defer>();\n const session = new Session({oauthToken});\n const client = session.client(TranslationServiceClient);\n const request = (texts: string[]) => () => {\n return client\n .translate(\n TranslateRequest.fromPartial({\n texts,\n folderId,\n sourceLanguageCode: sourceLanguage,\n targetLanguageCode: targetLanguage,\n // glossaryConfig: {\n // glossaryData: {\n // glossaryPairs: yandexCloudTranslateGlossaryPairs,\n // },\n // },\n format: Format.HTML,\n }),\n )\n .then((results) => {\n return results.translations.map(({text}, index) => {\n const defer = tmap.get(texts[index]);\n if (defer) {\n defer.resolve([text]);\n }\n\n return text;\n });\n });\n };\n\n return async (mdPath: string) => {\n if (!mdPath.endsWith('.md')) {\n return;\n }\n\n try {\n logger.info(mdPath, 'translating');\n\n const inputPath = resolve(input, sourceLanguage, mdPath);\n const outputPath = resolve(output, targetLanguage, mdPath);\n const md = await readFile(inputPath, {encoding: 'utf-8'});\n\n await mkdir(dirname(outputPath), {recursive: true});\n\n if (!md) {\n await writeFile(outputPath, md);\n return;\n }\n\n const {units, skeleton} = extract({\n source: {\n language: sourceLanguage,\n locale: 'RU',\n },\n target: {\n language: targetLanguage,\n locale: 'US',\n },\n markdown: md,\n markdownPath: mdPath,\n skeletonPath: '',\n });\n\n if (!units.length) {\n await writeFile(outputPath, md);\n return;\n }\n\n const parts = await Promise.all(\n (units as string[]).reduce(\n (\n {\n promises,\n buffer,\n bufferSize,\n }: {\n promises: Promise<string[]>[];\n buffer: string[];\n bufferSize: number;\n },\n text,\n index,\n ) => {\n if (text.length >= BYTES_LIMIT) {\n logger.warn(\n mdPath,\n 'Skip document part for translation. Part is too big.',\n );\n promises.push(Promise.resolve([text]));\n return {promises, buffer, bufferSize};\n }\n\n const defer = tmap.get(text);\n if (defer) {\n console.log('SKIPPED', text);\n promises.push(defer.promise);\n return {promises, buffer, bufferSize};\n }\n\n if (bufferSize + text.length > BYTES_LIMIT) {\n promises.push(backoff(request(buffer)));\n buffer = [];\n bufferSize = 0;\n }\n\n buffer.push(text);\n bufferSize += text.length;\n tmap.set(text, new Defer());\n\n if (index === units.length - 1) {\n promises.push(backoff(request(buffer)));\n }\n\n return {promises, buffer, bufferSize};\n },\n {\n promises: [],\n buffer: [],\n bufferSize: 0,\n },\n ).promises,\n );\n\n const translations = ([] as string[]).concat(...parts);\n\n const composed = await compose({\n useSource: true,\n units: translations,\n skeleton,\n });\n\n await writeFile(outputPath, composed);\n\n logger.info(outputPath, 'finished translating');\n } catch (err) {\n if (err instanceof Error) {\n throw new TranslatorError(err.toString(), mdPath);\n }\n }\n };\n}\n\nfunction backoff(action: () => Promise<string[]>): Promise<string[]> {\n return retry(\n {\n times: RETRY_LIMIT,\n interval: (count: number) => {\n // eslint-disable-next-line no-bitwise\n return (1 << count) * 1000;\n },\n },\n asyncify(action),\n );\n}\n\nclass Defer {\n resolve!: (text: string[]) => void;\n\n reject!: (error: any) => void;\n\n promise: Promise<string[]>;\n\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n\nexport {translate};\n\nexport default {translate};\n", "import {readFile} from 'fs/promises';\nimport {env} from 'process';\nimport {homedir} from 'os';\nimport {join} from 'path';\n\nimport {logger} from '../../utils';\n\nconst YANDEX_OAUTH_TOKEN_FILENAME = '.ya_oauth_token';\n\nasync function getYandexOAuthToken() {\n const {YANDEX_OAUTH_TOKEN} = env;\n\n return YANDEX_OAUTH_TOKEN ?? getYandexOAuthTokenFromHomeDir();\n}\n\nasync function getYandexOAuthTokenFromHomeDir() {\n const error = 'failed reading yandex oauth token';\n\n const path = join(homedir(), YANDEX_OAUTH_TOKEN_FILENAME);\n\n let token;\n\n try {\n token = await readFile(path, {encoding: 'utf8'});\n\n token = token.trim();\n\n if (!token?.length) {\n throw new Error(error);\n }\n } catch (err) {\n logger.error(error);\n\n throw err;\n }\n\n return token;\n}\n\nexport {getYandexOAuthToken};\n\nexport default {getYandexOAuthToken};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_log", "ResourceType", "import_path", "log", "merge", "import_path", "import_path", "import_fs", "import_js_yaml", "import_shelljs", "import_liquid", "import_log", "import_chalk", "import_js_yaml", "import_log", "log", "import_path", "import_path", "escape", "name", "url", "manifest", "name", "singlePageResults", "import_path", "import_path", "evalExp", "liquid", "import_path", "libglob", "import_path", "shell", "import_path", "import_path", "meta", "import_path", "import_lodash", "import_promises", "import_path", "import_js_yaml", "handler", "includerFunction", "name", "name", "includerFunction", "name", "includerFunction", "includerFunction", "name", "import_fs", "import_path", "name", "reader", "extractor", "writer", "includerFunction", "name", "includerFunction", "name", "shell", "log", "walkSync", "liquid", "import_path", "add", "import_path", "import_fs", "init", "import_path", "import_fs", "import_js_yaml", "import_log", "description", "log", "import_walk_sync", "import_shelljs", "walkSync", "shell", "import_path", "import_walk_sync", "import_shelljs", "walkSync", "navigationPaths", "shell", "includedTocPaths", "import_log", "log", "_uniq", "import_path", "import_shelljs", "import_fs", "import_chalk", "import_js_yaml", "import_log", "import_fs", "import_path", "import_shelljs", "import_log", "import_liquid", "log", "shell", "liquid", "import_path", "import_fs", "import_js_yaml", "import_log", "import_liquid", "yaml", "log", "links", "liquid", "plugins", "transform", "import_path", "import_log", "import_fs", "import_chalk", "log", "plugins", "lintMarkdown", "sourceMap", "yfmlint", "import_path", "import_log", "import_log", "log", "log", "import_process", "simpleGit", "process", "name", "url", "pathMTime", "github_default", "github_default", "navigationPaths", "shell", "log", "import_log", "import_path", "navigationPaths", "presetStorage", "log", "import_path", "import_walk_sync", "import_fs", "import_js_yaml", "import_log", "import_shelljs", "walkSync", "log", "shell", "import_fs", "import_path", "navigationPaths", "import_shelljs", "import_fs", "import_walk_sync", "import_path", "import_async", "walkSync", "mime", "import_glob", "OpenapiIncluder", "publish", "shell", "_a", "glob", "import_path", "handler", "builder", "import_path", "import_async", "readFile", "writeFile", "mkdir", "command", "description", "extract", "handler", "builder", "MD_GLOB", "pipeline", "markdownTranslation", "import_path", "import_markdown_translation", "import_async", "readFile", "writeFile", "mkdir", "command", "description", "handler", "builder", "MAX_CONCURRENCY", "USAGE", "pipeline", "reader", "writer", "markdownTranslation", "command", "description", "builder", "extract", "import_glob", "import_async", "import_path", "import_promises", "import_markdown_translation", "import_promises", "import_process", "import_path", "command", "description", "handler", "builder", "glob", "Format", "resolve", "yargs", "log"]
7
7
  }