@stephansama/auto-readme
Version:
Generate lists and tables for your README automagically based on your repository and comments
1 lines • 48.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/args.ts","../src/schema.js","../src/comment.ts","../src/log.ts","../src/config.ts","../src/data.ts","../src/utils.ts","../src/pipeline.ts","../src/plugin.ts"],"sourcesContent":["import { fromMarkdown } from \"mdast-util-from-markdown\";\nimport * as cp from \"node:child_process\";\nimport * as fsp from \"node:fs/promises\";\nimport ora from \"ora\";\n\nimport type { Config } from \"./schema\";\n\nimport { parseArgs } from \"./args\";\nimport { loadAstComments } from \"./comment\";\nimport { loadConfig } from \"./config\";\nimport { loadActionData } from \"./data\";\nimport { ERROR, INFO, WARN } from \"./log\";\nimport { parse } from \"./pipeline\";\nimport { findAffectedMarkdowns, getGitRoot, getMarkdownPaths } from \"./utils\";\n\nexport async function run() {\n\tconst args = await parseArgs();\n\tconst config: Config = (await loadConfig(args)) || {};\n\n\tINFO(\"Loaded the following configuration:\", config);\n\n\tconst root = getGitRoot();\n\n\tconst isAffected = args.changes ? \"affected\" : \"\";\n\n\tINFO(`Loading ${!isAffected ? \"all \" : \"affected \"}files`);\n\n\tconst paths = isAffected\n\t\t? findAffectedMarkdowns(root, config)\n\t\t: await getMarkdownPaths(root, config);\n\n\tINFO(\"Loaded the following files:\", paths.join(\"\\n\"));\n\n\tconst type = args.onlyReadmes ? \"readmes\" : \"all markdown files\";\n\n\tif (!paths.length) {\n\t\treturn ERROR(`no ${isAffected} readmes found to update`);\n\t}\n\n\tconst spinner = !args.verbose && ora(`Updating ${type}`).start();\n\n\tawait Promise.all(\n\t\tpaths.map(async (path) => {\n\t\t\tconst file = await fsp.readFile(path, { encoding: \"utf8\" });\n\t\t\t// get rid of ast via garbage collector faster\n\t\t\tconst actions = (() => {\n\t\t\t\tconst ast = fromMarkdown(file);\n\t\t\t\treturn loadAstComments(ast);\n\t\t\t})();\n\n\t\t\tif (!actions.length) {\n\t\t\t\tWARN(`no action comments found in`, path);\n\t\t\t\tif (!config.enableUsage || !config.enableToc) {\n\t\t\t\t\treturn ERROR(\"no action or plugins found\");\n\t\t\t\t} else {\n\t\t\t\t\tINFO(\"plugins enabled. continuing parsing\", path);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst data = await loadActionData(actions, path, root);\n\n\t\t\tINFO(\"Loaded comment action data\", data);\n\n\t\t\tconst content = await parse(file, path, root, config, data);\n\t\t\tawait fsp.writeFile(path, content);\n\t\t}),\n\t);\n\n\tconst opts: cp.CommonExecOptions = { stdio: \"inherit\" };\n\n\tINFO(\"formatting with prettier\");\n\n\tcp.execFileSync(\"prettier\", [\"--write\", ...paths], opts);\n\n\tif (isAffected) {\n\t\tINFO(\"adding affected files to git stage\");\n\n\t\tcp.execFileSync(\"git\", [\"add\", ...paths], opts);\n\t}\n\n\tif (spinner) spinner.stop();\n}\n","import debug from \"debug\";\nimport yargs, { type Options } from \"yargs\";\nimport { hideBin } from \"yargs/helpers\";\nimport z from \"zod\";\n\nimport { configSchema } from \"./schema\";\n\nexport type Args = Awaited<ReturnType<typeof parseArgs>>;\n\nconst complexOptions = [\n\t\"affectedRegexes\",\n\t\"collapseHeadings\",\n\t\"headings\",\n\t\"templates\",\n] as const;\n\ntype ComplexOptions = (typeof complexOptions)[number];\n\nconst args = {\n\t...zodToYargs(),\n\tchanges: {\n\t\talias: \"g\",\n\t\tdefault: false,\n\t\tdescription: \"Check only changed git files\",\n\t\ttype: \"boolean\",\n\t},\n\tcheck: {\n\t\talias: \"k\",\n\t\tdefault: false,\n\t\tdescription: \"Do not write to files. Only check for changes\",\n\t\ttype: \"boolean\",\n\t},\n\tconfig: { alias: \"c\", description: \"Path to config file\", type: \"string\" },\n} satisfies Record<string, Options>;\n\nexport async function parseArgs() {\n\tconst yargsInstance = yargs(hideBin(process.argv))\n\t\t.options(args)\n\t\t.help(\"h\")\n\t\t.alias(\"h\", \"help\")\n\t\t.epilogue(`--> @stephansama open-source ${new Date().getFullYear()}`);\n\n\tconst parsed = await yargsInstance\n\t\t.wrap(yargsInstance.terminalWidth())\n\t\t.parse();\n\n\tif (parsed.verbose) debug.enable(\"autoreadme*\");\n\n\treturn parsed;\n}\n\nexport function zodToYargs(): Omit<\n\tRecord<keyof typeof shape, Options>,\n\tComplexOptions\n> {\n\tconst { shape } = configSchema.unwrap();\n\tconst entries = Object.entries(shape).map(([key, value]) => {\n\t\tif (complexOptions.includes(key as ComplexOptions)) return [];\n\t\tif (value.def.innerType instanceof z.ZodObject) return [];\n\t\tconst meta = value.meta();\n\t\tconst { innerType } = value.def;\n\t\tconst isBoolean = innerType instanceof z.ZodBoolean;\n\t\tconst isNumber = innerType instanceof z.ZodNumber;\n\t\tconst isArray = innerType instanceof z.ZodArray;\n\n\t\tconst yargType: Options[\"type\"] =\n\t\t\t(isArray && \"array\") ||\n\t\t\t(isNumber && \"number\") ||\n\t\t\t(isBoolean && \"boolean\") ||\n\t\t\t\"string\";\n\n\t\tconst options: Options = {\n\t\t\tdefault: value.def.defaultValue,\n\t\t\ttype: yargType,\n\t\t};\n\n\t\tif (meta?.alias) options.alias = meta.alias as string;\n\t\tif (meta?.description) options.description = meta.description;\n\n\t\treturn [key, options];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n","import { z } from \"zod\";\n\nexport const actionsSchema = z\n\t.enum([\"ACTION\", \"PKG\", \"USAGE\", \"WORKSPACE\", \"ZOD\"])\n\t.describe(\"Comment action options\");\n\nexport const formatsSchema = z\n\t.enum([\"LIST\", \"TABLE\"])\n\t.default(\"TABLE\")\n\t.optional();\n\nexport const languageSchema = z.enum([\"JS\", \"RS\"]).optional().default(\"JS\");\n\nexport const headingsSchema = z\n\t.enum([\n\t\t\"default\",\n\t\t\"description\",\n\t\t\"devDependency\",\n\t\t\"downloads\",\n\t\t\"name\",\n\t\t\"private\",\n\t\t\"required\",\n\t\t\"version\",\n\t])\n\t.describe(\"Table heading options\");\n\nexport const tableHeadingsSchema = z\n\t.record(actionsSchema, headingsSchema.array().optional())\n\t.optional()\n\t.describe(\"Table heading action configuration\")\n\t.default({\n\t\tACTION: [\"name\", \"required\", \"default\", \"description\"],\n\t\tPKG: [\"name\", \"version\", \"devDependency\"],\n\t\tWORKSPACE: [\"name\", \"version\", \"downloads\", \"description\"],\n\t\tZOD: [],\n\t});\n\nexport const templatesSchema = z.object({\n\tdownloadImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://img.shields.io/npm/dw/{{name}}?labelColor=211F1F\"),\n\temojis: z\n\t\t.record(headingsSchema, z.string())\n\t\t.optional()\n\t\t.describe(\"Table heading emojis used when enabled\")\n\t\t.default({\n\t\t\tdefault: \"⚙️\",\n\t\t\tdescription: \"📝\",\n\t\t\tdevDependency: \"💻\",\n\t\t\tdownloads: \"📥\",\n\t\t\tname: \"🏷️\",\n\t\t\tprivate: \"🔒\",\n\t\t\trequired: \"\",\n\t\t\tversion: \"\",\n\t\t}),\n\tregistryUrl: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\"https://www.npmjs.com/package/{{name}}\"),\n\tversionImage: z\n\t\t.string()\n\t\t.optional()\n\t\t.default(\n\t\t\t\"https://img.shields.io/npm/v/{{uri_name}}?logo=npm&logoColor=red&color=211F1F&labelColor=211F1F\",\n\t\t),\n});\n\nexport const defaultTemplates = templatesSchema.parse({});\nexport const defaultTableHeadings = tableHeadingsSchema.parse(undefined);\n\nconst _configSchema = z.object({\n\taffectedRegexes: z.string().array().optional().default([]),\n\tcollapseHeadings: z.string().array().optional().default([]),\n\tdefaultLanguage: languageSchema.meta({\n\t\talias: \"l\",\n\t\tdescription: \"Default language to infer projects from\",\n\t}),\n\tdisableEmojis: z.boolean().default(false).meta({\n\t\talias: \"e\",\n\t\tdescription: \"Whether or not to use emojis in markdown table headings\",\n\t}),\n\tdisableMarkdownHeadings: z.boolean().default(false).meta({\n\t\tdescription: \"Whether or not to display markdown headings\",\n\t}),\n\tenableToc: z.boolean().default(false).meta({\n\t\talias: \"t\",\n\t\tdescription: \"generate table of contents for readmes\",\n\t}),\n\tenableUsage: z.boolean().optional().default(false).meta({\n\t\tdescription: \"Whether or not to enable usage plugin\",\n\t}),\n\theadings: tableHeadingsSchema\n\t\t.optional()\n\t\t.default(defaultTableHeadings)\n\t\t.describe(\"List of headings for different table outputs\"),\n\tonlyReadmes: z.boolean().default(true).meta({\n\t\talias: \"r\",\n\t\tdescription: \"Whether or not to only traverse readmes\",\n\t}),\n\tonlyShowPublicPackages: z.boolean().default(false).meta({\n\t\talias: \"p\",\n\t\tdescription: \"Only show public packages in workspaces\",\n\t}),\n\tremoveScope: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Remove common workspace scope\",\n\t}),\n\ttemplates: templatesSchema\n\t\t.optional()\n\t\t.default(defaultTemplates)\n\t\t.describe(\n\t\t\t\"Handlebars templates used to fuel list and table generation\",\n\t\t),\n\ttocHeading: z.string().optional().default(\"Table of contents\").meta({\n\t\tdescription: \"Markdown heading used to generate table of contents\",\n\t}),\n\tusageFile: z.string().optional().default(\"\").meta({\n\t\tdescription: \"Workspace level usage file\",\n\t}),\n\tusageHeading: z.string().optional().default(\"Usage\").meta({\n\t\tdescription: \"Markdown heading used to generate usage example\",\n\t}),\n\tverbose: z.boolean().default(false).meta({\n\t\talias: \"v\",\n\t\tdescription: \"whether or not to display verbose logging\",\n\t}),\n});\n\nexport const configSchema = _configSchema.optional();\n\n/** @typedef {Partial<z.infer<typeof _configSchema>>} Config */\n","import type { Html, Root } from \"mdast\";\n\nimport { commentMarker } from \"mdast-comment-marker\";\n\nimport { INFO } from \"./log\";\nimport { actionsSchema, formatsSchema, languageSchema } from \"./schema\";\n\nexport const SEPARATOR = \"-\" as const;\n\nexport type AstComments = ReturnType<typeof loadAstComments>;\n\nexport function loadAstComments(root: Root) {\n\treturn root.children\n\t\t.map((child) => child.type === \"html\" && getComment(child))\n\t\t.filter((f): f is ReturnType<typeof parseComment> => f !== false);\n}\n\nexport function parseComment(comment: string) {\n\tconst input = trimComment(comment);\n\tconst [type, ...parameters] = input.split(\" \");\n\tconst [first, second, third] = type.split(SEPARATOR);\n\n\tINFO(\"parsing inputs\", { first, second, third });\n\n\tconst languageInput = third ? first : undefined;\n\tconst actionInput = third ? second : first;\n\tconst formatInput = third ? third : second;\n\tconst language = languageSchema.parse(languageInput);\n\tconst action = actionsSchema.parse(actionInput);\n\tconst format = formatsSchema.parse(formatInput);\n\tconst isStart = comment.includes(\"start\");\n\tconst parsed = { action, format, isStart, language, parameters };\n\n\tINFO(`Parsed comment ${comment}`, parsed);\n\n\treturn parsed;\n}\n\nconst startComment = \"<!--\";\nconst endComment = \"-->\";\n\nexport function trimComment(comment: string) {\n\treturn comment\n\t\t.replace(startComment, \"\")\n\t\t.replace(/start|end/, \"\")\n\t\t.replace(endComment, \"\")\n\t\t.trim();\n}\n\nfunction getComment(comment: Html) {\n\tif (!isComment(comment.value)) return false;\n\n\tconst marker = commentMarker(comment);\n\tif (!marker) return false;\n\n\t// TODO: update parseComment to use comment marker\n\treturn parseComment(comment.value);\n}\n\nfunction isComment(comment: string) {\n\treturn comment.startsWith(startComment) && comment.endsWith(endComment);\n}\n","import debug from \"debug\";\n\nconst error = debug(\"autoreadme:error\");\nconst info = debug(\"autoreadme:info\");\nconst warn = debug(\"autoreadme:warn\");\n\nexport function ERROR(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\terror(`${first} %O`, ...remaining);\n}\n\nexport function INFO(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\tinfo(`${first} %O`, ...remaining);\n}\n\nexport function WARN(...rest: unknown[]) {\n\tconst [first, ...remaining] = rest;\n\twarn(`${first} %O`, ...remaining);\n}\n","import toml from \"@iarna/toml\";\nimport { cosmiconfig, getDefaultSearchPlaces, type Options } from \"cosmiconfig\";\nimport deepmerge from \"deepmerge\";\n\nimport type { Args } from \"./args\";\n\nimport { INFO, WARN } from \"./log\";\nimport { configSchema } from \"./schema\";\n\nconst moduleName = \"autoreadme\";\n\nconst searchPlaces = getSearchPlaces();\n\nconst loaders = { [\".toml\"]: loadToml };\n\nexport async function loadConfig(args: Partial<Args>) {\n\tconst opts: Partial<Options> = { loaders, searchPlaces };\n\n\tif (args.config) opts.searchPlaces = [args.config];\n\n\tconst explorer = cosmiconfig(moduleName, opts);\n\n\tconst search = await explorer.search();\n\n\tif (!search) {\n\t\tconst location = args.config ? \" at location: \" + args.config : \"\";\n\t\tWARN(`no config file found`, location);\n\t\tINFO(\"using default configuration\");\n\t} else {\n\t\tINFO(\"found configuration file at: \", search.filepath);\n\t\tINFO(\"loaded cosmiconfig\", search.config);\n\t}\n\n\targs = removeFalsy(args);\n\n\tINFO(\"merging config with args\", args);\n\n\treturn configSchema.parse(\n\t\tdeepmerge(search?.config || {}, args, {\n\t\t\tarrayMerge: (_, sourceArray) => sourceArray,\n\t\t}),\n\t);\n}\n\nexport function loadToml(_filepath: string, content: string) {\n\treturn toml.parse(content);\n}\n\nfunction getSearchPlaces() {\n\treturn [\n\t\t...getDefaultSearchPlaces(moduleName),\n\t\t`.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc`,\n\t\t`.config/${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.toml`,\n\t\t`.config/.${moduleName}rc.json`,\n\t\t`.config/.${moduleName}rc.yaml`,\n\t\t`.config/.${moduleName}rc.yml`,\n\t];\n}\n\nfunction removeFalsy(obj: object) {\n\treturn Object.fromEntries(\n\t\tObject.entries(obj)\n\t\t\t.map(([k, v]) => (!v ? false : [k, v]))\n\t\t\t.filter((e): e is [string, unknown] => Boolean(e)),\n\t);\n}\n","import { getPackages } from \"@manypkg/get-packages\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { readPackageJSON } from \"pkg-types\";\nimport * as yaml from \"yaml\";\nimport { zod2md } from \"zod2md\";\n\nimport type { AstComments } from \"./comment\";\n\nimport { fileExists } from \"./utils\";\n\nexport type ActionData = Awaited<ReturnType<typeof loadActionData>>;\n\nexport type ActionTableHeading = \"name\" | keyof ActionInput;\n\nexport type ActionYaml = { inputs?: Record<string, ActionInput> };\n\ntype ActionInput = {\n\tdefault?: string;\n\tdescription?: string;\n\trequired?: boolean;\n};\n\nexport function createFindParameter(parameterList: string[]) {\n\treturn function (parameterName: string) {\n\t\treturn parameterList\n\t\t\t?.find((p) => p.startsWith(parameterName))\n\t\t\t?.replace(parameterName + \"=\", \"\")\n\t\t\t?.replace(/\"/gi, \"\")\n\t\t\t?.replace(/_/gi, \" \");\n\t};\n}\n\nexport async function loadActionData(\n\tactions: AstComments,\n\tfile: string,\n\troot: string,\n) {\n\tconst startActions = actions.filter((action) => action.isStart);\n\treturn await Promise.all(\n\t\tstartActions.map(async (action) => {\n\t\t\tconst find = createFindParameter(action.parameters);\n\t\t\tswitch (action.action) {\n\t\t\t\tcase \"ACTION\": {\n\t\t\t\t\tconst baseDir = path.dirname(file);\n\t\t\t\t\tconst actionYaml = await loadActionYaml(baseDir);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tactionYaml,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"PKG\": {\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tconst filename = inputPath\n\t\t\t\t\t\t? path.resolve(path.dirname(file), inputPath)\n\t\t\t\t\t\t: path.dirname(file);\n\t\t\t\t\tconst pkgJson = await readPackageJSON(filename);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\tpkgJson,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"USAGE\": {\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"WORKSPACE\": {\n\t\t\t\t\tconst workspaces = await getPackages(process.cwd());\n\t\t\t\t\tconst pnpmPath = path.resolve(root, \"pnpm-workspace.yaml\");\n\t\t\t\t\tconst isPnpm = fs.existsSync(pnpmPath);\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tisPnpm,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t\troot,\n\t\t\t\t\t\tworkspaces,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase \"ZOD\": {\n\t\t\t\t\tif (action.format === \"LIST\") {\n\t\t\t\t\t\tthrow new Error(\"cannot display zod in list format\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst inputPath = find(\"path\");\n\t\t\t\t\tif (!inputPath) {\n\t\t\t\t\t\tconst error = `no path found for zod table at markdown file ${file}`;\n\t\t\t\t\t\tthrow new Error(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst body = await zod2md({\n\t\t\t\t\t\tentry: path.resolve(path.dirname(file), inputPath),\n\t\t\t\t\t\ttitle: find(\"title\") || \"Zod Schema\",\n\t\t\t\t\t});\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\taction: action.action,\n\t\t\t\t\t\tbody,\n\t\t\t\t\t\tparameters: action.parameters,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"feature not yet implemented\");\n\t\t\t}\n\t\t}),\n\t);\n}\n\nasync function loadActionYaml(baseDir: string) {\n\tconst actionYmlPath = path.resolve(baseDir, \"action.yml\");\n\tconst actionYamlPath = path.resolve(baseDir, \"action.yaml\");\n\tconst actualPath =\n\t\t((await fileExists(actionYamlPath)) && actionYamlPath) ||\n\t\t((await fileExists(actionYmlPath)) && actionYmlPath);\n\n\tif (!actualPath) {\n\t\tconst locations = [actionYmlPath, actionYamlPath];\n\t\tconst error = `no yaml file found at locations: ${locations}`;\n\t\tthrow new Error(error);\n\t}\n\n\tconst actionFile = await fsp.readFile(actualPath, { encoding: \"utf8\" });\n\n\treturn yaml.parse(actionFile) as ActionYaml;\n}\n","import glob from \"fast-glob\";\nimport * as cp from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport type { Config } from \"./schema\";\n\nimport { ERROR, INFO } from \"./log\";\n\nconst sh = String.raw;\n\nconst opts: { encoding: BufferEncoding } = { encoding: \"utf8\" };\n\nconst ignore = [\"**/node_modules/**\"];\n\nconst matches = [\n\t/.*README\\.md$/gi,\n\t/.*Cargo\\.toml$/gi,\n\t/.*action\\.ya?ml$/gi,\n\t/.*package\\.json$/gi,\n\t/.*pnpm-workspace\\.yaml$/gi,\n];\n\nexport async function fileExists(file: string) {\n\treturn await fsp\n\t\t.access(file)\n\t\t.then(() => true)\n\t\t.catch(() => false);\n}\n\nexport function findAffectedMarkdowns(root: string, config: Config) {\n\tconst affected = cp\n\t\t/* cspell:disable-next-line because of the filter */\n\t\t.execSync(sh`git diff --cached --name-only --diff-filter=MACT`, opts)\n\t\t.trim()\n\t\t.split(\"\\n\")\n\t\t.filter(Boolean);\n\n\tif (!affected.length) ERROR(\"no staged files found\");\n\n\tif (config.affectedRegexes?.length) {\n\t\tINFO(\"adding the following expressions: \", config.affectedRegexes);\n\t}\n\n\tconst allMatches = [\n\t\t...matches,\n\t\t...(config.affectedRegexes?.map((r) => new RegExp(r)) || []),\n\t];\n\n\tINFO(\"Checking affected files against regexes\", affected, allMatches);\n\n\tconst eligible = affected.filter((a) => allMatches.some((m) => a.match(m)));\n\n\tINFO(\"Found the following eligible affected files\", eligible);\n\n\tconst md = eligible.map((e) => findNearestReadme(root, path.resolve(e)));\n\tconst rootMd = path.join(root, \"README.md\");\n\tconst dedupe = [...new Set(md), rootMd].filter((s): s is string =>\n\t\tBoolean(s),\n\t);\n\n\tINFO(\"Found the following readmes\", dedupe);\n\n\treturn dedupe;\n}\n\nexport function findNearestReadme(\n\tgitRoot: string,\n\tinputFile: string,\n\tmaxRotations = 15,\n) {\n\tlet dir = path.dirname(inputFile);\n\tlet rotations = 0;\n\n\twhile (true) {\n\t\tconst option = path.join(dir, \"README.md\");\n\n\t\tif (fs.existsSync(option)) return option;\n\n\t\tconst parent = path.dirname(dir);\n\n\t\tif (parent === dir || dir === gitRoot || ++rotations > maxRotations) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdir = parent;\n\t}\n\n\treturn null;\n}\n\nexport function getGitRoot() {\n\tconst root = cp.execSync(sh`git rev-parse --show-toplevel`, opts).trim();\n\n\tif (!root) {\n\t\tthrow new Error(\"must be ran within a git directory.\");\n\t}\n\n\tINFO(\"found git root at location: \", root);\n\n\treturn root;\n}\n\nexport async function getMarkdownPaths(cwd: string, config: Config) {\n\tconst pattern = `**/${config?.onlyReadmes ? \"README\" : \"*\"}.md`;\n\tconst readmes = await glob(pattern, { cwd, ignore });\n\treturn readmes.map((readme) => path.resolve(cwd, readme));\n}\n","import * as path from \"node:path\";\nimport { remark } from \"remark\";\nimport remarkCodeImport from \"remark-code-import\";\nimport remarkCollapse from \"remark-collapse\";\nimport remarkToc from \"remark-toc\";\nimport remarkUsage from \"remark-usage\";\nimport { VFile } from \"vfile\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { createFindParameter } from \"./data\";\nimport { INFO, WARN } from \"./log\";\nimport { autoReadmeRemarkPlugin } from \"./plugin\";\nimport { fileExists } from \"./utils\";\n\nexport async function parse(\n\tfile: string,\n\tfilepath: string,\n\troot: string,\n\tconfig: Config,\n\tdata: ActionData,\n) {\n\tconst pipeline = remark()\n\t\t.use(autoReadmeRemarkPlugin, config, data)\n\t\t.use(remarkCodeImport, {});\n\n\tconst usage = data.find((d) => d.action === \"USAGE\");\n\n\tif (usage?.action === \"USAGE\" || config.enableUsage) {\n\t\tconst find = createFindParameter(usage?.parameters || []);\n\t\tconst examplePath = find(\"path\");\n\t\tconst dirname = path.dirname(filepath);\n\t\tconst resolvePath = examplePath && path.resolve(dirname, examplePath);\n\t\tconst relativeProjectPath =\n\t\t\tconfig.usageFile &&\n\t\t\tpath.relative(root, path.resolve(dirname, config.usageFile));\n\t\tconst example =\n\t\t\t(examplePath && resolvePath && path.relative(root, resolvePath)) ||\n\t\t\trelativeProjectPath ||\n\t\t\tundefined;\n\n\t\tif (example && (await fileExists(example))) {\n\t\t\tINFO(\"generating usage section\");\n\t\t\tpipeline.use(remarkUsage, {\n\t\t\t\texample,\n\t\t\t\theading: config.usageHeading,\n\t\t\t});\n\t\t} else {\n\t\t\tWARN(\"not able to find example file for readme\", filepath, example);\n\t\t}\n\t}\n\n\tif (config.enableToc) {\n\t\tINFO(\"generating table of contents section\");\n\t\tpipeline.use(remarkToc, { heading: config.tocHeading });\n\t}\n\n\tif (config.enableToc || config.collapseHeadings?.length) {\n\t\tconst additional = config.collapseHeadings?.length\n\t\t\t? config.collapseHeadings\n\t\t\t: [];\n\t\tconst headings = [...additional, config.tocHeading];\n\t\tpipeline.use(remarkCollapse, {\n\t\t\ttest: {\n\t\t\t\tignoreFinalDefinitions: true,\n\t\t\t\ttest: (value, _) => {\n\t\t\t\t\treturn headings.some((i) => value.trim() === i?.trim());\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tconst vfile = new VFile({ path: path.resolve(filepath), value: file });\n\tconst markdown = await pipeline.process(vfile);\n\treturn markdown.toString();\n}\n","import type { Root } from \"mdast\";\nimport type { Plugin } from \"unified\";\n\nimport Handlebars from \"handlebars\";\nimport { markdownTable } from \"markdown-table\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { zone } from \"mdast-zone\";\nimport path from \"node:path\";\n\nimport type { ActionData } from \"./data\";\nimport type { Config } from \"./schema\";\n\nimport { parseComment } from \"./comment\";\nimport { defaultTableHeadings, defaultTemplates } from \"./schema\";\n\ntype TemplateContext = {\n\tname: string;\n\turi_name: string;\n};\n\nfunction createHeading(\n\theadings: (keyof NonNullable<Config[\"templates\"]>[\"emojis\"])[],\n\tdisableEmojis = false,\n\temojis: typeof defaultTemplates.emojis = defaultTemplates.emojis,\n) {\n\treturn headings.map(\n\t\t(h) =>\n\t\t\t`${disableEmojis ? \"\" : emojis[h] + \" \"}${h?.at(0)?.toUpperCase() + h?.slice(1)}`,\n\t);\n}\n\nfunction wrapRequired(required: boolean | undefined, input: string) {\n\tif (!required) return input;\n\treturn `<b>*${input}</b>`;\n}\n\nexport const autoReadmeRemarkPlugin: Plugin<[Config, ActionData], Root> =\n\t(config, data) => (tree) => {\n\t\tzone(tree, /.*ZOD.*/gi, function (start, _, end) {\n\t\t\tconst zod = data.find((d) => d?.action === \"ZOD\");\n\t\t\tif (!zod?.body) {\n\t\t\t\tthrow new Error(\"unable to load zod body\");\n\t\t\t}\n\n\t\t\tconst ast = fromMarkdown(zod.body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*ACTION.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst options = value && parseComment(value);\n\t\t\tif (!options) throw new Error(\"not able to parse comment\");\n\n\t\t\tconst first = data.find((d) => d?.action === \"ACTION\");\n\t\t\tconst inputs = first?.actionYaml?.inputs || {};\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🧰\"} actions`;\n\n\t\t\tif (options.format === \"LIST\") {\n\t\t\t\tconst body =\n\t\t\t\t\t`${heading}\\n` +\n\t\t\t\t\tObject.entries(inputs)\n\t\t\t\t\t\t.sort((a) => (a[1].required ? -1 : 1))\n\t\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t\treturn `- ${wrapRequired(value.required, key)}: (default: ${value.default})\\n\\n${value.description}`;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\tconst ast = fromMarkdown(body);\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.ACTION?.length && config.headings.ACTION) ||\n\t\t\t\tdefaultTableHeadings.ACTION!;\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(inputs).map(([k, v]) =>\n\t\t\t\t\theadings\n\t\t\t\t\t\t.map((heading) => v[heading as keyof typeof v] || k)\n\t\t\t\t\t\t.map(String),\n\t\t\t\t),\n\t\t\t]);\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*WORKSPACE.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst workspace = data.find((d) => d?.action === \"WORKSPACE\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst packages = workspace?.workspaces?.packages || [];\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.WORKSPACE?.length &&\n\t\t\t\t\tconfig.headings?.WORKSPACE) ||\n\t\t\t\tdefaultTableHeadings.WORKSPACE!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\t// throw new Error(\"List is currently not su\")\n\t\t\t}\n\n\t\t\tconst tableHeadings = createHeading(\n\t\t\t\theadings,\n\t\t\t\tconfig.disableEmojis,\n\t\t\t\tconfig.templates?.emojis,\n\t\t\t);\n\n\t\t\tconst table = markdownTable([\n\t\t\t\ttableHeadings,\n\t\t\t\t...packages\n\t\t\t\t\t.filter((pkg) =>\n\t\t\t\t\t\tconfig.onlyShowPublicPackages\n\t\t\t\t\t\t\t? !pkg.packageJson.private\n\t\t\t\t\t\t\t: true,\n\t\t\t\t\t)\n\t\t\t\t\t.map((pkg) => {\n\t\t\t\t\t\tconst { name } = pkg.packageJson;\n\t\t\t\t\t\treturn headings.map((heading) => {\n\t\t\t\t\t\t\tif (heading === \"name\") {\n\t\t\t\t\t\t\t\tconst scoped = config.removeScope\n\t\t\t\t\t\t\t\t\t? name.replace(config.removeScope, \"\")\n\t\t\t\t\t\t\t\t\t: name;\n\t\t\t\t\t\t\t\treturn `[${scoped}](${path.relative(\n\t\t\t\t\t\t\t\t\tprocess.cwd(),\n\t\t\t\t\t\t\t\t\tpath.resolve(pkg.dir, \"README.md\"),\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"version\") {\n\t\t\t\t\t\t\t\treturn ` },\n\t\t\t\t\t\t\t\t)})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"downloads\") {\n\t\t\t\t\t\t\t\treturn `})`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (heading === \"description\") {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tpkg.packageJson as { description?: string }\n\t\t\t\t\t\t\t\t)?.description;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t});\n\t\t\t\t\t}),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"🏭\"} workspace`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst ast = fromMarkdown(body);\n\t\t\treturn [start, ast, end];\n\t\t});\n\n\t\tzone(tree, /.*PKG.*/gi, function (start, _, end) {\n\t\t\tconst value = start.type === \"html\" && start.value;\n\t\t\tconst comment = value && parseComment(value);\n\t\t\tconst first = data.find((d) => d?.action === \"PKG\");\n\t\t\tconst templates = loadTemplates(config.templates);\n\t\t\tconst headings =\n\t\t\t\t(config.headings?.PKG?.length && config.headings?.PKG) ||\n\t\t\t\tdefaultTableHeadings.PKG!;\n\n\t\t\tif (comment && comment.format === \"LIST\") {\n\t\t\t\tconst ast = fromMarkdown(\"\");\n\t\t\t\treturn [start, ast, end];\n\t\t\t}\n\n\t\t\tfunction mapDependencies(isDev: boolean) {\n\t\t\t\treturn function ([name, version]: [string, string]) {\n\t\t\t\t\tconst url = templates.registryUrl({ name });\n\t\t\t\t\treturn headings.map((key) => {\n\t\t\t\t\t\tif (key === \"devDependency\") {\n\t\t\t\t\t\t\tif (config.disableEmojis) {\n\t\t\t\t\t\t\t\treturn `\\`${isDev}\\``;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn `${isDev ? \"⌨️\" : \"👥\"}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"name\") {\n\t\t\t\t\t\t\treturn `[${name}](${url})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (key === \"version\") {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t[\"workspace\", \"catalog\", \"*\"].some((type) =>\n\t\t\t\t\t\t\t\t\tversion.includes(type),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn `\\`${version}\\``;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ` })})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst { dependencies = {}, devDependencies = {} } =\n\t\t\t\tfirst?.pkgJson || {};\n\n\t\t\tconst table = markdownTable([\n\t\t\t\tcreateHeading(\n\t\t\t\t\theadings,\n\t\t\t\t\tconfig.disableEmojis,\n\t\t\t\t\tconfig.templates?.emojis,\n\t\t\t\t),\n\t\t\t\t...Object.entries(devDependencies).map(mapDependencies(true)),\n\t\t\t\t...Object.entries(dependencies).map(mapDependencies(false)),\n\t\t\t]);\n\n\t\t\tconst heading = `### ${config.disableEmojis ? \"\" : \"📦\"} packages`;\n\t\t\tconst body = [heading, \"\", table].join(\"\\n\");\n\t\t\tconst tableAst = fromMarkdown(body);\n\n\t\t\treturn [start, tableAst, end];\n\t\t});\n\t};\n\nfunction loadTemplates(\n\ttemplates: Config[\"templates\"],\n): Record<\n\tkeyof NonNullable<Config[\"templates\"]>,\n\t(context: Partial<TemplateContext>) => string\n> {\n\tif (!templates) throw new Error(\"failed to load templates\");\n\n\treturn Object.fromEntries(\n\t\tObject.entries(templates).map(([key, value]) => {\n\t\t\tif (typeof value !== \"string\") return [];\n\t\t\treturn [key, Handlebars.compile(value)];\n\t\t}),\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mCAA6B;AAC7B,IAAAC,MAAoB;AACpB,IAAAC,OAAqB;AACrB,iBAAgB;;;ACHhB,mBAAkB;AAClB,mBAAoC;AACpC,qBAAwB;AACxB,IAAAC,cAAc;;;ACHd,iBAAkB;AAEX,IAAM,gBAAgB,aAC3B,KAAK,CAAC,UAAU,OAAO,SAAS,aAAa,KAAK,CAAC,EACnD,SAAS,wBAAwB;AAE5B,IAAM,gBAAgB,aAC3B,KAAK,CAAC,QAAQ,OAAO,CAAC,EACtB,QAAQ,OAAO,EACf,SAAS;AAEJ,IAAM,iBAAiB,aAAE,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,IAAI;AAEnE,IAAM,iBAAiB,aAC5B,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC,EACA,SAAS,uBAAuB;AAE3B,IAAM,sBAAsB,aACjC,OAAO,eAAe,eAAe,MAAM,EAAE,SAAS,CAAC,EACvD,SAAS,EACT,SAAS,oCAAoC,EAC7C,QAAQ;AAAA,EACR,QAAQ,CAAC,QAAQ,YAAY,WAAW,aAAa;AAAA,EACrD,KAAK,CAAC,QAAQ,WAAW,eAAe;AAAA,EACxC,WAAW,CAAC,QAAQ,WAAW,aAAa,aAAa;AAAA,EACzD,KAAK,CAAC;AACP,CAAC;AAEK,IAAM,kBAAkB,aAAE,OAAO;AAAA,EACvC,eAAe,aACb,OAAO,EACP,SAAS,EACT,QAAQ,0DAA0D;AAAA,EACpE,QAAQ,aACN,OAAO,gBAAgB,aAAE,OAAO,CAAC,EACjC,SAAS,EACT,SAAS,wCAAwC,EACjD,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,IACf,WAAW;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,EACV,CAAC;AAAA,EACF,aAAa,aACX,OAAO,EACP,SAAS,EACT,QAAQ,wCAAwC;AAAA,EAClD,cAAc,aACZ,OAAO,EACP,SAAS,EACT;AAAA,IACA;AAAA,EACD;AACF,CAAC;AAEM,IAAM,mBAAmB,gBAAgB,MAAM,CAAC,CAAC;AACjD,IAAM,uBAAuB,oBAAoB,MAAM,MAAS;AAEvE,IAAM,gBAAgB,aAAE,OAAO;AAAA,EAC9B,iBAAiB,aAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EACzD,kBAAkB,aAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC1D,iBAAiB,eAAe,KAAK;AAAA,IACpC,OAAO;AAAA,IACP,aAAa;AAAA,EACd,CAAC;AAAA,EACD,eAAe,aAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,KAAK;AAAA,IAC9C,OAAO;AAAA,IACP,aAAa;AAAA,EACd,CAAC;AAAA,EACD,yBAAyB,aAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,KAAK;AAAA,IACxD,aAAa;AAAA,EACd,CAAC;AAAA,EACD,WAAW,aAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,KAAK;AAAA,IAC1C,OAAO;AAAA,IACP,aAAa;AAAA,EACd,CAAC;AAAA,EACD,aAAa,aAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK,EAAE,KAAK;AAAA,IACvD,aAAa;AAAA,EACd,CAAC;AAAA,EACD,UAAU,oBACR,SAAS,EACT,QAAQ,oBAAoB,EAC5B,SAAS,8CAA8C;AAAA,EACzD,aAAa,aAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,KAAK;AAAA,IAC3C,OAAO;AAAA,IACP,aAAa;AAAA,EACd,CAAC;AAAA,EACD,wBAAwB,aAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,KAAK;AAAA,IACvD,OAAO;AAAA,IACP,aAAa;AAAA,EACd,CAAC;AAAA,EACD,aAAa,aAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK;AAAA,IACnD,aAAa;AAAA,EACd,CAAC;AAAA,EACD,WAAW,gBACT,SAAS,EACT,QAAQ,gBAAgB,EACxB;AAAA,IACA;AAAA,EACD;AAAA,EACD,YAAY,aAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,mBAAmB,EAAE,KAAK;AAAA,IACnE,aAAa;AAAA,EACd,CAAC;AAAA,EACD,WAAW,aAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK;AAAA,IACjD,aAAa;AAAA,EACd,CAAC;AAAA,EACD,cAAc,aAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,OAAO,EAAE,KAAK;AAAA,IACzD,aAAa;AAAA,EACd,CAAC;AAAA,EACD,SAAS,aAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,KAAK;AAAA,IACxC,OAAO;AAAA,IACP,aAAa;AAAA,EACd,CAAC;AACF,CAAC;AAEM,IAAM,eAAe,cAAc,SAAS;;;ADvHnD,IAAM,iBAAiB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAIA,IAAM,OAAO;AAAA,EACZ,GAAG,WAAW;AAAA,EACd,SAAS;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,EACP;AAAA,EACA,OAAO;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,EACP;AAAA,EACA,QAAQ,EAAE,OAAO,KAAK,aAAa,uBAAuB,MAAM,SAAS;AAC1E;AAEA,eAAsB,YAAY;AACjC,QAAM,oBAAgB,aAAAC,aAAM,wBAAQ,QAAQ,IAAI,CAAC,EAC/C,QAAQ,IAAI,EACZ,KAAK,GAAG,EACR,MAAM,KAAK,MAAM,EACjB,SAAS,iCAAgC,oBAAI,KAAK,GAAE,YAAY,CAAC,EAAE;AAErE,QAAM,SAAS,MAAM,cACnB,KAAK,cAAc,cAAc,CAAC,EAClC,MAAM;AAER,MAAI,OAAO,QAAS,cAAAC,QAAM,OAAO,aAAa;AAE9C,SAAO;AACR;AAEO,SAAS,aAGd;AACD,QAAM,EAAE,MAAM,IAAI,aAAa,OAAO;AACtC,QAAM,UAAU,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3D,QAAI,eAAe,SAAS,GAAqB,EAAG,QAAO,CAAC;AAC5D,QAAI,MAAM,IAAI,qBAAqB,YAAAC,QAAE,UAAW,QAAO,CAAC;AACxD,UAAM,OAAO,MAAM,KAAK;AACxB,UAAM,EAAE,UAAU,IAAI,MAAM;AAC5B,UAAM,YAAY,qBAAqB,YAAAA,QAAE;AACzC,UAAM,WAAW,qBAAqB,YAAAA,QAAE;AACxC,UAAM,UAAU,qBAAqB,YAAAA,QAAE;AAEvC,UAAM,WACJ,WAAW,WACX,YAAY,YACZ,aAAa,aACd;AAED,UAAM,UAAmB;AAAA,MACxB,SAAS,MAAM,IAAI;AAAA,MACnB,MAAM;AAAA,IACP;AAEA,QAAI,MAAM,MAAO,SAAQ,QAAQ,KAAK;AACtC,QAAI,MAAM,YAAa,SAAQ,cAAc,KAAK;AAElD,WAAO,CAAC,KAAK,OAAO;AAAA,EACrB,CAAC;AAED,SAAO,OAAO,YAAY,OAAO;AAClC;;;AEjFA,kCAA8B;;;ACF9B,IAAAC,gBAAkB;AAElB,IAAM,YAAQ,cAAAC,SAAM,kBAAkB;AACtC,IAAM,WAAO,cAAAA,SAAM,iBAAiB;AACpC,IAAM,WAAO,cAAAA,SAAM,iBAAiB;AAE7B,SAAS,SAAS,MAAiB;AACzC,QAAM,CAAC,OAAO,GAAG,SAAS,IAAI;AAC9B,QAAM,GAAG,KAAK,OAAO,GAAG,SAAS;AAClC;AAEO,SAAS,QAAQ,MAAiB;AACxC,QAAM,CAAC,OAAO,GAAG,SAAS,IAAI;AAC9B,OAAK,GAAG,KAAK,OAAO,GAAG,SAAS;AACjC;AAEO,SAAS,QAAQ,MAAiB;AACxC,QAAM,CAAC,OAAO,GAAG,SAAS,IAAI;AAC9B,OAAK,GAAG,KAAK,OAAO,GAAG,SAAS;AACjC;;;ADZO,IAAM,YAAY;AAIlB,SAAS,gBAAgB,MAAY;AAC3C,SAAO,KAAK,SACV,IAAI,CAAC,UAAU,MAAM,SAAS,UAAU,WAAW,KAAK,CAAC,EACzD,OAAO,CAAC,MAA4C,MAAM,KAAK;AAClE;AAEO,SAAS,aAAa,SAAiB;AAC7C,QAAM,QAAQ,YAAY,OAAO;AACjC,QAAM,CAAC,MAAM,GAAG,UAAU,IAAI,MAAM,MAAM,GAAG;AAC7C,QAAM,CAAC,OAAO,QAAQ,KAAK,IAAI,KAAK,MAAM,SAAS;AAEnD,OAAK,kBAAkB,EAAE,OAAO,QAAQ,MAAM,CAAC;AAE/C,QAAM,gBAAgB,QAAQ,QAAQ;AACtC,QAAM,cAAc,QAAQ,SAAS;AACrC,QAAM,cAAc,QAAQ,QAAQ;AACpC,QAAM,WAAW,eAAe,MAAM,aAAa;AACnD,QAAM,SAAS,cAAc,MAAM,WAAW;AAC9C,QAAM,SAAS,cAAc,MAAM,WAAW;AAC9C,QAAM,UAAU,QAAQ,SAAS,OAAO;AACxC,QAAM,SAAS,EAAE,QAAQ,QAAQ,SAAS,UAAU,WAAW;AAE/D,OAAK,kBAAkB,OAAO,IAAI,MAAM;AAExC,SAAO;AACR;AAEA,IAAM,eAAe;AACrB,IAAM,aAAa;AAEZ,SAAS,YAAY,SAAiB;AAC5C,SAAO,QACL,QAAQ,cAAc,EAAE,EACxB,QAAQ,aAAa,EAAE,EACvB,QAAQ,YAAY,EAAE,EACtB,KAAK;AACR;AAEA,SAAS,WAAW,SAAe;AAClC,MAAI,CAAC,UAAU,QAAQ,KAAK,EAAG,QAAO;AAEtC,QAAM,aAAS,2CAAc,OAAO;AACpC,MAAI,CAAC,OAAQ,QAAO;AAGpB,SAAO,aAAa,QAAQ,KAAK;AAClC;AAEA,SAAS,UAAU,SAAiB;AACnC,SAAO,QAAQ,WAAW,YAAY,KAAK,QAAQ,SAAS,UAAU;AACvE;;;AE7DA,kBAAiB;AACjB,yBAAkE;AAClE,uBAAsB;AAOtB,IAAM,aAAa;AAEnB,IAAM,eAAe,gBAAgB;AAErC,IAAM,UAAU,EAAE,CAAC,OAAO,GAAG,SAAS;AAEtC,eAAsB,WAAWC,OAAqB;AACrD,QAAMC,QAAyB,EAAE,SAAS,aAAa;AAEvD,MAAID,MAAK,OAAQ,CAAAC,MAAK,eAAe,CAACD,MAAK,MAAM;AAEjD,QAAM,eAAW,gCAAY,YAAYC,KAAI;AAE7C,QAAM,SAAS,MAAM,SAAS,OAAO;AAErC,MAAI,CAAC,QAAQ;AACZ,UAAM,WAAWD,MAAK,SAAS,mBAAmBA,MAAK,SAAS;AAChE,SAAK,wBAAwB,QAAQ;AACrC,SAAK,6BAA6B;AAAA,EACnC,OAAO;AACN,SAAK,iCAAiC,OAAO,QAAQ;AACrD,SAAK,sBAAsB,OAAO,MAAM;AAAA,EACzC;AAEA,EAAAA,QAAO,YAAYA,KAAI;AAEvB,OAAK,4BAA4BA,KAAI;AAErC,SAAO,aAAa;AAAA,QACnB,iBAAAE,SAAU,QAAQ,UAAU,CAAC,GAAGF,OAAM;AAAA,MACrC,YAAY,CAAC,GAAG,gBAAgB;AAAA,IACjC,CAAC;AAAA,EACF;AACD;AAEO,SAAS,SAAS,WAAmB,SAAiB;AAC5D,SAAO,YAAAG,QAAK,MAAM,OAAO;AAC1B;AAEA,SAAS,kBAAkB;AAC1B,SAAO;AAAA,IACN,OAAG,2CAAuB,UAAU;AAAA,IACpC,IAAI,UAAU;AAAA,IACd,YAAY,UAAU;AAAA,IACtB,WAAW,UAAU;AAAA,IACrB,YAAY,UAAU;AAAA,IACtB,YAAY,UAAU;AAAA,IACtB,YAAY,UAAU;AAAA,IACtB,YAAY,UAAU;AAAA,EACvB;AACD;AAEA,SAAS,YAAY,KAAa;AACjC,SAAO,OAAO;AAAA,IACb,OAAO,QAAQ,GAAG,EAChB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAE,EACrC,OAAO,CAAC,MAA8B,QAAQ,CAAC,CAAC;AAAA,EACnD;AACD;;;ACnEA,0BAA4B;AAC5B,IAAAC,MAAoB;AACpB,IAAAC,OAAqB;AACrB,IAAAC,QAAsB;AACtB,uBAAgC;AAChC,WAAsB;AACtB,oBAAuB;;;ACNvB,uBAAiB;AACjB,SAAoB;AACpB,SAAoB;AACpB,UAAqB;AACrB,WAAsB;AAMtB,IAAM,KAAK,OAAO;AAElB,IAAM,OAAqC,EAAE,UAAU,OAAO;AAE9D,IAAM,SAAS,CAAC,oBAAoB;AAEpC,IAAM,UAAU;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,eAAsB,WAAW,MAAc;AAC9C,SAAO,MACL,WAAO,IAAI,EACX,KAAK,MAAM,IAAI,EACf,MAAM,MAAM,KAAK;AACpB;AAEO,SAAS,sBAAsB,MAAc,QAAgB;AACnE,QAAM,WAEJ,YAAS,sDAAsD,IAAI,EACnE,KAAK,EACL,MAAM,IAAI,EACV,OAAO,OAAO;AAEhB,MAAI,CAAC,SAAS,OAAQ,OAAM,uBAAuB;AAEnD,MAAI,OAAO,iBAAiB,QAAQ;AACnC,SAAK,sCAAsC,OAAO,eAAe;AAAA,EAClE;AAEA,QAAM,aAAa;AAAA,IAClB,GAAG;AAAA,IACH,GAAI,OAAO,iBAAiB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC;AAAA,EAC3D;AAEA,OAAK,2CAA2C,UAAU,UAAU;AAEpE,QAAM,WAAW,SAAS,OAAO,CAAC,MAAM,WAAW,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1E,OAAK,+CAA+C,QAAQ;AAE5D,QAAM,KAAK,SAAS,IAAI,CAAC,MAAM,kBAAkB,MAAW,aAAQ,CAAC,CAAC,CAAC;AACvE,QAAM,SAAc,UAAK,MAAM,WAAW;AAC1C,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,MAAM,EAAE;AAAA,IAAO,CAAC,MAC/C,QAAQ,CAAC;AAAA,EACV;AAEA,OAAK,+BAA+B,MAAM;AAE1C,SAAO;AACR;AAEO,SAAS,kBACf,SACA,WACA,eAAe,IACd;AACD,MAAI,MAAW,aAAQ,SAAS;AAChC,MAAI,YAAY;AAEhB,SAAO,MAAM;AACZ,UAAM,SAAc,UAAK,KAAK,WAAW;AAEzC,QAAO,cAAW,MAAM,EAAG,QAAO;AAElC,UAAM,SAAc,aAAQ,GAAG;AAE/B,QAAI,WAAW,OAAO,QAAQ,WAAW,EAAE,YAAY,cAAc;AACpE;AAAA,IACD;AAEA,UAAM;AAAA,EACP;AAEA,SAAO;AACR;AAEO,SAAS,aAAa;AAC5B,QAAM,OAAU,YAAS,mCAAmC,IAAI,EAAE,KAAK;AAEvE,MAAI,CAAC,MAAM;AACV,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACtD;AAEA,OAAK,gCAAgC,IAAI;AAEzC,SAAO;AACR;AAEA,eAAsB,iBAAiB,KAAa,QAAgB;AACnE,QAAM,UAAU,MAAM,QAAQ,cAAc,WAAW,GAAG;AAC1D,QAAM,UAAU,UAAM,iBAAAC,SAAK,SAAS,EAAE,KAAK,OAAO,CAAC;AACnD,SAAO,QAAQ,IAAI,CAAC,WAAgB,aAAQ,KAAK,MAAM,CAAC;AACzD;;;ADpFO,SAAS,oBAAoB,eAAyB;AAC5D,SAAO,SAAU,eAAuB;AACvC,WAAO,eACJ,KAAK,CAAC,MAAM,EAAE,WAAW,aAAa,CAAC,GACvC,QAAQ,gBAAgB,KAAK,EAAE,GAC/B,QAAQ,OAAO,EAAE,GACjB,QAAQ,OAAO,GAAG;AAAA,EACtB;AACD;AAEA,eAAsB,eACrB,SACA,MACA,MACC;AACD,QAAM,eAAe,QAAQ,OAAO,CAAC,WAAW,OAAO,OAAO;AAC9D,SAAO,MAAM,QAAQ;AAAA,IACpB,aAAa,IAAI,OAAO,WAAW;AAClC,YAAM,OAAO,oBAAoB,OAAO,UAAU;AAClD,cAAQ,OAAO,QAAQ;AAAA,QACtB,KAAK,UAAU;AACd,gBAAM,UAAe,cAAQ,IAAI;AACjC,gBAAM,aAAa,MAAM,eAAe,OAAO;AAC/C,iBAAO;AAAA,YACN,QAAQ,OAAO;AAAA,YACf;AAAA,YACA,YAAY,OAAO;AAAA,UACpB;AAAA,QACD;AAAA,QAEA,KAAK,OAAO;AACX,gBAAM,YAAY,KAAK,MAAM;AAC7B,gBAAM,WAAW,YACT,cAAa,cAAQ,IAAI,GAAG,SAAS,IACrC,cAAQ,IAAI;AACpB,gBAAM,UAAU,UAAM,kCAAgB,QAAQ;AAC9C,iBAAO;AAAA,YACN,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAAA,QAEA,KAAK,SAAS;AACb,iBAAO;AAAA,YACN,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,UACpB;AAAA,QACD;AAAA,QAEA,KAAK,aAAa;AACjB,gBAAM,aAAa,UAAM,iCAAY,QAAQ,IAAI,CAAC;AAClD,gBAAM,WAAgB,cAAQ,MAAM,qBAAqB;AACzD,gBAAM,SAAY,eAAW,QAAQ;AACrC,iBAAO;AAAA,YACN,QAAQ,OAAO;AAAA,YACf;AAAA,YACA,YAAY,OAAO;AAAA,YACnB;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,QAEA,KAAK,OAAO;AACX,cAAI,OAAO,WAAW,QAAQ;AAC7B,kBAAM,IAAI,MAAM,mCAAmC;AAAA,UACpD;AAEA,gBAAM,YAAY,KAAK,MAAM;AAC7B,cAAI,CAAC,WAAW;AACf,kBAAMC,SAAQ,gDAAgD,IAAI;AAClE,kBAAM,IAAI,MAAMA,MAAK;AAAA,UACtB;AAEA,gBAAM,OAAO,UAAM,sBAAO;AAAA,YACzB,OAAY,cAAa,cAAQ,IAAI,GAAG,SAAS;AAAA,YACjD,OAAO,KAAK,OAAO,KAAK;AAAA,UACzB,CAAC;AAED,iBAAO;AAAA,YACN,QAAQ,OAAO;AAAA,YACf;AAAA,YACA,YAAY,OAAO;AAAA,UACpB;AAAA,QACD;AAAA,QAEA;AACC,gBAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAEA,eAAe,eAAe,SAAiB;AAC9C,QAAM,gBAAqB,cAAQ,SAAS,YAAY;AACxD,QAAM,iBAAsB,cAAQ,SAAS,aAAa;AAC1D,QAAM,aACH,MAAM,WAAW,cAAc,KAAM,kBACrC,MAAM,WAAW,aAAa,KAAM;AAEvC,MAAI,CAAC,YAAY;AAChB,UAAM,YAAY,CAAC,eAAe,cAAc;AAChD,UAAMA,SAAQ,oCAAoC,SAAS;AAC3D,UAAM,IAAI,MAAMA,MAAK;AAAA,EACtB;AAEA,QAAM,aAAa,MAAU,cAAS,YAAY,EAAE,UAAU,OAAO,CAAC;AAEtE,SAAY,WAAM,UAAU;AAC7B;;;AErIA,IAAAC,QAAsB;AACtB,oBAAuB;AACvB,gCAA6B;AAC7B,6BAA2B;AAC3B,wBAAsB;AACtB,0BAAwB;AACxB,mBAAsB;;;ACHtB,wBAAuB;AACvB,4BAA8B;AAC9B,sCAA6B;AAC7B,wBAAqB;AACrB,uBAAiB;AAajB,SAAS,cACR,UACA,gBAAgB,OAChB,SAAyC,iBAAiB,QACzD;AACD,SAAO,SAAS;AAAA,IACf,CAAC,MACA,GAAG,gBAAgB,KAAK,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,YAAY,IAAI,GAAG,MAAM,CAAC,CAAC;AAAA,EACjF;AACD;AAEA,SAAS,aAAa,UAA+B,OAAe;AACnE,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,OAAO,KAAK;AACpB;AAEO,IAAM,yBACZ,CAAC,QAAQ,SAAS,CAAC,SAAS;AAC3B,8BAAK,MAAM,aAAa,SAAU,OAAO,GAAG,KAAK;AAChD,UAAM,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,WAAW,KAAK;AAChD,QAAI,CAAC,KAAK,MAAM;AACf,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC1C;AAEA,UAAM,UAAM,8CAAa,IAAI,IAAI;AACjC,WAAO,CAAC,OAAO,KAAK,GAAG;AAAA,EACxB,CAAC;AAED,8BAAK,MAAM,gBAAgB,SAAU,OAAO,GAAG,KAAK;AACnD,UAAM,QAAQ,MAAM,SAAS,UAAU,MAAM;AAC7C,UAAM,UAAU,SAAS,aAAa,KAAK;AAC3C,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,2BAA2B;AAEzD,UAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,WAAW,QAAQ;AACrD,UAAM,SAAS,OAAO,YAAY,UAAU,CAAC;AAC7C,UAAM,UAAU,OAAO,OAAO,gBAAgB,KAAK,WAAI;AAEvD,QAAI,QAAQ,WAAW,QAAQ;AAC9B,YAAMC,QACL,GAAG,OAAO;AAAA,IACV,OAAO,QAAQ,MAAM,EACnB,KAAK,CAAC,MAAO,EAAE,CAAC,EAAE,WAAW,KAAK,CAAE,EACpC,IAAI,CAAC,CAAC,KAAKC,MAAK,MAAM;AACtB,eAAO,KAAK,aAAaA,OAAM,UAAU,GAAG,CAAC,eAAeA,OAAM,OAAO;AAAA;AAAA,EAAQA,OAAM,WAAW;AAAA,MACnG,CAAC,EACA,KAAK,IAAI;AACZ,YAAMC,WAAM,8CAAaF,KAAI;AAC7B,aAAO,CAAC,OAAOE,MAAK,GAAG;AAAA,IACxB;AAEA,UAAM,WACJ,OAAO,UAAU,QAAQ,UAAU,OAAO,SAAS,UACpD,qBAAqB;AAEtB,UAAM,YAAQ,qCAAc;AAAA,MAC3B;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,OAAO,WAAW;AAAA,MACnB;AAAA,MACA,GAAG,OAAO,QAAQ,MAAM,EAAE;AAAA,QAAI,CAAC,CAAC,GAAG,CAAC,MACnC,SACE,IAAI,CAACC,aAAY,EAAEA,QAAyB,KAAK,CAAC,EAClD,IAAI,MAAM;AAAA,MACb;AAAA,IACD,CAAC;AACD,UAAM,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,KAAK,IAAI;AAC3C,UAAM,UAAM,8CAAa,IAAI;AAC7B,WAAO,CAAC,OAAO,KAAK,GAAG;AAAA,EACxB,CAAC;AAED,8BAAK,MAAM,mBAAmB,SAAU,OAAO,GAAG,KAAK;AACtD,UAAM,QAAQ,MAAM,SAAS,UAAU,MAAM;AAC7C,UAAM,UAAU,SAAS,aAAa,KAAK;AAC3C,UAAM,YAAY,KAAK,KAAK,CAAC,MAAM,GAAG,WAAW,WAAW;AAC5D,UAAM,YAAY,cAAc,OAAO,SAAS;AAChD,UAAM,WAAW,WAAW,YAAY,YAAY,CAAC;AACrD,UAAM,WACJ,OAAO,UAAU,WAAW,UAC5B,OAAO,UAAU,aAClB,qBAAqB;AAEtB,QAAI,WAAW,QAAQ,WAAW,QAAQ;AAAA,IAE1C;AAEA,UAAM,gBAAgB;AAAA,MACrB;AAAA,MACA,OAAO;AAAA,MACP,OAAO,WAAW;AAAA,IACnB;AAEA,UAAM,YAAQ,qCAAc;AAAA,MAC3B;AAAA,MACA,GAAG,SACD;AAAA,QAAO,CAAC,QACR,OAAO,yBACJ,CAAC,IAAI,YAAY,UACjB;AAAA,MACJ,EACC,IAAI,CAAC,QAAQ;AACb,cAAM,EAAE,KAAK,IAAI,IAAI;AACrB,eAAO,SAAS,IAAI,CAACA,aAAY;AAChC,cAAIA,aAAY,QAAQ;AACvB,kBAAM,SAAS,OAAO,cACnB,KAAK,QAAQ,OAAO,aAAa,EAAE,IACnC;AACH,mBAAO,IAAI,MAAM,KAAK,iBAAAC,QAAK;AAAA,cAC1B,QAAQ,IAAI;AAAA,cACZ,iBAAAA,QAAK,QAAQ,IAAI,KAAK,WAAW;AAAA,YAClC,CAAC;AAAA,UACF;AACA,cAAID,aAAY,WAAW;AAC1B,mBAAO,wBAAwB,UAAU;AAAA,cACxC,EAAE,UAAU,mBAAmB,IAAI,EAAE;AAAA,YACtC,CAAC;AAAA,UACF;AACA,cAAIA,aAAY,aAAa;AAC5B,mBAAO,oBAAoB,UAAU;AAAA,cACpC,EAAE,KAAK;AAAA,YACR,CAAC;AAAA,UACF;AACA,cAAIA,aAAY,eAAe;AAC9B,mBACC,IAAI,aACF;AAAA,UACJ;AACA,iBAAO;AAAA,QACR,CAAC;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,UAAM,UAAU,OAAO,OAAO,gBAAgB,KAAK,WAAI;AACvD,UAAM,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,KAAK,IAAI;AAC3C,UAAM,UAAM,8CAAa,IAAI;AAC7B,WAAO,CAAC,OAAO,KAAK,GAAG;AAAA,EACxB,CAAC;AAED,8BAAK,MAAM,aAAa,SAAU,OAAO,GAAG,KAAK;AAChD,UAAM,QAAQ,MAAM,SAAS,UAAU,MAAM;AAC7C,UAAM,UAAU,SAAS,aAAa,KAAK;AAC3C,UAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,WAAW,KAAK;AAClD,UAAM,YAAY,cAAc,OAAO,SAAS;AAChD,UAAM,WACJ,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,OAClD,qBAAqB;AAEtB,QAAI,WAAW,QAAQ,WAAW,QAAQ;AACzC,YAAM,UAAM,8CAAa,EAAE;AAC3B,aAAO,CAAC,OAAO,KAAK,GAAG;AAAA,IACxB;AAEA,aAAS,gBAAgB,OAAgB;AACxC,aAAO,SAAU,CAAC,MAAM,OAAO,GAAqB;AACnD,cAAM,MAAM,UAAU,YAAY,EAAE,KAAK,CAAC;AAC1C,eAAO,SAAS,IAAI,CAAC,QAAQ;AAC5B,cAAI,QAAQ,iBAAiB;AAC5B,gBAAI,OAAO,eAAe;AACzB,qBAAO,KAAK,KAAK;AAAA,YAClB;AACA,mBAAO,GAAG,QAAQ,iBAAO,WAAI;AAAA,UAC9B;AACA,cAAI,QAAQ,QAAQ;AACnB,mBAAO,IAAI,IAAI,KAAK,GAAG;AAAA,UACxB;AACA,cAAI,QAAQ,WAAW;AACtB,gBACC,CAAC,aAAa,WAAW,GAAG,EAAE;AAAA,cAAK,CAAC,SACnC,QAAQ,SAAS,IAAI;AAAA,YACtB,GACC;AACD,qBAAO,KAAK,OAAO;AAAA,YACpB;AAEA,mBAAO,kBAAkB,UAAU,aAAa,EAAE,UAAU,mBAAmB,IAAI,EAAE,CAAC,CAAC;AAAA,UACxF;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAEA,UAAM,EAAE,eAAe,CAAC,GAAG,kBAAkB,CAAC,EAAE,IAC/C,OAAO,WAAW,CAAC;AAEpB,UAAM,YAAQ,qCAAc;AAAA,MAC3B;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,OAAO,WAAW;AAAA,MACnB;AAAA,MACA,GAAG,OAAO,QAAQ,eAAe,EAAE,IAAI,gBAAgB,IAAI,CAAC;AAAA,MAC5D,GAAG,OAAO,QAAQ,YAAY,EAAE,IAAI,gBAAgB,KAAK,CAAC;AAAA,IAC3D,CAAC;AAED,UAAM,UAAU,OAAO,OAAO,gBAAgB,KAAK,WAAI;AACvD,UAAM,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,KAAK,IAAI;AAC3C,UAAM,eAAW,8CAAa,IAAI;AAElC,WAAO,CAAC,OAAO,UAAU,GAAG;AAAA,EAC7B,CAAC;AACF;AAED,SAAS,cACR,WAIC;AACD,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,0BAA0B;AAE1D,SAAO,OAAO;AAAA,IACb,OAAO,QAAQ,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,UAAI,OAAO,UAAU,SAAU,QAAO,CAAC;AACvC,aAAO,CAAC,KAAK,kBAAAE,QAAW,QAAQ,KAAK,CAAC;AAAA,IACvC,CAAC;AAAA,EACF;AACD;;;AD3NA,eAAsBC,OACrB,MACA,UACA,MACA,QACA,MACC;AACD,QAAM,eAAW,sBAAO,EACtB,IAAI,wBAAwB,QAAQ,IAAI,EACxC,IAAI,0BAAAC,SAAkB,CAAC,CAAC;AAE1B,QAAM,QAAQ,KAAK,KAAK,CAAC,MAAM,EAAE,WAAW,OAAO;AAEnD,MAAI,OAAO,WAAW,WAAW,OAAO,aAAa;AACpD,UAAM,OAAO,oBAAoB,OAAO,cAAc,CAAC,CAAC;AACxD,UAAM,cAAc,KAAK,MAAM;AAC/B,UAAMC,WAAe,cAAQ,QAAQ;AACrC,UAAM,cAAc,eAAoB,cAAQA,UAAS,WAAW;AACpE,UAAM,sBACL,OAAO,aACF,eAAS,MAAW,cAAQA,UAAS,OAAO,SAAS,CAAC;AAC5D,UAAM,UACJ,eAAe,eAAoB,eAAS,MAAM,WAAW,KAC9D,uBACA;AAED,QAAI,WAAY,MAAM,WAAW,OAAO,GAAI;AAC3C,WAAK,0BAA0B;AAC/B,eAAS,IAAI,oBAAAC,SAAa;AAAA,QACzB;AAAA,QACA,SAAS,OAAO;AAAA,MACjB,CAAC;AAAA,IACF,OAAO;AACN,WAAK,4CAA4C,UAAU,OAAO;AAAA,IACnE;AAAA,EACD;AAEA,MAAI,OAAO,WAAW;AACrB,SAAK,sCAAsC;AAC3C,aAAS,IAAI,kBAAAC,SAAW,EAAE,SAAS,OAAO,WAAW,CAAC;AAAA,EACvD;AAEA,MAAI,OAAO,aAAa,OAAO,kBAAkB,QAAQ;AACxD,UAAM,aAAa,OAAO,kBAAkB,SACzC,OAAO,mBACP,CAAC;AACJ,UAAM,WAAW,CAAC,GAAG,YAAY,OAAO,UAAU;AAClD,aAAS,IAAI,uBAAAC,SAAgB;AAAA,MAC5B,MAAM;AAAA,QACL,wBAAwB;AAAA,QACxB,MAAM,CAAC,OAAO,MAAM;AACnB,iBAAO,SAAS,KAAK,CAAC,MAAM,MAAM,KAAK,MAAM,GAAG,KAAK,CAAC;AAAA,QACvD;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,QAAM,QAAQ,IAAI,mBAAM,EAAE,MAAW,cAAQ,QAAQ,GAAG,OAAO,KAAK,CAAC;AACrE,QAAM,WAAW,MAAM,SAAS,QAAQ,KAAK;AAC7C,SAAO,SAAS,SAAS;AAC1B;;;AR7DA,eAAsB,MAAM;AAC3B,QAAMC,QAAO,MAAM,UAAU;AAC7B,QAAM,SAAkB,MAAM,WAAWA,KAAI,KAAM,CAAC;AAEpD,OAAK,uCAAuC,MAAM;AAElD,QAAM,OAAO,WAAW;AAExB,QAAM,aAAaA,MAAK,UAAU,aAAa;AAE/C,OAAK,WAAW,CAAC,aAAa,SAAS,WAAW,OAAO;AAEzD,QAAM,QAAQ,aACX,sBAAsB,MAAM,MAAM,IAClC,MAAM,iBAAiB,MAAM,MAAM;AAEtC,OAAK,+BAA+B,MAAM,KAAK,IAAI,CAAC;AAEpD,QAAM,OAAOA,MAAK,cAAc,YAAY;AAE5C,MAAI,CAAC,MAAM,QAAQ;AAClB,WAAO,MAAM,MAAM,UAAU,0BAA0B;AAAA,EACxD;AAEA,QAAM,UAAU,CAACA,MAAK,eAAW,WAAAC,SAAI,YAAY,IAAI,EAAE,EAAE,MAAM;AAE/D,QAAM,QAAQ;AAAA,IACb,MAAM,IAAI,OAAOC,UAAS;AACzB,YAAM,OAAO,MAAU,cAASA,OAAM,EAAE,UAAU,OAAO,CAAC;AAE1D,YAAM,WAAW,MAAM;AACtB,cAAM,UAAM,+CAAa,IAAI;AAC7B,eAAO,gBAAgB,GAAG;AAAA,MAC3B,GAAG;AAEH,UAAI,CAAC,QAAQ,QAAQ;AACpB,aAAK,+BAA+BA,KAAI;AACxC,YAAI,CAAC,OAAO,eAAe,CAAC,OAAO,WAAW;AAC7C,iBAAO,MAAM,4BAA4B;AAAA,QAC1C,OAAO;AACN,eAAK,uCAAuCA,KAAI;AAAA,QACjD;AAAA,MACD;AAEA,YAAM,OAAO,MAAM,eAAe,SAASA,OAAM,IAAI;AAErD,WAAK,8BAA8B,IAAI;AAEvC,YAAM,UAAU,MAAMC,OAAM,MAAMD,OAAM,MAAM,QAAQ,IAAI;AAC1D,YAAU,eAAUA,OAAM,OAAO;AAAA,IAClC,CAAC;AAAA,EACF;AAEA,QAAME,QAA6B,EAAE,OAAO,UAAU;AAEtD,OAAK,0BAA0B;AAE/B,EAAG,iBAAa,YAAY,CAAC,WAAW,GAAG,KAAK,GAAGA,KAAI;AAEvD,MAAI,YAAY;AACf,SAAK,oCAAoC;AAEzC,IAAG,iBAAa,OAAO,CAAC,OAAO,GAAG,KAAK,GAAGA,KAAI;AAAA,EAC/C;AAEA,MAAI,QAAS,SAAQ,KAAK;AAC3B;","names":["import_mdast_util_from_markdown","cp","fsp","import_zod","yargs","debug","z","import_debug","debug","args","opts","deepmerge","toml","fs","fsp","path","glob","error","path","body","value","ast","heading","path","Handlebars","parse","remarkCodeImport","dirname","remarkUsage","remarkToc","remarkCollapse","args","ora","path","parse","opts"]}