@qodalis/cli-markdown 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/public-api.d.mts +1 -1
- package/public-api.d.ts +1 -1
- package/public-api.js +1 -1
- package/public-api.js.map +1 -1
- package/public-api.mjs +1 -1
- package/public-api.mjs.map +1 -1
- package/umd/index.global.js +118 -59
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qodalis/cli-markdown",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Render Markdown in the terminal",
|
|
5
5
|
"author": "Qodalis Solutions",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"umd": "./umd/index.global.js",
|
|
19
19
|
"unpkg": "./umd/index.global.js",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@qodalis/cli-core": "2.
|
|
21
|
+
"@qodalis/cli-core": "2.2.0"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false,
|
|
24
24
|
"main": "./public-api.js",
|
package/public-api.d.mts
CHANGED
|
@@ -29,7 +29,7 @@ declare class CliMarkdownCommandProcessor implements ICliCommandProcessor {
|
|
|
29
29
|
writeDescription(context: ICliExecutionContext): void;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
declare const LIBRARY_VERSION = "2.
|
|
32
|
+
declare const LIBRARY_VERSION = "2.2.0";
|
|
33
33
|
declare const API_VERSION = 2;
|
|
34
34
|
|
|
35
35
|
declare const markdownModule: ICliModule;
|
package/public-api.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ declare class CliMarkdownCommandProcessor implements ICliCommandProcessor {
|
|
|
29
29
|
writeDescription(context: ICliExecutionContext): void;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
declare const LIBRARY_VERSION = "2.
|
|
32
|
+
declare const LIBRARY_VERSION = "2.2.0";
|
|
33
33
|
declare const API_VERSION = 2;
|
|
34
34
|
|
|
35
35
|
declare const markdownModule: ICliModule;
|
package/public-api.js
CHANGED
package/public-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/plugins/markdown/src/lib/markdown-renderer.ts","../../packages/plugins/markdown/src/lib/processors/cli-markdown-command-processor.ts","../../packages/plugins/markdown/src/lib/version.ts","../../packages/plugins/markdown/src/public-api.ts"],"names":["DefaultLibraryAuthor","CliIcon","writeWrapped","writeUsage","writeExamples"],"mappings":"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","file":"public-api.js","sourcesContent":["const RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst ITALIC = '\\x1b[3m';\nconst UNDERLINE = '\\x1b[4m';\n\nconst FG_YELLOW = '\\x1b[33m';\nconst FG_CYAN = '\\x1b[36m';\nconst FG_GREEN = '\\x1b[32m';\nconst FG_WHITE = '\\x1b[97m';\nconst BG_DARK = '\\x1b[48;5;236m';\n\nfunction wrap(text: string, ...codes: string[]): string {\n return codes.join('') + text + RESET;\n}\n\nexport function renderMarkdown(input: string): string[] {\n if (!input.trim()) return [];\n\n const rawLines = input.split('\\n');\n const output: string[] = [];\n let inCodeBlock = false;\n\n for (const line of rawLines) {\n if (line.startsWith('```')) {\n if (!inCodeBlock) {\n inCodeBlock = true;\n const lang = line.slice(3).trim();\n output.push(wrap(` ${lang || 'code'} `, DIM, BG_DARK));\n } else {\n inCodeBlock = false;\n output.push(wrap('\\u2500'.repeat(40), DIM));\n }\n continue;\n }\n\n if (inCodeBlock) {\n output.push(wrap(' ' + line, FG_GREEN));\n continue;\n }\n\n if (line.startsWith('### ')) {\n output.push(wrap(line.slice(4), BOLD, FG_CYAN));\n } else if (line.startsWith('## ')) {\n const text = line.slice(3);\n output.push(wrap(text, BOLD, FG_YELLOW));\n output.push(wrap('\\u2500'.repeat(text.length), FG_YELLOW));\n } else if (line.startsWith('# ')) {\n const text = line.slice(2);\n output.push(wrap(text, BOLD, UNDERLINE, FG_WHITE));\n output.push('');\n } else if (/^(-{3,}|\\*{3,}|_{3,})$/.test(line.trim())) {\n output.push(wrap('\\u2500'.repeat(60), DIM));\n } else if (line.startsWith('> ')) {\n output.push(wrap('\\u2502 ' + line.slice(2), DIM, ITALIC));\n } else if (/^[-*+] /.test(line)) {\n output.push(' \\u2022 ' + applyInline(line.slice(2)));\n } else if (/^\\d+\\. /.test(line)) {\n const match = line.match(/^(\\d+\\.) (.*)/);\n if (match) {\n output.push(` ${wrap(match[1], BOLD)} ${applyInline(match[2])}`);\n }\n } else if (line.trim() === '') {\n output.push('');\n } else {\n output.push(applyInline(line));\n }\n }\n\n return output;\n}\n\nfunction applyInline(text: string): string {\n // Bold **text** or __text__\n text = text.replace(/\\*\\*(.+?)\\*\\*|__(.+?)__/g, (_, a, b) => wrap(a ?? b, BOLD));\n // Italic *text* or _text_\n text = text.replace(/(?<!\\*)\\*([^*]+)\\*(?!\\*)|(?<!_)_([^_]+)_(?!_)/g, (_, a, b) => wrap(a ?? b, ITALIC));\n // Inline code `text`\n text = text.replace(/`([^`]+)`/g, (_, code) => wrap(code, FG_GREEN, BG_DARK));\n // Links [text](url)\n text = text.replace(/\\[(.+?)\\]\\((.+?)\\)/g, (_, label, url) =>\n wrap(label, UNDERLINE, FG_CYAN) + wrap(` (${url})`, DIM),\n );\n return text;\n}\n","import {\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n DefaultLibraryAuthor,\n CliIcon,\n writeExamples,\n writeUsage,\n writeWrapped,\n} from '@qodalis/cli-core';\nimport { renderMarkdown } from '../markdown-renderer';\n\n/** Verbs accepted before the text: `md render \"# x\"` is the same as `md \"# x\"`. */\nconst RENDER_VERBS = ['render', 'preview', 'view'];\n\n/**\n * Split raw text into shell-like words: quotes group words and are removed,\n * a backslash inside double quotes escapes the next character.\n */\nexport function splitWords(text: string): { word: string; quoted: boolean }[] {\n const words: { word: string; quoted: boolean }[] = [];\n let current = '';\n let inWord = false;\n let quoted = false;\n let quote: string | null = null;\n\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n } else if (ch === '\\\\' && quote === '\"' && (text[i + 1] === '\"' || text[i + 1] === '\\\\')) {\n current += text[++i];\n } else {\n current += ch;\n }\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n inWord = true;\n quoted = true;\n continue;\n }\n if (/\\s/.test(ch)) {\n if (inWord) {\n words.push({ word: current, quoted });\n current = '';\n inWord = false;\n quoted = false;\n }\n continue;\n }\n current += ch;\n inWord = true;\n }\n if (inWord) {\n words.push({ word: current, quoted });\n }\n return words;\n}\n\n/** Interpret `\\n`, `\\t` and `\\\\` escapes typed on the command line. */\nexport function interpretEscapes(text: string): string {\n return text.replace(/\\\\([\\\\nt])/g, (_, ch: string) =>\n ch === 'n' ? '\\n' : ch === 't' ? '\\t' : '\\\\',\n );\n}\n\n/** Piped data as markdown text: strings as is, arrays one item per line. */\nfunction dataToText(data: unknown): string {\n if (data === undefined || data === null) return '';\n if (typeof data === 'string') return data;\n if (Array.isArray(data)) {\n return data.map((item) => (typeof item === 'string' ? item : JSON.stringify(item))).join('\\n');\n }\n if (typeof data === 'object') {\n return '```json\\n' + JSON.stringify(data, null, 2) + '\\n```';\n }\n return String(data);\n}\n\n/**\n * The markdown to render: the inline value (quotes removed, escapes\n * interpreted, an optional leading `render`/`preview`/`view` dropped),\n * otherwise the piped data.\n */\nexport function resolveMarkdownInput(value: string | undefined, data: unknown): string {\n const words = splitWords(value ?? '');\n if (words.length && !words[0].quoted && RENDER_VERBS.includes(words[0].word.toLowerCase())) {\n words.shift();\n }\n const inline = interpretEscapes(words.map((w) => w.word).join(' '));\n if (inline.trim()) {\n return inline;\n }\n return dataToText(data);\n}\n\nexport class CliMarkdownCommandProcessor implements ICliCommandProcessor {\n command = 'md';\n description = 'Render Markdown in the terminal';\n aliases = ['markdown'];\n author = DefaultLibraryAuthor;\n metadata = { icon: CliIcon.File };\n\n // The text after `md` is the markdown itself. There are deliberately no\n // sub-processors: with sub-processors the engine treats the first word as\n // a sub-command name, so `md \"# x\"` would be \"command not found\".\n // `render`, `preview` and `view` are accepted as optional verbs instead.\n acceptsRawInput = true;\n\n async processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n const input = resolveMarkdownInput(command.value, command.data);\n if (!input.trim()) {\n context.writer.writeError('No markdown input. Pipe text or provide it inline.');\n context.writer.writeln('Usage: md \"# Hello\"');\n context.writer.writeln(' echo \"# Hello\" | md');\n context.process.exit(1, { silent: true });\n return;\n }\n for (const line of renderMarkdown(input)) {\n context.writer.writeln(line);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const t = context.translator;\n writeWrapped(\n context,\n t.t('cli.md.help.show_markdown_formatted_terminal', 'Show Markdown formatted in the terminal: headings, bold and italic text, lists, quotes, code and links. Pass the text inline (quoted or not, \\\\n starts a new line) or pipe it from another command.'),\n );\n context.writer.writeln();\n writeUsage(context, [\n ['md \"<markdown>\"', t.t('cli.md.help.render_inline_text', 'Render inline text')],\n ['md render \"<markdown>\"', t.t('cli.md.help.same_optional_render_verb', 'Same, with the optional render verb (also preview, view)')],\n ['<command> | md', t.t('cli.md.help.render_output_command', 'Render the output of a command')],\n ]);\n context.writer.writeln();\n writeExamples(context, [\n ['md \"## Title\"', t.t('cli.md.help.heading', 'A heading')],\n ['md \"# Title\\\\n- one\\\\n- two\"', t.t('cli.md.help.several_lines', 'Several lines')],\n ['echo \"# Hello\" | md', t.t('cli.md.help.piped_text', 'Piped text')],\n ['markdown view \"**bold** and *italic*\"', t.t('cli.md.help.same_using_aliases', 'Same, using aliases')],\n ]);\n }\n}\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.1.1';\nexport const API_VERSION = 2;\n ","/*\n * Public API Surface of markdown\n */\n\nexport * from './lib/processors/cli-markdown-command-processor';\nexport * from './lib/version';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliMarkdownCommandProcessor } from './lib/processors/cli-markdown-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const markdownModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-markdown',\n processors: [new CliMarkdownCommandProcessor()],\n translations: {\n es: { 'cli.md.description': 'Renderizar Markdown en la terminal' },\n fr: { 'cli.md.description': 'Afficher du Markdown dans le terminal' },\n de: { 'cli.md.description': 'Markdown im Terminal rendern' },\n pt: { 'cli.md.description': 'Renderizar Markdown no terminal' },\n it: { 'cli.md.description': 'Renderizzare Markdown nel terminale' },\n ja: { 'cli.md.description': 'ターミナルでMarkdownを描画' },\n ko: { 'cli.md.description': '터미널에서 Markdown 렌더링' },\n zh: { 'cli.md.description': '在终端中渲染 Markdown' },\n ru: { 'cli.md.description': 'Рендеринг Markdown в терминале' },\n ro: { 'cli.md.description': 'Redare Markdown în terminal' },\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/plugins/markdown/src/lib/markdown-renderer.ts","../../packages/plugins/markdown/src/lib/processors/cli-markdown-command-processor.ts","../../packages/plugins/markdown/src/lib/version.ts","../../packages/plugins/markdown/src/public-api.ts"],"names":["DefaultLibraryAuthor","CliIcon","writeWrapped","writeUsage","writeExamples"],"mappings":"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","file":"public-api.js","sourcesContent":["const RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst ITALIC = '\\x1b[3m';\nconst UNDERLINE = '\\x1b[4m';\n\nconst FG_YELLOW = '\\x1b[33m';\nconst FG_CYAN = '\\x1b[36m';\nconst FG_GREEN = '\\x1b[32m';\nconst FG_WHITE = '\\x1b[97m';\nconst BG_DARK = '\\x1b[48;5;236m';\n\nfunction wrap(text: string, ...codes: string[]): string {\n return codes.join('') + text + RESET;\n}\n\nexport function renderMarkdown(input: string): string[] {\n if (!input.trim()) return [];\n\n const rawLines = input.split('\\n');\n const output: string[] = [];\n let inCodeBlock = false;\n\n for (const line of rawLines) {\n if (line.startsWith('```')) {\n if (!inCodeBlock) {\n inCodeBlock = true;\n const lang = line.slice(3).trim();\n output.push(wrap(` ${lang || 'code'} `, DIM, BG_DARK));\n } else {\n inCodeBlock = false;\n output.push(wrap('\\u2500'.repeat(40), DIM));\n }\n continue;\n }\n\n if (inCodeBlock) {\n output.push(wrap(' ' + line, FG_GREEN));\n continue;\n }\n\n if (line.startsWith('### ')) {\n output.push(wrap(line.slice(4), BOLD, FG_CYAN));\n } else if (line.startsWith('## ')) {\n const text = line.slice(3);\n output.push(wrap(text, BOLD, FG_YELLOW));\n output.push(wrap('\\u2500'.repeat(text.length), FG_YELLOW));\n } else if (line.startsWith('# ')) {\n const text = line.slice(2);\n output.push(wrap(text, BOLD, UNDERLINE, FG_WHITE));\n output.push('');\n } else if (/^(-{3,}|\\*{3,}|_{3,})$/.test(line.trim())) {\n output.push(wrap('\\u2500'.repeat(60), DIM));\n } else if (line.startsWith('> ')) {\n output.push(wrap('\\u2502 ' + line.slice(2), DIM, ITALIC));\n } else if (/^[-*+] /.test(line)) {\n output.push(' \\u2022 ' + applyInline(line.slice(2)));\n } else if (/^\\d+\\. /.test(line)) {\n const match = line.match(/^(\\d+\\.) (.*)/);\n if (match) {\n output.push(` ${wrap(match[1], BOLD)} ${applyInline(match[2])}`);\n }\n } else if (line.trim() === '') {\n output.push('');\n } else {\n output.push(applyInline(line));\n }\n }\n\n return output;\n}\n\nfunction applyInline(text: string): string {\n // Bold **text** or __text__\n text = text.replace(/\\*\\*(.+?)\\*\\*|__(.+?)__/g, (_, a, b) => wrap(a ?? b, BOLD));\n // Italic *text* or _text_\n text = text.replace(/(?<!\\*)\\*([^*]+)\\*(?!\\*)|(?<!_)_([^_]+)_(?!_)/g, (_, a, b) => wrap(a ?? b, ITALIC));\n // Inline code `text`\n text = text.replace(/`([^`]+)`/g, (_, code) => wrap(code, FG_GREEN, BG_DARK));\n // Links [text](url)\n text = text.replace(/\\[(.+?)\\]\\((.+?)\\)/g, (_, label, url) =>\n wrap(label, UNDERLINE, FG_CYAN) + wrap(` (${url})`, DIM),\n );\n return text;\n}\n","import {\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n DefaultLibraryAuthor,\n CliIcon,\n writeExamples,\n writeUsage,\n writeWrapped,\n} from '@qodalis/cli-core';\nimport { renderMarkdown } from '../markdown-renderer';\n\n/** Verbs accepted before the text: `md render \"# x\"` is the same as `md \"# x\"`. */\nconst RENDER_VERBS = ['render', 'preview', 'view'];\n\n/**\n * Split raw text into shell-like words: quotes group words and are removed,\n * a backslash inside double quotes escapes the next character.\n */\nexport function splitWords(text: string): { word: string; quoted: boolean }[] {\n const words: { word: string; quoted: boolean }[] = [];\n let current = '';\n let inWord = false;\n let quoted = false;\n let quote: string | null = null;\n\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n } else if (ch === '\\\\' && quote === '\"' && (text[i + 1] === '\"' || text[i + 1] === '\\\\')) {\n current += text[++i];\n } else {\n current += ch;\n }\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n inWord = true;\n quoted = true;\n continue;\n }\n if (/\\s/.test(ch)) {\n if (inWord) {\n words.push({ word: current, quoted });\n current = '';\n inWord = false;\n quoted = false;\n }\n continue;\n }\n current += ch;\n inWord = true;\n }\n if (inWord) {\n words.push({ word: current, quoted });\n }\n return words;\n}\n\n/** Interpret `\\n`, `\\t` and `\\\\` escapes typed on the command line. */\nexport function interpretEscapes(text: string): string {\n return text.replace(/\\\\([\\\\nt])/g, (_, ch: string) =>\n ch === 'n' ? '\\n' : ch === 't' ? '\\t' : '\\\\',\n );\n}\n\n/** Piped data as markdown text: strings as is, arrays one item per line. */\nfunction dataToText(data: unknown): string {\n if (data === undefined || data === null) return '';\n if (typeof data === 'string') return data;\n if (Array.isArray(data)) {\n return data.map((item) => (typeof item === 'string' ? item : JSON.stringify(item))).join('\\n');\n }\n if (typeof data === 'object') {\n return '```json\\n' + JSON.stringify(data, null, 2) + '\\n```';\n }\n return String(data);\n}\n\n/**\n * The markdown to render: the inline value (quotes removed, escapes\n * interpreted, an optional leading `render`/`preview`/`view` dropped),\n * otherwise the piped data.\n */\nexport function resolveMarkdownInput(value: string | undefined, data: unknown): string {\n const words = splitWords(value ?? '');\n if (words.length && !words[0].quoted && RENDER_VERBS.includes(words[0].word.toLowerCase())) {\n words.shift();\n }\n const inline = interpretEscapes(words.map((w) => w.word).join(' '));\n if (inline.trim()) {\n return inline;\n }\n return dataToText(data);\n}\n\nexport class CliMarkdownCommandProcessor implements ICliCommandProcessor {\n command = 'md';\n description = 'Render Markdown in the terminal';\n aliases = ['markdown'];\n author = DefaultLibraryAuthor;\n metadata = { icon: CliIcon.File };\n\n // The text after `md` is the markdown itself. There are deliberately no\n // sub-processors: with sub-processors the engine treats the first word as\n // a sub-command name, so `md \"# x\"` would be \"command not found\".\n // `render`, `preview` and `view` are accepted as optional verbs instead.\n acceptsRawInput = true;\n\n async processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n const input = resolveMarkdownInput(command.value, command.data);\n if (!input.trim()) {\n context.writer.writeError('No markdown input. Pipe text or provide it inline.');\n context.writer.writeln('Usage: md \"# Hello\"');\n context.writer.writeln(' echo \"# Hello\" | md');\n context.process.exit(1, { silent: true });\n return;\n }\n for (const line of renderMarkdown(input)) {\n context.writer.writeln(line);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const t = context.translator;\n writeWrapped(\n context,\n t.t('cli.md.help.show_markdown_formatted_terminal', 'Show Markdown formatted in the terminal: headings, bold and italic text, lists, quotes, code and links. Pass the text inline (quoted or not, \\\\n starts a new line) or pipe it from another command.'),\n );\n context.writer.writeln();\n writeUsage(context, [\n ['md \"<markdown>\"', t.t('cli.md.help.render_inline_text', 'Render inline text')],\n ['md render \"<markdown>\"', t.t('cli.md.help.same_optional_render_verb', 'Same, with the optional render verb (also preview, view)')],\n ['<command> | md', t.t('cli.md.help.render_output_command', 'Render the output of a command')],\n ]);\n context.writer.writeln();\n writeExamples(context, [\n ['md \"## Title\"', t.t('cli.md.help.heading', 'A heading')],\n ['md \"# Title\\\\n- one\\\\n- two\"', t.t('cli.md.help.several_lines', 'Several lines')],\n ['echo \"# Hello\" | md', t.t('cli.md.help.piped_text', 'Piped text')],\n ['markdown view \"**bold** and *italic*\"', t.t('cli.md.help.same_using_aliases', 'Same, using aliases')],\n ]);\n }\n}\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.2.0';\nexport const API_VERSION = 2;\n ","/*\n * Public API Surface of markdown\n */\n\nexport * from './lib/processors/cli-markdown-command-processor';\nexport * from './lib/version';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliMarkdownCommandProcessor } from './lib/processors/cli-markdown-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const markdownModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-markdown',\n processors: [new CliMarkdownCommandProcessor()],\n translations: {\n es: { 'cli.md.description': 'Renderizar Markdown en la terminal' },\n fr: { 'cli.md.description': 'Afficher du Markdown dans le terminal' },\n de: { 'cli.md.description': 'Markdown im Terminal rendern' },\n pt: { 'cli.md.description': 'Renderizar Markdown no terminal' },\n it: { 'cli.md.description': 'Renderizzare Markdown nel terminale' },\n ja: { 'cli.md.description': 'ターミナルでMarkdownを描画' },\n ko: { 'cli.md.description': '터미널에서 Markdown 렌더링' },\n zh: { 'cli.md.description': '在终端中渲染 Markdown' },\n ru: { 'cli.md.description': 'Рендеринг Markdown в терминале' },\n ro: { 'cli.md.description': 'Redare Markdown în terminal' },\n },\n};\n"]}
|
package/public-api.mjs
CHANGED
package/public-api.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/plugins/markdown/src/lib/markdown-renderer.ts","../../packages/plugins/markdown/src/lib/processors/cli-markdown-command-processor.ts","../../packages/plugins/markdown/src/lib/version.ts","../../packages/plugins/markdown/src/public-api.ts"],"names":[],"mappings":"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","file":"public-api.mjs","sourcesContent":["const RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst ITALIC = '\\x1b[3m';\nconst UNDERLINE = '\\x1b[4m';\n\nconst FG_YELLOW = '\\x1b[33m';\nconst FG_CYAN = '\\x1b[36m';\nconst FG_GREEN = '\\x1b[32m';\nconst FG_WHITE = '\\x1b[97m';\nconst BG_DARK = '\\x1b[48;5;236m';\n\nfunction wrap(text: string, ...codes: string[]): string {\n return codes.join('') + text + RESET;\n}\n\nexport function renderMarkdown(input: string): string[] {\n if (!input.trim()) return [];\n\n const rawLines = input.split('\\n');\n const output: string[] = [];\n let inCodeBlock = false;\n\n for (const line of rawLines) {\n if (line.startsWith('```')) {\n if (!inCodeBlock) {\n inCodeBlock = true;\n const lang = line.slice(3).trim();\n output.push(wrap(` ${lang || 'code'} `, DIM, BG_DARK));\n } else {\n inCodeBlock = false;\n output.push(wrap('\\u2500'.repeat(40), DIM));\n }\n continue;\n }\n\n if (inCodeBlock) {\n output.push(wrap(' ' + line, FG_GREEN));\n continue;\n }\n\n if (line.startsWith('### ')) {\n output.push(wrap(line.slice(4), BOLD, FG_CYAN));\n } else if (line.startsWith('## ')) {\n const text = line.slice(3);\n output.push(wrap(text, BOLD, FG_YELLOW));\n output.push(wrap('\\u2500'.repeat(text.length), FG_YELLOW));\n } else if (line.startsWith('# ')) {\n const text = line.slice(2);\n output.push(wrap(text, BOLD, UNDERLINE, FG_WHITE));\n output.push('');\n } else if (/^(-{3,}|\\*{3,}|_{3,})$/.test(line.trim())) {\n output.push(wrap('\\u2500'.repeat(60), DIM));\n } else if (line.startsWith('> ')) {\n output.push(wrap('\\u2502 ' + line.slice(2), DIM, ITALIC));\n } else if (/^[-*+] /.test(line)) {\n output.push(' \\u2022 ' + applyInline(line.slice(2)));\n } else if (/^\\d+\\. /.test(line)) {\n const match = line.match(/^(\\d+\\.) (.*)/);\n if (match) {\n output.push(` ${wrap(match[1], BOLD)} ${applyInline(match[2])}`);\n }\n } else if (line.trim() === '') {\n output.push('');\n } else {\n output.push(applyInline(line));\n }\n }\n\n return output;\n}\n\nfunction applyInline(text: string): string {\n // Bold **text** or __text__\n text = text.replace(/\\*\\*(.+?)\\*\\*|__(.+?)__/g, (_, a, b) => wrap(a ?? b, BOLD));\n // Italic *text* or _text_\n text = text.replace(/(?<!\\*)\\*([^*]+)\\*(?!\\*)|(?<!_)_([^_]+)_(?!_)/g, (_, a, b) => wrap(a ?? b, ITALIC));\n // Inline code `text`\n text = text.replace(/`([^`]+)`/g, (_, code) => wrap(code, FG_GREEN, BG_DARK));\n // Links [text](url)\n text = text.replace(/\\[(.+?)\\]\\((.+?)\\)/g, (_, label, url) =>\n wrap(label, UNDERLINE, FG_CYAN) + wrap(` (${url})`, DIM),\n );\n return text;\n}\n","import {\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n DefaultLibraryAuthor,\n CliIcon,\n writeExamples,\n writeUsage,\n writeWrapped,\n} from '@qodalis/cli-core';\nimport { renderMarkdown } from '../markdown-renderer';\n\n/** Verbs accepted before the text: `md render \"# x\"` is the same as `md \"# x\"`. */\nconst RENDER_VERBS = ['render', 'preview', 'view'];\n\n/**\n * Split raw text into shell-like words: quotes group words and are removed,\n * a backslash inside double quotes escapes the next character.\n */\nexport function splitWords(text: string): { word: string; quoted: boolean }[] {\n const words: { word: string; quoted: boolean }[] = [];\n let current = '';\n let inWord = false;\n let quoted = false;\n let quote: string | null = null;\n\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n } else if (ch === '\\\\' && quote === '\"' && (text[i + 1] === '\"' || text[i + 1] === '\\\\')) {\n current += text[++i];\n } else {\n current += ch;\n }\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n inWord = true;\n quoted = true;\n continue;\n }\n if (/\\s/.test(ch)) {\n if (inWord) {\n words.push({ word: current, quoted });\n current = '';\n inWord = false;\n quoted = false;\n }\n continue;\n }\n current += ch;\n inWord = true;\n }\n if (inWord) {\n words.push({ word: current, quoted });\n }\n return words;\n}\n\n/** Interpret `\\n`, `\\t` and `\\\\` escapes typed on the command line. */\nexport function interpretEscapes(text: string): string {\n return text.replace(/\\\\([\\\\nt])/g, (_, ch: string) =>\n ch === 'n' ? '\\n' : ch === 't' ? '\\t' : '\\\\',\n );\n}\n\n/** Piped data as markdown text: strings as is, arrays one item per line. */\nfunction dataToText(data: unknown): string {\n if (data === undefined || data === null) return '';\n if (typeof data === 'string') return data;\n if (Array.isArray(data)) {\n return data.map((item) => (typeof item === 'string' ? item : JSON.stringify(item))).join('\\n');\n }\n if (typeof data === 'object') {\n return '```json\\n' + JSON.stringify(data, null, 2) + '\\n```';\n }\n return String(data);\n}\n\n/**\n * The markdown to render: the inline value (quotes removed, escapes\n * interpreted, an optional leading `render`/`preview`/`view` dropped),\n * otherwise the piped data.\n */\nexport function resolveMarkdownInput(value: string | undefined, data: unknown): string {\n const words = splitWords(value ?? '');\n if (words.length && !words[0].quoted && RENDER_VERBS.includes(words[0].word.toLowerCase())) {\n words.shift();\n }\n const inline = interpretEscapes(words.map((w) => w.word).join(' '));\n if (inline.trim()) {\n return inline;\n }\n return dataToText(data);\n}\n\nexport class CliMarkdownCommandProcessor implements ICliCommandProcessor {\n command = 'md';\n description = 'Render Markdown in the terminal';\n aliases = ['markdown'];\n author = DefaultLibraryAuthor;\n metadata = { icon: CliIcon.File };\n\n // The text after `md` is the markdown itself. There are deliberately no\n // sub-processors: with sub-processors the engine treats the first word as\n // a sub-command name, so `md \"# x\"` would be \"command not found\".\n // `render`, `preview` and `view` are accepted as optional verbs instead.\n acceptsRawInput = true;\n\n async processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n const input = resolveMarkdownInput(command.value, command.data);\n if (!input.trim()) {\n context.writer.writeError('No markdown input. Pipe text or provide it inline.');\n context.writer.writeln('Usage: md \"# Hello\"');\n context.writer.writeln(' echo \"# Hello\" | md');\n context.process.exit(1, { silent: true });\n return;\n }\n for (const line of renderMarkdown(input)) {\n context.writer.writeln(line);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const t = context.translator;\n writeWrapped(\n context,\n t.t('cli.md.help.show_markdown_formatted_terminal', 'Show Markdown formatted in the terminal: headings, bold and italic text, lists, quotes, code and links. Pass the text inline (quoted or not, \\\\n starts a new line) or pipe it from another command.'),\n );\n context.writer.writeln();\n writeUsage(context, [\n ['md \"<markdown>\"', t.t('cli.md.help.render_inline_text', 'Render inline text')],\n ['md render \"<markdown>\"', t.t('cli.md.help.same_optional_render_verb', 'Same, with the optional render verb (also preview, view)')],\n ['<command> | md', t.t('cli.md.help.render_output_command', 'Render the output of a command')],\n ]);\n context.writer.writeln();\n writeExamples(context, [\n ['md \"## Title\"', t.t('cli.md.help.heading', 'A heading')],\n ['md \"# Title\\\\n- one\\\\n- two\"', t.t('cli.md.help.several_lines', 'Several lines')],\n ['echo \"# Hello\" | md', t.t('cli.md.help.piped_text', 'Piped text')],\n ['markdown view \"**bold** and *italic*\"', t.t('cli.md.help.same_using_aliases', 'Same, using aliases')],\n ]);\n }\n}\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.1.1';\nexport const API_VERSION = 2;\n ","/*\n * Public API Surface of markdown\n */\n\nexport * from './lib/processors/cli-markdown-command-processor';\nexport * from './lib/version';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliMarkdownCommandProcessor } from './lib/processors/cli-markdown-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const markdownModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-markdown',\n processors: [new CliMarkdownCommandProcessor()],\n translations: {\n es: { 'cli.md.description': 'Renderizar Markdown en la terminal' },\n fr: { 'cli.md.description': 'Afficher du Markdown dans le terminal' },\n de: { 'cli.md.description': 'Markdown im Terminal rendern' },\n pt: { 'cli.md.description': 'Renderizar Markdown no terminal' },\n it: { 'cli.md.description': 'Renderizzare Markdown nel terminale' },\n ja: { 'cli.md.description': 'ターミナルでMarkdownを描画' },\n ko: { 'cli.md.description': '터미널에서 Markdown 렌더링' },\n zh: { 'cli.md.description': '在终端中渲染 Markdown' },\n ru: { 'cli.md.description': 'Рендеринг Markdown в терминале' },\n ro: { 'cli.md.description': 'Redare Markdown în terminal' },\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/plugins/markdown/src/lib/markdown-renderer.ts","../../packages/plugins/markdown/src/lib/processors/cli-markdown-command-processor.ts","../../packages/plugins/markdown/src/lib/version.ts","../../packages/plugins/markdown/src/public-api.ts"],"names":[],"mappings":"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","file":"public-api.mjs","sourcesContent":["const RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst ITALIC = '\\x1b[3m';\nconst UNDERLINE = '\\x1b[4m';\n\nconst FG_YELLOW = '\\x1b[33m';\nconst FG_CYAN = '\\x1b[36m';\nconst FG_GREEN = '\\x1b[32m';\nconst FG_WHITE = '\\x1b[97m';\nconst BG_DARK = '\\x1b[48;5;236m';\n\nfunction wrap(text: string, ...codes: string[]): string {\n return codes.join('') + text + RESET;\n}\n\nexport function renderMarkdown(input: string): string[] {\n if (!input.trim()) return [];\n\n const rawLines = input.split('\\n');\n const output: string[] = [];\n let inCodeBlock = false;\n\n for (const line of rawLines) {\n if (line.startsWith('```')) {\n if (!inCodeBlock) {\n inCodeBlock = true;\n const lang = line.slice(3).trim();\n output.push(wrap(` ${lang || 'code'} `, DIM, BG_DARK));\n } else {\n inCodeBlock = false;\n output.push(wrap('\\u2500'.repeat(40), DIM));\n }\n continue;\n }\n\n if (inCodeBlock) {\n output.push(wrap(' ' + line, FG_GREEN));\n continue;\n }\n\n if (line.startsWith('### ')) {\n output.push(wrap(line.slice(4), BOLD, FG_CYAN));\n } else if (line.startsWith('## ')) {\n const text = line.slice(3);\n output.push(wrap(text, BOLD, FG_YELLOW));\n output.push(wrap('\\u2500'.repeat(text.length), FG_YELLOW));\n } else if (line.startsWith('# ')) {\n const text = line.slice(2);\n output.push(wrap(text, BOLD, UNDERLINE, FG_WHITE));\n output.push('');\n } else if (/^(-{3,}|\\*{3,}|_{3,})$/.test(line.trim())) {\n output.push(wrap('\\u2500'.repeat(60), DIM));\n } else if (line.startsWith('> ')) {\n output.push(wrap('\\u2502 ' + line.slice(2), DIM, ITALIC));\n } else if (/^[-*+] /.test(line)) {\n output.push(' \\u2022 ' + applyInline(line.slice(2)));\n } else if (/^\\d+\\. /.test(line)) {\n const match = line.match(/^(\\d+\\.) (.*)/);\n if (match) {\n output.push(` ${wrap(match[1], BOLD)} ${applyInline(match[2])}`);\n }\n } else if (line.trim() === '') {\n output.push('');\n } else {\n output.push(applyInline(line));\n }\n }\n\n return output;\n}\n\nfunction applyInline(text: string): string {\n // Bold **text** or __text__\n text = text.replace(/\\*\\*(.+?)\\*\\*|__(.+?)__/g, (_, a, b) => wrap(a ?? b, BOLD));\n // Italic *text* or _text_\n text = text.replace(/(?<!\\*)\\*([^*]+)\\*(?!\\*)|(?<!_)_([^_]+)_(?!_)/g, (_, a, b) => wrap(a ?? b, ITALIC));\n // Inline code `text`\n text = text.replace(/`([^`]+)`/g, (_, code) => wrap(code, FG_GREEN, BG_DARK));\n // Links [text](url)\n text = text.replace(/\\[(.+?)\\]\\((.+?)\\)/g, (_, label, url) =>\n wrap(label, UNDERLINE, FG_CYAN) + wrap(` (${url})`, DIM),\n );\n return text;\n}\n","import {\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n DefaultLibraryAuthor,\n CliIcon,\n writeExamples,\n writeUsage,\n writeWrapped,\n} from '@qodalis/cli-core';\nimport { renderMarkdown } from '../markdown-renderer';\n\n/** Verbs accepted before the text: `md render \"# x\"` is the same as `md \"# x\"`. */\nconst RENDER_VERBS = ['render', 'preview', 'view'];\n\n/**\n * Split raw text into shell-like words: quotes group words and are removed,\n * a backslash inside double quotes escapes the next character.\n */\nexport function splitWords(text: string): { word: string; quoted: boolean }[] {\n const words: { word: string; quoted: boolean }[] = [];\n let current = '';\n let inWord = false;\n let quoted = false;\n let quote: string | null = null;\n\n for (let i = 0; i < text.length; i++) {\n const ch = text[i];\n if (quote) {\n if (ch === quote) {\n quote = null;\n } else if (ch === '\\\\' && quote === '\"' && (text[i + 1] === '\"' || text[i + 1] === '\\\\')) {\n current += text[++i];\n } else {\n current += ch;\n }\n continue;\n }\n if (ch === '\"' || ch === \"'\") {\n quote = ch;\n inWord = true;\n quoted = true;\n continue;\n }\n if (/\\s/.test(ch)) {\n if (inWord) {\n words.push({ word: current, quoted });\n current = '';\n inWord = false;\n quoted = false;\n }\n continue;\n }\n current += ch;\n inWord = true;\n }\n if (inWord) {\n words.push({ word: current, quoted });\n }\n return words;\n}\n\n/** Interpret `\\n`, `\\t` and `\\\\` escapes typed on the command line. */\nexport function interpretEscapes(text: string): string {\n return text.replace(/\\\\([\\\\nt])/g, (_, ch: string) =>\n ch === 'n' ? '\\n' : ch === 't' ? '\\t' : '\\\\',\n );\n}\n\n/** Piped data as markdown text: strings as is, arrays one item per line. */\nfunction dataToText(data: unknown): string {\n if (data === undefined || data === null) return '';\n if (typeof data === 'string') return data;\n if (Array.isArray(data)) {\n return data.map((item) => (typeof item === 'string' ? item : JSON.stringify(item))).join('\\n');\n }\n if (typeof data === 'object') {\n return '```json\\n' + JSON.stringify(data, null, 2) + '\\n```';\n }\n return String(data);\n}\n\n/**\n * The markdown to render: the inline value (quotes removed, escapes\n * interpreted, an optional leading `render`/`preview`/`view` dropped),\n * otherwise the piped data.\n */\nexport function resolveMarkdownInput(value: string | undefined, data: unknown): string {\n const words = splitWords(value ?? '');\n if (words.length && !words[0].quoted && RENDER_VERBS.includes(words[0].word.toLowerCase())) {\n words.shift();\n }\n const inline = interpretEscapes(words.map((w) => w.word).join(' '));\n if (inline.trim()) {\n return inline;\n }\n return dataToText(data);\n}\n\nexport class CliMarkdownCommandProcessor implements ICliCommandProcessor {\n command = 'md';\n description = 'Render Markdown in the terminal';\n aliases = ['markdown'];\n author = DefaultLibraryAuthor;\n metadata = { icon: CliIcon.File };\n\n // The text after `md` is the markdown itself. There are deliberately no\n // sub-processors: with sub-processors the engine treats the first word as\n // a sub-command name, so `md \"# x\"` would be \"command not found\".\n // `render`, `preview` and `view` are accepted as optional verbs instead.\n acceptsRawInput = true;\n\n async processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n const input = resolveMarkdownInput(command.value, command.data);\n if (!input.trim()) {\n context.writer.writeError('No markdown input. Pipe text or provide it inline.');\n context.writer.writeln('Usage: md \"# Hello\"');\n context.writer.writeln(' echo \"# Hello\" | md');\n context.process.exit(1, { silent: true });\n return;\n }\n for (const line of renderMarkdown(input)) {\n context.writer.writeln(line);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const t = context.translator;\n writeWrapped(\n context,\n t.t('cli.md.help.show_markdown_formatted_terminal', 'Show Markdown formatted in the terminal: headings, bold and italic text, lists, quotes, code and links. Pass the text inline (quoted or not, \\\\n starts a new line) or pipe it from another command.'),\n );\n context.writer.writeln();\n writeUsage(context, [\n ['md \"<markdown>\"', t.t('cli.md.help.render_inline_text', 'Render inline text')],\n ['md render \"<markdown>\"', t.t('cli.md.help.same_optional_render_verb', 'Same, with the optional render verb (also preview, view)')],\n ['<command> | md', t.t('cli.md.help.render_output_command', 'Render the output of a command')],\n ]);\n context.writer.writeln();\n writeExamples(context, [\n ['md \"## Title\"', t.t('cli.md.help.heading', 'A heading')],\n ['md \"# Title\\\\n- one\\\\n- two\"', t.t('cli.md.help.several_lines', 'Several lines')],\n ['echo \"# Hello\" | md', t.t('cli.md.help.piped_text', 'Piped text')],\n ['markdown view \"**bold** and *italic*\"', t.t('cli.md.help.same_using_aliases', 'Same, using aliases')],\n ]);\n }\n}\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.2.0';\nexport const API_VERSION = 2;\n ","/*\n * Public API Surface of markdown\n */\n\nexport * from './lib/processors/cli-markdown-command-processor';\nexport * from './lib/version';\n\nimport { ICliModule } from '@qodalis/cli-core';\nimport { CliMarkdownCommandProcessor } from './lib/processors/cli-markdown-command-processor';\nimport { API_VERSION } from './lib/version';\n\nexport const markdownModule: ICliModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-markdown',\n processors: [new CliMarkdownCommandProcessor()],\n translations: {\n es: { 'cli.md.description': 'Renderizar Markdown en la terminal' },\n fr: { 'cli.md.description': 'Afficher du Markdown dans le terminal' },\n de: { 'cli.md.description': 'Markdown im Terminal rendern' },\n pt: { 'cli.md.description': 'Renderizar Markdown no terminal' },\n it: { 'cli.md.description': 'Renderizzare Markdown nel terminale' },\n ja: { 'cli.md.description': 'ターミナルでMarkdownを描画' },\n ko: { 'cli.md.description': '터미널에서 Markdown 렌더링' },\n zh: { 'cli.md.description': '在终端中渲染 Markdown' },\n ru: { 'cli.md.description': 'Рендеринг Markdown в терминале' },\n ro: { 'cli.md.description': 'Redare Markdown în terminal' },\n },\n};\n"]}
|
package/umd/index.global.js
CHANGED
|
@@ -2083,65 +2083,6 @@ var markdown = (() => {
|
|
|
2083
2083
|
}
|
|
2084
2084
|
}
|
|
2085
2085
|
};
|
|
2086
|
-
function writeColumns(context, rows, formatLeft, formatRight) {
|
|
2087
|
-
const width = Math.max(...rows.map(([left]) => left.length)) + 2;
|
|
2088
|
-
for (const [left, right] of rows) {
|
|
2089
|
-
context.writer.writeln(
|
|
2090
|
-
` ${formatLeft(left.padEnd(width))}${formatRight(right)}`
|
|
2091
|
-
);
|
|
2092
|
-
}
|
|
2093
|
-
}
|
|
2094
|
-
function writeUsage(context, rows) {
|
|
2095
|
-
const { writer, translator } = context;
|
|
2096
|
-
writer.writeln(`\u{1F4CB} ${translator.t("cli.common.usage", "Usage:")}`);
|
|
2097
|
-
writeColumns(
|
|
2098
|
-
context,
|
|
2099
|
-
rows,
|
|
2100
|
-
(cmd) => writer.wrapInColor(
|
|
2101
|
-
cmd,
|
|
2102
|
-
"\x1B[36m"
|
|
2103
|
-
/* Cyan */
|
|
2104
|
-
),
|
|
2105
|
-
(text) => text
|
|
2106
|
-
);
|
|
2107
|
-
}
|
|
2108
|
-
function writeExamples(context, rows) {
|
|
2109
|
-
const { writer, translator } = context;
|
|
2110
|
-
writer.writeln(`\u{1F4DD} ${translator.t("cli.common.examples", "Examples:")}`);
|
|
2111
|
-
writeColumns(
|
|
2112
|
-
context,
|
|
2113
|
-
rows,
|
|
2114
|
-
(cmd) => cmd,
|
|
2115
|
-
(comment) => writer.wrapInColor(
|
|
2116
|
-
`# ${comment}`,
|
|
2117
|
-
"\x1B[32m"
|
|
2118
|
-
/* Green */
|
|
2119
|
-
)
|
|
2120
|
-
);
|
|
2121
|
-
}
|
|
2122
|
-
function writeWrapped(context, text, indent = 0) {
|
|
2123
|
-
const cols = context.terminal?.cols ?? 80;
|
|
2124
|
-
const width = Math.max(20, Math.min(cols - 1, 100) - indent);
|
|
2125
|
-
const pad = " ".repeat(indent);
|
|
2126
|
-
let line = "";
|
|
2127
|
-
for (const word of text.split(/\s+/).filter(Boolean)) {
|
|
2128
|
-
if (line && visibleLength2(line) + 1 + visibleLength2(word) > width) {
|
|
2129
|
-
context.writer.writeln(pad + line);
|
|
2130
|
-
line = word;
|
|
2131
|
-
} else {
|
|
2132
|
-
line = line ? `${line} ${word}` : word;
|
|
2133
|
-
}
|
|
2134
|
-
}
|
|
2135
|
-
if (line) context.writer.writeln(pad + line);
|
|
2136
|
-
}
|
|
2137
|
-
function visibleLength2(text) {
|
|
2138
|
-
return text.replace(/\x1b\[[0-9;]*m/g, "").length;
|
|
2139
|
-
}
|
|
2140
|
-
var bootCliModule = async (module2) => {
|
|
2141
|
-
if (typeof window !== "undefined" && window.__cliModuleRegistry) {
|
|
2142
|
-
await window.__cliModuleRegistry.register(module2);
|
|
2143
|
-
}
|
|
2144
|
-
};
|
|
2145
2086
|
var DefaultThemes = {
|
|
2146
2087
|
default: {
|
|
2147
2088
|
background: "#070b14",
|
|
@@ -2166,6 +2107,29 @@ var markdown = (() => {
|
|
|
2166
2107
|
brightCyan: "#a5f3fc",
|
|
2167
2108
|
brightWhite: "#f1f5f9"
|
|
2168
2109
|
},
|
|
2110
|
+
light: {
|
|
2111
|
+
background: "#ffffff",
|
|
2112
|
+
foreground: "#1f2937",
|
|
2113
|
+
cursor: "#4f46e5",
|
|
2114
|
+
selectionBackground: "#c7d2fe",
|
|
2115
|
+
selectionForeground: "#111827",
|
|
2116
|
+
black: "#1f2937",
|
|
2117
|
+
red: "#dc2626",
|
|
2118
|
+
green: "#15803d",
|
|
2119
|
+
yellow: "#a16207",
|
|
2120
|
+
blue: "#4f46e5",
|
|
2121
|
+
magenta: "#9333ea",
|
|
2122
|
+
cyan: "#0e7490",
|
|
2123
|
+
white: "#6b7280",
|
|
2124
|
+
brightBlack: "#6b7280",
|
|
2125
|
+
brightRed: "#b91c1c",
|
|
2126
|
+
brightGreen: "#166534",
|
|
2127
|
+
brightYellow: "#854d0e",
|
|
2128
|
+
brightBlue: "#4338ca",
|
|
2129
|
+
brightMagenta: "#7e22ce",
|
|
2130
|
+
brightCyan: "#155e75",
|
|
2131
|
+
brightWhite: "#374151"
|
|
2132
|
+
},
|
|
2169
2133
|
classic: {
|
|
2170
2134
|
background: "#0c0c0c",
|
|
2171
2135
|
foreground: "#cccccc",
|
|
@@ -2777,6 +2741,95 @@ var markdown = (() => {
|
|
|
2777
2741
|
}
|
|
2778
2742
|
};
|
|
2779
2743
|
DefaultThemes.yellow = DefaultThemes.highContrastLight;
|
|
2744
|
+
var CliPanelPalettes = Object.freeze({
|
|
2745
|
+
dark: Object.freeze({
|
|
2746
|
+
background: "#070b14",
|
|
2747
|
+
headerBackground: "#0f1623",
|
|
2748
|
+
border: "#1e293b",
|
|
2749
|
+
text: "#e2e8f0",
|
|
2750
|
+
textSecondary: "#94a3b8",
|
|
2751
|
+
accent: "#818cf8",
|
|
2752
|
+
hoverBackground: "rgba(129, 140, 248, 0.12)",
|
|
2753
|
+
activeBackground: "rgba(129, 140, 248, 0.22)",
|
|
2754
|
+
danger: "#f87171",
|
|
2755
|
+
shadow: "rgba(0, 0, 0, 0.45)"
|
|
2756
|
+
}),
|
|
2757
|
+
light: Object.freeze({
|
|
2758
|
+
background: "#ffffff",
|
|
2759
|
+
headerBackground: "#f8fafc",
|
|
2760
|
+
border: "#e2e8f0",
|
|
2761
|
+
text: "#0f172a",
|
|
2762
|
+
textSecondary: "#64748b",
|
|
2763
|
+
accent: "#4f46e5",
|
|
2764
|
+
hoverBackground: "rgba(79, 70, 229, 0.08)",
|
|
2765
|
+
activeBackground: "rgba(79, 70, 229, 0.14)",
|
|
2766
|
+
danger: "#dc2626",
|
|
2767
|
+
shadow: "rgba(15, 23, 42, 0.14)"
|
|
2768
|
+
})
|
|
2769
|
+
});
|
|
2770
|
+
var PALETTE_TERMINALS = {
|
|
2771
|
+
dark: DefaultThemes.default,
|
|
2772
|
+
light: DefaultThemes.light
|
|
2773
|
+
};
|
|
2774
|
+
function writeColumns(context, rows, formatLeft, formatRight) {
|
|
2775
|
+
const width = Math.max(...rows.map(([left]) => left.length)) + 2;
|
|
2776
|
+
for (const [left, right] of rows) {
|
|
2777
|
+
context.writer.writeln(
|
|
2778
|
+
` ${formatLeft(left.padEnd(width))}${formatRight(right)}`
|
|
2779
|
+
);
|
|
2780
|
+
}
|
|
2781
|
+
}
|
|
2782
|
+
function writeUsage(context, rows) {
|
|
2783
|
+
const { writer, translator } = context;
|
|
2784
|
+
writer.writeln(`\u{1F4CB} ${translator.t("cli.common.usage", "Usage:")}`);
|
|
2785
|
+
writeColumns(
|
|
2786
|
+
context,
|
|
2787
|
+
rows,
|
|
2788
|
+
(cmd) => writer.wrapInColor(
|
|
2789
|
+
cmd,
|
|
2790
|
+
"\x1B[36m"
|
|
2791
|
+
/* Cyan */
|
|
2792
|
+
),
|
|
2793
|
+
(text) => text
|
|
2794
|
+
);
|
|
2795
|
+
}
|
|
2796
|
+
function writeExamples(context, rows) {
|
|
2797
|
+
const { writer, translator } = context;
|
|
2798
|
+
writer.writeln(`\u{1F4DD} ${translator.t("cli.common.examples", "Examples:")}`);
|
|
2799
|
+
writeColumns(
|
|
2800
|
+
context,
|
|
2801
|
+
rows,
|
|
2802
|
+
(cmd) => cmd,
|
|
2803
|
+
(comment) => writer.wrapInColor(
|
|
2804
|
+
`# ${comment}`,
|
|
2805
|
+
"\x1B[32m"
|
|
2806
|
+
/* Green */
|
|
2807
|
+
)
|
|
2808
|
+
);
|
|
2809
|
+
}
|
|
2810
|
+
function writeWrapped(context, text, indent = 0) {
|
|
2811
|
+
const cols = context.terminal?.cols ?? 80;
|
|
2812
|
+
const width = Math.max(20, Math.min(cols - 1, 100) - indent);
|
|
2813
|
+
const pad = " ".repeat(indent);
|
|
2814
|
+
let line = "";
|
|
2815
|
+
for (const word of text.split(/\s+/).filter(Boolean)) {
|
|
2816
|
+
if (line && visibleLength2(line) + 1 + visibleLength2(word) > width) {
|
|
2817
|
+
context.writer.writeln(pad + line);
|
|
2818
|
+
line = word;
|
|
2819
|
+
} else {
|
|
2820
|
+
line = line ? `${line} ${word}` : word;
|
|
2821
|
+
}
|
|
2822
|
+
}
|
|
2823
|
+
if (line) context.writer.writeln(pad + line);
|
|
2824
|
+
}
|
|
2825
|
+
function visibleLength2(text) {
|
|
2826
|
+
return text.replace(/\x1b\[[0-9;]*m/g, "").length;
|
|
2827
|
+
}
|
|
2828
|
+
var bootCliModule = async (module2) => {
|
|
2829
|
+
if (typeof window !== "undefined" && window.__cliModuleRegistry) {
|
|
2830
|
+
await window.__cliModuleRegistry.register(module2);
|
|
2831
|
+
}
|
|
2832
|
+
};
|
|
2780
2833
|
var DefaultThemeInfos = {
|
|
2781
2834
|
default: {
|
|
2782
2835
|
theme: DefaultThemes.default,
|
|
@@ -2784,6 +2837,12 @@ var markdown = (() => {
|
|
|
2784
2837
|
tags: ["built-in"],
|
|
2785
2838
|
description: "Dark indigo theme with soft pastels"
|
|
2786
2839
|
},
|
|
2840
|
+
light: {
|
|
2841
|
+
theme: DefaultThemes.light,
|
|
2842
|
+
category: "light",
|
|
2843
|
+
tags: ["built-in"],
|
|
2844
|
+
description: "Light counterpart of the default theme"
|
|
2845
|
+
},
|
|
2787
2846
|
classic: {
|
|
2788
2847
|
theme: DefaultThemes.classic,
|
|
2789
2848
|
category: "dark",
|