@bjmhe/automd 0.0.0 → 0.0.4

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-BOfYBrHa.js","names":["resolvePath","resolvePath","resolvePath","_fetch","builtinGenerators"],"sources":["../src/generators/badges.ts","../src/generators/contributors.ts","../src/generators/dir-tree.ts","../src/generators/fetch.ts","../src/generators/file.ts","../src/generators/jsdocs.ts","../src/generators/jsimport.ts","../src/generators/pm.ts","../src/generators/with-automd.ts","../src/generators/index.ts","../src/transform.ts"],"sourcesContent":["import { image, link } from \"mdbox\";\n\nimport { getPkg } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\ntype BadgeType = keyof typeof badgeTypes;\ntype BadgeProvider = Record<BadgeType, string | false>;\n\nconst badgeTypes = {\n npmVersion: {\n name: \"npm version\",\n to: \"https://npmjs.com/package/{name}\",\n },\n npmDownloads: {\n name: \"npm downloads\",\n to: \"https://npm.chart.dev/{name}\",\n },\n bundlephobia: {\n name: \"bundle size\",\n to: \"https://bundlephobia.com/package/{name}\",\n },\n bundlejs: {\n name: \"bundle size\",\n to: \"https://bundlejs.com/?q={name}\",\n },\n packagephobia: {\n name: \"install size\",\n to: \"https://packagephobia.com/result?p={name}\",\n },\n codecov: {\n name: \"codecov\",\n to: \"https://codecov.io/gh/{github}\",\n },\n license: {\n name: \"license\",\n to: \"https://github.com/{github}/blob/{licenseBranch}/LICENSE\",\n },\n engine: {\n name: \"engine\",\n to: \"https://npmx.dev/api/registry/badge/engines/{name}\",\n },\n};\n\nconst badgeProviders: Record<string, BadgeProvider> = {\n // https://shields.io/badges/static-badge\n shields: {\n npmVersion: \"https://img.shields.io/npm/v/{name}\",\n npmDownloads: \"https://img.shields.io/npm/dm/{name}\",\n bundlephobia: \"https://img.shields.io/bundlephobia/minzip/{name}\",\n packagephobia: \"https://badgen.net/packagephobia/install/{name}\", // https://github.com/badges/shields/issues/1701\n bundlejs: \"https://img.shields.io/bundlejs/size/{name}\",\n codecov: \"https://img.shields.io/codecov/c/gh/{github}\",\n license: \"https://img.shields.io/github/license/{github}\",\n engine: false,\n },\n // https://badgen.net/help\n badgen: {\n npmVersion: \"https://flat.badgen.net/npm/v/{name}\",\n npmDownloads: \"https://flat.badgen.net/npm/dm/{name}\",\n bundlephobia: \"https://flat.badgen.net/bundlephobia/minzip/{name}\",\n bundlejs: false, // https://github.com/badgen/badgen/issues/82\n packagephobia: \"https://flat.badgen.net/packagephobia/install/{name}\",\n codecov: \"https://flat.badgen.net/codecov/c/github/{github}\",\n license: \"https://flat.badgen.net/github/license/{github}\",\n engine: false,\n },\n badgenClassic: {\n npmVersion: \"https://badgen.net/npm/v/{name}\",\n npmDownloads: \"https://badgen.net/npm/dm/{name}\",\n bundlephobia: \"https://badgen.net/bundlephobia/minzip/{name}\",\n bundlejs: false, // https://github.com/badgen/badgen/issues/82\n packagephobia: \"https://badgen.net/packagephobia/install/{name}\",\n codecov: \"https://badgen.net/codecov/c/github/{github}\",\n license: \"https://badgen.net/github/license/{github}\",\n engine: false,\n },\n npmx: {\n npmVersion: \"https://npmx.dev/api/registry/badge/version/{name}\",\n npmDownloads: \"https://npmx.dev/api/registry/badge/downloads/{name}\",\n bundlephobia: \"https://npmx.dev/api/registry/badge/size/{name}\",\n bundlejs: false,\n packagephobia: false,\n codecov: false,\n license: \"https://npmx.dev/api/registry/badge/license/{name}\",\n engine: \"https://npmx.dev/api/registry/badge/engines/{name}\",\n },\n};\n\nexport const badges = defineGenerator({\n name: \"badges\",\n async generate({ config, args }) {\n const pkg = await getPkg(config.dir, args);\n const ctx: Record<string, any> = {\n name: pkg.name,\n github: pkg.github,\n licenseBranch: \"main\",\n ...args,\n };\n\n const fillStr = (str: string) => str.replace(/{(\\w+)}/g, (_, key) => ctx[key] || \"\");\n\n const provider = badgeProviders[args.provider]! || badgeProviders.shields;\n const providerParams = Object.entries({\n color: args.color,\n labelColor: args.labelColor,\n ...args.styleParams,\n })\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n const badges = {\n npmVersion: {\n enabled: ctx.name && args.npmVersion !== false,\n ...badgeTypes.npmVersion,\n },\n npmDownloads: {\n enabled: ctx.name && args.npmDownloads !== false,\n ...badgeTypes.npmDownloads,\n },\n bundlephobia: {\n enabled: args.bundlephobia && ctx.name,\n ...badgeTypes.bundlephobia,\n },\n bundlejs: {\n enabled: args.bundlejs && ctx.name,\n ...badgeTypes.bundlejs,\n },\n packagephobia: {\n enabled: args.packagephobia && ctx.name,\n ...badgeTypes.packagephobia,\n },\n codecov: {\n enabled: args.codecov && ctx.github,\n ...badgeTypes.codecov,\n },\n license: {\n enabled: args.license && ctx.github,\n ...badgeTypes.license,\n },\n engine: {\n enabled: args.engine && ctx.name,\n ...badgeTypes.engine,\n },\n } as const;\n\n const md: string[] = [];\n\n for (const [badgeType, badge] of Object.entries(badges)) {\n if (!badge.enabled || !provider[badgeType as BadgeType]) {\n continue;\n }\n const to = fillStr(badge.to);\n const imgURL =\n fillStr(provider[badgeType as BadgeType] as string) +\n (providerParams ? `?${providerParams}` : \"\");\n md.push(link(to, image(imgURL, badge.name)));\n }\n\n return {\n contents: md.join(\"\\n\"),\n };\n },\n});\n","import { getPkg } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\nconst PROVIDERS = {\n CONTRIB_ROCKS: \"contrib.rocks\",\n MARKUPGO: \"markupgo\",\n};\n\nexport const contributors = defineGenerator({\n name: \"contributors\",\n async generate({ config, args }) {\n const { github } = await getPkg(config.dir, args);\n const provider = args.provider || PROVIDERS.CONTRIB_ROCKS;\n\n if (!github) {\n throw new Error(\"`github` is required!\");\n }\n\n const lines: string[] = [];\n\n // License\n if (typeof args.license === \"string\") {\n lines.push(\n `Published under the [${args.license.toUpperCase()}](https://github.com/${github}/blob/main/LICENSE) license.`,\n );\n }\n\n // Made by\n let madeBy = `[community](https://github.com/${github}/graphs/contributors) 💛`;\n if (typeof args.author === \"string\") {\n const authors = args.author\n .split(\",\")\n .map((author) => author.trim())\n .map((user) => `[@${user}](https://github.com/${user})`)\n .join(\", \");\n if (authors.length > 0) {\n madeBy = `${authors} and ${madeBy}`;\n }\n }\n lines.push(`Made by ${madeBy}`);\n\n // Contributors\n if (provider === PROVIDERS.MARKUPGO) {\n const params = [];\n\n args = {\n circleSize: \"64\",\n center: \"true\",\n ...args,\n };\n\n if (Number(args.max) >= 0) {\n params.push([\"count\", args.max]);\n }\n\n if (Number(args.width)) {\n params.push([\"width\", args.width]);\n }\n\n if (Number(args.circleSize)) {\n params.push([\"circleSize\", args.circleSize]);\n }\n\n if (Number(args.circleRadius)) {\n params.push([\"circleRadius\", args.circleRadius]);\n }\n\n if (Number(args.circleSpacing)) {\n params.push([\"circleSpacing\", args.circleSpacing]);\n }\n\n if (args.center) {\n params.push([\"center\", Boolean(args.center).toString()]);\n }\n\n if (!args.markupGoLogo) {\n params.push([\"removeLogo\", \"true\"]);\n }\n\n if (args.anon) {\n params.push([\"anon\", Boolean(args.anon).toString()]);\n }\n\n let paramsStr = params.map(([k, v]) => `${k}=${v}`).join(\"&\");\n\n paramsStr = paramsStr ? `?${paramsStr}` : \"\";\n\n lines.push(\n `<br><br>`,\n `<a href=\"https://github.com/${github}/graphs/contributors\">`,\n `<img src=\"https://markupgo.com/github/${github}/contributors${paramsStr}\" />`,\n `</a>`,\n );\n } else {\n const params = [[\"repo\", github]];\n if (args.max) {\n params.push([\"max\", args.max]);\n }\n if (args.anon) {\n params.push([\"anon\", args.anon]);\n }\n const paramsStr = params.map(([k, v]) => `${k}=${v}`).join(\"&\");\n lines.push(\n `<br><br>`,\n `<a href=\"https://github.com/${github}/graphs/contributors\">`,\n `<img src=\"https://contrib.rocks/image?${paramsStr}\" />`,\n `</a>`,\n );\n }\n\n return {\n contents: lines.join(\"\\n\"),\n };\n },\n});\n","import { readdir, stat, readFile } from \"node:fs/promises\";\n\nimport { join } from \"pathe\";\n\nimport { resolvePath } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\ninterface TreeEntry {\n name: string;\n isDirectory: boolean;\n children?: TreeEntry[];\n}\n\nconst DEFAULT_IGNORE = [\n \"node_modules\",\n \".git\",\n \".DS_Store\",\n \".nuxt\",\n \".output\",\n \".nitro\",\n \"dist\",\n \"coverage\",\n \".cache\",\n \".turbo\",\n];\n\nasync function parseGitignore(dir: string): Promise<string[]> {\n try {\n const gitignorePath = join(dir, \".gitignore\");\n const content = await readFile(gitignorePath, \"utf8\");\n return content\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"#\"));\n } catch {\n return [];\n }\n}\n\nfunction shouldIgnore(name: string, ignorePatterns: string[], defaultIgnore: string[]): boolean {\n const allPatterns = [...defaultIgnore, ...ignorePatterns];\n for (const pattern of allPatterns) {\n const cleanPattern = pattern.replace(/^\\//, \"\").replace(/\\/$/, \"\");\n if (name === cleanPattern) {\n return true;\n }\n if (pattern.startsWith(\"*\") && name.endsWith(pattern.slice(1))) {\n return true;\n }\n if (pattern.endsWith(\"*\") && name.startsWith(pattern.slice(0, -1))) {\n return true;\n }\n }\n return false;\n}\n\nasync function buildTree(\n dir: string,\n ignorePatterns: string[],\n maxDepth: number,\n currentDepth: number = 0,\n): Promise<TreeEntry[]> {\n if (maxDepth > 0 && currentDepth >= maxDepth) {\n return [];\n }\n\n const entries = await readdir(dir);\n const result: TreeEntry[] = [];\n\n for (const entry of entries) {\n if (shouldIgnore(entry, ignorePatterns, DEFAULT_IGNORE)) {\n continue;\n }\n\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n const isDirectory = stats.isDirectory();\n\n const treeEntry: TreeEntry = {\n name: entry,\n isDirectory,\n };\n\n if (isDirectory) {\n treeEntry.children = await buildTree(fullPath, ignorePatterns, maxDepth, currentDepth + 1);\n }\n\n result.push(treeEntry);\n }\n\n result.sort((a, b) => {\n if (a.isDirectory !== b.isDirectory) {\n return a.isDirectory ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n return result;\n}\n\nfunction renderTree(entries: TreeEntry[], isLast: boolean[] = []): string[] {\n const lines: string[] = [];\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]!;\n const isLastEntry = i === entries.length - 1;\n\n let linePrefix = \"\";\n for (const element_ of isLast) {\n linePrefix += element_ ? \" \" : \"│ \";\n }\n\n const connector = isLastEntry ? \"└── \" : \"├── \";\n const suffix = entry.isDirectory ? \"/\" : \"\";\n lines.push(`${linePrefix}${connector}${entry.name}${suffix}`);\n\n if (entry.children && entry.children.length > 0) {\n const childLines = renderTree(entry.children, [...isLast, isLastEntry]);\n lines.push(...childLines);\n }\n }\n\n return lines;\n}\n\nexport const dirTree = defineGenerator({\n name: \"dir-tree\",\n async generate({ args, config, url }) {\n const srcPath = args.src || \".\";\n const fullPath = resolvePath(srcPath, { url, dir: config.dir });\n\n const stats = await stat(fullPath);\n if (!stats.isDirectory()) {\n throw new Error(`Path \"${srcPath}\" is not a directory`);\n }\n\n const userIgnore: string[] = args.ignore\n ? String(args.ignore)\n .split(\",\")\n .map((s: string) => s.trim())\n : [];\n\n const gitignorePatterns = await parseGitignore(fullPath);\n const ignorePatterns = [...gitignorePatterns, ...userIgnore];\n\n const maxDepth = args.maxDepth ? Number(args.maxDepth) : 0;\n\n const tree = await buildTree(fullPath, ignorePatterns, maxDepth);\n const treeLines = renderTree(tree);\n\n const contents = \"```\\n\" + treeLines.join(\"\\n\") + \"\\n```\";\n\n return { contents };\n },\n});\n","import { defineGenerator } from \"../generator.ts\";\n\nexport const fetch = defineGenerator({\n name: \"fetch\",\n async generate({ args }) {\n const { $fetch } = await import(\"ofetch\");\n\n let url = args.url;\n if (!url) {\n throw new Error(\"URL is required!\");\n }\n if (url.startsWith(\"gh:\")) {\n url = `https://raw.githubusercontent.com/${url.slice(3)}`;\n }\n\n const contents = await $fetch(url);\n\n return {\n contents,\n };\n },\n});\n","import { readFile } from \"node:fs/promises\";\n\nimport { md } from \"mdbox\";\nimport { basename, extname } from \"pathe\";\n\nimport { resolvePath } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\nexport const file = defineGenerator({\n name: \"file\",\n async generate({ args, config, url }) {\n const fullPath = resolvePath(args.src, { url, dir: config.dir });\n let contents = await readFile(fullPath, \"utf8\");\n if (!args.noTrim) {\n contents = contents.trim();\n }\n\n if (args.lines) {\n const groups = /^(?<startLine>\\d+)?:(?<endLine>\\d+)?$/.exec(args.lines)?.groups;\n\n if (!groups) {\n throw new Error(\"invalid lines format\");\n }\n\n const lines = contents.split(\"\\n\");\n\n const startLine = Number(groups.startLine) || 1;\n const endLine = Number(groups.endLine) || (lines.length as number);\n\n if (startLine < 1) {\n throw new Error(\"first line's index can not be smaller than 1\");\n }\n\n contents = lines.slice(startLine - 1, endLine).join(\"\\n\");\n }\n\n if (args.code) {\n contents = md.codeBlock(contents, args.lang || extname(fullPath).slice(1), {\n // prettier-ignore\n ext: args.name === false ? undefined : (typeof args.name === 'string' ? args.name : `[${basename(fullPath)}]`),\n });\n }\n\n return {\n contents,\n };\n },\n});\n","import { titleCase } from \"scule\";\nimport type { Schema } from \"untyped\";\n\nimport { resolvePath } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\ntype RenderOptions = {\n group?: string | string[];\n defaultGroup?: string;\n};\n\nexport const jsdocs = defineGenerator({\n name: \"jsdocs\",\n async generate({ config, args, url }) {\n const { loadSchema } = await import(\"untyped/loader\");\n const fullPath = resolvePath(args.src, { url, dir: config.dir });\n\n const schema = await loadSchema(fullPath, {\n jiti: {\n // TODO: untyped should be able to reuse same jiti instance to avoid race conditions\n fsCache: false,\n moduleCache: false,\n },\n });\n\n return {\n contents: _render(schema, args as RenderOptions, Number.parseInt(args.headingLevel) || 2)\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\"),\n };\n },\n});\n\n// -- main renderer --\n\nfunction _render(schema: Schema, opts: RenderOptions, headingLevel: number) {\n const sections = Object.create(null) as Record<string, [string, string[]][]>;\n for (const [key, keySchema] of Object.entries(schema.properties || {})) {\n const section = _renderSection(key, keySchema, opts, headingLevel + 1);\n if (!section) {\n continue;\n }\n sections[section.group] = sections[section.group] || [];\n sections[section.group]!.push([section.heading, section.lines]);\n }\n\n const lines: string[] = [];\n\n const sortedGroups = Object.keys(sections).sort((a, b) => {\n if (a === \"\") {\n return 1;\n }\n if (b === \"\") {\n return -1;\n }\n return a.localeCompare(b);\n });\n for (const group of sortedGroups) {\n if (group) {\n lines.push(`\\n${\"#\".repeat(headingLevel)} ${titleCase(group)}\\n`);\n }\n const sortedSections = sections[group]!.sort((a, b) => a[0].localeCompare(b[0]));\n for (const section of sortedSections) {\n const heading = `\\n${\"#\".repeat(headingLevel + 1)} ${section[0]}\\n`;\n lines.push(heading, ...section[1]);\n }\n }\n\n return lines;\n}\n\n// --- section renderer ---\n\nfunction _renderSection(key: string, schema: Schema, opts: RenderOptions, headingLevel: number) {\n // Parse tag annotations\n const tags = _parseTags(schema.tags);\n\n // Ignore deprecated and intenral functions\n if (tags.some((t) => t.tag === \"@deprecated\" || t.tag === \"@internal\")) {\n return;\n }\n\n // Find group\n const group = tags.find((t) => t.tag === \"@group\")?.contents || opts.defaultGroup || \"\";\n\n // Filter by group if specified\n if (\n opts.group &&\n (typeof opts.group === \"string\" ? group !== opts.group : !opts.group.includes(group))\n ) {\n return;\n }\n\n let heading = `\\`${key}\\``;\n const lines: string[] = [];\n\n if (schema.type === \"function\") {\n // Function signature in heading\n heading = `\\`${_generateFunctionSig(key, schema)}\\``;\n } else if (schema.type !== \"object\") {\n // JS value\n lines.push(`- **Type**: \\`${schema.markdownType || schema.tsType || schema.type}\\``);\n if (\"default\" in schema) {\n lines.push(`- **Default**: \\`${JSON.stringify(schema.default)}\\``);\n }\n lines.push(\"\");\n }\n\n // Add body\n lines.push(..._renderBody(schema));\n\n // Render example tags\n for (const tag of tags) {\n if (tag.tag === \"@example\") {\n const codeBlock = tag.contents.startsWith(\"`\")\n ? tag.contents\n : `\\`\\`\\`ts\\n${tag.contents}\\n\\`\\`\\``;\n lines.push(\"\", \"**Example:**\", \"\", codeBlock);\n }\n }\n\n // Add object properties\n if (schema.type === \"object\") {\n lines.push(..._render(schema, opts, headingLevel));\n }\n\n return {\n heading,\n lines,\n group,\n };\n}\n\n// -- body ---\n\nfunction _renderBody(schema: Schema) {\n const lines: string[] = [];\n if (schema.title) {\n lines.push(schema.title.trim());\n }\n if (schema.title && schema.description) {\n // Insert an empty line between the title and the description to separate them.\n lines.push(\"\");\n }\n if (schema.description) {\n // Insert an empty line between each line of the description that contains a newline.\n lines.push(\n ...schema.description\n .split(\"\\n\")\n .map((line) => line.trim())\n .join(\"\\n\\n\")\n .split(\"\\n\"),\n );\n }\n\n return lines;\n}\n\n// --- tag parsing ---\n\nfunction _parseTags(lines: string[] = []) {\n const parsedTags: { tag: string; contents: string }[] = [];\n\n let tag = \"\";\n let contentLines: string[] = [];\n\n for (const line of lines.join(\"\\n\").split(\"\\n\")) {\n if (line.startsWith(\"@\")) {\n if (tag) {\n parsedTags.push({\n tag,\n contents: contentLines.join(\"\\n\"),\n });\n }\n const [_tag, ...rest] = line.split(\" \");\n tag = _tag!;\n contentLines = rest;\n } else {\n contentLines.push(line);\n }\n }\n\n if (tag) {\n parsedTags.push({ tag, contents: contentLines.join(\"\\n\") });\n }\n\n return parsedTags;\n}\n\n// --- function signature ---\n\nfunction _generateFunctionSig(name: string, meta: Schema) {\n return `${name}(${(meta.args || [])\n .map((arg) => {\n let str = arg.name;\n if (arg.optional) {\n str += \"?\";\n }\n const tsType = _simpleArgType(arg.tsType);\n if (tsType) {\n str += `: ${tsType}`;\n }\n return str;\n })\n .join(\", \")})`;\n}\n\nfunction _simpleArgType(tsType = \"\") {\n return tsType\n .split(/\\s*\\|\\s*/)\n .filter((t) => t && t !== \"object\" && t.startsWith(\"{\"))\n .map((ot) =>\n ot\n .split(/\\s*[,;]\\s*/g)\n .map((p) => p.replaceAll(/\\s*:\\s*(string|boolean|number)/g, \"\"))\n .join(\", \"),\n )\n .join(\" | \");\n}\n","import { readFile } from \"node:fs/promises\";\n\nimport { md } from \"mdbox\";\nimport { findExportNames, resolvePath } from \"mlly\";\n\nimport { getPkg } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\nconst DEFAULT_CDN = \"https://esm.sh/\";\n\nexport const jsimport = defineGenerator({\n name: \"jsimport\",\n async generate({ config, args }) {\n const { name } = await getPkg(config.dir, args);\n\n const importPath = name + (args.path || \"\");\n\n const importNames: string[] = ([] as string[])\n .concat(args.import, args.imports) // eslint-disable-line unicorn/prefer-spread\n .filter(Boolean)\n .flatMap((i) => i.split(/\\s*,\\s*/));\n\n if (args.src) {\n const resolved = await resolvePath(args.src, { url: config.dir });\n const contents = await readFile(resolved, \"utf8\");\n const exportNames = findExportNames(contents);\n if (exportNames && exportNames.length > 0) {\n importNames.push(...exportNames);\n }\n }\n\n const lines: string[] = [];\n\n const fmtImports =\n importNames.length > 1\n ? `\\n${importNames.map((i) => \" \" + i + \",\").join(\"\\n\")}\\n`\n : (importNames[0] && ` ${importNames[0]} `) || \"\";\n\n const formatMultiLine = (str: string) => {\n return str.length > (args.printWidth || 80)\n ? str\n : str\n .replace(/\\n/g, \"\")\n .replace(/,\\s*}/, \"}\")\n .replace(/(\\w)}/, \"$1 }\")\n .replace(/\\s+/g, \" \");\n };\n\n if (args.esm !== false) {\n const code = formatMultiLine(`import {${fmtImports}} from \"${importPath}\";`);\n lines.push(\"**ESM** (Node.js, Bun, Deno)\", md.codeBlock(code, \"js\"));\n }\n\n if (args.cjs) {\n const code = formatMultiLine(`const {${fmtImports}} = require(\"${importPath}\");`);\n lines.push(\"**CommonJS** (Legacy Node.js)\", md.codeBlock(code, \"js\"));\n }\n\n if (args.cdn) {\n const cdnBase = typeof args.cdn === \"string\" ? args.cdn : DEFAULT_CDN;\n const code = formatMultiLine(`import {${fmtImports}} from \"${cdnBase}${importPath}\";`);\n lines.push(\"**CDN** (Deno and Browsers)\", md.codeBlock(code, \"js\"));\n }\n\n return {\n contents: lines.join(\"\\n\\n\"),\n };\n },\n});\n","import { md } from \"mdbox\";\n\nimport { getPkg } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\nconst INSTALL_COMMANDS = [\n [\"npm\", \"install\"],\n [\"yarn\", \"add\"],\n [\"pnpm\", \"add\"],\n [\"bun\", \"install\"],\n [\"deno\", \"install\", \" --dev\", \"npm:\"],\n] as const;\n\nconst NYPM_COMMAND = [\"npx nypm\", \"install\"] as const;\n\nconst RUN_COMMANDS = [\n [\"npm\", \"npx \"],\n [\"pnpm\", \"pnpm dlx \"],\n [\"bun\", \"bunx \"],\n [\"deno\", \"deno run -A npm:\"],\n] as const;\n\nexport const pmInstall = defineGenerator({\n name: \"pm-install\",\n async generate({ config, args }) {\n const { name, version } = await getPkg(config.dir, args);\n\n if (!name) {\n return {\n contents: \"<!-- package name is unspecified -->\",\n };\n }\n\n let versionSuffix = \"\";\n if (args.version) {\n versionSuffix = typeof args.version === \"string\" ? `@${args.version}` : `@^${version}`;\n }\n\n const commands = args.auto === false ? INSTALL_COMMANDS : [NYPM_COMMAND, ...INSTALL_COMMANDS];\n\n const contents = commands.map(\n ([cmd, install, dev = \" -D\", pkgPrefix = \"\"]) =>\n // prettier-ignore\n `# ${cmd.includes(\"nypm\") ? \"✨ Auto-detect\" : cmd}\\n${cmd} ${install}${args.dev ? dev : (args.global ? \"g\" : \"\")} ${pkgPrefix}${name}${versionSuffix}`,\n );\n\n if ((args.separate ?? false) === false) {\n return {\n contents: md.codeBlock(contents.join(\"\\n\\n\"), \"sh\"),\n };\n }\n\n return {\n contents: contents.map((cmd) => md.codeBlock(cmd, \"sh\")).join(\"\\n\\n\"),\n };\n },\n});\n\nexport const pmX = defineGenerator({\n name: \"pm-x\",\n async generate({ config, args }) {\n const { name, version } = await getPkg(config.dir, args);\n\n if (!name) {\n return {\n contents: \"<!-- package name is unspecified -->\",\n };\n }\n\n let versionSuffix = \"\";\n if (args.version) {\n versionSuffix = typeof args.version === \"string\" ? `@${args.version}` : `@${version}`;\n }\n\n const contents = RUN_COMMANDS.map(\n ([pm, cmd]) => `# ${pm}\\n${cmd}${name}${versionSuffix}${args.args ? ` ${args.args}` : \"\"}`,\n );\n\n if ((args.separate ?? false) === false) {\n return {\n contents: md.codeBlock(contents.join(\"\\n\\n\"), \"sh\"),\n };\n }\n\n return {\n contents: contents.map((cmd) => md.codeBlock(cmd, \"sh\")).join(\"\\n\\n\"),\n };\n },\n});\n","import { defineGenerator } from \"../generator.ts\";\n\nexport const withAutomd = defineGenerator({\n name: \"with-automd\",\n generate({ args }) {\n const lastUpdate = args.lastUpdate\n ? ` (last updated: ${typeof args.lastUpdate === \"string\" ? args.lastUpdate : new Date().toDateString()})`\n : \"\";\n\n const emoji = args.emoji === false ? \"\" : \"🤖 \";\n\n const lines: string[] = [];\n\n if (args.separator !== false) {\n lines.push(\"---\", \"\");\n }\n\n lines.push(`_${emoji}auto updated with [automd](https://automd.unjs.io)${lastUpdate}_`);\n\n return {\n contents: lines.join(\"\\n\"),\n };\n },\n});\n","import type { Generator } from \"../generator.ts\";\nimport { badges } from \"./badges.ts\";\nimport { contributors } from \"./contributors.ts\";\nimport { dirTree } from \"./dir-tree.ts\";\nimport { fetch as _fetch } from \"./fetch.ts\";\nimport { file } from \"./file.ts\";\nimport { jsdocs } from \"./jsdocs.ts\";\nimport { jsimport } from \"./jsimport.ts\";\nimport { pmX, pmInstall } from \"./pm.ts\";\nimport { withAutomd } from \"./with-automd.ts\";\n\nexport default {\n jsdocs,\n badges,\n \"pm-i\": pmInstall,\n \"pm-install\": pmInstall,\n \"pm-x\": pmX,\n fetch: _fetch,\n file,\n jsimport,\n \"with-automd\": withAutomd,\n contributors,\n \"dir-tree\": dirTree,\n} as Record<string, Generator>;\n","import MagicString from \"magic-string\";\n\nimport { type Block, containsAutomd, findBlocks, parseRawArgs } from \"./_parse.ts\";\nimport { type Config, type ResolvedConfig, resolveConfig } from \"./config.ts\";\nimport type { GenerateContext, GenerateResult } from \"./generator.ts\";\nimport builtinGenerators from \"./generators/index.ts\";\n\nexport interface TransformResult {\n /** Wether if the document has been modified at all. */\n hasChanged: boolean;\n\n /** Whether if there were any problems found in the document. */\n hasIssues: boolean;\n\n /** The text of the document after it was transformed. */\n contents: string;\n\n /** A list of specific parts that have been transformed in the document. */\n updates: {\n /** The specific part of the document that has been transformed. */\n block: Block;\n\n /** What the transform has done to this part of the document. */\n result: GenerateResult;\n }[];\n\n /** How long the editing process took, measured in milliseconds. */\n time: number;\n}\n\n/**\n * Edits a markdown document based on certain rules and configurations.\n *\n * @param contents - The text of the markdown document you want to edit.\n * @param _config - Optional. The settings that affect how the document will be edited. See\n * {@link Config}.\n * @param url - Optional. The URL associated with the document, if any.\n * @returns - The result of the transformation, including any changes made and how long it took. See\n * {@link TransformResult}.\n */\nexport async function transform(\n contents: string,\n _config?: Config,\n url?: string,\n): Promise<TransformResult> {\n const start = performance.now();\n const config = resolveConfig(_config);\n\n const editor = new MagicString(contents);\n\n const updates: TransformResult[\"updates\"] = [];\n\n const generators = {\n ...builtinGenerators,\n ...config.generators,\n };\n\n const blocks = findBlocks(contents);\n\n for (const block of blocks) {\n const result = await _transformBlock(block, config, generators, url);\n if (result.unwrap) {\n editor.overwrite(block._loc.start, block._loc.end, `${result.contents.trim()}`);\n } else {\n editor.overwrite(block.loc.start, block.loc.end, `\\n\\n${result.contents.trim()}\\n\\n`);\n }\n updates.push({ block, result });\n }\n\n const hasChanged = editor.hasChanged();\n const hasIssues = updates.some((u) => u.result.issues?.filter(Boolean).length);\n const time = performance.now() - start;\n\n return {\n hasChanged,\n hasIssues,\n contents: hasChanged ? editor.toString() : contents,\n updates,\n time,\n };\n}\n\nasync function _transformBlock(\n block: Block,\n config: ResolvedConfig,\n generators: Record<string, any>,\n url?: string,\n): Promise<GenerateResult> {\n const args = parseRawArgs(block.rawArgs);\n const generator = generators[block.generator];\n\n if (!generator) {\n const didYouMean = await import(\"didyoumean2\").then((r) => r.default || r);\n const suggestions = didYouMean(block.generator, Object.keys(generators));\n const error = `Unknown generator:\\`${block.generator}\\`.${suggestions ? ` Did you mean \"generator:\\`${suggestions}\\`\"?` : \"\"}`;\n return {\n contents: `<!-- ⚠️ ${error} -->`,\n issues: [error],\n };\n }\n\n const context: GenerateContext = {\n args,\n config,\n block,\n transform: (contents: string) => transform(contents, config, url),\n url,\n };\n\n try {\n const result = (await generator.generate(context)) as GenerateResult;\n\n if (!result.unwrap && containsAutomd(result.contents)) {\n result.unwrap = true;\n }\n if (result.unwrap) {\n const nestedRes = await context.transform(result.contents);\n result.contents = nestedRes.contents;\n // TODO: inherit time, issues, etc.\n if (nestedRes.hasIssues) {\n result.issues = [\n ...(result.issues || []),\n ...nestedRes.updates.flatMap((u) => u.result.issues || []),\n ].filter(Boolean);\n }\n }\n\n return result;\n } catch (error: any) {\n return {\n contents: `<!-- ⚠️ (${block.generator}) ${error.message || error} -->`,\n issues: [error],\n };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /*! Keep it simple, keep it free */
2
+ import { f as TransformResult, p as transform } from "./automd-C2wjw_SG.js";
3
+ export { TransformResult, transform };
4
+ /*! Built with love & coffee ☕ */
@@ -0,0 +1,6 @@
1
+ /*! Keep it simple, keep it free */
2
+ import "./config.js";
3
+ import { t as transform } from "./transform-BOfYBrHa.js";
4
+ export { transform };
5
+
6
+ /*! Built with love & coffee ☕ */
package/package.json CHANGED
@@ -1,14 +1,13 @@
1
1
  {
2
2
  "name": "@bjmhe/automd",
3
- "version": "0.0.0",
4
- "automdVersion": "0.4.3",
3
+ "version": "0.0.4",
5
4
  "description": "Your automated markdown maintainer!",
6
5
  "keywords": [
7
- "automd",
8
- "markdown",
9
6
  "automation",
7
+ "automd",
10
8
  "documentation",
11
- "generator"
9
+ "generator",
10
+ "markdown"
12
11
  ],
13
12
  "homepage": "https://github.com/bjmhe/automd#readme",
14
13
  "bugs": {
@@ -20,29 +19,31 @@
20
19
  "type": "git",
21
20
  "url": "git+https://github.com/bjmhe/automd.git"
22
21
  },
22
+ "bin": {
23
+ "automd": "./dist/cli.js"
24
+ },
23
25
  "files": [
24
26
  "dist"
25
27
  ],
26
28
  "type": "module",
27
29
  "sideEffects": false,
30
+ "main": "./dist/index.js",
31
+ "module": "./dist/index.js",
28
32
  "types": "./dist/index.d.ts",
29
33
  "exports": {
30
34
  ".": "./dist/index.js",
35
+ "./_parse": "./dist/_parse.js",
36
+ "./_utils": "./dist/_utils.js",
37
+ "./automd": "./dist/automd.js",
38
+ "./cli": "./dist/cli.js",
39
+ "./config": "./dist/config.js",
40
+ "./generator": "./dist/generator.js",
41
+ "./transform": "./dist/transform.js",
31
42
  "./package.json": "./package.json"
32
43
  },
33
- "bin": {
34
- "automd": "dist/cli.mjs"
35
- },
36
44
  "publishConfig": {
37
45
  "access": "public"
38
46
  },
39
- "scripts": {
40
- "automd": "node src/cli.ts",
41
- "build": "vp pack",
42
- "dev": "vp pack --watch",
43
- "release": "bumpp",
44
- "prepublishOnly": "vp run build"
45
- },
46
47
  "dependencies": {
47
48
  "@parcel/watcher": "^2.5.6",
48
49
  "c12": "^3.3.3",
@@ -81,7 +82,11 @@
81
82
  "engines": {
82
83
  "node": ">=24.16.0"
83
84
  },
84
- "packageManager": "pnpm@11.4.0",
85
- "main": "./dist/index.js",
86
- "module": "./dist/index.js"
87
- }
85
+ "automdVersion": "0.4.3",
86
+ "scripts": {
87
+ "automd": "node src/cli.ts",
88
+ "build": "vp pack",
89
+ "dev": "vp pack --watch",
90
+ "release": "bumpp"
91
+ }
92
+ }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":["resolvePath","resolvePath","resolvePath","resolvePath","_fetch","builtinGenerators","fsp"],"sources":["../src/generator.ts","../src/_utils.ts","../src/generators/jsdocs.ts","../src/generators/badges.ts","../src/generators/pm.ts","../src/generators/fetch.ts","../src/generators/jsimport.ts","../src/generators/with-automd.ts","../src/generators/file.ts","../src/generators/contributors.ts","../src/generators/dir-tree.ts","../src/generators/index.ts","../src/_parse.ts","../src/config.ts","../src/transform.ts","../src/automd.ts"],"sourcesContent":["import type { Block } from \"./_parse.ts\";\nimport type { ResolvedConfig } from \"./config.ts\";\nimport type { TransformResult } from \"./transform.ts\";\n\nexport interface GenerateContext {\n args: Record<string, any>;\n config: ResolvedConfig;\n block: Block;\n url?: string;\n transform: (contents: string) => Promise<TransformResult>;\n}\n\n/**\n * The result of generating a component.\n */\nexport interface GenerateResult {\n /**\n * The generated component\n */\n contents: string;\n\n /**\n * A list of issues that occurred during generation.\n */\n issues?: string[];\n\n /**\n * Whether to unwrap the component.\n */\n unwrap?: boolean;\n}\n\nexport interface Generator {\n name: string;\n generate: (ctx: GenerateContext) => GenerateResult | Promise<GenerateResult>;\n}\n\n/**\n * @internal\n */\nexport function defineGenerator(generator: Generator) {\n return generator;\n}\n","import type { PackageJson } from \"pkg-types\";\nimport { readPackageJSON } from \"pkg-types\";\nimport { defu } from \"defu\";\nimport { fileURLToPath } from \"mlly\";\nimport { resolve, join } from \"pathe\";\n\nexport function resolvePath(path: string, { url, dir }: { url?: string; dir: string }) {\n if (path.startsWith(\"/\")) {\n return join(dir, path);\n }\n return url ? fileURLToPath(new URL(path, url)) : resolve(dir, path);\n}\n\nexport async function getPkg(dir: string, input: Record<string, string> = {}) {\n const pkg = await readPackageJSON(dir).catch(() => undefined);\n return defu(\n {\n name: input.name,\n version: typeof input.version === \"string\" ? input.version : undefined,\n github: input.github || input.gh,\n },\n {\n name: pkg?.name,\n version: pkg?.version,\n github: _getGitRepo(pkg?.repository),\n },\n {\n name: process.env.npm_package_name,\n version: process.env.npm_package_version,\n },\n );\n}\n\nfunction _getGitRepo(repo: PackageJson[\"repository\"]) {\n const url = typeof repo === \"string\" ? repo : repo?.url;\n if (!url || typeof url !== \"string\") {\n return;\n }\n const match = /(?:https:\\/\\/github\\.com\\/|gh:|github:|)([\\w-]+)\\/([\\w-]+)/.exec(url);\n if (match && match[1] && match[2]) {\n return `${match[1]}/${match[2]}`;\n }\n}\n","import type { Schema } from \"untyped\";\nimport { titleCase } from \"scule\";\nimport { defineGenerator } from \"../generator.ts\";\nimport { resolvePath } from \"../_utils.ts\";\n\ntype RenderOptions = {\n group?: string | string[];\n defaultGroup?: string;\n};\n\nexport const jsdocs = defineGenerator({\n name: \"jsdocs\",\n async generate({ config, args, url }) {\n const { loadSchema } = await import(\"untyped/loader\");\n const fullPath = resolvePath(args.src, { url, dir: config.dir });\n\n const schema = await loadSchema(fullPath, {\n jiti: {\n // TODO: untyped should be able to reuse same jiti instance to avoid race conditions\n fsCache: false,\n moduleCache: false,\n },\n });\n\n return {\n contents: _render(schema, args as RenderOptions, Number.parseInt(args.headingLevel) || 2)\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\"),\n };\n },\n});\n\n// -- main renderer --\n\nfunction _render(schema: Schema, opts: RenderOptions, headingLevel: number) {\n const sections = Object.create(null) as Record<string, [string, string[]][]>;\n for (const [key, keySchema] of Object.entries(schema.properties || {})) {\n const section = _renderSection(key, keySchema, opts, headingLevel + 1);\n if (!section) {\n continue;\n }\n sections[section.group] = sections[section.group] || [];\n sections[section.group]!.push([section.heading, section.lines]);\n }\n\n const lines: string[] = [];\n\n const sortedGroups = Object.keys(sections).sort((a, b) => {\n if (a === \"\") {\n return 1;\n }\n if (b === \"\") {\n return -1;\n }\n return a.localeCompare(b);\n });\n for (const group of sortedGroups) {\n if (group) {\n lines.push(`\\n${\"#\".repeat(headingLevel)} ${titleCase(group)}\\n`);\n }\n const sortedSections = sections[group]!.sort((a, b) => a[0].localeCompare(b[0]));\n for (const section of sortedSections) {\n const heading = `\\n${\"#\".repeat(headingLevel + 1)} ${section[0]}\\n`;\n lines.push(heading, ...section[1]);\n }\n }\n\n return lines;\n}\n\n// --- section renderer ---\n\nfunction _renderSection(key: string, schema: Schema, opts: RenderOptions, headingLevel: number) {\n // Parse tag annotations\n const tags = _parseTags(schema.tags);\n\n // Ignore deprecated and intenral functions\n if (tags.some((t) => t.tag === \"@deprecated\" || t.tag === \"@internal\")) {\n return;\n }\n\n // Find group\n const group = tags.find((t) => t.tag === \"@group\")?.contents || opts.defaultGroup || \"\";\n\n // Filter by group if specified\n if (\n opts.group &&\n (typeof opts.group === \"string\" ? group !== opts.group : !opts.group.includes(group))\n ) {\n return;\n }\n\n let heading = `\\`${key}\\``;\n const lines: string[] = [];\n\n if (schema.type === \"function\") {\n // Function signature in heading\n heading = `\\`${_generateFunctionSig(key, schema)}\\``;\n } else if (schema.type !== \"object\") {\n // JS value\n lines.push(`- **Type**: \\`${schema.markdownType || schema.tsType || schema.type}\\``);\n if (\"default\" in schema) {\n lines.push(`- **Default**: \\`${JSON.stringify(schema.default)}\\``);\n }\n lines.push(\"\");\n }\n\n // Add body\n lines.push(..._renderBody(schema));\n\n // Render example tags\n for (const tag of tags) {\n if (tag.tag === \"@example\") {\n const codeBlock = tag.contents.startsWith(\"`\")\n ? tag.contents\n : `\\`\\`\\`ts\\n${tag.contents}\\n\\`\\`\\``;\n lines.push(\"\", \"**Example:**\", \"\", codeBlock);\n }\n }\n\n // Add object properties\n if (schema.type === \"object\") {\n lines.push(..._render(schema, opts, headingLevel));\n }\n\n return {\n heading,\n lines,\n group,\n };\n}\n\n// -- body ---\n\nfunction _renderBody(schema: Schema) {\n const lines: string[] = [];\n if (schema.title) {\n lines.push(schema.title.trim());\n }\n if (schema.title && schema.description) {\n // Insert an empty line between the title and the description to separate them.\n lines.push(\"\");\n }\n if (schema.description) {\n // Insert an empty line between each line of the description that contains a newline.\n lines.push(\n ...schema.description\n .split(\"\\n\")\n .map((line) => line.trim())\n .join(\"\\n\\n\")\n .split(\"\\n\"),\n );\n }\n\n return lines;\n}\n\n// --- tag parsing ---\n\nfunction _parseTags(lines: string[] = []) {\n const parsedTags: { tag: string; contents: string }[] = [];\n\n let tag = \"\";\n let contentLines: string[] = [];\n\n for (const line of lines.join(\"\\n\").split(\"\\n\")) {\n if (line.startsWith(\"@\")) {\n if (tag) {\n parsedTags.push({\n tag,\n contents: contentLines.join(\"\\n\"),\n });\n }\n const [_tag, ...rest] = line.split(\" \");\n tag = _tag!;\n contentLines = rest;\n } else {\n contentLines.push(line);\n }\n }\n\n if (tag) {\n parsedTags.push({ tag, contents: contentLines.join(\"\\n\") });\n }\n\n return parsedTags;\n}\n\n// --- function signature ---\n\nfunction _generateFunctionSig(name: string, meta: Schema) {\n return `${name}(${(meta.args || [])\n .map((arg) => {\n let str = arg.name;\n if (arg.optional) {\n str += \"?\";\n }\n const tsType = _simpleArgType(arg.tsType);\n if (tsType) {\n str += `: ${tsType}`;\n }\n return str;\n })\n .join(\", \")})`;\n}\n\nfunction _simpleArgType(tsType = \"\") {\n return tsType\n .split(/\\s*\\|\\s*/)\n .filter((t) => t && t !== \"object\" && t.startsWith(\"{\"))\n .map((ot) =>\n ot\n .split(/\\s*[,;]\\s*/g)\n .map((p) => p.replaceAll(/\\s*:\\s*(string|boolean|number)/g, \"\"))\n .join(\", \"),\n )\n .join(\" | \");\n}\n","import { image, link } from \"mdbox\";\nimport { defineGenerator } from \"../generator.ts\";\nimport { getPkg } from \"../_utils.ts\";\n\ntype BadgeType = keyof typeof badgeTypes;\ntype BadgeProvider = Record<BadgeType, string | false>;\n\nconst badgeTypes = {\n npmVersion: {\n name: \"npm version\",\n to: \"https://npmjs.com/package/{name}\",\n },\n npmDownloads: {\n name: \"npm downloads\",\n to: \"https://npm.chart.dev/{name}\",\n },\n bundlephobia: {\n name: \"bundle size\",\n to: \"https://bundlephobia.com/package/{name}\",\n },\n bundlejs: {\n name: \"bundle size\",\n to: \"https://bundlejs.com/?q={name}\",\n },\n packagephobia: {\n name: \"install size\",\n to: \"https://packagephobia.com/result?p={name}\",\n },\n codecov: {\n name: \"codecov\",\n to: \"https://codecov.io/gh/{github}\",\n },\n license: {\n name: \"license\",\n to: \"https://github.com/{github}/blob/{licenseBranch}/LICENSE\",\n },\n engine: {\n name: \"engine\",\n to: \"https://npmx.dev/api/registry/badge/engines/{name}\",\n }\n};\n\nconst badgeProviders: Record<string, BadgeProvider> = {\n // https://shields.io/badges/static-badge\n shields: {\n npmVersion: \"https://img.shields.io/npm/v/{name}\",\n npmDownloads: \"https://img.shields.io/npm/dm/{name}\",\n bundlephobia: \"https://img.shields.io/bundlephobia/minzip/{name}\",\n packagephobia: \"https://badgen.net/packagephobia/install/{name}\", // https://github.com/badges/shields/issues/1701\n bundlejs: \"https://img.shields.io/bundlejs/size/{name}\",\n codecov: \"https://img.shields.io/codecov/c/gh/{github}\",\n license: \"https://img.shields.io/github/license/{github}\",\n engine: false,\n },\n // https://badgen.net/help\n badgen: {\n npmVersion: \"https://flat.badgen.net/npm/v/{name}\",\n npmDownloads: \"https://flat.badgen.net/npm/dm/{name}\",\n bundlephobia: \"https://flat.badgen.net/bundlephobia/minzip/{name}\",\n bundlejs: false, // https://github.com/badgen/badgen/issues/82\n packagephobia: \"https://flat.badgen.net/packagephobia/install/{name}\",\n codecov: \"https://flat.badgen.net/codecov/c/github/{github}\",\n license: \"https://flat.badgen.net/github/license/{github}\",\n engine: false,\n },\n badgenClassic: {\n npmVersion: \"https://badgen.net/npm/v/{name}\",\n npmDownloads: \"https://badgen.net/npm/dm/{name}\",\n bundlephobia: \"https://badgen.net/bundlephobia/minzip/{name}\",\n bundlejs: false, // https://github.com/badgen/badgen/issues/82\n packagephobia: \"https://badgen.net/packagephobia/install/{name}\",\n codecov: \"https://badgen.net/codecov/c/github/{github}\",\n license: \"https://badgen.net/github/license/{github}\",\n engine: false,\n },\n npmx: {\n npmVersion: \"https://npmx.dev/api/registry/badge/version/{name}\",\n npmDownloads: \"https://npmx.dev/api/registry/badge/downloads/{name}\",\n bundlephobia: \"https://npmx.dev/api/registry/badge/size/{name}\",\n bundlejs: false,\n packagephobia: false,\n codecov: false,\n license: \"https://npmx.dev/api/registry/badge/license/{name}\",\n engine: \"https://npmx.dev/api/registry/badge/engines/{name}\",\n },\n};\n\nexport const badges = defineGenerator({\n name: \"badges\",\n async generate({ config, args }) {\n const pkg = await getPkg(config.dir, args);\n const ctx: Record<string, any> = {\n name: pkg.name,\n github: pkg.github,\n licenseBranch: \"main\",\n ...args,\n };\n\n const fillStr = (str: string) => str.replace(/{(\\w+)}/g, (_, key) => ctx[key] || \"\");\n\n const provider = badgeProviders[args.provider]! || badgeProviders.shields;\n const providerParams = Object.entries({\n color: args.color,\n labelColor: args.labelColor,\n ...args.styleParams,\n })\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n const badges = {\n npmVersion: {\n enabled: ctx.name && args.npmVersion !== false,\n ...badgeTypes.npmVersion,\n },\n npmDownloads: {\n enabled: ctx.name && args.npmDownloads !== false,\n ...badgeTypes.npmDownloads,\n },\n bundlephobia: {\n enabled: args.bundlephobia && ctx.name,\n ...badgeTypes.bundlephobia,\n },\n bundlejs: {\n enabled: args.bundlejs && ctx.name,\n ...badgeTypes.bundlejs,\n },\n packagephobia: {\n enabled: args.packagephobia && ctx.name,\n ...badgeTypes.packagephobia,\n },\n codecov: {\n enabled: args.codecov && ctx.github,\n ...badgeTypes.codecov,\n },\n license: {\n enabled: args.license && ctx.github,\n ...badgeTypes.license,\n },\n engine: {\n enabled: args.engine && ctx.name,\n ...badgeTypes.engine,\n },\n } as const;\n\n const md: string[] = [];\n\n for (const [badgeType, badge] of Object.entries(badges)) {\n if (!badge.enabled || !provider[badgeType as BadgeType]) {\n continue;\n }\n const to = fillStr(badge.to);\n const imgURL =\n fillStr(provider[badgeType as BadgeType] as string) +\n (providerParams ? `?${providerParams}` : \"\");\n md.push(link(to, image(imgURL, badge.name)));\n }\n\n return {\n contents: md.join(\"\\n\"),\n };\n },\n});\n","import { md } from \"mdbox\";\nimport { defineGenerator } from \"../generator.ts\";\nimport { getPkg } from \"../_utils.ts\";\n\nconst INSTALL_COMMANDS = [\n [\"npm\", \"install\"],\n [\"yarn\", \"add\"],\n [\"pnpm\", \"add\"],\n [\"bun\", \"install\"],\n [\"deno\", \"install\", \" --dev\", \"npm:\"],\n] as const;\n\nconst NYPM_COMMAND = [\"npx nypm\", \"install\"] as const;\n\nconst RUN_COMMANDS = [\n [\"npm\", \"npx \"],\n [\"pnpm\", \"pnpm dlx \"],\n [\"bun\", \"bunx \"],\n [\"deno\", \"deno run -A npm:\"],\n] as const;\n\nexport const pmInstall = defineGenerator({\n name: \"pm-install\",\n async generate({ config, args }) {\n const { name, version } = await getPkg(config.dir, args);\n\n if (!name) {\n return {\n contents: \"<!-- package name is unspecified -->\",\n };\n }\n\n let versionSuffix = \"\";\n if (args.version) {\n versionSuffix = typeof args.version === \"string\" ? `@${args.version}` : `@^${version}`;\n }\n\n const commands = args.auto === false ? INSTALL_COMMANDS : [NYPM_COMMAND, ...INSTALL_COMMANDS];\n\n const contents = commands.map(\n ([cmd, install, dev = \" -D\", pkgPrefix = \"\"]) =>\n // prettier-ignore\n `# ${cmd.includes(\"nypm\") ? \"✨ Auto-detect\" : cmd}\\n${cmd} ${install}${args.dev ? dev : (args.global ? \"g\" : \"\")} ${pkgPrefix}${name}${versionSuffix}`,\n );\n\n if ((args.separate ?? false) === false) {\n return {\n contents: md.codeBlock(contents.join(\"\\n\\n\"), \"sh\"),\n };\n }\n\n return {\n contents: contents.map((cmd) => md.codeBlock(cmd, \"sh\")).join(\"\\n\\n\"),\n };\n },\n});\n\nexport const pmX = defineGenerator({\n name: \"pm-x\",\n async generate({ config, args }) {\n const { name, version } = await getPkg(config.dir, args);\n\n if (!name) {\n return {\n contents: \"<!-- package name is unspecified -->\",\n };\n }\n\n let versionSuffix = \"\";\n if (args.version) {\n versionSuffix = typeof args.version === \"string\" ? `@${args.version}` : `@${version}`;\n }\n\n const contents = RUN_COMMANDS.map(\n ([pm, cmd]) => `# ${pm}\\n${cmd}${name}${versionSuffix}${args.args ? ` ${args.args}` : \"\"}`,\n );\n\n if ((args.separate ?? false) === false) {\n return {\n contents: md.codeBlock(contents.join(\"\\n\\n\"), \"sh\"),\n };\n }\n\n return {\n contents: contents.map((cmd) => md.codeBlock(cmd, \"sh\")).join(\"\\n\\n\"),\n };\n },\n});\n","import { defineGenerator } from \"../generator.ts\";\n\nexport const fetch = defineGenerator({\n name: \"fetch\",\n async generate({ args }) {\n const { $fetch } = await import(\"ofetch\");\n\n let url = args.url;\n if (!url) {\n throw new Error(\"URL is required!\");\n }\n if (url.startsWith(\"gh:\")) {\n url = `https://raw.githubusercontent.com/${url.slice(3)}`;\n }\n\n const contents = await $fetch(url);\n\n return {\n contents,\n };\n },\n});\n","import { readFile } from \"node:fs/promises\";\nimport { md } from \"mdbox\";\nimport { findExportNames, resolvePath } from \"mlly\";\nimport { getPkg } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\nconst DEFAULT_CDN = \"https://esm.sh/\";\n\nexport const jsimport = defineGenerator({\n name: \"jsimport\",\n async generate({ config, args }) {\n const { name } = await getPkg(config.dir, args);\n\n const importPath = name + (args.path || \"\");\n\n const importNames: string[] = ([] as string[])\n .concat(args.import, args.imports) // eslint-disable-line unicorn/prefer-spread\n .filter(Boolean)\n .flatMap((i) => i.split(/\\s*,\\s*/));\n\n if (args.src) {\n const resolved = await resolvePath(args.src, { url: config.dir });\n const contents = await readFile(resolved, \"utf8\");\n const exportNames = findExportNames(contents);\n if (exportNames && exportNames.length > 0) {\n importNames.push(...exportNames);\n }\n }\n\n const lines: string[] = [];\n\n const fmtImports =\n importNames.length > 1\n ? `\\n${importNames.map((i) => \" \" + i + \",\").join(\"\\n\")}\\n`\n : (importNames[0] && ` ${importNames[0]} `) || \"\";\n\n const formatMultiLine = (str: string) => {\n return str.length > (args.printWidth || 80)\n ? str\n : str\n .replace(/\\n/g, \"\")\n .replace(/,\\s*}/, \"}\")\n .replace(/(\\w)}/, \"$1 }\")\n .replace(/\\s+/g, \" \");\n };\n\n if (args.esm !== false) {\n const code = formatMultiLine(`import {${fmtImports}} from \"${importPath}\";`);\n lines.push(\"**ESM** (Node.js, Bun, Deno)\", md.codeBlock(code, \"js\"));\n }\n\n if (args.cjs) {\n const code = formatMultiLine(`const {${fmtImports}} = require(\"${importPath}\");`);\n lines.push(\"**CommonJS** (Legacy Node.js)\", md.codeBlock(code, \"js\"));\n }\n\n if (args.cdn) {\n const cdnBase = typeof args.cdn === \"string\" ? args.cdn : DEFAULT_CDN;\n const code = formatMultiLine(`import {${fmtImports}} from \"${cdnBase}${importPath}\";`);\n lines.push(\"**CDN** (Deno and Browsers)\", md.codeBlock(code, \"js\"));\n }\n\n return {\n contents: lines.join(\"\\n\\n\"),\n };\n },\n});\n","import { defineGenerator } from \"../generator.ts\";\n\nexport const withAutomd = defineGenerator({\n name: \"with-automd\",\n generate({ args }) {\n const lastUpdate = args.lastUpdate\n ? ` (last updated: ${typeof args.lastUpdate === \"string\" ? args.lastUpdate : new Date().toDateString()})`\n : \"\";\n\n const emoji = args.emoji === false ? \"\" : \"🤖 \";\n\n const lines: string[] = [];\n\n if (args.separator !== false) {\n lines.push(\"---\", \"\");\n }\n\n lines.push(`_${emoji}auto updated with [automd](https://automd.unjs.io)${lastUpdate}_`);\n\n return {\n contents: lines.join(\"\\n\"),\n };\n },\n});\n","import { readFile } from \"node:fs/promises\";\nimport { basename, extname } from \"pathe\";\nimport { md } from \"mdbox\";\nimport { defineGenerator } from \"../generator.ts\";\nimport { resolvePath } from \"../_utils.ts\";\n\nexport const file = defineGenerator({\n name: \"file\",\n async generate({ args, config, url }) {\n const fullPath = resolvePath(args.src, { url, dir: config.dir });\n let contents = await readFile(fullPath, \"utf8\");\n if (!args.noTrim) {\n contents = contents.trim();\n }\n\n if (args.lines) {\n const groups = /^(?<startLine>\\d+)?:(?<endLine>\\d+)?$/.exec(args.lines)?.groups;\n\n if (!groups) {\n throw new Error(\"invalid lines format\");\n }\n\n const lines = contents.split(\"\\n\");\n\n const startLine = Number(groups.startLine) || 1;\n const endLine = Number(groups.endLine) || (lines.length as number);\n\n if (startLine < 1) {\n throw new Error(\"first line's index can not be smaller than 1\");\n }\n\n contents = lines.slice(startLine - 1, endLine).join(\"\\n\");\n }\n\n if (args.code) {\n contents = md.codeBlock(contents, args.lang || extname(fullPath).slice(1), {\n // prettier-ignore\n ext: args.name === false ? undefined : (typeof args.name === 'string' ? args.name : `[${basename(fullPath)}]`),\n });\n }\n\n return {\n contents,\n };\n },\n});\n","import { getPkg } from \"../_utils.ts\";\nimport { defineGenerator } from \"../generator.ts\";\n\nconst PROVIDERS = {\n CONTRIB_ROCKS: \"contrib.rocks\",\n MARKUPGO: \"markupgo\",\n};\n\nexport const contributors = defineGenerator({\n name: \"contributors\",\n async generate({ config, args }) {\n const { github } = await getPkg(config.dir, args);\n const provider = args.provider || PROVIDERS.CONTRIB_ROCKS;\n\n if (!github) {\n throw new Error(\"`github` is required!\");\n }\n\n const lines: string[] = [];\n\n // License\n if (typeof args.license === \"string\") {\n lines.push(\n `Published under the [${args.license.toUpperCase()}](https://github.com/${github}/blob/main/LICENSE) license.`,\n );\n }\n\n // Made by\n let madeBy = `[community](https://github.com/${github}/graphs/contributors) 💛`;\n if (typeof args.author === \"string\") {\n const authors = args.author\n .split(\",\")\n .map((author) => author.trim())\n .map((user) => `[@${user}](https://github.com/${user})`)\n .join(\", \");\n if (authors.length > 0) {\n madeBy = `${authors} and ${madeBy}`;\n }\n }\n lines.push(`Made by ${madeBy}`);\n\n // Contributors\n if (provider === PROVIDERS.MARKUPGO) {\n const params = [];\n\n args = {\n circleSize: \"64\",\n center: \"true\",\n ...args,\n };\n\n if (Number(args.max) >= 0) {\n params.push([\"count\", args.max]);\n }\n\n if (Number(args.width)) {\n params.push([\"width\", args.width]);\n }\n\n if (Number(args.circleSize)) {\n params.push([\"circleSize\", args.circleSize]);\n }\n\n if (Number(args.circleRadius)) {\n params.push([\"circleRadius\", args.circleRadius]);\n }\n\n if (Number(args.circleSpacing)) {\n params.push([\"circleSpacing\", args.circleSpacing]);\n }\n\n if (args.center) {\n params.push([\"center\", Boolean(args.center).toString()]);\n }\n\n if (!args.markupGoLogo) {\n params.push([\"removeLogo\", \"true\"]);\n }\n\n if (args.anon) {\n params.push([\"anon\", Boolean(args.anon).toString()]);\n }\n\n let paramsStr = params.map(([k, v]) => `${k}=${v}`).join(\"&\");\n\n paramsStr = paramsStr ? `?${paramsStr}` : \"\";\n\n lines.push(\n `<br><br>`,\n `<a href=\"https://github.com/${github}/graphs/contributors\">`,\n `<img src=\"https://markupgo.com/github/${github}/contributors${paramsStr}\" />`,\n `</a>`,\n );\n } else {\n const params = [[\"repo\", github]];\n if (args.max) {\n params.push([\"max\", args.max]);\n }\n if (args.anon) {\n params.push([\"anon\", args.anon]);\n }\n const paramsStr = params.map(([k, v]) => `${k}=${v}`).join(\"&\");\n lines.push(\n `<br><br>`,\n `<a href=\"https://github.com/${github}/graphs/contributors\">`,\n `<img src=\"https://contrib.rocks/image?${paramsStr}\" />`,\n `</a>`,\n );\n }\n\n return {\n contents: lines.join(\"\\n\"),\n };\n },\n});\n","import { readdir, stat, readFile } from \"node:fs/promises\";\nimport { join } from \"pathe\";\nimport { defineGenerator } from \"../generator.ts\";\nimport { resolvePath } from \"../_utils.ts\";\n\ninterface TreeEntry {\n name: string;\n isDirectory: boolean;\n children?: TreeEntry[];\n}\n\nconst DEFAULT_IGNORE = [\n \"node_modules\",\n \".git\",\n \".DS_Store\",\n \".nuxt\",\n \".output\",\n \".nitro\",\n \"dist\",\n \"coverage\",\n \".cache\",\n \".turbo\",\n];\n\nasync function parseGitignore(dir: string): Promise<string[]> {\n try {\n const gitignorePath = join(dir, \".gitignore\");\n const content = await readFile(gitignorePath, \"utf8\");\n return content\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"#\"));\n } catch {\n return [];\n }\n}\n\nfunction shouldIgnore(name: string, ignorePatterns: string[], defaultIgnore: string[]): boolean {\n const allPatterns = [...defaultIgnore, ...ignorePatterns];\n for (const pattern of allPatterns) {\n const cleanPattern = pattern.replace(/^\\//, \"\").replace(/\\/$/, \"\");\n if (name === cleanPattern) {\n return true;\n }\n if (pattern.startsWith(\"*\") && name.endsWith(pattern.slice(1))) {\n return true;\n }\n if (pattern.endsWith(\"*\") && name.startsWith(pattern.slice(0, -1))) {\n return true;\n }\n }\n return false;\n}\n\nasync function buildTree(\n dir: string,\n ignorePatterns: string[],\n maxDepth: number,\n currentDepth: number = 0,\n): Promise<TreeEntry[]> {\n if (maxDepth > 0 && currentDepth >= maxDepth) {\n return [];\n }\n\n const entries = await readdir(dir);\n const result: TreeEntry[] = [];\n\n for (const entry of entries) {\n if (shouldIgnore(entry, ignorePatterns, DEFAULT_IGNORE)) {\n continue;\n }\n\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n const isDirectory = stats.isDirectory();\n\n const treeEntry: TreeEntry = {\n name: entry,\n isDirectory,\n };\n\n if (isDirectory) {\n treeEntry.children = await buildTree(fullPath, ignorePatterns, maxDepth, currentDepth + 1);\n }\n\n result.push(treeEntry);\n }\n\n result.sort((a, b) => {\n if (a.isDirectory !== b.isDirectory) {\n return a.isDirectory ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n return result;\n}\n\nfunction renderTree(entries: TreeEntry[], isLast: boolean[] = []): string[] {\n const lines: string[] = [];\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]!;\n const isLastEntry = i === entries.length - 1;\n\n let linePrefix = \"\";\n for (const element_ of isLast) {\n linePrefix += element_ ? \" \" : \"│ \";\n }\n\n const connector = isLastEntry ? \"└── \" : \"├── \";\n const suffix = entry.isDirectory ? \"/\" : \"\";\n lines.push(`${linePrefix}${connector}${entry.name}${suffix}`);\n\n if (entry.children && entry.children.length > 0) {\n const childLines = renderTree(entry.children, [...isLast, isLastEntry]);\n lines.push(...childLines);\n }\n }\n\n return lines;\n}\n\nexport const dirTree = defineGenerator({\n name: \"dir-tree\",\n async generate({ args, config, url }) {\n const srcPath = args.src || \".\";\n const fullPath = resolvePath(srcPath, { url, dir: config.dir });\n\n const stats = await stat(fullPath);\n if (!stats.isDirectory()) {\n throw new Error(`Path \"${srcPath}\" is not a directory`);\n }\n\n const userIgnore: string[] = args.ignore\n ? String(args.ignore)\n .split(\",\")\n .map((s: string) => s.trim())\n : [];\n\n const gitignorePatterns = await parseGitignore(fullPath);\n const ignorePatterns = [...gitignorePatterns, ...userIgnore];\n\n const maxDepth = args.maxDepth ? Number(args.maxDepth) : 0;\n\n const tree = await buildTree(fullPath, ignorePatterns, maxDepth);\n const treeLines = renderTree(tree);\n\n const contents = \"```\\n\" + treeLines.join(\"\\n\") + \"\\n```\";\n\n return { contents };\n },\n});\n","import type { Generator } from \"../generator.ts\";\nimport { jsdocs } from \"./jsdocs.ts\";\nimport { badges } from \"./badges.ts\";\nimport { pmX, pmInstall } from \"./pm.ts\";\nimport { fetch as _fetch } from \"./fetch.ts\";\nimport { jsimport } from \"./jsimport.ts\";\nimport { withAutomd } from \"./with-automd.ts\";\nimport { file } from \"./file.ts\";\nimport { contributors } from \"./contributors.ts\";\nimport { dirTree } from \"./dir-tree.ts\";\n\nexport default {\n jsdocs,\n badges,\n \"pm-i\": pmInstall,\n \"pm-install\": pmInstall,\n \"pm-x\": pmX,\n fetch: _fetch,\n file,\n jsimport,\n \"with-automd\": withAutomd,\n contributors,\n \"dir-tree\": dirTree,\n} as Record<string, Generator>;\n","import { destr } from \"destr\";\nimport { camelCase } from \"scule\";\n\nexport interface Block {\n /**\n * The name of the generator to use for updates.\n */\n generator: string;\n\n /**\n * The arguments that are passed to the generator.\n */\n rawArgs: string;\n\n /**\n * The current content of the block.\n */\n contents: string;\n\n /**\n * The location of the content in the original document.\n */\n loc: { start: number; end: number };\n\n /**\n * The location including the automd comments.\n */\n _loc: { start: number; end: number };\n}\n\n/**\n * Searches a markdown document for special sections that `automd` can update.\n *\n * @param md - The markdown document as a string.\n * @returns an array of blocks that can be updated automatically. {@link Block}\n */\nexport function findBlocks(md: string): Block[] {\n const blocks: Block[] = [];\n\n // Regex is stateful, so we need to reset it\n const AUTOMD_RE =\n /^(?<open><!--\\s*automd:(?<generator>.+?)\\s+(?<args>.*?)\\s*-->)(?<contents>.+?)(?<close>^<!--\\s*\\/automd\\s*-->)/gimsu;\n\n for (const match of md.matchAll(AUTOMD_RE)) {\n if (match.index === undefined || !match.groups) {\n continue;\n }\n\n const start = match.index + match.groups.open!.length || 0;\n const end = start + match.groups.contents!.length;\n\n blocks.push({\n generator: match.groups.generator!,\n rawArgs: match.groups.args!,\n contents: match.groups.contents!,\n loc: { start, end },\n _loc: { start: match.index, end: match.index + match[0].length },\n });\n }\n\n return blocks;\n}\n\n/**\n * Checks if a markdown document contains sections that can be automatically updated.\n *\n * @param md - The markdown document as a string.\n * @returns true if there are `automd` sections, false otherwise.\n */\nexport function containsAutomd(md: string) {\n return /^<!--\\s*automd:/gimsu.test(md);\n}\n\n/**\n * Converts a string of raw arguments to an object.\n * Each argument is separated by spaces. Arguments can be key-value pairs separated by '='.\n * If an argument starts with \"no-\", the key is set to false.\n * Otherwise it sets the key to true. Keys are converted to camelCase.\n * Values are processed to determine their actual type (e.g. string, boolean).\n *\n * @param {string} rawArgs - The string of arguments to parse.\n * @return {Object} - An object with keys derived from the arguments.\n * Keys are in camelCase. Values are true, false, or strings.\n */\nexport function parseRawArgs(rawArgs: string) {\n const args = Object.create(null);\n\n for (const part of rawArgs.split(/\\s+/)) {\n const [_key, value] = part.split(\"=\");\n const key = _key && camelCase(_key);\n if (key && value) {\n args[key] = destr(value);\n } else if (part.startsWith(\"no-\")) {\n args[part.slice(3)] = false;\n } else {\n args[part] = true;\n }\n }\n\n return args;\n}\n","import { resolve } from \"pathe\";\nimport type { Generator } from \"./generator.ts\";\nimport type { AutomdResult } from \"./automd.ts\";\n\nexport interface Config {\n /**\n * The working directory\n *\n * @default \".\" (current directory)\n */\n dir?: string;\n\n /**\n * Name or path to the input file or files with glob patterns.\n *\n * @default \"README.md\"\n */\n input?: string | string[];\n\n /**\n * Name or path of the output files. If not provided, the input file will be overwritten.\n *\n * @default input\n */\n output?: string;\n\n /**\n * Ignore patterns if input is a glob pattern\n *\n * @default [\"node_modules\", \"dist\", \"/.*\"]\n */\n ignore?: string[];\n\n /**\n * Watch for changes in input files and regenerate output\n */\n watch?: boolean;\n\n /**\n * Watch callback\n */\n onWatch?: (event: { results: AutomdResult[]; time: number }) => void;\n\n /** Custom generators */\n generators?: Record<string, Generator>;\n}\n\nconst RESOLVED_CONFIG_SYMBOL = Symbol(\"automdConfig\");\n\nexport type ResolvedConfig = { [P in keyof Config]-?: Config[P] } & {\n [RESOLVED_CONFIG_SYMBOL]: true;\n input: string[];\n output?: string;\n};\n\nexport function resolveConfig(config?: Config | ResolvedConfig): ResolvedConfig {\n if (config && RESOLVED_CONFIG_SYMBOL in config) {\n return config as ResolvedConfig;\n }\n\n const _config = {\n dir: \".\",\n input: \"README.md\",\n generators: {},\n [RESOLVED_CONFIG_SYMBOL]: true,\n ...(config as Partial<ResolvedConfig>),\n } as ResolvedConfig;\n\n _config.dir = resolve(_config.dir);\n\n _config.input = (Array.isArray(_config.input) ? _config.input : [_config.input]).filter(Boolean);\n\n return _config;\n}\n\nexport async function loadConfig(dir = \".\", overrides: Config): Promise<ResolvedConfig> {\n const { loadConfig } = await import(\"c12\");\n\n dir = resolve(dir);\n\n const { config } = await loadConfig<Config>({\n cwd: dir,\n name: \"automd\",\n dotenv: true,\n overrides,\n defaults: {\n ignore: [\"**/node_modules\", \"**/dist\", \"**/.*\"],\n dir,\n },\n });\n\n return resolveConfig(config as Config);\n}\n","import MagicString from \"magic-string\";\nimport builtinGenerators from \"./generators/index.ts\";\nimport type { GenerateContext, GenerateResult } from \"./generator.ts\";\nimport { type Block, containsAutomd, findBlocks, parseRawArgs } from \"./_parse.ts\";\nimport { type Config, type ResolvedConfig, resolveConfig } from \"./config.ts\";\n\nexport interface TransformResult {\n /**\n * Wether if the document has been modified at all.\n */\n hasChanged: boolean;\n\n /**\n * Whether if there were any problems found in the document.\n */\n hasIssues: boolean;\n\n /**\n * The text of the document after it was transformed.\n */\n contents: string;\n\n /**\n * A list of specific parts that have been transformed in the document.\n */\n updates: {\n /**\n * The specific part of the document that has been transformed.\n */\n block: Block;\n\n /**\n * What the transform has done to this part of the document.\n */\n result: GenerateResult;\n }[];\n\n /**\n * How long the editing process took, measured in milliseconds.\n */\n time: number;\n}\n\n/**\n * Edits a markdown document based on certain rules and configurations.\n *\n * @param contents - The text of the markdown document you want to edit.\n * @param _config - Optional. The settings that affect how the document will be edited. See {@link Config}.\n * @param url - Optional. The URL associated with the document, if any.\n * @returns - The result of the transformation, including any changes made and how long it took. See {@link TransformResult}.\n */\nexport async function transform(\n contents: string,\n _config?: Config,\n url?: string,\n): Promise<TransformResult> {\n const start = performance.now();\n const config = resolveConfig(_config);\n\n const editor = new MagicString(contents);\n\n const updates: TransformResult[\"updates\"] = [];\n\n const generators = {\n ...builtinGenerators,\n ...config.generators,\n };\n\n const blocks = findBlocks(contents);\n\n for (const block of blocks) {\n const result = await _transformBlock(block, config, generators, url);\n if (result.unwrap) {\n editor.overwrite(block._loc.start, block._loc.end, `${result.contents.trim()}`);\n } else {\n editor.overwrite(block.loc.start, block.loc.end, `\\n\\n${result.contents.trim()}\\n\\n`);\n }\n updates.push({ block, result });\n }\n\n const hasChanged = editor.hasChanged();\n const hasIssues = updates.some((u) => u.result.issues?.filter(Boolean).length);\n const time = performance.now() - start;\n\n return {\n hasChanged,\n hasIssues,\n contents: hasChanged ? editor.toString() : contents,\n updates,\n time,\n };\n}\n\nasync function _transformBlock(\n block: Block,\n config: ResolvedConfig,\n generators: Record<string, any>,\n url?: string,\n): Promise<GenerateResult> {\n const args = parseRawArgs(block.rawArgs);\n const generator = generators[block.generator];\n\n if (!generator) {\n const didYouMean = await import(\"didyoumean2\").then((r) => r.default || r);\n const suggestions = didYouMean(block.generator, Object.keys(generators));\n const error = `Unknown generator:\\`${block.generator}\\`.${suggestions ? ` Did you mean \"generator:\\`${suggestions}\\`\"?` : \"\"}`;\n return {\n contents: `<!-- ⚠️ ${error} -->`,\n issues: [error],\n };\n }\n\n const context: GenerateContext = {\n args,\n config,\n block,\n transform: (contents: string) => transform(contents, config, url),\n url,\n };\n\n try {\n const result = (await generator.generate(context)) as GenerateResult;\n\n if (!result.unwrap && containsAutomd(result.contents)) {\n result.unwrap = true;\n }\n if (result.unwrap) {\n const nestedRes = await context.transform(result.contents);\n result.contents = nestedRes.contents;\n // TODO: inherit time, issues, etc.\n if (nestedRes.hasIssues) {\n result.issues = [\n ...(result.issues || []),\n ...nestedRes.updates.flatMap((u) => u.result.issues || []),\n ].filter(Boolean);\n }\n }\n\n return result;\n } catch (error: any) {\n return {\n contents: `<!-- ⚠️ (${block.generator}) ${error.message || error} -->`,\n issues: [error],\n };\n }\n}\n","import { existsSync, promises as fsp } from \"node:fs\";\nimport { resolve, relative, dirname } from \"pathe\";\nimport type { SubscribeCallback } from \"@parcel/watcher\";\nimport { pathToFileURL } from \"mlly\";\nimport { debounce } from \"perfect-debounce\";\nimport type { Config, ResolvedConfig } from \"./config.ts\";\nimport { type TransformResult, transform } from \"./transform.ts\";\nimport { loadConfig } from \"./config.ts\";\n\nexport interface AutomdResult extends TransformResult {\n input: string;\n output: string;\n}\n\n/**\n * Describes what you get back from the `automd` function.\n */\nexport interface AutomdReturn {\n /**\n * A list of the changes made to the file(s) by `automd`.\n */\n results: AutomdResult[];\n\n /**\n * How long it took to make the changes, in milliseconds.\n */\n time: number;\n\n /**\n * The resolved configuration that were used for these changes.\n */\n config: ResolvedConfig;\n\n /**\n * If you started watching the file(s) for changes, this function can be called to stop watching.\n */\n unwatch?: () => void | Promise<void>;\n}\n\n/**\n * Scans a markdown file looking for special comments.\n * These comments tell the function to add or update certain parts of the file automatically.\n * You can change how this works by giving it different settings in the `_config` option.\n *\n * @param _config - The settings to use for the update process. See {@link Config}.\n * @returns - An object containing the results of the update, including any changes made and any problems found. See {@link AutomdReturn}.\n *\n * @see https://automd.unjs.io/guide\n */\nexport async function automd(_config: Config = {}): Promise<AutomdReturn> {\n const start = performance.now();\n const config = await loadConfig(_config.dir, _config);\n\n let inputFiles = config.input;\n if (inputFiles.some((i) => i.includes(\"*\"))) {\n const { glob } = await import(\"tinyglobby\");\n inputFiles = await glob(inputFiles, {\n cwd: config.dir,\n absolute: false,\n onlyFiles: true,\n ignore: config.ignore,\n });\n } else {\n inputFiles = inputFiles\n .map((i) => resolve(config.dir, i))\n .filter((i) => existsSync(i))\n .map((i) => relative(config.dir, i));\n }\n const multiFiles = inputFiles.length > 1;\n\n const cache: ResultCache = new Map();\n\n const results = await Promise.all(inputFiles.map((i) => _automd(i, config, multiFiles, cache)));\n\n let unwatch;\n if (config.watch) {\n unwatch = await _watch(inputFiles, config, multiFiles, cache);\n }\n\n const time = performance.now() - start;\n\n return {\n time,\n results,\n config,\n unwatch,\n };\n}\n\n// -- internal --\n\ntype ResultCache = Map<string, AutomdResult>;\n\nasync function _automd(\n relativeInput: string,\n config: ResolvedConfig,\n multiFiles: boolean,\n cache: ResultCache,\n): Promise<AutomdResult> {\n const start = performance.now();\n const input = resolve(config.dir, relativeInput);\n const contents = await fsp.readFile(input, \"utf8\");\n\n const cachedResult = await cache.get(input);\n if (cachedResult?.contents === contents) {\n cachedResult.time = performance.now() - start;\n return cachedResult;\n }\n\n const transformResult = await transform(contents, config, pathToFileURL(input));\n\n const output = multiFiles\n ? resolve(config.dir, config.output || \".\", relativeInput)\n : resolve(config.dir, config.output || relativeInput);\n\n await fsp.mkdir(dirname(output), { recursive: true });\n await fsp.writeFile(output, transformResult.contents, \"utf8\");\n\n const result: AutomdResult = {\n input,\n output,\n ...transformResult,\n };\n cache.set(input, result);\n result.time = performance.now() - start;\n return result;\n}\n\nasync function _watch(\n inputFiles: string[],\n config: ResolvedConfig,\n multiFiles: boolean,\n cache: ResultCache,\n) {\n const watcher = await import(\"@parcel/watcher\");\n\n const watchCb: SubscribeCallback = debounce(async (_err, events) => {\n const filesToUpdate = events\n .map((e) => relative(config.dir, e.path))\n .filter((p) => inputFiles.includes(p));\n const start = performance.now();\n const results = await Promise.all(\n filesToUpdate.map((f) => _automd(f, config, multiFiles, cache)),\n );\n const time = performance.now() - start;\n if (config.onWatch) {\n config.onWatch({ results, time });\n }\n });\n\n const subscription = await watcher.subscribe(config.dir, watchCb, {\n ignore: config.ignore,\n });\n\n process.on(\"SIGINT\", () => {\n subscription.unsubscribe();\n });\n\n return subscription.unsubscribe;\n}\n"],"mappings":"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"}