html-validate 11.0.0 → 11.1.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/dist/cjs/cli.js +1 -2
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/core.js +2 -2
- package/dist/cjs/html-validate.js +35 -50
- package/dist/cjs/html-validate.js.map +1 -1
- package/dist/cjs/index.js +0 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/cli.js +1 -2
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/core.js +2 -2
- package/dist/esm/html-validate.js +35 -49
- package/dist/esm/html-validate.js.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/package.json +4 -6
package/dist/cjs/cli.js
CHANGED
|
@@ -5,7 +5,6 @@ var core = require('./core.js');
|
|
|
5
5
|
var path$1 = require('node:path/posix');
|
|
6
6
|
var fs = require('node:fs');
|
|
7
7
|
var path = require('node:path');
|
|
8
|
-
var glob = require('glob');
|
|
9
8
|
var prompts = require('prompts');
|
|
10
9
|
require('./meta-helper.js');
|
|
11
10
|
var kleur = require('kleur');
|
|
@@ -51,7 +50,7 @@ function expandFiles(patterns, options) {
|
|
|
51
50
|
result.push("/dev/stdin");
|
|
52
51
|
return result;
|
|
53
52
|
}
|
|
54
|
-
for (const filename of
|
|
53
|
+
for (const filename of fs__default.default.globSync(pattern, { cwd })) {
|
|
55
54
|
const fullpath = join(cwd, filename);
|
|
56
55
|
if (isDirectory(fullpath)) {
|
|
57
56
|
const dir = expandFiles([directoryPattern(extensions)], { ...options, cwd: fullpath });
|
package/dist/cjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sources":["../../src/cli/expand-files.ts","../../src/cli/formatter.ts","../../src/cli/parse-severity.ts","../../src/cli/get-rule-config.ts","../../src/cli/init.ts","../../src/cli/is-ignored.ts","../../src/cli/cli.ts","../../src/cli/json.ts","../../src/cli/mode.ts","../../src/cli/actions/dump.ts","../../src/cli/actions/init.ts","../../src/cli/actions/lint.ts","../../src/cli/actions/print-config.ts","../../src/cli/errors/handle-schema-validation-error.ts","../../src/cli/errors/import-resolve-missing-error.ts","../../src/cli/have-import-meta-resolve.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { globSync } from \"glob\";\n\nconst DEFAULT_EXTENSIONS = [\"html\"];\n\n/**\n * @public\n */\nexport interface ExpandOptions {\n\t/**\n\t * Working directory. Defaults to `process.cwd()`.\n\t */\n\tcwd?: string;\n\n\t/**\n\t * List of extensions to search for when expanding directories. Extensions\n\t * should be passed without leading dot, e.g. \"html\" instead of \".html\".\n\t */\n\textensions?: string[];\n}\n\nfunction isDirectory(filename: string): boolean {\n\tconst st = fs.statSync(filename);\n\treturn st.isDirectory();\n}\n\nfunction join(stem: string, filename: string): string {\n\tif (path.isAbsolute(filename)) {\n\t\treturn path.normalize(filename);\n\t} else {\n\t\treturn path.normalize(path.join(stem, filename));\n\t}\n}\n\nfunction directoryPattern(extensions: string[]): string {\n\tswitch (extensions.length) {\n\t\tcase 0:\n\t\t\treturn \"**/*\";\n\t\tcase 1:\n\t\t\treturn `**/*.${extensions[0]}`;\n\t\tdefault:\n\t\t\treturn `**/*.{${extensions.join(\",\")}}`;\n\t}\n}\n\n/**\n * Takes a number of file patterns (globs) and returns array of expanded\n * filenames.\n */\nexport function expandFiles(patterns: string[], options: ExpandOptions): string[] {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst extensions = options.extensions ?? DEFAULT_EXTENSIONS;\n\n\tconst files = patterns.reduce((result: string[], pattern: string) => {\n\t\t/* process - as standard input */\n\t\tif (pattern === \"-\") {\n\t\t\tresult.push(\"/dev/stdin\");\n\t\t\treturn result;\n\t\t}\n\n\t\tfor (const filename of globSync(pattern, { cwd })) {\n\t\t\t/* if file is a directory recursively expand files from it */\n\t\t\tconst fullpath = join(cwd, filename);\n\t\t\tif (isDirectory(fullpath)) {\n\t\t\t\tconst dir = expandFiles([directoryPattern(extensions)], { ...options, cwd: fullpath });\n\t\t\t\tresult = result.concat(dir.map((cur) => join(filename, cur)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push(fullpath);\n\t\t}\n\n\t\treturn result.toSorted((a, b) => {\n\t\t\tconst pa = a.split(\"/\").length;\n\t\t\tconst pb = b.split(\"/\").length;\n\t\t\tif (pa !== pb) {\n\t\t\t\treturn pa - pb;\n\t\t\t} else {\n\t\t\t\treturn a > b ? 1 : -1;\n\t\t\t}\n\t\t});\n\t}, []);\n\n\t/* only return unique matches */\n\treturn Array.from(new Set(files));\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { type Formatter, type Report, type Result, UserError, formatterFactory } from \"..\";\nimport { ensureError } from \"../error\";\nimport { legacyRequire } from \"../resolve\";\n\ntype WrappedFormatter = (results: Result[]) => string;\n\nfunction wrap(formatter: Formatter, dst: string): (results: Result[]) => string {\n\treturn (results: Result[]) => {\n\t\tconst output = formatter(results);\n\t\tif (dst) {\n\t\t\tconst dir = path.dirname(dst);\n\t\t\tif (!fs.existsSync(dir)) {\n\t\t\t\tfs.mkdirSync(dir, { recursive: true });\n\t\t\t}\n\t\t\tfs.writeFileSync(dst, output, \"utf-8\");\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\treturn output;\n\t\t}\n\t};\n}\n\nfunction loadFormatter(name: string): Formatter {\n\tconst fn = formatterFactory(name);\n\tif (fn) {\n\t\treturn fn;\n\t}\n\n\ttry {\n\t\treturn legacyRequire(name) as Formatter;\n\t} catch (error: unknown) {\n\t\tthrow new UserError(`No formatter named \"${name}\"`, ensureError(error));\n\t}\n}\n\nexport function getFormatter(formatters: string): (report: Report) => string {\n\tconst fn: WrappedFormatter[] = formatters.split(\",\").map((cur) => {\n\t\tconst [name, dst] = cur.split(\"=\", 2);\n\t\tconst fn = loadFormatter(name);\n\t\treturn wrap(fn, dst);\n\t});\n\treturn (report: Report) => {\n\t\treturn fn\n\t\t\t.map((formatter: WrappedFormatter) => formatter(report.results))\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\");\n\t};\n}\n","import { type RuleSeverity } from \"../config\";\n\n/**\n * @internal\n */\nexport function parseSeverity(ruleId: string, severity: string): RuleSeverity {\n\tswitch (severity) {\n\t\tcase \"off\":\n\t\tcase \"0\":\n\t\t\treturn \"off\";\n\t\tcase \"warn\":\n\t\tcase \"1\":\n\t\t\treturn \"warn\";\n\t\tcase \"error\":\n\t\tcase \"2\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${severity}\" for rule \"${ruleId}\"`);\n\t}\n}\n","import { type RuleConfig, type RuleSeverity } from \"../config\";\nimport { parseSeverity } from \"./parse-severity\";\n\nfunction parseItem(value: string): { ruleId: string; severity: RuleSeverity } {\n\tconst [ruleId, severity = \"error\"] = value.split(\":\", 2);\n\treturn { ruleId, severity: parseSeverity(ruleId, severity) };\n}\n\n/**\n * @internal\n */\nexport function getRuleConfig(values: string | string[]): RuleConfig {\n\tif (typeof values === \"string\") {\n\t\treturn getRuleConfig([values]);\n\t}\n\n\treturn values.reduce<RuleConfig>((parsedRules, value) => {\n\t\tconst { ruleId, severity } = parseItem(value.trim());\n\t\treturn { [ruleId]: severity, ...parsedRules };\n\t}, {});\n}\n","import fs from \"node:fs\";\nimport deepmerge from \"deepmerge\";\nimport prompts from \"prompts\";\nimport { type ConfigData } from \"..\";\n\n/**\n * @public\n */\nexport interface InitResult {\n\tfilename: string;\n}\n\nexport enum Frameworks {\n\tangularjs = \"AngularJS\",\n\tvuejs = \"Vue.js\",\n\tmarkdown = \"Markdown\",\n}\n\nconst frameworkConfig: Record<string, ConfigData> = {\n\t[Frameworks.angularjs]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.js$\": \"html-validate-angular/js\",\n\t\t\t\"^.*\\\\.html$\": \"html-validate-angular/html\",\n\t\t},\n\t},\n\t[Frameworks.vuejs]: {\n\t\tplugins: [\"html-validate-vue\"],\n\t\textends: [\"html-validate-vue:recommended\"],\n\t\ttransform: {\n\t\t\t\"^.*\\\\.vue$\": \"html-validate-vue\",\n\t\t},\n\t},\n\t[Frameworks.markdown]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.md$\": \"html-validate-markdown\",\n\t\t},\n\t},\n};\n\nfunction addFrameworks(src: ConfigData, frameworks: string[]): ConfigData {\n\tlet config = src;\n\tfor (const framework of frameworks) {\n\t\tconfig = deepmerge(config, frameworkConfig[framework]);\n\t}\n\treturn config;\n}\n\nfunction writeConfig(dst: string, config: ConfigData): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tfs.writeFile(dst, JSON.stringify(config, null, 2), (err) => {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t\tresolve();\n\t\t});\n\t});\n}\n\nexport async function init(cwd: string): Promise<InitResult> {\n\tconst filename = `${cwd}/.htmlvalidate.json`;\n\tconst exists = fs.existsSync(filename);\n\tconst initialConfig: ConfigData = {\n\t\telements: [\"html5\"],\n\t\textends: [\"html-validate:recommended\"],\n\t};\n\n\t/* confirm overwrite */\n\tif (exists) {\n\t\tconst result = await prompts({\n\t\t\tname: \"overwrite\",\n\t\t\ttype: \"confirm\",\n\t\t\tmessage: \"A .htmlvalidate.json file already exists, do you want to overwrite it?\",\n\t\t});\n\t\tif (!result.overwrite) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors, unicorn/no-useless-promise-resolve-reject -- technical debt, should not result in failure at all */\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\n\tconst questions: prompts.PromptObject[] = [\n\t\t{\n\t\t\tname: \"frameworks\",\n\t\t\ttype: \"multiselect\",\n\t\t\tchoices: [\n\t\t\t\t{ title: Frameworks.angularjs, value: Frameworks.angularjs },\n\t\t\t\t{ title: Frameworks.vuejs, value: Frameworks.vuejs },\n\t\t\t\t{ title: Frameworks.markdown, value: Frameworks.markdown },\n\t\t\t],\n\t\t\tmessage: \"Support additional frameworks?\",\n\t\t},\n\t];\n\n\t/* prompt user for questions */\n\tconst answers = await prompts(questions);\n\n\t/* write configuration to file */\n\tlet config = initialConfig;\n\tconfig = addFrameworks(config, answers[\"frameworks\"] as string[]);\n\tawait writeConfig(filename, config);\n\n\treturn {\n\t\tfilename,\n\t};\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ignore, { type Ignore } from \"ignore\";\n\nexport class IsIgnored {\n\t/** Cache for parsed .htmlvalidateignore files */\n\tprivate cacheIgnore: Map<string, Ignore | undefined>;\n\n\tpublic constructor() {\n\t\tthis.cacheIgnore = new Map();\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tpublic isIgnored(filename: string): boolean {\n\t\treturn this.match(filename);\n\t}\n\n\t/**\n\t * Clear cache\n\t */\n\tpublic clearCache(): void {\n\t\tthis.cacheIgnore.clear();\n\t}\n\n\tprivate match(target: string): boolean {\n\t\tlet current = path.dirname(target);\n\n\t\tfor (;;) {\n\t\t\tconst relative = path.relative(current, target);\n\t\t\tconst filename = path.join(current, \".htmlvalidateignore\");\n\n\t\t\t/* test filename (relative to the ignore file) against the patterns */\n\t\t\tconst ig = this.parseFile(filename);\n\t\t\tif (ig?.ignores(relative)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate parseFile(filename: string): Ignore | undefined {\n\t\tif (this.cacheIgnore.has(filename)) {\n\t\t\treturn this.cacheIgnore.get(filename);\n\t\t}\n\n\t\tif (!fs.existsSync(filename)) {\n\t\t\tthis.cacheIgnore.set(filename, undefined);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst content = fs.readFileSync(filename, \"utf-8\");\n\t\tconst ig = ignore().add(content);\n\t\tthis.cacheIgnore.set(filename, ig);\n\t\treturn ig;\n\t}\n}\n","import path from \"node:path/posix\";\nimport {\n\ttype ConfigData,\n\ttype ConfigLoader,\n\ttype Report,\n\tFileSystemConfigLoader,\n\tHtmlValidate,\n\tUserError,\n\tesmResolver,\n} from \"..\";\nimport { type ExpandOptions, expandFiles } from \"./expand-files\";\nimport { getFormatter } from \"./formatter\";\nimport { getRuleConfig } from \"./get-rule-config\";\nimport { type InitResult, init } from \"./init\";\nimport { IsIgnored } from \"./is-ignored\";\n\nconst resolver = esmResolver();\n\nfunction defaultConfig(preset: string): ConfigData {\n\tconst presets = preset.split(\",\").map((it) => `html-validate:${it}`);\n\treturn {\n\t\textends: presets,\n\t};\n}\n\n/**\n * @public\n */\nexport interface CLIOptions {\n\tconfigFile?: string;\n\t/** Comma-separated list of presets to use */\n\tpreset?: string;\n\trules?: string | string[];\n}\n\nasync function getBaseConfig(preset?: string, filename?: string): Promise<ConfigData> {\n\tif (filename) {\n\t\tconst configData = await resolver.resolveConfig(path.resolve(filename), { cache: false });\n\t\tif (!configData) {\n\t\t\tthrow new UserError(`Failed to read configuration from \"${filename}\"`);\n\t\t}\n\t\treturn configData;\n\t} else {\n\t\treturn defaultConfig(preset ?? \"recommended\");\n\t}\n}\n\n/**\n * @public\n */\nexport class CLI {\n\tprivate options: CLIOptions;\n\tprivate config: ConfigData | null;\n\tprivate loader: ConfigLoader | null;\n\tprivate ignored: IsIgnored;\n\n\t/**\n\t * Create new CLI helper.\n\t *\n\t * Can be used to create tooling with similar properties to bundled CLI\n\t * script.\n\t */\n\tpublic constructor(options?: CLIOptions) {\n\t\tthis.options = options ?? {};\n\t\tthis.config = null;\n\t\tthis.loader = null;\n\t\tthis.ignored = new IsIgnored();\n\t}\n\n\t/**\n\t * Returns list of files matching patterns and are not ignored. Filenames will\n\t * have absolute paths.\n\t *\n\t * @public\n\t */\n\t/* eslint-disable-next-line @typescript-eslint/require-await -- technical debt: expandFiles(..) should actually be async as well */\n\tpublic async expandFiles(patterns: string[], options: ExpandOptions = {}): Promise<string[]> {\n\t\treturn expandFiles(patterns, options).filter((filename) => !this.isIgnored(filename));\n\t}\n\n\tpublic getFormatter(formatters: string): Promise<(report: Report) => string> {\n\t\t/* while not actually async the API boundary returns a Promise in case it needs to in the future, i.e a ESM-based formatter */\n\t\treturn Promise.resolve(getFormatter(formatters));\n\t}\n\n\t/**\n\t * Initialize project with a new configuration.\n\t *\n\t * A new `.htmlvalidate.json` file will be placed in the path provided by\n\t * `cwd`.\n\t */\n\tpublic init(cwd: string): Promise<InitResult> {\n\t\treturn init(cwd);\n\t}\n\n\t/**\n\t * Clear cache.\n\t *\n\t * Previously fetched [[HtmlValidate]] instances must either be fetched again\n\t * or call [[HtmlValidate.flushConfigCache]].\n\t */\n\t/* istanbul ignore next: each method is tested separately */\n\tpublic clearCache(): Promise<void> {\n\t\tif (this.loader) {\n\t\t\tthis.loader.flushCache();\n\t\t}\n\t\tthis.ignored.clearCache();\n\t\treturn Promise.resolve();\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @internal\n\t */\n\tpublic async getLoader(): Promise<ConfigLoader> {\n\t\t/* istanbul ignore next: cache will most likely be cold during testing */\n\t\tif (!this.loader) {\n\t\t\tconst config = await this.getConfig();\n\t\t\tthis.loader = new FileSystemConfigLoader([resolver], config);\n\t\t}\n\t\treturn this.loader;\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @public\n\t */\n\tpublic async getValidator(): Promise<HtmlValidate> {\n\t\tconst loader = await this.getLoader();\n\t\treturn new HtmlValidate(loader);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic async getConfig(): Promise<ConfigData> {\n\t\tthis.config ??= await this.resolveConfig();\n\t\treturn this.config;\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tprivate isIgnored(filename: string): boolean {\n\t\treturn this.ignored.isIgnored(filename);\n\t}\n\n\tprivate async resolveConfig(): Promise<ConfigData> {\n\t\tconst { options } = this;\n\t\tconst havePreset = Boolean(options.preset);\n\t\tconst haveConfig = Boolean(options.configFile);\n\t\tconst config = await getBaseConfig(options.preset, options.configFile);\n\t\tif (options.rules) {\n\t\t\tif (havePreset || haveConfig) {\n\t\t\t\t/* when rules are explicitly specified and combined with an explicit\n\t\t\t\t * preset or configuration file we merge the result as the user would\n\t\t\t\texpect rules from the preset or configuration files to be used */\n\t\t\t\tconfig.rules = { ...config.rules, ...getRuleConfig(options.rules) };\n\t\t\t} else {\n\t\t\t\t/* if neither an explicit configuration file or preset is passed as a\n\t\t\t\t * CLI argument a default configuration is loaded but since the user has\n\t\t\t\t * specified one or more rules explicitly we overwrite both the default\n\t\t\t\t * preset and the default rules with the explicit rules */\n\t\t\t\tconfig.extends = [];\n\t\t\t\tconfig.rules = getRuleConfig(options.rules);\n\t\t\t}\n\t\t}\n\t\treturn config;\n\t}\n}\n","import { type EventDump, type Location } from \"..\";\n\nconst jsonIgnored = new Set([\n\t\"annotation\",\n\t\"blockedRules\",\n\t\"cache\",\n\t\"closed\",\n\t\"depth\",\n\t\"disabledRules\",\n\t\"nodeType\",\n\t\"unique\",\n\t\"voidElement\",\n]);\nconst jsonFiltered = new Set([\n\t\"childNodes\",\n\t\"children\",\n\t\"data\",\n\t\"meta\",\n\t\"metaElement\",\n\t\"originalData\",\n\t\"parent\",\n]);\n\nfunction isLocation(key: string, value: unknown): value is Location {\n\treturn Boolean(value && (key === \"location\" || key.endsWith(\"Location\")));\n}\n\nfunction isIgnored(key: string): boolean {\n\treturn key.startsWith(\"_\") || jsonIgnored.has(key);\n}\n\nfunction isFiltered(key: string, value: unknown): boolean {\n\treturn Boolean(value && jsonFiltered.has(key));\n}\n\nexport function eventReplacer<T>(this: void, key: string, value: T): T | string | undefined {\n\tif (isLocation(key, value)) {\n\t\tconst filename = value.filename;\n\t\tconst line = String(value.line);\n\t\tconst column = String(value.column);\n\t\treturn `${filename}:${line}:${column}`;\n\t}\n\tif (isIgnored(key)) {\n\t\treturn undefined;\n\t}\n\tif (isFiltered(key, value)) {\n\t\treturn \"[truncated]\";\n\t}\n\treturn value;\n}\n\nexport function eventFormatter(entry: EventDump): string {\n\tconst strdata = JSON.stringify(entry.data, eventReplacer, 2);\n\treturn `${entry.event}: ${strdata}`;\n}\n","/**\n * @internal\n */\nexport enum Mode {\n\tLINT,\n\tINIT,\n\tDUMP_EVENTS,\n\tDUMP_TOKENS,\n\tDUMP_TREE,\n\tDUMP_SOURCE,\n\tPRINT_CONFIG,\n}\n\n/**\n * @internal\n */\nexport function modeToFlag(mode: Mode.LINT): null;\nexport function modeToFlag(mode: Exclude<Mode, Mode.LINT>): string;\nexport function modeToFlag(mode: Mode): string | null;\nexport function modeToFlag(mode: Mode): string | null {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn null;\n\t\tcase Mode.INIT:\n\t\t\treturn \"--init\";\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\treturn \"--dump-events\";\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\treturn \"--dump-tokens\";\n\t\tcase Mode.DUMP_TREE:\n\t\t\treturn \"--dump-tree\";\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\treturn \"--dump-source\";\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn \"--print-config\";\n\t}\n}\n","import { type HtmlValidate, type TokenDump } from \"../..\";\nimport { eventFormatter } from \"../json\";\nimport { Mode } from \"../mode\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function dump(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n\tmode: Mode,\n): Promise<boolean> {\n\tlet lines: Array<Promise<string[]>>;\n\tswitch (mode) {\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpEvents(filename);\n\t\t\t\treturn lines.map(eventFormatter);\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpTokens(filename);\n\t\t\t\treturn lines.map((entry: TokenDump) => {\n\t\t\t\t\tconst data = JSON.stringify(entry.data);\n\t\t\t\t\treturn `TOKEN: ${entry.token}\\n Data: ${data}\\n Location: ${entry.location}`;\n\t\t\t\t});\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TREE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpTree(filename));\n\t\t\tbreak;\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpSource(filename));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown mode \"${String(mode)}\"`);\n\t}\n\tconst results = await Promise.all(lines);\n\tconst flat = results.flat();\n\toutput.write(flat.join(\"\\n\"));\n\toutput.write(\"\\n\");\n\treturn true;\n}\n","import { type CLI } from \"../cli\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface InitOptions {\n\tcwd: string;\n}\n\nexport async function init(\n\tcli: CLI,\n\toutput: WritableStreamLike,\n\toptions: InitOptions,\n): Promise<boolean> {\n\tconst result = await cli.init(options.cwd);\n\toutput.write(`Configuration written to \"${result.filename}\"\\n`);\n\treturn true;\n}\n","import kleur from \"kleur\";\nimport { type HtmlValidate, type Report, type Result, Reporter } from \"../..\";\nimport { type PerformanceResult } from \"../../performance\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface LintOptions {\n\tformatter: (report: Report) => string;\n\tmaxWarnings: number;\n\tperformance: boolean;\n\tstdinFilename: false | string;\n}\nfunction formatMs(ms: number): string {\n\treturn `${ms.toFixed(2)}ms`;\n}\n\nfunction formatPerformanceTable(\n\tnameHeader: string,\n\tentries: Array<{ name: string; count: number; time: number }>,\n\ttotalTime: number,\n): string {\n\tconst nameWidth = Math.max(nameHeader.length, ...entries.map((e) => e.name.length)) + 2;\n\tconst countWidth = Math.max(5, ...entries.map((e) => String(e.count).length)) + 2;\n\tconst header = ` ${nameHeader.padEnd(nameWidth)}${\"count\".padStart(countWidth)} ${\"time(ms)\".padStart(10)} ${\"time(%)\".padStart(8)}`;\n\tconst separator = ` ${\"─\".repeat(header.length - 2)}`;\n\tconst rows = entries.map((entry) => {\n\t\tconst pct = totalTime > 0 ? ((entry.time / totalTime) * 100).toFixed(1) : \"0.0\";\n\t\tconst pctStr = `${pct}%`;\n\t\treturn ` ${entry.name.padEnd(nameWidth)}${String(entry.count).padStart(countWidth)} ${formatMs(entry.time).padStart(10)} ${pctStr.padStart(8)}`;\n\t});\n\treturn [header, separator, ...rows].join(\"\\n\");\n}\n\nfunction formatPerformanceResult(result: PerformanceResult): string {\n\tconst totalEventTime = result.events.reduce((sum, e) => sum + e.time, 0);\n\tconst totalRuleTime = result.rules.reduce((sum, e) => sum + e.time, 0);\n\tconst { configTime, transformTime, totalTime } = result;\n\tconst eventEntries = result.events.map((e) => ({ name: e.event, count: e.count, time: e.time }));\n\tconst ruleEntries = result.rules.map((e) => ({ name: e.rule, count: e.count, time: e.time }));\n\tconst lines = [\n\t\t\"Performance\",\n\t\t\"\",\n\t\t\"Events:\",\n\t\tformatPerformanceTable(\"event\", eventEntries, totalTime),\n\t\t\"\",\n\t\t\"Rules:\",\n\t\tformatPerformanceTable(\"rule\", ruleEntries, totalTime),\n\t\t\"\",\n\t\t`Total: ${formatMs(totalTime)}`,\n\t\t` Config: ${formatMs(configTime)}`,\n\t\t` Transform: ${formatMs(transformTime)}`,\n\t\t` Events: ${formatMs(totalEventTime - totalRuleTime)}`,\n\t\t` Rules: ${formatMs(totalRuleTime)}`,\n\t\t\"\",\n\t];\n\treturn lines.join(\"\\n\");\n}\n\nfunction renameStdin(report: Report, filename: string): void {\n\tconst stdin = report.results.find((cur: Result) => cur.filePath === \"/dev/stdin\");\n\tif (stdin) {\n\t\tstdin.filePath = filename;\n\t}\n}\n\nexport async function lint(\n\thtmlvalidate: HtmlValidate,\n\tstdout: WritableStreamLike,\n\tstderr: WritableStreamLike,\n\tfiles: string[],\n\toptions: LintOptions,\n): Promise<boolean> {\n\tif (options.performance) {\n\t\thtmlvalidate.startPerformance();\n\t}\n\n\tconst reports: Report[] = [];\n\tfor (const filename of files) {\n\t\ttry {\n\t\t\treports.push(await htmlvalidate.validateFile(filename));\n\t\t} catch (err) {\n\t\t\tconst message = kleur.red(`Validator crashed when parsing \"${filename}\"`);\n\t\t\tstdout.write(`${message}\\n`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tconst merged = Reporter.merge(reports);\n\n\t/* rename stdin if an explicit filename was passed */\n\tif (options.stdinFilename) {\n\t\trenameStdin(merged, options.stdinFilename);\n\t}\n\n\tstdout.write(options.formatter(merged));\n\n\tif (options.performance) {\n\t\tconst performanceResult = htmlvalidate.stopPerformance();\n\t\tstderr.write(formatPerformanceResult(performanceResult));\n\t}\n\n\tif (options.maxWarnings >= 0 && merged.warningCount > options.maxWarnings) {\n\t\tstdout.write(\n\t\t\t`\\nhtml-validate found too many warnings (maximum: ${String(options.maxWarnings)}).\\n`,\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn merged.valid;\n}\n","import { type HtmlValidate } from \"../..\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function printConfig(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n): Promise<boolean> {\n\tif (files.length > 1) {\n\t\toutput.write(`\\`--print-config\\` expected a single filename but got multiple:\\n\\n`);\n\t\tfor (const filename of files) {\n\t\t\toutput.write(` - ${filename}\\n`);\n\t\t}\n\t\toutput.write(\"\\n\");\n\t\treturn false;\n\t}\n\tconst config = await htmlvalidate.getConfigFor(files[0]);\n\tconst json = JSON.stringify(config.getConfigData(), null, 2);\n\toutput.write(`${json}\\n`);\n\treturn true;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport betterAjvErrors from \"@sidvind/better-ajv-errors\";\nimport kleur from \"kleur\";\nimport { type SchemaValidationError } from \"../../error\";\n\nfunction prettyError(err: SchemaValidationError): string {\n\tlet json: string | undefined;\n\tif (err.filename && fs.existsSync(err.filename)) {\n\t\tjson = fs.readFileSync(err.filename, \"utf-8\");\n\t}\n\treturn betterAjvErrors(err.schema, err.obj, err.errors, {\n\t\tformat: \"cli\",\n\t\tindent: 2,\n\t\tjson,\n\t});\n}\n\n/**\n * @internal\n */\nexport function handleSchemaValidationError(console: Console, err: SchemaValidationError): void {\n\tif (err.filename) {\n\t\tconst filename = path.relative(process.cwd(), err.filename);\n\t\tconsole.error(kleur.red(`A configuration error was found in \"${filename}\":`));\n\t} else {\n\t\tconsole.error(kleur.red(`A configuration error was found:`));\n\t}\n\tconsole.group();\n\t{\n\t\tconsole.error(prettyError(err));\n\t}\n\tconsole.groupEnd();\n}\n","import kleur from \"kleur\";\nimport { engines } from \"../../../package.json\";\nimport { UserError } from \"../../error\";\n\n/**\n * @internal\n */\nexport class ImportResolveMissingError extends UserError {\n\tpublic constructor() {\n\t\tconst message = `import.meta.resolve(..) is not available on this system`;\n\t\tsuper(message);\n\t\tthis.name = \"ImportResolveMissingError\";\n\t}\n\n\tpublic override prettyFormat(): string {\n\t\tconst { message } = this;\n\t\tconst currentVersion = process.version;\n\t\tconst requiredVersion = engines.node\n\t\t\t.split(\"||\")\n\t\t\t.map((it) => `v${it.replace(/^\\D+/, \"\").trim()}`);\n\t\treturn [\n\t\t\tkleur.red(`Error: ${message}.`),\n\t\t\t\"\",\n\t\t\t`Either ensure you are running a supported NodeJS version:`,\n\t\t\t` Current: ${currentVersion}`,\n\t\t\t` Required: ${requiredVersion.join(\", \")} or later`,\n\t\t\t`Or set NODE_OPTIONS=\"--experimental-import-meta-resolve\"`,\n\t\t].join(\"\\n\");\n\t}\n}\n","/**\n * @internal\n */\nexport function haveImportMetaResolve(): boolean {\n\treturn \"resolve\" in import.meta;\n}\n"],"names":["fs","path","globSync","formatterFactory","legacyRequire","UserError","ensureError","fn","deepmerge","init","prompts","ignore","esmResolver","FileSystemConfigLoader","HtmlValidate","Mode","lines","kleur","Reporter","betterAjvErrors","engines"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../../src/cli/expand-files.ts","../../src/cli/formatter.ts","../../src/cli/parse-severity.ts","../../src/cli/get-rule-config.ts","../../src/cli/init.ts","../../src/cli/is-ignored.ts","../../src/cli/cli.ts","../../src/cli/json.ts","../../src/cli/mode.ts","../../src/cli/actions/dump.ts","../../src/cli/actions/init.ts","../../src/cli/actions/lint.ts","../../src/cli/actions/print-config.ts","../../src/cli/errors/handle-schema-validation-error.ts","../../src/cli/errors/import-resolve-missing-error.ts","../../src/cli/have-import-meta-resolve.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nconst DEFAULT_EXTENSIONS = [\"html\"];\n\n/**\n * @public\n */\nexport interface ExpandOptions {\n\t/**\n\t * Working directory. Defaults to `process.cwd()`.\n\t */\n\tcwd?: string;\n\n\t/**\n\t * List of extensions to search for when expanding directories. Extensions\n\t * should be passed without leading dot, e.g. \"html\" instead of \".html\".\n\t */\n\textensions?: string[];\n}\n\nfunction isDirectory(filename: string): boolean {\n\tconst st = fs.statSync(filename);\n\treturn st.isDirectory();\n}\n\nfunction join(stem: string, filename: string): string {\n\tif (path.isAbsolute(filename)) {\n\t\treturn path.normalize(filename);\n\t} else {\n\t\treturn path.normalize(path.join(stem, filename));\n\t}\n}\n\nfunction directoryPattern(extensions: string[]): string {\n\tswitch (extensions.length) {\n\t\tcase 0:\n\t\t\treturn \"**/*\";\n\t\tcase 1:\n\t\t\treturn `**/*.${extensions[0]}`;\n\t\tdefault:\n\t\t\treturn `**/*.{${extensions.join(\",\")}}`;\n\t}\n}\n\n/**\n * Takes a number of file patterns (globs) and returns array of expanded\n * filenames.\n */\nexport function expandFiles(patterns: string[], options: ExpandOptions): string[] {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst extensions = options.extensions ?? DEFAULT_EXTENSIONS;\n\n\tconst files = patterns.reduce((result: string[], pattern: string) => {\n\t\t/* process - as standard input */\n\t\tif (pattern === \"-\") {\n\t\t\tresult.push(\"/dev/stdin\");\n\t\t\treturn result;\n\t\t}\n\n\t\tfor (const filename of fs.globSync(pattern, { cwd })) {\n\t\t\t/* if file is a directory recursively expand files from it */\n\t\t\tconst fullpath = join(cwd, filename);\n\t\t\tif (isDirectory(fullpath)) {\n\t\t\t\tconst dir = expandFiles([directoryPattern(extensions)], { ...options, cwd: fullpath });\n\t\t\t\tresult = result.concat(dir.map((cur) => join(filename, cur)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push(fullpath);\n\t\t}\n\n\t\treturn result.toSorted((a, b) => {\n\t\t\tconst pa = a.split(\"/\").length;\n\t\t\tconst pb = b.split(\"/\").length;\n\t\t\tif (pa !== pb) {\n\t\t\t\treturn pa - pb;\n\t\t\t} else {\n\t\t\t\treturn a > b ? 1 : -1;\n\t\t\t}\n\t\t});\n\t}, []);\n\n\t/* only return unique matches */\n\treturn Array.from(new Set(files));\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { type Formatter, type Report, type Result, UserError, formatterFactory } from \"..\";\nimport { ensureError } from \"../error\";\nimport { legacyRequire } from \"../resolve\";\n\ntype WrappedFormatter = (results: Result[]) => string;\n\nfunction wrap(formatter: Formatter, dst: string): (results: Result[]) => string {\n\treturn (results: Result[]) => {\n\t\tconst output = formatter(results);\n\t\tif (dst) {\n\t\t\tconst dir = path.dirname(dst);\n\t\t\tif (!fs.existsSync(dir)) {\n\t\t\t\tfs.mkdirSync(dir, { recursive: true });\n\t\t\t}\n\t\t\tfs.writeFileSync(dst, output, \"utf-8\");\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\treturn output;\n\t\t}\n\t};\n}\n\nfunction loadFormatter(name: string): Formatter {\n\tconst fn = formatterFactory(name);\n\tif (fn) {\n\t\treturn fn;\n\t}\n\n\ttry {\n\t\treturn legacyRequire(name) as Formatter;\n\t} catch (error: unknown) {\n\t\tthrow new UserError(`No formatter named \"${name}\"`, ensureError(error));\n\t}\n}\n\nexport function getFormatter(formatters: string): (report: Report) => string {\n\tconst fn: WrappedFormatter[] = formatters.split(\",\").map((cur) => {\n\t\tconst [name, dst] = cur.split(\"=\", 2);\n\t\tconst fn = loadFormatter(name);\n\t\treturn wrap(fn, dst);\n\t});\n\treturn (report: Report) => {\n\t\treturn fn\n\t\t\t.map((formatter: WrappedFormatter) => formatter(report.results))\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\");\n\t};\n}\n","import { type RuleSeverity } from \"../config\";\n\n/**\n * @internal\n */\nexport function parseSeverity(ruleId: string, severity: string): RuleSeverity {\n\tswitch (severity) {\n\t\tcase \"off\":\n\t\tcase \"0\":\n\t\t\treturn \"off\";\n\t\tcase \"warn\":\n\t\tcase \"1\":\n\t\t\treturn \"warn\";\n\t\tcase \"error\":\n\t\tcase \"2\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${severity}\" for rule \"${ruleId}\"`);\n\t}\n}\n","import { type RuleConfig, type RuleSeverity } from \"../config\";\nimport { parseSeverity } from \"./parse-severity\";\n\nfunction parseItem(value: string): { ruleId: string; severity: RuleSeverity } {\n\tconst [ruleId, severity = \"error\"] = value.split(\":\", 2);\n\treturn { ruleId, severity: parseSeverity(ruleId, severity) };\n}\n\n/**\n * @internal\n */\nexport function getRuleConfig(values: string | string[]): RuleConfig {\n\tif (typeof values === \"string\") {\n\t\treturn getRuleConfig([values]);\n\t}\n\n\treturn values.reduce<RuleConfig>((parsedRules, value) => {\n\t\tconst { ruleId, severity } = parseItem(value.trim());\n\t\treturn { [ruleId]: severity, ...parsedRules };\n\t}, {});\n}\n","import fs from \"node:fs\";\nimport deepmerge from \"deepmerge\";\nimport prompts from \"prompts\";\nimport { type ConfigData } from \"..\";\n\n/**\n * @public\n */\nexport interface InitResult {\n\tfilename: string;\n}\n\nexport enum Frameworks {\n\tangularjs = \"AngularJS\",\n\tvuejs = \"Vue.js\",\n\tmarkdown = \"Markdown\",\n}\n\nconst frameworkConfig: Record<string, ConfigData> = {\n\t[Frameworks.angularjs]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.js$\": \"html-validate-angular/js\",\n\t\t\t\"^.*\\\\.html$\": \"html-validate-angular/html\",\n\t\t},\n\t},\n\t[Frameworks.vuejs]: {\n\t\tplugins: [\"html-validate-vue\"],\n\t\textends: [\"html-validate-vue:recommended\"],\n\t\ttransform: {\n\t\t\t\"^.*\\\\.vue$\": \"html-validate-vue\",\n\t\t},\n\t},\n\t[Frameworks.markdown]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.md$\": \"html-validate-markdown\",\n\t\t},\n\t},\n};\n\nfunction addFrameworks(src: ConfigData, frameworks: string[]): ConfigData {\n\tlet config = src;\n\tfor (const framework of frameworks) {\n\t\tconfig = deepmerge(config, frameworkConfig[framework]);\n\t}\n\treturn config;\n}\n\nfunction writeConfig(dst: string, config: ConfigData): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tfs.writeFile(dst, JSON.stringify(config, null, 2), (err) => {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t\tresolve();\n\t\t});\n\t});\n}\n\nexport async function init(cwd: string): Promise<InitResult> {\n\tconst filename = `${cwd}/.htmlvalidate.json`;\n\tconst exists = fs.existsSync(filename);\n\tconst initialConfig: ConfigData = {\n\t\telements: [\"html5\"],\n\t\textends: [\"html-validate:recommended\"],\n\t};\n\n\t/* confirm overwrite */\n\tif (exists) {\n\t\tconst result = await prompts({\n\t\t\tname: \"overwrite\",\n\t\t\ttype: \"confirm\",\n\t\t\tmessage: \"A .htmlvalidate.json file already exists, do you want to overwrite it?\",\n\t\t});\n\t\tif (!result.overwrite) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors, unicorn/no-useless-promise-resolve-reject -- technical debt, should not result in failure at all */\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\n\tconst questions: prompts.PromptObject[] = [\n\t\t{\n\t\t\tname: \"frameworks\",\n\t\t\ttype: \"multiselect\",\n\t\t\tchoices: [\n\t\t\t\t{ title: Frameworks.angularjs, value: Frameworks.angularjs },\n\t\t\t\t{ title: Frameworks.vuejs, value: Frameworks.vuejs },\n\t\t\t\t{ title: Frameworks.markdown, value: Frameworks.markdown },\n\t\t\t],\n\t\t\tmessage: \"Support additional frameworks?\",\n\t\t},\n\t];\n\n\t/* prompt user for questions */\n\tconst answers = await prompts(questions);\n\n\t/* write configuration to file */\n\tlet config = initialConfig;\n\tconfig = addFrameworks(config, answers[\"frameworks\"] as string[]);\n\tawait writeConfig(filename, config);\n\n\treturn {\n\t\tfilename,\n\t};\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ignore, { type Ignore } from \"ignore\";\n\nexport class IsIgnored {\n\t/** Cache for parsed .htmlvalidateignore files */\n\tprivate cacheIgnore: Map<string, Ignore | undefined>;\n\n\tpublic constructor() {\n\t\tthis.cacheIgnore = new Map();\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tpublic isIgnored(filename: string): boolean {\n\t\treturn this.match(filename);\n\t}\n\n\t/**\n\t * Clear cache\n\t */\n\tpublic clearCache(): void {\n\t\tthis.cacheIgnore.clear();\n\t}\n\n\tprivate match(target: string): boolean {\n\t\tlet current = path.dirname(target);\n\n\t\tfor (;;) {\n\t\t\tconst relative = path.relative(current, target);\n\t\t\tconst filename = path.join(current, \".htmlvalidateignore\");\n\n\t\t\t/* test filename (relative to the ignore file) against the patterns */\n\t\t\tconst ig = this.parseFile(filename);\n\t\t\tif (ig?.ignores(relative)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate parseFile(filename: string): Ignore | undefined {\n\t\tif (this.cacheIgnore.has(filename)) {\n\t\t\treturn this.cacheIgnore.get(filename);\n\t\t}\n\n\t\tif (!fs.existsSync(filename)) {\n\t\t\tthis.cacheIgnore.set(filename, undefined);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst content = fs.readFileSync(filename, \"utf-8\");\n\t\tconst ig = ignore().add(content);\n\t\tthis.cacheIgnore.set(filename, ig);\n\t\treturn ig;\n\t}\n}\n","import path from \"node:path/posix\";\nimport {\n\ttype ConfigData,\n\ttype ConfigLoader,\n\ttype Report,\n\tFileSystemConfigLoader,\n\tHtmlValidate,\n\tUserError,\n\tesmResolver,\n} from \"..\";\nimport { type ExpandOptions, expandFiles } from \"./expand-files\";\nimport { getFormatter } from \"./formatter\";\nimport { getRuleConfig } from \"./get-rule-config\";\nimport { type InitResult, init } from \"./init\";\nimport { IsIgnored } from \"./is-ignored\";\n\nconst resolver = esmResolver();\n\nfunction defaultConfig(preset: string): ConfigData {\n\tconst presets = preset.split(\",\").map((it) => `html-validate:${it}`);\n\treturn {\n\t\textends: presets,\n\t};\n}\n\n/**\n * @public\n */\nexport interface CLIOptions {\n\tconfigFile?: string;\n\t/** Comma-separated list of presets to use */\n\tpreset?: string;\n\trules?: string | string[];\n}\n\nasync function getBaseConfig(preset?: string, filename?: string): Promise<ConfigData> {\n\tif (filename) {\n\t\tconst configData = await resolver.resolveConfig(path.resolve(filename), { cache: false });\n\t\tif (!configData) {\n\t\t\tthrow new UserError(`Failed to read configuration from \"${filename}\"`);\n\t\t}\n\t\treturn configData;\n\t} else {\n\t\treturn defaultConfig(preset ?? \"recommended\");\n\t}\n}\n\n/**\n * @public\n */\nexport class CLI {\n\tprivate options: CLIOptions;\n\tprivate config: ConfigData | null;\n\tprivate loader: ConfigLoader | null;\n\tprivate ignored: IsIgnored;\n\n\t/**\n\t * Create new CLI helper.\n\t *\n\t * Can be used to create tooling with similar properties to bundled CLI\n\t * script.\n\t */\n\tpublic constructor(options?: CLIOptions) {\n\t\tthis.options = options ?? {};\n\t\tthis.config = null;\n\t\tthis.loader = null;\n\t\tthis.ignored = new IsIgnored();\n\t}\n\n\t/**\n\t * Returns list of files matching patterns and are not ignored. Filenames will\n\t * have absolute paths.\n\t *\n\t * @public\n\t */\n\t/* eslint-disable-next-line @typescript-eslint/require-await -- technical debt: expandFiles(..) should actually be async as well */\n\tpublic async expandFiles(patterns: string[], options: ExpandOptions = {}): Promise<string[]> {\n\t\treturn expandFiles(patterns, options).filter((filename) => !this.isIgnored(filename));\n\t}\n\n\tpublic getFormatter(formatters: string): Promise<(report: Report) => string> {\n\t\t/* while not actually async the API boundary returns a Promise in case it needs to in the future, i.e a ESM-based formatter */\n\t\treturn Promise.resolve(getFormatter(formatters));\n\t}\n\n\t/**\n\t * Initialize project with a new configuration.\n\t *\n\t * A new `.htmlvalidate.json` file will be placed in the path provided by\n\t * `cwd`.\n\t */\n\tpublic init(cwd: string): Promise<InitResult> {\n\t\treturn init(cwd);\n\t}\n\n\t/**\n\t * Clear cache.\n\t *\n\t * Previously fetched [[HtmlValidate]] instances must either be fetched again\n\t * or call [[HtmlValidate.flushConfigCache]].\n\t */\n\t/* istanbul ignore next: each method is tested separately */\n\tpublic clearCache(): Promise<void> {\n\t\tif (this.loader) {\n\t\t\tthis.loader.flushCache();\n\t\t}\n\t\tthis.ignored.clearCache();\n\t\treturn Promise.resolve();\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @internal\n\t */\n\tpublic async getLoader(): Promise<ConfigLoader> {\n\t\t/* istanbul ignore next: cache will most likely be cold during testing */\n\t\tif (!this.loader) {\n\t\t\tconst config = await this.getConfig();\n\t\t\tthis.loader = new FileSystemConfigLoader([resolver], config);\n\t\t}\n\t\treturn this.loader;\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @public\n\t */\n\tpublic async getValidator(): Promise<HtmlValidate> {\n\t\tconst loader = await this.getLoader();\n\t\treturn new HtmlValidate(loader);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic async getConfig(): Promise<ConfigData> {\n\t\tthis.config ??= await this.resolveConfig();\n\t\treturn this.config;\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tprivate isIgnored(filename: string): boolean {\n\t\treturn this.ignored.isIgnored(filename);\n\t}\n\n\tprivate async resolveConfig(): Promise<ConfigData> {\n\t\tconst { options } = this;\n\t\tconst havePreset = Boolean(options.preset);\n\t\tconst haveConfig = Boolean(options.configFile);\n\t\tconst config = await getBaseConfig(options.preset, options.configFile);\n\t\tif (options.rules) {\n\t\t\tif (havePreset || haveConfig) {\n\t\t\t\t/* when rules are explicitly specified and combined with an explicit\n\t\t\t\t * preset or configuration file we merge the result as the user would\n\t\t\t\texpect rules from the preset or configuration files to be used */\n\t\t\t\tconfig.rules = { ...config.rules, ...getRuleConfig(options.rules) };\n\t\t\t} else {\n\t\t\t\t/* if neither an explicit configuration file or preset is passed as a\n\t\t\t\t * CLI argument a default configuration is loaded but since the user has\n\t\t\t\t * specified one or more rules explicitly we overwrite both the default\n\t\t\t\t * preset and the default rules with the explicit rules */\n\t\t\t\tconfig.extends = [];\n\t\t\t\tconfig.rules = getRuleConfig(options.rules);\n\t\t\t}\n\t\t}\n\t\treturn config;\n\t}\n}\n","import { type EventDump, type Location } from \"..\";\n\nconst jsonIgnored = new Set([\n\t\"annotation\",\n\t\"blockedRules\",\n\t\"cache\",\n\t\"closed\",\n\t\"depth\",\n\t\"disabledRules\",\n\t\"nodeType\",\n\t\"unique\",\n\t\"voidElement\",\n]);\nconst jsonFiltered = new Set([\n\t\"childNodes\",\n\t\"children\",\n\t\"data\",\n\t\"meta\",\n\t\"metaElement\",\n\t\"originalData\",\n\t\"parent\",\n]);\n\nfunction isLocation(key: string, value: unknown): value is Location {\n\treturn Boolean(value && (key === \"location\" || key.endsWith(\"Location\")));\n}\n\nfunction isIgnored(key: string): boolean {\n\treturn key.startsWith(\"_\") || jsonIgnored.has(key);\n}\n\nfunction isFiltered(key: string, value: unknown): boolean {\n\treturn Boolean(value && jsonFiltered.has(key));\n}\n\nexport function eventReplacer<T>(this: void, key: string, value: T): T | string | undefined {\n\tif (isLocation(key, value)) {\n\t\tconst filename = value.filename;\n\t\tconst line = String(value.line);\n\t\tconst column = String(value.column);\n\t\treturn `${filename}:${line}:${column}`;\n\t}\n\tif (isIgnored(key)) {\n\t\treturn undefined;\n\t}\n\tif (isFiltered(key, value)) {\n\t\treturn \"[truncated]\";\n\t}\n\treturn value;\n}\n\nexport function eventFormatter(entry: EventDump): string {\n\tconst strdata = JSON.stringify(entry.data, eventReplacer, 2);\n\treturn `${entry.event}: ${strdata}`;\n}\n","/**\n * @internal\n */\nexport enum Mode {\n\tLINT,\n\tINIT,\n\tDUMP_EVENTS,\n\tDUMP_TOKENS,\n\tDUMP_TREE,\n\tDUMP_SOURCE,\n\tPRINT_CONFIG,\n}\n\n/**\n * @internal\n */\nexport function modeToFlag(mode: Mode.LINT): null;\nexport function modeToFlag(mode: Exclude<Mode, Mode.LINT>): string;\nexport function modeToFlag(mode: Mode): string | null;\nexport function modeToFlag(mode: Mode): string | null {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn null;\n\t\tcase Mode.INIT:\n\t\t\treturn \"--init\";\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\treturn \"--dump-events\";\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\treturn \"--dump-tokens\";\n\t\tcase Mode.DUMP_TREE:\n\t\t\treturn \"--dump-tree\";\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\treturn \"--dump-source\";\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn \"--print-config\";\n\t}\n}\n","import { type HtmlValidate, type TokenDump } from \"../..\";\nimport { eventFormatter } from \"../json\";\nimport { Mode } from \"../mode\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function dump(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n\tmode: Mode,\n): Promise<boolean> {\n\tlet lines: Array<Promise<string[]>>;\n\tswitch (mode) {\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpEvents(filename);\n\t\t\t\treturn lines.map(eventFormatter);\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpTokens(filename);\n\t\t\t\treturn lines.map((entry: TokenDump) => {\n\t\t\t\t\tconst data = JSON.stringify(entry.data);\n\t\t\t\t\treturn `TOKEN: ${entry.token}\\n Data: ${data}\\n Location: ${entry.location}`;\n\t\t\t\t});\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TREE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpTree(filename));\n\t\t\tbreak;\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpSource(filename));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown mode \"${String(mode)}\"`);\n\t}\n\tconst results = await Promise.all(lines);\n\tconst flat = results.flat();\n\toutput.write(flat.join(\"\\n\"));\n\toutput.write(\"\\n\");\n\treturn true;\n}\n","import { type CLI } from \"../cli\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface InitOptions {\n\tcwd: string;\n}\n\nexport async function init(\n\tcli: CLI,\n\toutput: WritableStreamLike,\n\toptions: InitOptions,\n): Promise<boolean> {\n\tconst result = await cli.init(options.cwd);\n\toutput.write(`Configuration written to \"${result.filename}\"\\n`);\n\treturn true;\n}\n","import kleur from \"kleur\";\nimport { type HtmlValidate, type Report, type Result, Reporter } from \"../..\";\nimport { type PerformanceResult } from \"../../performance\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface LintOptions {\n\tformatter: (report: Report) => string;\n\tmaxWarnings: number;\n\tperformance: boolean;\n\tstdinFilename: false | string;\n}\nfunction formatMs(ms: number): string {\n\treturn `${ms.toFixed(2)}ms`;\n}\n\nfunction formatPerformanceTable(\n\tnameHeader: string,\n\tentries: Array<{ name: string; count: number; time: number }>,\n\ttotalTime: number,\n): string {\n\tconst nameWidth = Math.max(nameHeader.length, ...entries.map((e) => e.name.length)) + 2;\n\tconst countWidth = Math.max(5, ...entries.map((e) => String(e.count).length)) + 2;\n\tconst header = ` ${nameHeader.padEnd(nameWidth)}${\"count\".padStart(countWidth)} ${\"time(ms)\".padStart(10)} ${\"time(%)\".padStart(8)}`;\n\tconst separator = ` ${\"─\".repeat(header.length - 2)}`;\n\tconst rows = entries.map((entry) => {\n\t\tconst pct = totalTime > 0 ? ((entry.time / totalTime) * 100).toFixed(1) : \"0.0\";\n\t\tconst pctStr = `${pct}%`;\n\t\treturn ` ${entry.name.padEnd(nameWidth)}${String(entry.count).padStart(countWidth)} ${formatMs(entry.time).padStart(10)} ${pctStr.padStart(8)}`;\n\t});\n\treturn [header, separator, ...rows].join(\"\\n\");\n}\n\nfunction formatPerformanceResult(result: PerformanceResult): string {\n\tconst totalEventTime = result.events.reduce((sum, e) => sum + e.time, 0);\n\tconst totalRuleTime = result.rules.reduce((sum, e) => sum + e.time, 0);\n\tconst { configTime, transformTime, totalTime } = result;\n\tconst eventEntries = result.events.map((e) => ({ name: e.event, count: e.count, time: e.time }));\n\tconst ruleEntries = result.rules.map((e) => ({ name: e.rule, count: e.count, time: e.time }));\n\tconst lines = [\n\t\t\"Performance\",\n\t\t\"\",\n\t\t\"Events:\",\n\t\tformatPerformanceTable(\"event\", eventEntries, totalTime),\n\t\t\"\",\n\t\t\"Rules:\",\n\t\tformatPerformanceTable(\"rule\", ruleEntries, totalTime),\n\t\t\"\",\n\t\t`Total: ${formatMs(totalTime)}`,\n\t\t` Config: ${formatMs(configTime)}`,\n\t\t` Transform: ${formatMs(transformTime)}`,\n\t\t` Events: ${formatMs(totalEventTime - totalRuleTime)}`,\n\t\t` Rules: ${formatMs(totalRuleTime)}`,\n\t\t\"\",\n\t];\n\treturn lines.join(\"\\n\");\n}\n\nfunction renameStdin(report: Report, filename: string): void {\n\tconst stdin = report.results.find((cur: Result) => cur.filePath === \"/dev/stdin\");\n\tif (stdin) {\n\t\tstdin.filePath = filename;\n\t}\n}\n\nexport async function lint(\n\thtmlvalidate: HtmlValidate,\n\tstdout: WritableStreamLike,\n\tstderr: WritableStreamLike,\n\tfiles: string[],\n\toptions: LintOptions,\n): Promise<boolean> {\n\tif (options.performance) {\n\t\thtmlvalidate.startPerformance();\n\t}\n\n\tconst reports: Report[] = [];\n\tfor (const filename of files) {\n\t\ttry {\n\t\t\treports.push(await htmlvalidate.validateFile(filename));\n\t\t} catch (err) {\n\t\t\tconst message = kleur.red(`Validator crashed when parsing \"${filename}\"`);\n\t\t\tstdout.write(`${message}\\n`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tconst merged = Reporter.merge(reports);\n\n\t/* rename stdin if an explicit filename was passed */\n\tif (options.stdinFilename) {\n\t\trenameStdin(merged, options.stdinFilename);\n\t}\n\n\tstdout.write(options.formatter(merged));\n\n\tif (options.performance) {\n\t\tconst performanceResult = htmlvalidate.stopPerformance();\n\t\tstderr.write(formatPerformanceResult(performanceResult));\n\t}\n\n\tif (options.maxWarnings >= 0 && merged.warningCount > options.maxWarnings) {\n\t\tstdout.write(\n\t\t\t`\\nhtml-validate found too many warnings (maximum: ${String(options.maxWarnings)}).\\n`,\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn merged.valid;\n}\n","import { type HtmlValidate } from \"../..\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function printConfig(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n): Promise<boolean> {\n\tif (files.length > 1) {\n\t\toutput.write(`\\`--print-config\\` expected a single filename but got multiple:\\n\\n`);\n\t\tfor (const filename of files) {\n\t\t\toutput.write(` - ${filename}\\n`);\n\t\t}\n\t\toutput.write(\"\\n\");\n\t\treturn false;\n\t}\n\tconst config = await htmlvalidate.getConfigFor(files[0]);\n\tconst json = JSON.stringify(config.getConfigData(), null, 2);\n\toutput.write(`${json}\\n`);\n\treturn true;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport betterAjvErrors from \"@sidvind/better-ajv-errors\";\nimport kleur from \"kleur\";\nimport { type SchemaValidationError } from \"../../error\";\n\nfunction prettyError(err: SchemaValidationError): string {\n\tlet json: string | undefined;\n\tif (err.filename && fs.existsSync(err.filename)) {\n\t\tjson = fs.readFileSync(err.filename, \"utf-8\");\n\t}\n\treturn betterAjvErrors(err.schema, err.obj, err.errors, {\n\t\tformat: \"cli\",\n\t\tindent: 2,\n\t\tjson,\n\t});\n}\n\n/**\n * @internal\n */\nexport function handleSchemaValidationError(console: Console, err: SchemaValidationError): void {\n\tif (err.filename) {\n\t\tconst filename = path.relative(process.cwd(), err.filename);\n\t\tconsole.error(kleur.red(`A configuration error was found in \"${filename}\":`));\n\t} else {\n\t\tconsole.error(kleur.red(`A configuration error was found:`));\n\t}\n\tconsole.group();\n\t{\n\t\tconsole.error(prettyError(err));\n\t}\n\tconsole.groupEnd();\n}\n","import kleur from \"kleur\";\nimport { engines } from \"../../../package.json\";\nimport { UserError } from \"../../error\";\n\n/**\n * @internal\n */\nexport class ImportResolveMissingError extends UserError {\n\tpublic constructor() {\n\t\tconst message = `import.meta.resolve(..) is not available on this system`;\n\t\tsuper(message);\n\t\tthis.name = \"ImportResolveMissingError\";\n\t}\n\n\tpublic override prettyFormat(): string {\n\t\tconst { message } = this;\n\t\tconst currentVersion = process.version;\n\t\tconst requiredVersion = engines.node\n\t\t\t.split(\"||\")\n\t\t\t.map((it) => `v${it.replace(/^\\D+/, \"\").trim()}`);\n\t\treturn [\n\t\t\tkleur.red(`Error: ${message}.`),\n\t\t\t\"\",\n\t\t\t`Either ensure you are running a supported NodeJS version:`,\n\t\t\t` Current: ${currentVersion}`,\n\t\t\t` Required: ${requiredVersion.join(\", \")} or later`,\n\t\t\t`Or set NODE_OPTIONS=\"--experimental-import-meta-resolve\"`,\n\t\t].join(\"\\n\");\n\t}\n}\n","/**\n * @internal\n */\nexport function haveImportMetaResolve(): boolean {\n\treturn \"resolve\" in import.meta;\n}\n"],"names":["fs","path","formatterFactory","legacyRequire","UserError","ensureError","fn","deepmerge","init","prompts","ignore","esmResolver","FileSystemConfigLoader","HtmlValidate","Mode","lines","kleur","Reporter","betterAjvErrors","engines"],"mappings":"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"}
|
package/dist/cjs/core.js
CHANGED
|
@@ -12639,7 +12639,7 @@ class EventHandler {
|
|
|
12639
12639
|
}
|
|
12640
12640
|
|
|
12641
12641
|
const name = "html-validate";
|
|
12642
|
-
const version = "11.
|
|
12642
|
+
const version = "11.1.0";
|
|
12643
12643
|
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
12644
12644
|
|
|
12645
12645
|
function freeze(src) {
|
|
@@ -15346,7 +15346,7 @@ var ignoreExports = /*@__PURE__*/ requireIgnore();
|
|
|
15346
15346
|
var ignore = /*@__PURE__*/getDefaultExportFromCjs(ignoreExports);
|
|
15347
15347
|
|
|
15348
15348
|
const engines = {
|
|
15349
|
-
node: "^22.
|
|
15349
|
+
node: "^22.17.0 || >= 24.0.0"
|
|
15350
15350
|
};
|
|
15351
15351
|
|
|
15352
15352
|
var workerPath = "./jest-worker.js";
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var fs = require('node:fs');
|
|
4
4
|
var path = require('node:path');
|
|
5
|
+
var node_util = require('node:util');
|
|
5
6
|
var kleur = require('kleur');
|
|
6
|
-
var minimist = require('minimist');
|
|
7
7
|
var core = require('./core.js');
|
|
8
8
|
var cli = require('./cli.js');
|
|
9
9
|
require('ajv');
|
|
@@ -18,7 +18,6 @@ require('./core-nodejs.js');
|
|
|
18
18
|
require('node:fs/promises');
|
|
19
19
|
require('node:url');
|
|
20
20
|
require('node:path/posix');
|
|
21
|
-
require('glob');
|
|
22
21
|
require('prompts');
|
|
23
22
|
|
|
24
23
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -26,7 +25,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
26
25
|
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
27
26
|
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
28
27
|
var kleur__default = /*#__PURE__*/_interopDefault(kleur);
|
|
29
|
-
var minimist__default = /*#__PURE__*/_interopDefault(minimist);
|
|
30
28
|
|
|
31
29
|
function getMode(argv2) {
|
|
32
30
|
if (argv2["init"]) {
|
|
@@ -96,51 +94,38 @@ function handleUnknownError(err) {
|
|
|
96
94
|
)
|
|
97
95
|
);
|
|
98
96
|
}
|
|
99
|
-
const argv =
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
f: "formatter",
|
|
128
|
-
p: "preset",
|
|
129
|
-
h: "help"
|
|
130
|
-
},
|
|
131
|
-
default: {
|
|
132
|
-
ext: "html",
|
|
133
|
-
formatter: "stylish"
|
|
134
|
-
},
|
|
135
|
-
unknown: (opt) => {
|
|
136
|
-
if (opt.startsWith("-")) {
|
|
137
|
-
process.stderr.write(`unknown option ${opt}
|
|
97
|
+
const { values: argv, positionals } = (() => {
|
|
98
|
+
try {
|
|
99
|
+
return node_util.parseArgs({
|
|
100
|
+
args: process.argv.slice(2),
|
|
101
|
+
options: {
|
|
102
|
+
config: { type: "string", short: "c" },
|
|
103
|
+
"dump-events": { type: "boolean", default: false },
|
|
104
|
+
"dump-source": { type: "boolean", default: false },
|
|
105
|
+
"dump-tokens": { type: "boolean", default: false },
|
|
106
|
+
"dump-tree": { type: "boolean", default: false },
|
|
107
|
+
ext: { type: "string", default: "html" },
|
|
108
|
+
formatter: { type: "string", short: "f", default: "stylish" },
|
|
109
|
+
help: { type: "boolean", short: "h", default: false },
|
|
110
|
+
init: { type: "boolean", default: false },
|
|
111
|
+
"max-warnings": { type: "string" },
|
|
112
|
+
performance: { type: "boolean", default: false },
|
|
113
|
+
preset: { type: "string", short: "p" },
|
|
114
|
+
"print-config": { type: "boolean", default: false },
|
|
115
|
+
rule: { type: "string" },
|
|
116
|
+
stdin: { type: "boolean", default: false },
|
|
117
|
+
"stdin-filename": { type: "string" },
|
|
118
|
+
version: { type: "boolean", default: false }
|
|
119
|
+
},
|
|
120
|
+
allowPositionals: true,
|
|
121
|
+
strict: true
|
|
122
|
+
});
|
|
123
|
+
} catch (err) {
|
|
124
|
+
process.stderr.write(`${err.message}
|
|
138
125
|
`);
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
return true;
|
|
126
|
+
process.exit(1);
|
|
142
127
|
}
|
|
143
|
-
});
|
|
128
|
+
})();
|
|
144
129
|
function showUsage() {
|
|
145
130
|
process.stdout.write(`${core.name}-${core.version}
|
|
146
131
|
Usage: html-validate [OPTIONS] [FILENAME..] [DIR..]
|
|
@@ -185,7 +170,7 @@ function showVersion() {
|
|
|
185
170
|
`);
|
|
186
171
|
}
|
|
187
172
|
if (argv.stdin) {
|
|
188
|
-
|
|
173
|
+
positionals.push("-");
|
|
189
174
|
}
|
|
190
175
|
if (argv.version) {
|
|
191
176
|
showVersion();
|
|
@@ -195,7 +180,7 @@ if (argv.help) {
|
|
|
195
180
|
showUsage();
|
|
196
181
|
process.exit();
|
|
197
182
|
}
|
|
198
|
-
if (
|
|
183
|
+
if (positionals.length === 0) {
|
|
199
184
|
const mode = getMode(argv);
|
|
200
185
|
if (mode === cli.Mode.LINT) {
|
|
201
186
|
showUsage();
|
|
@@ -231,9 +216,9 @@ async function run() {
|
|
|
231
216
|
const extensions = argv.ext.split(",").map((cur) => {
|
|
232
217
|
return cur.startsWith(".") ? cur.slice(1) : cur;
|
|
233
218
|
});
|
|
234
|
-
const files = await cli$1.expandFiles(
|
|
219
|
+
const files = await cli$1.expandFiles(positionals, { extensions });
|
|
235
220
|
if (files.length === 0 && mode !== cli.Mode.INIT) {
|
|
236
|
-
console.error("No files matching patterns",
|
|
221
|
+
console.error("No files matching patterns", positionals);
|
|
237
222
|
process.exit(1);
|
|
238
223
|
}
|
|
239
224
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit -- as expected from a cli app */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport kleur from \"kleur\";\nimport minimist from \"minimist\";\nimport { type UserErrorData, SchemaValidationError, isUserError } from \"..\";\nimport { bugs as pkgBugs, name, version } from \"../generated/package-json\";\nimport { dump } from \"./actions/dump\";\nimport { init } from \"./actions/init\";\nimport { lint } from \"./actions/lint\";\nimport { printConfig } from \"./actions/print-config\";\nimport { CLI } from \"./cli\";\nimport { ImportResolveMissingError, handleSchemaValidationError } from \"./errors\";\nimport { haveImportMetaResolve } from \"./have-import-meta-resolve\";\nimport { Mode, modeToFlag } from \"./mode\";\n\ninterface ParsedArgs {\n\tconfig?: string;\n\t\"dump-events\": boolean;\n\t\"dump-source\": boolean;\n\t\"dump-tokens\": boolean;\n\t\"dump-tree\": boolean;\n\text: string;\n\tformatter: string;\n\thelp: boolean;\n\tinit: boolean;\n\t\"max-warnings\"?: string;\n\tperformance: boolean;\n\tpreset?: string;\n\t\"print-config\": boolean;\n\trule?: string;\n\tstdin: boolean;\n\t\"stdin-filename\"?: string;\n\tversion: boolean;\n}\n\nfunction getMode(argv: Record<string, unknown>): Mode {\n\tif (argv[\"init\"]) {\n\t\treturn Mode.INIT;\n\t}\n\n\tif (argv[\"dump-events\"]) {\n\t\treturn Mode.DUMP_EVENTS;\n\t}\n\n\tif (argv[\"dump-source\"]) {\n\t\treturn Mode.DUMP_SOURCE;\n\t}\n\n\tif (argv[\"dump-tokens\"]) {\n\t\treturn Mode.DUMP_TOKENS;\n\t}\n\n\tif (argv[\"dump-tree\"]) {\n\t\treturn Mode.DUMP_TREE;\n\t}\n\n\tif (argv[\"print-config\"]) {\n\t\treturn Mode.PRINT_CONFIG;\n\t}\n\n\treturn Mode.LINT;\n}\n\nfunction requiresFilename(mode: Mode): boolean {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn true;\n\t\tcase Mode.INIT:\n\t\t\treturn false;\n\t\tcase Mode.DUMP_EVENTS:\n\t\tcase Mode.DUMP_TOKENS:\n\t\tcase Mode.DUMP_TREE:\n\t\tcase Mode.DUMP_SOURCE:\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn true;\n\t}\n}\n\nfunction handleUserError(err: UserErrorData): void {\n\tconst formatted = err.prettyFormat();\n\tif (formatted) {\n\t\tconsole.error(); /* blank line */\n\t\tconsole.error(formatted);\n\t\treturn;\n\t}\n\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err.prettyFormat() ?? err);\n\t}\n\tconsole.groupEnd();\n}\n\nfunction handleUnknownError(err: unknown): void {\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err);\n\t}\n\tconsole.groupEnd();\n\tconst bugUrl = `${pkgBugs}?issuable_template=Bug`;\n\tconsole.error(kleur.red(`This is a bug in ${name}-${version}.`));\n\tconsole.error(\n\t\tkleur.red(\n\t\t\t[\n\t\t\t\t`Please file a bug at ${bugUrl}`,\n\t\t\t\t`and include this message in full and if possible the content of the`,\n\t\t\t\t`file being parsed (or a reduced testcase).`,\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n}\n\nconst argv = minimist<ParsedArgs>(process.argv.slice(2), {\n\tstring: [\n\t\t\"c\",\n\t\t\"config\",\n\t\t\"ext\",\n\t\t\"f\",\n\t\t\"formatter\",\n\t\t\"max-warnings\",\n\t\t\"p\",\n\t\t\"preset\",\n\t\t\"rule\",\n\t\t\"stdin-filename\",\n\t],\n\tboolean: [\n\t\t\"init\",\n\t\t\"dump-events\",\n\t\t\"dump-source\",\n\t\t\"dump-tokens\",\n\t\t\"dump-tree\",\n\t\t\"h\",\n\t\t\"help\",\n\t\t\"performance\",\n\t\t\"print-config\",\n\t\t\"stdin\",\n\t\t\"version\",\n\t],\n\talias: {\n\t\tc: \"config\",\n\t\tf: \"formatter\",\n\t\tp: \"preset\",\n\t\th: \"help\",\n\t},\n\tdefault: {\n\t\text: \"html\",\n\t\tformatter: \"stylish\",\n\t},\n\tunknown: (opt: string) => {\n\t\tif (opt.startsWith(\"-\")) {\n\t\t\tprocess.stderr.write(`unknown option ${opt}\\n`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\treturn true;\n\t},\n});\n\nfunction showUsage(): void {\n\tprocess.stdout.write(`${name}-${version}\nUsage: html-validate [OPTIONS] [FILENAME..] [DIR..]\n\nCommon options:\n --ext=STRING specify file extensions (commaseparated).\n -f, --formatter=FORMATTER specify the formatter to use.\n --max-warnings=INT number of warnings to trigger nonzero exit code\n -p, --preset=STRING configuration preset to use, use\n comma-separator for multiple presets. (default:\n \"recommended\")\n --rule=RULE:SEVERITY set additional rule, use comma separator for\n multiple.\n --stdin process markup from stdin.\n --stdin-filename=STRING specify filename to report when using stdin\n\nMiscellaneous:\n -c, --config=STRING use custom configuration file.\n --init initialize project with a new configuration\n --print-config output configuration for given file.\n -h, --help show help.\n --version show version.\n\nDebugging options:\n --dump-events output events during parsing.\n --dump-source output post-transformed source data.\n --dump-tokens output tokens from lexing stage.\n --dump-tree output nodes from the dom tree.\n --performance output performance data after validation.\n\nFormatters:\n\nMultiple formatters can be specified with a comma-separated list,\ne.g. \"json,checkstyle\" to enable both.\n\nTo capture output to a file use \"formatter=/path/to/file\",\ne.g. \"checkstyle=dist/html-validate.xml\"\n`);\n}\n\nfunction showVersion(): void {\n\tprocess.stdout.write(`${name}-${version}\\n`);\n}\n\nif (argv.stdin) {\n\targv._.push(\"-\");\n}\n\nif (argv.version) {\n\tshowVersion();\n\tprocess.exit();\n}\n\nif (argv.help) {\n\tshowUsage();\n\tprocess.exit();\n}\n\nif (argv._.length === 0) {\n\tconst mode = getMode(argv);\n\tif (mode === Mode.LINT) {\n\t\tshowUsage();\n\t\tprocess.exit(0);\n\t} else if (requiresFilename(mode)) {\n\t\tconst flag = modeToFlag(mode);\n\t\tconsole.error(`\\`${flag}\\` requires a filename.`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* check that supplied config file exists before creating CLI */\nif (argv.config !== undefined) {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.error(`The file \"${argv.config}\" was not found.`);\n\t\tconsole.error(`The location this file was checked for at was: \"${checkPath}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line complexity -- for now */\nasync function run(): Promise<void> {\n\tconst cli = new CLI({\n\t\tconfigFile: argv.config,\n\t\tpreset: argv.preset,\n\t\trules: argv.rule,\n\t});\n\tconst mode = getMode(argv);\n\tconst formatter = await cli.getFormatter(argv.formatter);\n\tconst maxWarnings = Number.parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\n\tconst htmlvalidate = await cli.getValidator();\n\n\t/* sanity check: ensure maxWarnings has a valid value */\n\tif (Number.isNaN(maxWarnings)) {\n\t\tconsole.error(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\t\tprocess.exit(1);\n\t}\n\n\t/* parse extensions (used when expanding directories) */\n\tconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\t\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n\t});\n\n\tconst files = await cli.expandFiles(argv._, { extensions });\n\tif (files.length === 0 && mode !== Mode.INIT) {\n\t\tconsole.error(\"No files matching patterns\", argv._);\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\t/* istanbul ignore next -- not tested with unittests */\n\t\tif (!haveImportMetaResolve()) {\n\t\t\tthrow new ImportResolveMissingError();\n\t\t}\n\n\t\tlet success: boolean;\n\t\tswitch (mode) {\n\t\t\tcase Mode.LINT: {\n\t\t\t\tsuccess = await lint(htmlvalidate, process.stdout, process.stderr, files, {\n\t\t\t\t\tformatter,\n\t\t\t\t\tmaxWarnings,\n\t\t\t\t\tperformance: argv.performance,\n\t\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.INIT: {\n\t\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.PRINT_CONFIG: {\n\t\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\n\t\t\t}\n\t\t}\n\t\tprocess.exit(success ? 0 : 1);\n\t} catch (err) {\n\t\tif (err instanceof SchemaValidationError) {\n\t\t\thandleSchemaValidationError(console, err);\n\t\t} else if (isUserError(err)) {\n\t\t\thandleUserError(err);\n\t\t} else {\n\t\t\thandleUnknownError(err);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line unicorn/prefer-top-level-await -- technical debt, as long as we bundle and ship commonjs we cannot use TLA here */\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","Mode","kleur","pkgBugs","name","version","minimist","modeToFlag","path","fs","cli","CLI","haveImportMetaResolve","ImportResolveMissingError","lint","init","printConfig","dump","SchemaValidationError","handleSchemaValidationError","isUserError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit -- as expected from a cli app */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseArgs } from \"node:util\";\nimport kleur from \"kleur\";\nimport { type UserErrorData, SchemaValidationError, isUserError } from \"..\";\nimport { bugs as pkgBugs, name, version } from \"../generated/package-json\";\nimport { dump } from \"./actions/dump\";\nimport { init } from \"./actions/init\";\nimport { lint } from \"./actions/lint\";\nimport { printConfig } from \"./actions/print-config\";\nimport { CLI } from \"./cli\";\nimport { ImportResolveMissingError, handleSchemaValidationError } from \"./errors\";\nimport { haveImportMetaResolve } from \"./have-import-meta-resolve\";\nimport { Mode, modeToFlag } from \"./mode\";\n\nfunction getMode(argv: Record<string, unknown>): Mode {\n\tif (argv[\"init\"]) {\n\t\treturn Mode.INIT;\n\t}\n\n\tif (argv[\"dump-events\"]) {\n\t\treturn Mode.DUMP_EVENTS;\n\t}\n\n\tif (argv[\"dump-source\"]) {\n\t\treturn Mode.DUMP_SOURCE;\n\t}\n\n\tif (argv[\"dump-tokens\"]) {\n\t\treturn Mode.DUMP_TOKENS;\n\t}\n\n\tif (argv[\"dump-tree\"]) {\n\t\treturn Mode.DUMP_TREE;\n\t}\n\n\tif (argv[\"print-config\"]) {\n\t\treturn Mode.PRINT_CONFIG;\n\t}\n\n\treturn Mode.LINT;\n}\n\nfunction requiresFilename(mode: Mode): boolean {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn true;\n\t\tcase Mode.INIT:\n\t\t\treturn false;\n\t\tcase Mode.DUMP_EVENTS:\n\t\tcase Mode.DUMP_TOKENS:\n\t\tcase Mode.DUMP_TREE:\n\t\tcase Mode.DUMP_SOURCE:\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn true;\n\t}\n}\n\nfunction handleUserError(err: UserErrorData): void {\n\tconst formatted = err.prettyFormat();\n\tif (formatted) {\n\t\tconsole.error(); /* blank line */\n\t\tconsole.error(formatted);\n\t\treturn;\n\t}\n\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err.prettyFormat() ?? err);\n\t}\n\tconsole.groupEnd();\n}\n\nfunction handleUnknownError(err: unknown): void {\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err);\n\t}\n\tconsole.groupEnd();\n\tconst bugUrl = `${pkgBugs}?issuable_template=Bug`;\n\tconsole.error(kleur.red(`This is a bug in ${name}-${version}.`));\n\tconsole.error(\n\t\tkleur.red(\n\t\t\t[\n\t\t\t\t`Please file a bug at ${bugUrl}`,\n\t\t\t\t`and include this message in full and if possible the content of the`,\n\t\t\t\t`file being parsed (or a reduced testcase).`,\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n}\n\nconst { values: argv, positionals } = (() => {\n\ttry {\n\t\treturn parseArgs({\n\t\t\targs: process.argv.slice(2),\n\t\t\toptions: {\n\t\t\t\tconfig: { type: \"string\" as const, short: \"c\" },\n\t\t\t\t\"dump-events\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-source\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-tokens\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-tree\": { type: \"boolean\" as const, default: false },\n\t\t\t\text: { type: \"string\" as const, default: \"html\" },\n\t\t\t\tformatter: { type: \"string\" as const, short: \"f\", default: \"stylish\" },\n\t\t\t\thelp: { type: \"boolean\" as const, short: \"h\", default: false },\n\t\t\t\tinit: { type: \"boolean\" as const, default: false },\n\t\t\t\t\"max-warnings\": { type: \"string\" as const },\n\t\t\t\tperformance: { type: \"boolean\" as const, default: false },\n\t\t\t\tpreset: { type: \"string\" as const, short: \"p\" },\n\t\t\t\t\"print-config\": { type: \"boolean\" as const, default: false },\n\t\t\t\trule: { type: \"string\" as const },\n\t\t\t\tstdin: { type: \"boolean\" as const, default: false },\n\t\t\t\t\"stdin-filename\": { type: \"string\" as const },\n\t\t\t\tversion: { type: \"boolean\" as const, default: false },\n\t\t\t},\n\t\t\tallowPositionals: true,\n\t\t\tstrict: true,\n\t\t});\n\t} catch (err) {\n\t\tprocess.stderr.write(`${(err as Error).message}\\n`);\n\t\tprocess.exit(1);\n\t}\n})();\n\nfunction showUsage(): void {\n\tprocess.stdout.write(`${name}-${version}\nUsage: html-validate [OPTIONS] [FILENAME..] [DIR..]\n\nCommon options:\n --ext=STRING specify file extensions (commaseparated).\n -f, --formatter=FORMATTER specify the formatter to use.\n --max-warnings=INT number of warnings to trigger nonzero exit code\n -p, --preset=STRING configuration preset to use, use\n comma-separator for multiple presets. (default:\n \"recommended\")\n --rule=RULE:SEVERITY set additional rule, use comma separator for\n multiple.\n --stdin process markup from stdin.\n --stdin-filename=STRING specify filename to report when using stdin\n\nMiscellaneous:\n -c, --config=STRING use custom configuration file.\n --init initialize project with a new configuration\n --print-config output configuration for given file.\n -h, --help show help.\n --version show version.\n\nDebugging options:\n --dump-events output events during parsing.\n --dump-source output post-transformed source data.\n --dump-tokens output tokens from lexing stage.\n --dump-tree output nodes from the dom tree.\n --performance output performance data after validation.\n\nFormatters:\n\nMultiple formatters can be specified with a comma-separated list,\ne.g. \"json,checkstyle\" to enable both.\n\nTo capture output to a file use \"formatter=/path/to/file\",\ne.g. \"checkstyle=dist/html-validate.xml\"\n`);\n}\n\nfunction showVersion(): void {\n\tprocess.stdout.write(`${name}-${version}\\n`);\n}\n\nif (argv.stdin) {\n\tpositionals.push(\"-\");\n}\n\nif (argv.version) {\n\tshowVersion();\n\tprocess.exit();\n}\n\nif (argv.help) {\n\tshowUsage();\n\tprocess.exit();\n}\n\nif (positionals.length === 0) {\n\tconst mode = getMode(argv);\n\tif (mode === Mode.LINT) {\n\t\tshowUsage();\n\t\tprocess.exit(0);\n\t} else if (requiresFilename(mode)) {\n\t\tconst flag = modeToFlag(mode);\n\t\tconsole.error(`\\`${flag}\\` requires a filename.`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* check that supplied config file exists before creating CLI */\nif (argv.config !== undefined) {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.error(`The file \"${argv.config}\" was not found.`);\n\t\tconsole.error(`The location this file was checked for at was: \"${checkPath}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line complexity -- for now */\nasync function run(): Promise<void> {\n\tconst cli = new CLI({\n\t\tconfigFile: argv.config,\n\t\tpreset: argv.preset,\n\t\trules: argv.rule,\n\t});\n\tconst mode = getMode(argv);\n\tconst formatter = await cli.getFormatter(argv.formatter);\n\tconst maxWarnings = Number.parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\n\tconst htmlvalidate = await cli.getValidator();\n\n\t/* sanity check: ensure maxWarnings has a valid value */\n\tif (Number.isNaN(maxWarnings)) {\n\t\tconsole.error(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\t\tprocess.exit(1);\n\t}\n\n\t/* parse extensions (used when expanding directories) */\n\tconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\t\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n\t});\n\n\tconst files = await cli.expandFiles(positionals, { extensions });\n\tif (files.length === 0 && mode !== Mode.INIT) {\n\t\tconsole.error(\"No files matching patterns\", positionals);\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\t/* istanbul ignore next -- not tested with unittests */\n\t\tif (!haveImportMetaResolve()) {\n\t\t\tthrow new ImportResolveMissingError();\n\t\t}\n\n\t\tlet success: boolean;\n\t\tswitch (mode) {\n\t\t\tcase Mode.LINT: {\n\t\t\t\tsuccess = await lint(htmlvalidate, process.stdout, process.stderr, files, {\n\t\t\t\t\tformatter,\n\t\t\t\t\tmaxWarnings,\n\t\t\t\t\tperformance: argv.performance,\n\t\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.INIT: {\n\t\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.PRINT_CONFIG: {\n\t\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\n\t\t\t}\n\t\t}\n\t\tprocess.exit(success ? 0 : 1);\n\t} catch (err) {\n\t\tif (err instanceof SchemaValidationError) {\n\t\t\thandleSchemaValidationError(console, err);\n\t\t} else if (isUserError(err)) {\n\t\t\thandleUserError(err);\n\t\t} else {\n\t\t\thandleUnknownError(err);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line unicorn/prefer-top-level-await -- technical debt, as long as we bundle and ship commonjs we cannot use TLA here */\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","Mode","kleur","pkgBugs","name","version","parseArgs","modeToFlag","path","fs","cli","CLI","haveImportMetaResolve","ImportResolveMissingError","lint","init","printConfig","dump","SchemaValidationError","handleSchemaValidationError","isUserError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,SAAS,QAAQA,KAAAA,EAAqC;AACrD,EAAA,IAAIA,KAAAA,CAAK,MAAM,CAAA,EAAG;AACjB,IAAA,OAAOC,QAAA,CAAK,IAAA;AAAA,EACb;AAEA,EAAA,IAAID,KAAAA,CAAK,aAAa,CAAA,EAAG;AACxB,IAAA,OAAOC,QAAA,CAAK,WAAA;AAAA,EACb;AAEA,EAAA,IAAID,KAAAA,CAAK,aAAa,CAAA,EAAG;AACxB,IAAA,OAAOC,QAAA,CAAK,WAAA;AAAA,EACb;AAEA,EAAA,IAAID,KAAAA,CAAK,aAAa,CAAA,EAAG;AACxB,IAAA,OAAOC,QAAA,CAAK,WAAA;AAAA,EACb;AAEA,EAAA,IAAID,KAAAA,CAAK,WAAW,CAAA,EAAG;AACtB,IAAA,OAAOC,QAAA,CAAK,SAAA;AAAA,EACb;AAEA,EAAA,IAAID,KAAAA,CAAK,cAAc,CAAA,EAAG;AACzB,IAAA,OAAOC,QAAA,CAAK,YAAA;AAAA,EACb;AAEA,EAAA,OAAOA,QAAA,CAAK,IAAA;AACb;AAEA,SAAS,iBAAiB,IAAA,EAAqB;AAC9C,EAAA,QAAQ,IAAA;AAAM,IACb,KAAKA,QAAA,CAAK,IAAA;AACT,MAAA,OAAO,IAAA;AAAA,IACR,KAAKA,QAAA,CAAK,IAAA;AACT,MAAA,OAAO,KAAA;AAAA,IACR,KAAKA,QAAA,CAAK,WAAA;AAAA,IACV,KAAKA,QAAA,CAAK,WAAA;AAAA,IACV,KAAKA,QAAA,CAAK,SAAA;AAAA,IACV,KAAKA,QAAA,CAAK,WAAA;AAAA,IACV,KAAKA,QAAA,CAAK,YAAA;AACT,MAAA,OAAO,IAAA;AAAA;AAEV;AAEA,SAAS,gBAAgB,GAAA,EAA0B;AAClD,EAAA,MAAM,SAAA,GAAY,IAAI,YAAA,EAAa;AACnC,EAAA,IAAI,SAAA,EAAW;AACd,IAAA,OAAA,CAAQ,KAAA,EAAM;AACd,IAAA,OAAA,CAAQ,MAAM,SAAS,CAAA;AACvB,IAAA;AAAA,EACD;AAEA,EAAA,OAAA,CAAQ,KAAA,CAAMC,sBAAA,CAAM,GAAA,CAAI,mBAAmB,CAAC,CAAA;AAC5C,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA;AACC,IAAA,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,YAAA,EAAa,IAAK,GAAG,CAAA;AAAA,EACxC;AACA,EAAA,OAAA,CAAQ,QAAA,EAAS;AAClB;AAEA,SAAS,mBAAmB,GAAA,EAAoB;AAC/C,EAAA,OAAA,CAAQ,KAAA,CAAMA,sBAAA,CAAM,GAAA,CAAI,mBAAmB,CAAC,CAAA;AAC5C,EAAA,OAAA,CAAQ,KAAA,EAAM;AACd,EAAA;AACC,IAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,EAClB;AACA,EAAA,OAAA,CAAQ,QAAA,EAAS;AACjB,EAAA,MAAM,MAAA,GAAS,GAAGC,SAAO,CAAA,sBAAA,CAAA;AACzB,EAAA,OAAA,CAAQ,KAAA,CAAMD,uBAAM,GAAA,CAAI,CAAA,iBAAA,EAAoBE,SAAI,CAAA,CAAA,EAAIC,YAAO,GAAG,CAAC,CAAA;AAC/D,EAAA,OAAA,CAAQ,KAAA;AAAA,IACPH,sBAAA,CAAM,GAAA;AAAA,MACL;AAAA,QACC,wBAAwB,MAAM,CAAA,CAAA;AAAA,QAC9B,CAAA,mEAAA,CAAA;AAAA,QACA,CAAA,0CAAA;AAAA,OACD,CAAE,KAAK,IAAI;AAAA;AACZ,GACD;AACD;AAEA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,WAAA,MAAiB,MAAM;AAC5C,EAAA,IAAI;AACH,IAAA,OAAOI,mBAAA,CAAU;AAAA,MAChB,IAAA,EAAM,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAAA,MAC1B,OAAA,EAAS;AAAA,QACR,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAmB,OAAO,GAAA,EAAI;AAAA,QAC9C,aAAA,EAAe,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QAC1D,aAAA,EAAe,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QAC1D,aAAA,EAAe,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QAC1D,WAAA,EAAa,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QACxD,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAmB,SAAS,MAAA,EAAO;AAAA,QAChD,WAAW,EAAE,IAAA,EAAM,UAAmB,KAAA,EAAO,GAAA,EAAK,SAAS,SAAA,EAAU;AAAA,QACrE,MAAM,EAAE,IAAA,EAAM,WAAoB,KAAA,EAAO,GAAA,EAAK,SAAS,KAAA,EAAM;AAAA,QAC7D,IAAA,EAAM,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QACjD,cAAA,EAAgB,EAAE,IAAA,EAAM,QAAA,EAAkB;AAAA,QAC1C,WAAA,EAAa,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QACxD,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAmB,OAAO,GAAA,EAAI;AAAA,QAC9C,cAAA,EAAgB,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QAC3D,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAkB;AAAA,QAChC,KAAA,EAAO,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA,EAAM;AAAA,QAClD,gBAAA,EAAkB,EAAE,IAAA,EAAM,QAAA,EAAkB;AAAA,QAC5C,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAoB,SAAS,KAAA;AAAM,OACrD;AAAA,MACA,gBAAA,EAAkB,IAAA;AAAA,MAClB,MAAA,EAAQ;AAAA,KACR,CAAA;AAAA,EACF,SAAS,GAAA,EAAK;AACb,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAI,GAAA,CAAc,OAAO;AAAA,CAAI,CAAA;AAClD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AACD,CAAA,GAAG;AAEH,SAAS,SAAA,GAAkB;AAC1B,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGF,SAAI,IAAIC,YAAO;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,CAoCvC,CAAA;AACD;AAEA,SAAS,WAAA,GAAoB;AAC5B,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAGD,SAAI,IAAIC,YAAO;AAAA,CAAI,CAAA;AAC5C;AAEA,IAAI,KAAK,KAAA,EAAO;AACf,EAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AACrB;AAEA,IAAI,KAAK,OAAA,EAAS;AACjB,EAAA,WAAA,EAAY;AACZ,EAAA,OAAA,CAAQ,IAAA,EAAK;AACd;AAEA,IAAI,KAAK,IAAA,EAAM;AACd,EAAA,SAAA,EAAU;AACV,EAAA,OAAA,CAAQ,IAAA,EAAK;AACd;AAEA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC7B,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAI,CAAA;AACzB,EAAA,IAAI,IAAA,KAASJ,SAAK,IAAA,EAAM;AACvB,IAAA,SAAA,EAAU;AACV,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf,CAAA,MAAA,IAAW,gBAAA,CAAiB,IAAI,CAAA,EAAG;AAClC,IAAA,MAAM,IAAA,GAAOM,eAAW,IAAI,CAAA;AAC5B,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAA,EAAK,IAAI,CAAA,uBAAA,CAAyB,CAAA;AAChD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AACD;AAGA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC9B,EAAA,MAAM,SAAA,GAAYC,qBAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAC1C,EAAA,IAAI,CAACC,mBAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,IAAA,CAAK,MAAM,CAAA,gBAAA,CAAkB,CAAA;AACxD,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,gDAAA,EAAmD,SAAS,CAAA,CAAA,CAAG,CAAA;AAC7E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AACD;AAGA,eAAe,GAAA,GAAqB;AACnC,EAAA,MAAMC,KAAA,GAAM,IAAIC,OAAA,CAAI;AAAA,IACnB,YAAY,IAAA,CAAK,MAAA;AAAA,IACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,OAAO,IAAA,CAAK;AAAA,GACZ,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAI,CAAA;AACzB,EAAA,MAAM,SAAA,GAAY,MAAMD,KAAA,CAAI,YAAA,CAAa,KAAK,SAAS,CAAA;AACvD,EAAA,MAAM,cAAc,MAAA,CAAO,QAAA,CAAS,KAAK,cAAc,CAAA,IAAK,MAAM,EAAE,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,MAAMA,KAAA,CAAI,YAAA,EAAa;AAG5C,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,MAAM,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAK,cAAc,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AACvF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AAGA,EAAA,MAAM,UAAA,GAAa,KAAK,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,KAAgB;AAC3D,IAAA,OAAO,IAAI,UAAA,CAAW,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AAAA,EAC7C,CAAC,CAAA;AAED,EAAA,MAAM,QAAQ,MAAMA,KAAA,CAAI,YAAY,WAAA,EAAa,EAAE,YAAY,CAAA;AAC/D,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,IAAA,KAAST,SAAK,IAAA,EAAM;AAC7C,IAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,WAAW,CAAA;AACvD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AAEA,EAAA,IAAI;AAEH,IAAA,IAAI,CAACW,2BAAsB,EAAG;AAC7B,MAAA,MAAM,IAAIC,6BAAA,EAA0B;AAAA,IACrC;AAEA,IAAA,IAAI,OAAA;AACJ,IAAA,QAAQ,IAAA;AAAM,MACb,KAAKZ,SAAK,IAAA,EAAM;AACf,QAAA,OAAA,GAAU,MAAMa,QAAA,CAAK,YAAA,EAAc,QAAQ,MAAA,EAAQ,OAAA,CAAQ,QAAQ,KAAA,EAAO;AAAA,UACzE,SAAA;AAAA,UACA,WAAA;AAAA,UACA,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,aAAA,EAAe,IAAA,CAAK,gBAAgB,CAAA,IAAK;AAAA,SACzC,CAAA;AACD,QAAA;AAAA,MACD;AAAA,MACA,KAAKb,SAAK,IAAA,EAAM;AACf,QAAA,OAAA,GAAU,MAAMc,QAAA,CAAKL,KAAA,EAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,CAAA;AAChE,QAAA;AAAA,MACD;AAAA,MACA,KAAKT,SAAK,YAAA,EAAc;AACvB,QAAA,OAAA,GAAU,MAAMe,eAAA,CAAY,YAAA,EAAc,OAAA,CAAQ,QAAQ,KAAK,CAAA;AAC/D,QAAA;AAAA,MACD;AAAA,MACA,SAAS;AACR,QAAA,OAAA,GAAU,MAAMC,QAAA,CAAK,YAAA,EAAc,OAAA,CAAQ,MAAA,EAAQ,OAAO,IAAI,CAAA;AAAA,MAC/D;AAAA;AAED,IAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA;AAAA,EAC7B,SAAS,GAAA,EAAK;AACb,IAAA,IAAI,eAAeC,0BAAA,EAAuB;AACzC,MAAAC,+BAAA,CAA4B,SAAS,GAAG,CAAA;AAAA,IACzC,CAAA,MAAA,IAAWC,gBAAA,CAAY,GAAG,CAAA,EAAG;AAC5B,MAAA,eAAA,CAAgB,GAAG,CAAA;AAAA,IACpB,CAAA,MAAO;AACN,MAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA,IACvB;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EACf;AACD;AAGA,GAAA,EAAI,CAAE,KAAA,CAAM,CAAC,GAAA,KAAiB;AAC7B,EAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AACjB,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACf,CAAC,CAAA;;"}
|
package/dist/cjs/index.js
CHANGED
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -3,7 +3,6 @@ import { U as UserError, j as ensureError, k as getFormatter$1, l as deepmerge,
|
|
|
3
3
|
import path$1 from 'node:path/posix';
|
|
4
4
|
import fs from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
import { globSync } from 'glob';
|
|
7
6
|
import prompts from 'prompts';
|
|
8
7
|
import './meta-helper.js';
|
|
9
8
|
import kleur from 'kleur';
|
|
@@ -39,7 +38,7 @@ function expandFiles(patterns, options) {
|
|
|
39
38
|
result.push("/dev/stdin");
|
|
40
39
|
return result;
|
|
41
40
|
}
|
|
42
|
-
for (const filename of globSync(pattern, { cwd })) {
|
|
41
|
+
for (const filename of fs.globSync(pattern, { cwd })) {
|
|
43
42
|
const fullpath = join(cwd, filename);
|
|
44
43
|
if (isDirectory(fullpath)) {
|
|
45
44
|
const dir = expandFiles([directoryPattern(extensions)], { ...options, cwd: fullpath });
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sources":["../../src/cli/expand-files.ts","../../src/cli/formatter.ts","../../src/cli/parse-severity.ts","../../src/cli/get-rule-config.ts","../../src/cli/init.ts","../../src/cli/is-ignored.ts","../../src/cli/cli.ts","../../src/cli/json.ts","../../src/cli/mode.ts","../../src/cli/actions/dump.ts","../../src/cli/actions/init.ts","../../src/cli/actions/lint.ts","../../src/cli/actions/print-config.ts","../../src/cli/errors/handle-schema-validation-error.ts","../../src/cli/errors/import-resolve-missing-error.ts","../../src/cli/have-import-meta-resolve.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { globSync } from \"glob\";\n\nconst DEFAULT_EXTENSIONS = [\"html\"];\n\n/**\n * @public\n */\nexport interface ExpandOptions {\n\t/**\n\t * Working directory. Defaults to `process.cwd()`.\n\t */\n\tcwd?: string;\n\n\t/**\n\t * List of extensions to search for when expanding directories. Extensions\n\t * should be passed without leading dot, e.g. \"html\" instead of \".html\".\n\t */\n\textensions?: string[];\n}\n\nfunction isDirectory(filename: string): boolean {\n\tconst st = fs.statSync(filename);\n\treturn st.isDirectory();\n}\n\nfunction join(stem: string, filename: string): string {\n\tif (path.isAbsolute(filename)) {\n\t\treturn path.normalize(filename);\n\t} else {\n\t\treturn path.normalize(path.join(stem, filename));\n\t}\n}\n\nfunction directoryPattern(extensions: string[]): string {\n\tswitch (extensions.length) {\n\t\tcase 0:\n\t\t\treturn \"**/*\";\n\t\tcase 1:\n\t\t\treturn `**/*.${extensions[0]}`;\n\t\tdefault:\n\t\t\treturn `**/*.{${extensions.join(\",\")}}`;\n\t}\n}\n\n/**\n * Takes a number of file patterns (globs) and returns array of expanded\n * filenames.\n */\nexport function expandFiles(patterns: string[], options: ExpandOptions): string[] {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst extensions = options.extensions ?? DEFAULT_EXTENSIONS;\n\n\tconst files = patterns.reduce((result: string[], pattern: string) => {\n\t\t/* process - as standard input */\n\t\tif (pattern === \"-\") {\n\t\t\tresult.push(\"/dev/stdin\");\n\t\t\treturn result;\n\t\t}\n\n\t\tfor (const filename of globSync(pattern, { cwd })) {\n\t\t\t/* if file is a directory recursively expand files from it */\n\t\t\tconst fullpath = join(cwd, filename);\n\t\t\tif (isDirectory(fullpath)) {\n\t\t\t\tconst dir = expandFiles([directoryPattern(extensions)], { ...options, cwd: fullpath });\n\t\t\t\tresult = result.concat(dir.map((cur) => join(filename, cur)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push(fullpath);\n\t\t}\n\n\t\treturn result.toSorted((a, b) => {\n\t\t\tconst pa = a.split(\"/\").length;\n\t\t\tconst pb = b.split(\"/\").length;\n\t\t\tif (pa !== pb) {\n\t\t\t\treturn pa - pb;\n\t\t\t} else {\n\t\t\t\treturn a > b ? 1 : -1;\n\t\t\t}\n\t\t});\n\t}, []);\n\n\t/* only return unique matches */\n\treturn Array.from(new Set(files));\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { type Formatter, type Report, type Result, UserError, formatterFactory } from \"..\";\nimport { ensureError } from \"../error\";\nimport { legacyRequire } from \"../resolve\";\n\ntype WrappedFormatter = (results: Result[]) => string;\n\nfunction wrap(formatter: Formatter, dst: string): (results: Result[]) => string {\n\treturn (results: Result[]) => {\n\t\tconst output = formatter(results);\n\t\tif (dst) {\n\t\t\tconst dir = path.dirname(dst);\n\t\t\tif (!fs.existsSync(dir)) {\n\t\t\t\tfs.mkdirSync(dir, { recursive: true });\n\t\t\t}\n\t\t\tfs.writeFileSync(dst, output, \"utf-8\");\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\treturn output;\n\t\t}\n\t};\n}\n\nfunction loadFormatter(name: string): Formatter {\n\tconst fn = formatterFactory(name);\n\tif (fn) {\n\t\treturn fn;\n\t}\n\n\ttry {\n\t\treturn legacyRequire(name) as Formatter;\n\t} catch (error: unknown) {\n\t\tthrow new UserError(`No formatter named \"${name}\"`, ensureError(error));\n\t}\n}\n\nexport function getFormatter(formatters: string): (report: Report) => string {\n\tconst fn: WrappedFormatter[] = formatters.split(\",\").map((cur) => {\n\t\tconst [name, dst] = cur.split(\"=\", 2);\n\t\tconst fn = loadFormatter(name);\n\t\treturn wrap(fn, dst);\n\t});\n\treturn (report: Report) => {\n\t\treturn fn\n\t\t\t.map((formatter: WrappedFormatter) => formatter(report.results))\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\");\n\t};\n}\n","import { type RuleSeverity } from \"../config\";\n\n/**\n * @internal\n */\nexport function parseSeverity(ruleId: string, severity: string): RuleSeverity {\n\tswitch (severity) {\n\t\tcase \"off\":\n\t\tcase \"0\":\n\t\t\treturn \"off\";\n\t\tcase \"warn\":\n\t\tcase \"1\":\n\t\t\treturn \"warn\";\n\t\tcase \"error\":\n\t\tcase \"2\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${severity}\" for rule \"${ruleId}\"`);\n\t}\n}\n","import { type RuleConfig, type RuleSeverity } from \"../config\";\nimport { parseSeverity } from \"./parse-severity\";\n\nfunction parseItem(value: string): { ruleId: string; severity: RuleSeverity } {\n\tconst [ruleId, severity = \"error\"] = value.split(\":\", 2);\n\treturn { ruleId, severity: parseSeverity(ruleId, severity) };\n}\n\n/**\n * @internal\n */\nexport function getRuleConfig(values: string | string[]): RuleConfig {\n\tif (typeof values === \"string\") {\n\t\treturn getRuleConfig([values]);\n\t}\n\n\treturn values.reduce<RuleConfig>((parsedRules, value) => {\n\t\tconst { ruleId, severity } = parseItem(value.trim());\n\t\treturn { [ruleId]: severity, ...parsedRules };\n\t}, {});\n}\n","import fs from \"node:fs\";\nimport deepmerge from \"deepmerge\";\nimport prompts from \"prompts\";\nimport { type ConfigData } from \"..\";\n\n/**\n * @public\n */\nexport interface InitResult {\n\tfilename: string;\n}\n\nexport enum Frameworks {\n\tangularjs = \"AngularJS\",\n\tvuejs = \"Vue.js\",\n\tmarkdown = \"Markdown\",\n}\n\nconst frameworkConfig: Record<string, ConfigData> = {\n\t[Frameworks.angularjs]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.js$\": \"html-validate-angular/js\",\n\t\t\t\"^.*\\\\.html$\": \"html-validate-angular/html\",\n\t\t},\n\t},\n\t[Frameworks.vuejs]: {\n\t\tplugins: [\"html-validate-vue\"],\n\t\textends: [\"html-validate-vue:recommended\"],\n\t\ttransform: {\n\t\t\t\"^.*\\\\.vue$\": \"html-validate-vue\",\n\t\t},\n\t},\n\t[Frameworks.markdown]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.md$\": \"html-validate-markdown\",\n\t\t},\n\t},\n};\n\nfunction addFrameworks(src: ConfigData, frameworks: string[]): ConfigData {\n\tlet config = src;\n\tfor (const framework of frameworks) {\n\t\tconfig = deepmerge(config, frameworkConfig[framework]);\n\t}\n\treturn config;\n}\n\nfunction writeConfig(dst: string, config: ConfigData): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tfs.writeFile(dst, JSON.stringify(config, null, 2), (err) => {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t\tresolve();\n\t\t});\n\t});\n}\n\nexport async function init(cwd: string): Promise<InitResult> {\n\tconst filename = `${cwd}/.htmlvalidate.json`;\n\tconst exists = fs.existsSync(filename);\n\tconst initialConfig: ConfigData = {\n\t\telements: [\"html5\"],\n\t\textends: [\"html-validate:recommended\"],\n\t};\n\n\t/* confirm overwrite */\n\tif (exists) {\n\t\tconst result = await prompts({\n\t\t\tname: \"overwrite\",\n\t\t\ttype: \"confirm\",\n\t\t\tmessage: \"A .htmlvalidate.json file already exists, do you want to overwrite it?\",\n\t\t});\n\t\tif (!result.overwrite) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors, unicorn/no-useless-promise-resolve-reject -- technical debt, should not result in failure at all */\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\n\tconst questions: prompts.PromptObject[] = [\n\t\t{\n\t\t\tname: \"frameworks\",\n\t\t\ttype: \"multiselect\",\n\t\t\tchoices: [\n\t\t\t\t{ title: Frameworks.angularjs, value: Frameworks.angularjs },\n\t\t\t\t{ title: Frameworks.vuejs, value: Frameworks.vuejs },\n\t\t\t\t{ title: Frameworks.markdown, value: Frameworks.markdown },\n\t\t\t],\n\t\t\tmessage: \"Support additional frameworks?\",\n\t\t},\n\t];\n\n\t/* prompt user for questions */\n\tconst answers = await prompts(questions);\n\n\t/* write configuration to file */\n\tlet config = initialConfig;\n\tconfig = addFrameworks(config, answers[\"frameworks\"] as string[]);\n\tawait writeConfig(filename, config);\n\n\treturn {\n\t\tfilename,\n\t};\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ignore, { type Ignore } from \"ignore\";\n\nexport class IsIgnored {\n\t/** Cache for parsed .htmlvalidateignore files */\n\tprivate cacheIgnore: Map<string, Ignore | undefined>;\n\n\tpublic constructor() {\n\t\tthis.cacheIgnore = new Map();\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tpublic isIgnored(filename: string): boolean {\n\t\treturn this.match(filename);\n\t}\n\n\t/**\n\t * Clear cache\n\t */\n\tpublic clearCache(): void {\n\t\tthis.cacheIgnore.clear();\n\t}\n\n\tprivate match(target: string): boolean {\n\t\tlet current = path.dirname(target);\n\n\t\tfor (;;) {\n\t\t\tconst relative = path.relative(current, target);\n\t\t\tconst filename = path.join(current, \".htmlvalidateignore\");\n\n\t\t\t/* test filename (relative to the ignore file) against the patterns */\n\t\t\tconst ig = this.parseFile(filename);\n\t\t\tif (ig?.ignores(relative)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate parseFile(filename: string): Ignore | undefined {\n\t\tif (this.cacheIgnore.has(filename)) {\n\t\t\treturn this.cacheIgnore.get(filename);\n\t\t}\n\n\t\tif (!fs.existsSync(filename)) {\n\t\t\tthis.cacheIgnore.set(filename, undefined);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst content = fs.readFileSync(filename, \"utf-8\");\n\t\tconst ig = ignore().add(content);\n\t\tthis.cacheIgnore.set(filename, ig);\n\t\treturn ig;\n\t}\n}\n","import path from \"node:path/posix\";\nimport {\n\ttype ConfigData,\n\ttype ConfigLoader,\n\ttype Report,\n\tFileSystemConfigLoader,\n\tHtmlValidate,\n\tUserError,\n\tesmResolver,\n} from \"..\";\nimport { type ExpandOptions, expandFiles } from \"./expand-files\";\nimport { getFormatter } from \"./formatter\";\nimport { getRuleConfig } from \"./get-rule-config\";\nimport { type InitResult, init } from \"./init\";\nimport { IsIgnored } from \"./is-ignored\";\n\nconst resolver = esmResolver();\n\nfunction defaultConfig(preset: string): ConfigData {\n\tconst presets = preset.split(\",\").map((it) => `html-validate:${it}`);\n\treturn {\n\t\textends: presets,\n\t};\n}\n\n/**\n * @public\n */\nexport interface CLIOptions {\n\tconfigFile?: string;\n\t/** Comma-separated list of presets to use */\n\tpreset?: string;\n\trules?: string | string[];\n}\n\nasync function getBaseConfig(preset?: string, filename?: string): Promise<ConfigData> {\n\tif (filename) {\n\t\tconst configData = await resolver.resolveConfig(path.resolve(filename), { cache: false });\n\t\tif (!configData) {\n\t\t\tthrow new UserError(`Failed to read configuration from \"${filename}\"`);\n\t\t}\n\t\treturn configData;\n\t} else {\n\t\treturn defaultConfig(preset ?? \"recommended\");\n\t}\n}\n\n/**\n * @public\n */\nexport class CLI {\n\tprivate options: CLIOptions;\n\tprivate config: ConfigData | null;\n\tprivate loader: ConfigLoader | null;\n\tprivate ignored: IsIgnored;\n\n\t/**\n\t * Create new CLI helper.\n\t *\n\t * Can be used to create tooling with similar properties to bundled CLI\n\t * script.\n\t */\n\tpublic constructor(options?: CLIOptions) {\n\t\tthis.options = options ?? {};\n\t\tthis.config = null;\n\t\tthis.loader = null;\n\t\tthis.ignored = new IsIgnored();\n\t}\n\n\t/**\n\t * Returns list of files matching patterns and are not ignored. Filenames will\n\t * have absolute paths.\n\t *\n\t * @public\n\t */\n\t/* eslint-disable-next-line @typescript-eslint/require-await -- technical debt: expandFiles(..) should actually be async as well */\n\tpublic async expandFiles(patterns: string[], options: ExpandOptions = {}): Promise<string[]> {\n\t\treturn expandFiles(patterns, options).filter((filename) => !this.isIgnored(filename));\n\t}\n\n\tpublic getFormatter(formatters: string): Promise<(report: Report) => string> {\n\t\t/* while not actually async the API boundary returns a Promise in case it needs to in the future, i.e a ESM-based formatter */\n\t\treturn Promise.resolve(getFormatter(formatters));\n\t}\n\n\t/**\n\t * Initialize project with a new configuration.\n\t *\n\t * A new `.htmlvalidate.json` file will be placed in the path provided by\n\t * `cwd`.\n\t */\n\tpublic init(cwd: string): Promise<InitResult> {\n\t\treturn init(cwd);\n\t}\n\n\t/**\n\t * Clear cache.\n\t *\n\t * Previously fetched [[HtmlValidate]] instances must either be fetched again\n\t * or call [[HtmlValidate.flushConfigCache]].\n\t */\n\t/* istanbul ignore next: each method is tested separately */\n\tpublic clearCache(): Promise<void> {\n\t\tif (this.loader) {\n\t\t\tthis.loader.flushCache();\n\t\t}\n\t\tthis.ignored.clearCache();\n\t\treturn Promise.resolve();\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @internal\n\t */\n\tpublic async getLoader(): Promise<ConfigLoader> {\n\t\t/* istanbul ignore next: cache will most likely be cold during testing */\n\t\tif (!this.loader) {\n\t\t\tconst config = await this.getConfig();\n\t\t\tthis.loader = new FileSystemConfigLoader([resolver], config);\n\t\t}\n\t\treturn this.loader;\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @public\n\t */\n\tpublic async getValidator(): Promise<HtmlValidate> {\n\t\tconst loader = await this.getLoader();\n\t\treturn new HtmlValidate(loader);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic async getConfig(): Promise<ConfigData> {\n\t\tthis.config ??= await this.resolveConfig();\n\t\treturn this.config;\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tprivate isIgnored(filename: string): boolean {\n\t\treturn this.ignored.isIgnored(filename);\n\t}\n\n\tprivate async resolveConfig(): Promise<ConfigData> {\n\t\tconst { options } = this;\n\t\tconst havePreset = Boolean(options.preset);\n\t\tconst haveConfig = Boolean(options.configFile);\n\t\tconst config = await getBaseConfig(options.preset, options.configFile);\n\t\tif (options.rules) {\n\t\t\tif (havePreset || haveConfig) {\n\t\t\t\t/* when rules are explicitly specified and combined with an explicit\n\t\t\t\t * preset or configuration file we merge the result as the user would\n\t\t\t\texpect rules from the preset or configuration files to be used */\n\t\t\t\tconfig.rules = { ...config.rules, ...getRuleConfig(options.rules) };\n\t\t\t} else {\n\t\t\t\t/* if neither an explicit configuration file or preset is passed as a\n\t\t\t\t * CLI argument a default configuration is loaded but since the user has\n\t\t\t\t * specified one or more rules explicitly we overwrite both the default\n\t\t\t\t * preset and the default rules with the explicit rules */\n\t\t\t\tconfig.extends = [];\n\t\t\t\tconfig.rules = getRuleConfig(options.rules);\n\t\t\t}\n\t\t}\n\t\treturn config;\n\t}\n}\n","import { type EventDump, type Location } from \"..\";\n\nconst jsonIgnored = new Set([\n\t\"annotation\",\n\t\"blockedRules\",\n\t\"cache\",\n\t\"closed\",\n\t\"depth\",\n\t\"disabledRules\",\n\t\"nodeType\",\n\t\"unique\",\n\t\"voidElement\",\n]);\nconst jsonFiltered = new Set([\n\t\"childNodes\",\n\t\"children\",\n\t\"data\",\n\t\"meta\",\n\t\"metaElement\",\n\t\"originalData\",\n\t\"parent\",\n]);\n\nfunction isLocation(key: string, value: unknown): value is Location {\n\treturn Boolean(value && (key === \"location\" || key.endsWith(\"Location\")));\n}\n\nfunction isIgnored(key: string): boolean {\n\treturn key.startsWith(\"_\") || jsonIgnored.has(key);\n}\n\nfunction isFiltered(key: string, value: unknown): boolean {\n\treturn Boolean(value && jsonFiltered.has(key));\n}\n\nexport function eventReplacer<T>(this: void, key: string, value: T): T | string | undefined {\n\tif (isLocation(key, value)) {\n\t\tconst filename = value.filename;\n\t\tconst line = String(value.line);\n\t\tconst column = String(value.column);\n\t\treturn `${filename}:${line}:${column}`;\n\t}\n\tif (isIgnored(key)) {\n\t\treturn undefined;\n\t}\n\tif (isFiltered(key, value)) {\n\t\treturn \"[truncated]\";\n\t}\n\treturn value;\n}\n\nexport function eventFormatter(entry: EventDump): string {\n\tconst strdata = JSON.stringify(entry.data, eventReplacer, 2);\n\treturn `${entry.event}: ${strdata}`;\n}\n","/**\n * @internal\n */\nexport enum Mode {\n\tLINT,\n\tINIT,\n\tDUMP_EVENTS,\n\tDUMP_TOKENS,\n\tDUMP_TREE,\n\tDUMP_SOURCE,\n\tPRINT_CONFIG,\n}\n\n/**\n * @internal\n */\nexport function modeToFlag(mode: Mode.LINT): null;\nexport function modeToFlag(mode: Exclude<Mode, Mode.LINT>): string;\nexport function modeToFlag(mode: Mode): string | null;\nexport function modeToFlag(mode: Mode): string | null {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn null;\n\t\tcase Mode.INIT:\n\t\t\treturn \"--init\";\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\treturn \"--dump-events\";\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\treturn \"--dump-tokens\";\n\t\tcase Mode.DUMP_TREE:\n\t\t\treturn \"--dump-tree\";\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\treturn \"--dump-source\";\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn \"--print-config\";\n\t}\n}\n","import { type HtmlValidate, type TokenDump } from \"../..\";\nimport { eventFormatter } from \"../json\";\nimport { Mode } from \"../mode\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function dump(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n\tmode: Mode,\n): Promise<boolean> {\n\tlet lines: Array<Promise<string[]>>;\n\tswitch (mode) {\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpEvents(filename);\n\t\t\t\treturn lines.map(eventFormatter);\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpTokens(filename);\n\t\t\t\treturn lines.map((entry: TokenDump) => {\n\t\t\t\t\tconst data = JSON.stringify(entry.data);\n\t\t\t\t\treturn `TOKEN: ${entry.token}\\n Data: ${data}\\n Location: ${entry.location}`;\n\t\t\t\t});\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TREE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpTree(filename));\n\t\t\tbreak;\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpSource(filename));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown mode \"${String(mode)}\"`);\n\t}\n\tconst results = await Promise.all(lines);\n\tconst flat = results.flat();\n\toutput.write(flat.join(\"\\n\"));\n\toutput.write(\"\\n\");\n\treturn true;\n}\n","import { type CLI } from \"../cli\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface InitOptions {\n\tcwd: string;\n}\n\nexport async function init(\n\tcli: CLI,\n\toutput: WritableStreamLike,\n\toptions: InitOptions,\n): Promise<boolean> {\n\tconst result = await cli.init(options.cwd);\n\toutput.write(`Configuration written to \"${result.filename}\"\\n`);\n\treturn true;\n}\n","import kleur from \"kleur\";\nimport { type HtmlValidate, type Report, type Result, Reporter } from \"../..\";\nimport { type PerformanceResult } from \"../../performance\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface LintOptions {\n\tformatter: (report: Report) => string;\n\tmaxWarnings: number;\n\tperformance: boolean;\n\tstdinFilename: false | string;\n}\nfunction formatMs(ms: number): string {\n\treturn `${ms.toFixed(2)}ms`;\n}\n\nfunction formatPerformanceTable(\n\tnameHeader: string,\n\tentries: Array<{ name: string; count: number; time: number }>,\n\ttotalTime: number,\n): string {\n\tconst nameWidth = Math.max(nameHeader.length, ...entries.map((e) => e.name.length)) + 2;\n\tconst countWidth = Math.max(5, ...entries.map((e) => String(e.count).length)) + 2;\n\tconst header = ` ${nameHeader.padEnd(nameWidth)}${\"count\".padStart(countWidth)} ${\"time(ms)\".padStart(10)} ${\"time(%)\".padStart(8)}`;\n\tconst separator = ` ${\"─\".repeat(header.length - 2)}`;\n\tconst rows = entries.map((entry) => {\n\t\tconst pct = totalTime > 0 ? ((entry.time / totalTime) * 100).toFixed(1) : \"0.0\";\n\t\tconst pctStr = `${pct}%`;\n\t\treturn ` ${entry.name.padEnd(nameWidth)}${String(entry.count).padStart(countWidth)} ${formatMs(entry.time).padStart(10)} ${pctStr.padStart(8)}`;\n\t});\n\treturn [header, separator, ...rows].join(\"\\n\");\n}\n\nfunction formatPerformanceResult(result: PerformanceResult): string {\n\tconst totalEventTime = result.events.reduce((sum, e) => sum + e.time, 0);\n\tconst totalRuleTime = result.rules.reduce((sum, e) => sum + e.time, 0);\n\tconst { configTime, transformTime, totalTime } = result;\n\tconst eventEntries = result.events.map((e) => ({ name: e.event, count: e.count, time: e.time }));\n\tconst ruleEntries = result.rules.map((e) => ({ name: e.rule, count: e.count, time: e.time }));\n\tconst lines = [\n\t\t\"Performance\",\n\t\t\"\",\n\t\t\"Events:\",\n\t\tformatPerformanceTable(\"event\", eventEntries, totalTime),\n\t\t\"\",\n\t\t\"Rules:\",\n\t\tformatPerformanceTable(\"rule\", ruleEntries, totalTime),\n\t\t\"\",\n\t\t`Total: ${formatMs(totalTime)}`,\n\t\t` Config: ${formatMs(configTime)}`,\n\t\t` Transform: ${formatMs(transformTime)}`,\n\t\t` Events: ${formatMs(totalEventTime - totalRuleTime)}`,\n\t\t` Rules: ${formatMs(totalRuleTime)}`,\n\t\t\"\",\n\t];\n\treturn lines.join(\"\\n\");\n}\n\nfunction renameStdin(report: Report, filename: string): void {\n\tconst stdin = report.results.find((cur: Result) => cur.filePath === \"/dev/stdin\");\n\tif (stdin) {\n\t\tstdin.filePath = filename;\n\t}\n}\n\nexport async function lint(\n\thtmlvalidate: HtmlValidate,\n\tstdout: WritableStreamLike,\n\tstderr: WritableStreamLike,\n\tfiles: string[],\n\toptions: LintOptions,\n): Promise<boolean> {\n\tif (options.performance) {\n\t\thtmlvalidate.startPerformance();\n\t}\n\n\tconst reports: Report[] = [];\n\tfor (const filename of files) {\n\t\ttry {\n\t\t\treports.push(await htmlvalidate.validateFile(filename));\n\t\t} catch (err) {\n\t\t\tconst message = kleur.red(`Validator crashed when parsing \"${filename}\"`);\n\t\t\tstdout.write(`${message}\\n`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tconst merged = Reporter.merge(reports);\n\n\t/* rename stdin if an explicit filename was passed */\n\tif (options.stdinFilename) {\n\t\trenameStdin(merged, options.stdinFilename);\n\t}\n\n\tstdout.write(options.formatter(merged));\n\n\tif (options.performance) {\n\t\tconst performanceResult = htmlvalidate.stopPerformance();\n\t\tstderr.write(formatPerformanceResult(performanceResult));\n\t}\n\n\tif (options.maxWarnings >= 0 && merged.warningCount > options.maxWarnings) {\n\t\tstdout.write(\n\t\t\t`\\nhtml-validate found too many warnings (maximum: ${String(options.maxWarnings)}).\\n`,\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn merged.valid;\n}\n","import { type HtmlValidate } from \"../..\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function printConfig(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n): Promise<boolean> {\n\tif (files.length > 1) {\n\t\toutput.write(`\\`--print-config\\` expected a single filename but got multiple:\\n\\n`);\n\t\tfor (const filename of files) {\n\t\t\toutput.write(` - ${filename}\\n`);\n\t\t}\n\t\toutput.write(\"\\n\");\n\t\treturn false;\n\t}\n\tconst config = await htmlvalidate.getConfigFor(files[0]);\n\tconst json = JSON.stringify(config.getConfigData(), null, 2);\n\toutput.write(`${json}\\n`);\n\treturn true;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport betterAjvErrors from \"@sidvind/better-ajv-errors\";\nimport kleur from \"kleur\";\nimport { type SchemaValidationError } from \"../../error\";\n\nfunction prettyError(err: SchemaValidationError): string {\n\tlet json: string | undefined;\n\tif (err.filename && fs.existsSync(err.filename)) {\n\t\tjson = fs.readFileSync(err.filename, \"utf-8\");\n\t}\n\treturn betterAjvErrors(err.schema, err.obj, err.errors, {\n\t\tformat: \"cli\",\n\t\tindent: 2,\n\t\tjson,\n\t});\n}\n\n/**\n * @internal\n */\nexport function handleSchemaValidationError(console: Console, err: SchemaValidationError): void {\n\tif (err.filename) {\n\t\tconst filename = path.relative(process.cwd(), err.filename);\n\t\tconsole.error(kleur.red(`A configuration error was found in \"${filename}\":`));\n\t} else {\n\t\tconsole.error(kleur.red(`A configuration error was found:`));\n\t}\n\tconsole.group();\n\t{\n\t\tconsole.error(prettyError(err));\n\t}\n\tconsole.groupEnd();\n}\n","import kleur from \"kleur\";\nimport { engines } from \"../../../package.json\";\nimport { UserError } from \"../../error\";\n\n/**\n * @internal\n */\nexport class ImportResolveMissingError extends UserError {\n\tpublic constructor() {\n\t\tconst message = `import.meta.resolve(..) is not available on this system`;\n\t\tsuper(message);\n\t\tthis.name = \"ImportResolveMissingError\";\n\t}\n\n\tpublic override prettyFormat(): string {\n\t\tconst { message } = this;\n\t\tconst currentVersion = process.version;\n\t\tconst requiredVersion = engines.node\n\t\t\t.split(\"||\")\n\t\t\t.map((it) => `v${it.replace(/^\\D+/, \"\").trim()}`);\n\t\treturn [\n\t\t\tkleur.red(`Error: ${message}.`),\n\t\t\t\"\",\n\t\t\t`Either ensure you are running a supported NodeJS version:`,\n\t\t\t` Current: ${currentVersion}`,\n\t\t\t` Required: ${requiredVersion.join(\", \")} or later`,\n\t\t\t`Or set NODE_OPTIONS=\"--experimental-import-meta-resolve\"`,\n\t\t].join(\"\\n\");\n\t}\n}\n","/**\n * @internal\n */\nexport function haveImportMetaResolve(): boolean {\n\treturn \"resolve\" in import.meta;\n}\n"],"names":["formatterFactory","fn","init","path","Mode","lines"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../../src/cli/expand-files.ts","../../src/cli/formatter.ts","../../src/cli/parse-severity.ts","../../src/cli/get-rule-config.ts","../../src/cli/init.ts","../../src/cli/is-ignored.ts","../../src/cli/cli.ts","../../src/cli/json.ts","../../src/cli/mode.ts","../../src/cli/actions/dump.ts","../../src/cli/actions/init.ts","../../src/cli/actions/lint.ts","../../src/cli/actions/print-config.ts","../../src/cli/errors/handle-schema-validation-error.ts","../../src/cli/errors/import-resolve-missing-error.ts","../../src/cli/have-import-meta-resolve.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nconst DEFAULT_EXTENSIONS = [\"html\"];\n\n/**\n * @public\n */\nexport interface ExpandOptions {\n\t/**\n\t * Working directory. Defaults to `process.cwd()`.\n\t */\n\tcwd?: string;\n\n\t/**\n\t * List of extensions to search for when expanding directories. Extensions\n\t * should be passed without leading dot, e.g. \"html\" instead of \".html\".\n\t */\n\textensions?: string[];\n}\n\nfunction isDirectory(filename: string): boolean {\n\tconst st = fs.statSync(filename);\n\treturn st.isDirectory();\n}\n\nfunction join(stem: string, filename: string): string {\n\tif (path.isAbsolute(filename)) {\n\t\treturn path.normalize(filename);\n\t} else {\n\t\treturn path.normalize(path.join(stem, filename));\n\t}\n}\n\nfunction directoryPattern(extensions: string[]): string {\n\tswitch (extensions.length) {\n\t\tcase 0:\n\t\t\treturn \"**/*\";\n\t\tcase 1:\n\t\t\treturn `**/*.${extensions[0]}`;\n\t\tdefault:\n\t\t\treturn `**/*.{${extensions.join(\",\")}}`;\n\t}\n}\n\n/**\n * Takes a number of file patterns (globs) and returns array of expanded\n * filenames.\n */\nexport function expandFiles(patterns: string[], options: ExpandOptions): string[] {\n\tconst cwd = options.cwd ?? process.cwd();\n\tconst extensions = options.extensions ?? DEFAULT_EXTENSIONS;\n\n\tconst files = patterns.reduce((result: string[], pattern: string) => {\n\t\t/* process - as standard input */\n\t\tif (pattern === \"-\") {\n\t\t\tresult.push(\"/dev/stdin\");\n\t\t\treturn result;\n\t\t}\n\n\t\tfor (const filename of fs.globSync(pattern, { cwd })) {\n\t\t\t/* if file is a directory recursively expand files from it */\n\t\t\tconst fullpath = join(cwd, filename);\n\t\t\tif (isDirectory(fullpath)) {\n\t\t\t\tconst dir = expandFiles([directoryPattern(extensions)], { ...options, cwd: fullpath });\n\t\t\t\tresult = result.concat(dir.map((cur) => join(filename, cur)));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tresult.push(fullpath);\n\t\t}\n\n\t\treturn result.toSorted((a, b) => {\n\t\t\tconst pa = a.split(\"/\").length;\n\t\t\tconst pb = b.split(\"/\").length;\n\t\t\tif (pa !== pb) {\n\t\t\t\treturn pa - pb;\n\t\t\t} else {\n\t\t\t\treturn a > b ? 1 : -1;\n\t\t\t}\n\t\t});\n\t}, []);\n\n\t/* only return unique matches */\n\treturn Array.from(new Set(files));\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { type Formatter, type Report, type Result, UserError, formatterFactory } from \"..\";\nimport { ensureError } from \"../error\";\nimport { legacyRequire } from \"../resolve\";\n\ntype WrappedFormatter = (results: Result[]) => string;\n\nfunction wrap(formatter: Formatter, dst: string): (results: Result[]) => string {\n\treturn (results: Result[]) => {\n\t\tconst output = formatter(results);\n\t\tif (dst) {\n\t\t\tconst dir = path.dirname(dst);\n\t\t\tif (!fs.existsSync(dir)) {\n\t\t\t\tfs.mkdirSync(dir, { recursive: true });\n\t\t\t}\n\t\t\tfs.writeFileSync(dst, output, \"utf-8\");\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\treturn output;\n\t\t}\n\t};\n}\n\nfunction loadFormatter(name: string): Formatter {\n\tconst fn = formatterFactory(name);\n\tif (fn) {\n\t\treturn fn;\n\t}\n\n\ttry {\n\t\treturn legacyRequire(name) as Formatter;\n\t} catch (error: unknown) {\n\t\tthrow new UserError(`No formatter named \"${name}\"`, ensureError(error));\n\t}\n}\n\nexport function getFormatter(formatters: string): (report: Report) => string {\n\tconst fn: WrappedFormatter[] = formatters.split(\",\").map((cur) => {\n\t\tconst [name, dst] = cur.split(\"=\", 2);\n\t\tconst fn = loadFormatter(name);\n\t\treturn wrap(fn, dst);\n\t});\n\treturn (report: Report) => {\n\t\treturn fn\n\t\t\t.map((formatter: WrappedFormatter) => formatter(report.results))\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\");\n\t};\n}\n","import { type RuleSeverity } from \"../config\";\n\n/**\n * @internal\n */\nexport function parseSeverity(ruleId: string, severity: string): RuleSeverity {\n\tswitch (severity) {\n\t\tcase \"off\":\n\t\tcase \"0\":\n\t\t\treturn \"off\";\n\t\tcase \"warn\":\n\t\tcase \"1\":\n\t\t\treturn \"warn\";\n\t\tcase \"error\":\n\t\tcase \"2\":\n\t\t\treturn \"error\";\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${severity}\" for rule \"${ruleId}\"`);\n\t}\n}\n","import { type RuleConfig, type RuleSeverity } from \"../config\";\nimport { parseSeverity } from \"./parse-severity\";\n\nfunction parseItem(value: string): { ruleId: string; severity: RuleSeverity } {\n\tconst [ruleId, severity = \"error\"] = value.split(\":\", 2);\n\treturn { ruleId, severity: parseSeverity(ruleId, severity) };\n}\n\n/**\n * @internal\n */\nexport function getRuleConfig(values: string | string[]): RuleConfig {\n\tif (typeof values === \"string\") {\n\t\treturn getRuleConfig([values]);\n\t}\n\n\treturn values.reduce<RuleConfig>((parsedRules, value) => {\n\t\tconst { ruleId, severity } = parseItem(value.trim());\n\t\treturn { [ruleId]: severity, ...parsedRules };\n\t}, {});\n}\n","import fs from \"node:fs\";\nimport deepmerge from \"deepmerge\";\nimport prompts from \"prompts\";\nimport { type ConfigData } from \"..\";\n\n/**\n * @public\n */\nexport interface InitResult {\n\tfilename: string;\n}\n\nexport enum Frameworks {\n\tangularjs = \"AngularJS\",\n\tvuejs = \"Vue.js\",\n\tmarkdown = \"Markdown\",\n}\n\nconst frameworkConfig: Record<string, ConfigData> = {\n\t[Frameworks.angularjs]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.js$\": \"html-validate-angular/js\",\n\t\t\t\"^.*\\\\.html$\": \"html-validate-angular/html\",\n\t\t},\n\t},\n\t[Frameworks.vuejs]: {\n\t\tplugins: [\"html-validate-vue\"],\n\t\textends: [\"html-validate-vue:recommended\"],\n\t\ttransform: {\n\t\t\t\"^.*\\\\.vue$\": \"html-validate-vue\",\n\t\t},\n\t},\n\t[Frameworks.markdown]: {\n\t\ttransform: {\n\t\t\t\"^.*\\\\.md$\": \"html-validate-markdown\",\n\t\t},\n\t},\n};\n\nfunction addFrameworks(src: ConfigData, frameworks: string[]): ConfigData {\n\tlet config = src;\n\tfor (const framework of frameworks) {\n\t\tconfig = deepmerge(config, frameworkConfig[framework]);\n\t}\n\treturn config;\n}\n\nfunction writeConfig(dst: string, config: ConfigData): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tfs.writeFile(dst, JSON.stringify(config, null, 2), (err) => {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t}\n\t\t\tresolve();\n\t\t});\n\t});\n}\n\nexport async function init(cwd: string): Promise<InitResult> {\n\tconst filename = `${cwd}/.htmlvalidate.json`;\n\tconst exists = fs.existsSync(filename);\n\tconst initialConfig: ConfigData = {\n\t\telements: [\"html5\"],\n\t\textends: [\"html-validate:recommended\"],\n\t};\n\n\t/* confirm overwrite */\n\tif (exists) {\n\t\tconst result = await prompts({\n\t\t\tname: \"overwrite\",\n\t\t\ttype: \"confirm\",\n\t\t\tmessage: \"A .htmlvalidate.json file already exists, do you want to overwrite it?\",\n\t\t});\n\t\tif (!result.overwrite) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors, unicorn/no-useless-promise-resolve-reject -- technical debt, should not result in failure at all */\n\t\t\treturn Promise.reject();\n\t\t}\n\t}\n\n\tconst questions: prompts.PromptObject[] = [\n\t\t{\n\t\t\tname: \"frameworks\",\n\t\t\ttype: \"multiselect\",\n\t\t\tchoices: [\n\t\t\t\t{ title: Frameworks.angularjs, value: Frameworks.angularjs },\n\t\t\t\t{ title: Frameworks.vuejs, value: Frameworks.vuejs },\n\t\t\t\t{ title: Frameworks.markdown, value: Frameworks.markdown },\n\t\t\t],\n\t\t\tmessage: \"Support additional frameworks?\",\n\t\t},\n\t];\n\n\t/* prompt user for questions */\n\tconst answers = await prompts(questions);\n\n\t/* write configuration to file */\n\tlet config = initialConfig;\n\tconfig = addFrameworks(config, answers[\"frameworks\"] as string[]);\n\tawait writeConfig(filename, config);\n\n\treturn {\n\t\tfilename,\n\t};\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ignore, { type Ignore } from \"ignore\";\n\nexport class IsIgnored {\n\t/** Cache for parsed .htmlvalidateignore files */\n\tprivate cacheIgnore: Map<string, Ignore | undefined>;\n\n\tpublic constructor() {\n\t\tthis.cacheIgnore = new Map();\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tpublic isIgnored(filename: string): boolean {\n\t\treturn this.match(filename);\n\t}\n\n\t/**\n\t * Clear cache\n\t */\n\tpublic clearCache(): void {\n\t\tthis.cacheIgnore.clear();\n\t}\n\n\tprivate match(target: string): boolean {\n\t\tlet current = path.dirname(target);\n\n\t\tfor (;;) {\n\t\t\tconst relative = path.relative(current, target);\n\t\t\tconst filename = path.join(current, \".htmlvalidateignore\");\n\n\t\t\t/* test filename (relative to the ignore file) against the patterns */\n\t\t\tconst ig = this.parseFile(filename);\n\t\t\tif (ig?.ignores(relative)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t/* get the parent directory */\n\t\t\tconst child = current;\n\t\t\tcurrent = path.dirname(current);\n\n\t\t\t/* stop if this is the root directory */\n\t\t\tif (current === child) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate parseFile(filename: string): Ignore | undefined {\n\t\tif (this.cacheIgnore.has(filename)) {\n\t\t\treturn this.cacheIgnore.get(filename);\n\t\t}\n\n\t\tif (!fs.existsSync(filename)) {\n\t\t\tthis.cacheIgnore.set(filename, undefined);\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst content = fs.readFileSync(filename, \"utf-8\");\n\t\tconst ig = ignore().add(content);\n\t\tthis.cacheIgnore.set(filename, ig);\n\t\treturn ig;\n\t}\n}\n","import path from \"node:path/posix\";\nimport {\n\ttype ConfigData,\n\ttype ConfigLoader,\n\ttype Report,\n\tFileSystemConfigLoader,\n\tHtmlValidate,\n\tUserError,\n\tesmResolver,\n} from \"..\";\nimport { type ExpandOptions, expandFiles } from \"./expand-files\";\nimport { getFormatter } from \"./formatter\";\nimport { getRuleConfig } from \"./get-rule-config\";\nimport { type InitResult, init } from \"./init\";\nimport { IsIgnored } from \"./is-ignored\";\n\nconst resolver = esmResolver();\n\nfunction defaultConfig(preset: string): ConfigData {\n\tconst presets = preset.split(\",\").map((it) => `html-validate:${it}`);\n\treturn {\n\t\textends: presets,\n\t};\n}\n\n/**\n * @public\n */\nexport interface CLIOptions {\n\tconfigFile?: string;\n\t/** Comma-separated list of presets to use */\n\tpreset?: string;\n\trules?: string | string[];\n}\n\nasync function getBaseConfig(preset?: string, filename?: string): Promise<ConfigData> {\n\tif (filename) {\n\t\tconst configData = await resolver.resolveConfig(path.resolve(filename), { cache: false });\n\t\tif (!configData) {\n\t\t\tthrow new UserError(`Failed to read configuration from \"${filename}\"`);\n\t\t}\n\t\treturn configData;\n\t} else {\n\t\treturn defaultConfig(preset ?? \"recommended\");\n\t}\n}\n\n/**\n * @public\n */\nexport class CLI {\n\tprivate options: CLIOptions;\n\tprivate config: ConfigData | null;\n\tprivate loader: ConfigLoader | null;\n\tprivate ignored: IsIgnored;\n\n\t/**\n\t * Create new CLI helper.\n\t *\n\t * Can be used to create tooling with similar properties to bundled CLI\n\t * script.\n\t */\n\tpublic constructor(options?: CLIOptions) {\n\t\tthis.options = options ?? {};\n\t\tthis.config = null;\n\t\tthis.loader = null;\n\t\tthis.ignored = new IsIgnored();\n\t}\n\n\t/**\n\t * Returns list of files matching patterns and are not ignored. Filenames will\n\t * have absolute paths.\n\t *\n\t * @public\n\t */\n\t/* eslint-disable-next-line @typescript-eslint/require-await -- technical debt: expandFiles(..) should actually be async as well */\n\tpublic async expandFiles(patterns: string[], options: ExpandOptions = {}): Promise<string[]> {\n\t\treturn expandFiles(patterns, options).filter((filename) => !this.isIgnored(filename));\n\t}\n\n\tpublic getFormatter(formatters: string): Promise<(report: Report) => string> {\n\t\t/* while not actually async the API boundary returns a Promise in case it needs to in the future, i.e a ESM-based formatter */\n\t\treturn Promise.resolve(getFormatter(formatters));\n\t}\n\n\t/**\n\t * Initialize project with a new configuration.\n\t *\n\t * A new `.htmlvalidate.json` file will be placed in the path provided by\n\t * `cwd`.\n\t */\n\tpublic init(cwd: string): Promise<InitResult> {\n\t\treturn init(cwd);\n\t}\n\n\t/**\n\t * Clear cache.\n\t *\n\t * Previously fetched [[HtmlValidate]] instances must either be fetched again\n\t * or call [[HtmlValidate.flushConfigCache]].\n\t */\n\t/* istanbul ignore next: each method is tested separately */\n\tpublic clearCache(): Promise<void> {\n\t\tif (this.loader) {\n\t\t\tthis.loader.flushCache();\n\t\t}\n\t\tthis.ignored.clearCache();\n\t\treturn Promise.resolve();\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @internal\n\t */\n\tpublic async getLoader(): Promise<ConfigLoader> {\n\t\t/* istanbul ignore next: cache will most likely be cold during testing */\n\t\tif (!this.loader) {\n\t\t\tconst config = await this.getConfig();\n\t\t\tthis.loader = new FileSystemConfigLoader([resolver], config);\n\t\t}\n\t\treturn this.loader;\n\t}\n\n\t/**\n\t * Get HtmlValidate instance with configuration based on options passed to the\n\t * constructor.\n\t *\n\t * @public\n\t */\n\tpublic async getValidator(): Promise<HtmlValidate> {\n\t\tconst loader = await this.getLoader();\n\t\treturn new HtmlValidate(loader);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic async getConfig(): Promise<ConfigData> {\n\t\tthis.config ??= await this.resolveConfig();\n\t\treturn this.config;\n\t}\n\n\t/**\n\t * Searches \".htmlvalidateignore\" files from filesystem and returns `true` if\n\t * one of them contains a pattern matching given filename.\n\t */\n\tprivate isIgnored(filename: string): boolean {\n\t\treturn this.ignored.isIgnored(filename);\n\t}\n\n\tprivate async resolveConfig(): Promise<ConfigData> {\n\t\tconst { options } = this;\n\t\tconst havePreset = Boolean(options.preset);\n\t\tconst haveConfig = Boolean(options.configFile);\n\t\tconst config = await getBaseConfig(options.preset, options.configFile);\n\t\tif (options.rules) {\n\t\t\tif (havePreset || haveConfig) {\n\t\t\t\t/* when rules are explicitly specified and combined with an explicit\n\t\t\t\t * preset or configuration file we merge the result as the user would\n\t\t\t\texpect rules from the preset or configuration files to be used */\n\t\t\t\tconfig.rules = { ...config.rules, ...getRuleConfig(options.rules) };\n\t\t\t} else {\n\t\t\t\t/* if neither an explicit configuration file or preset is passed as a\n\t\t\t\t * CLI argument a default configuration is loaded but since the user has\n\t\t\t\t * specified one or more rules explicitly we overwrite both the default\n\t\t\t\t * preset and the default rules with the explicit rules */\n\t\t\t\tconfig.extends = [];\n\t\t\t\tconfig.rules = getRuleConfig(options.rules);\n\t\t\t}\n\t\t}\n\t\treturn config;\n\t}\n}\n","import { type EventDump, type Location } from \"..\";\n\nconst jsonIgnored = new Set([\n\t\"annotation\",\n\t\"blockedRules\",\n\t\"cache\",\n\t\"closed\",\n\t\"depth\",\n\t\"disabledRules\",\n\t\"nodeType\",\n\t\"unique\",\n\t\"voidElement\",\n]);\nconst jsonFiltered = new Set([\n\t\"childNodes\",\n\t\"children\",\n\t\"data\",\n\t\"meta\",\n\t\"metaElement\",\n\t\"originalData\",\n\t\"parent\",\n]);\n\nfunction isLocation(key: string, value: unknown): value is Location {\n\treturn Boolean(value && (key === \"location\" || key.endsWith(\"Location\")));\n}\n\nfunction isIgnored(key: string): boolean {\n\treturn key.startsWith(\"_\") || jsonIgnored.has(key);\n}\n\nfunction isFiltered(key: string, value: unknown): boolean {\n\treturn Boolean(value && jsonFiltered.has(key));\n}\n\nexport function eventReplacer<T>(this: void, key: string, value: T): T | string | undefined {\n\tif (isLocation(key, value)) {\n\t\tconst filename = value.filename;\n\t\tconst line = String(value.line);\n\t\tconst column = String(value.column);\n\t\treturn `${filename}:${line}:${column}`;\n\t}\n\tif (isIgnored(key)) {\n\t\treturn undefined;\n\t}\n\tif (isFiltered(key, value)) {\n\t\treturn \"[truncated]\";\n\t}\n\treturn value;\n}\n\nexport function eventFormatter(entry: EventDump): string {\n\tconst strdata = JSON.stringify(entry.data, eventReplacer, 2);\n\treturn `${entry.event}: ${strdata}`;\n}\n","/**\n * @internal\n */\nexport enum Mode {\n\tLINT,\n\tINIT,\n\tDUMP_EVENTS,\n\tDUMP_TOKENS,\n\tDUMP_TREE,\n\tDUMP_SOURCE,\n\tPRINT_CONFIG,\n}\n\n/**\n * @internal\n */\nexport function modeToFlag(mode: Mode.LINT): null;\nexport function modeToFlag(mode: Exclude<Mode, Mode.LINT>): string;\nexport function modeToFlag(mode: Mode): string | null;\nexport function modeToFlag(mode: Mode): string | null {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn null;\n\t\tcase Mode.INIT:\n\t\t\treturn \"--init\";\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\treturn \"--dump-events\";\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\treturn \"--dump-tokens\";\n\t\tcase Mode.DUMP_TREE:\n\t\t\treturn \"--dump-tree\";\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\treturn \"--dump-source\";\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn \"--print-config\";\n\t}\n}\n","import { type HtmlValidate, type TokenDump } from \"../..\";\nimport { eventFormatter } from \"../json\";\nimport { Mode } from \"../mode\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function dump(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n\tmode: Mode,\n): Promise<boolean> {\n\tlet lines: Array<Promise<string[]>>;\n\tswitch (mode) {\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpEvents(filename);\n\t\t\t\treturn lines.map(eventFormatter);\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\tlines = files.map(async (filename: string) => {\n\t\t\t\tconst lines = await htmlvalidate.dumpTokens(filename);\n\t\t\t\treturn lines.map((entry: TokenDump) => {\n\t\t\t\t\tconst data = JSON.stringify(entry.data);\n\t\t\t\t\treturn `TOKEN: ${entry.token}\\n Data: ${data}\\n Location: ${entry.location}`;\n\t\t\t\t});\n\t\t\t});\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TREE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpTree(filename));\n\t\t\tbreak;\n\t\tcase Mode.DUMP_SOURCE:\n\t\t\tlines = files.map((filename: string) => htmlvalidate.dumpSource(filename));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown mode \"${String(mode)}\"`);\n\t}\n\tconst results = await Promise.all(lines);\n\tconst flat = results.flat();\n\toutput.write(flat.join(\"\\n\"));\n\toutput.write(\"\\n\");\n\treturn true;\n}\n","import { type CLI } from \"../cli\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface InitOptions {\n\tcwd: string;\n}\n\nexport async function init(\n\tcli: CLI,\n\toutput: WritableStreamLike,\n\toptions: InitOptions,\n): Promise<boolean> {\n\tconst result = await cli.init(options.cwd);\n\toutput.write(`Configuration written to \"${result.filename}\"\\n`);\n\treturn true;\n}\n","import kleur from \"kleur\";\nimport { type HtmlValidate, type Report, type Result, Reporter } from \"../..\";\nimport { type PerformanceResult } from \"../../performance\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface LintOptions {\n\tformatter: (report: Report) => string;\n\tmaxWarnings: number;\n\tperformance: boolean;\n\tstdinFilename: false | string;\n}\nfunction formatMs(ms: number): string {\n\treturn `${ms.toFixed(2)}ms`;\n}\n\nfunction formatPerformanceTable(\n\tnameHeader: string,\n\tentries: Array<{ name: string; count: number; time: number }>,\n\ttotalTime: number,\n): string {\n\tconst nameWidth = Math.max(nameHeader.length, ...entries.map((e) => e.name.length)) + 2;\n\tconst countWidth = Math.max(5, ...entries.map((e) => String(e.count).length)) + 2;\n\tconst header = ` ${nameHeader.padEnd(nameWidth)}${\"count\".padStart(countWidth)} ${\"time(ms)\".padStart(10)} ${\"time(%)\".padStart(8)}`;\n\tconst separator = ` ${\"─\".repeat(header.length - 2)}`;\n\tconst rows = entries.map((entry) => {\n\t\tconst pct = totalTime > 0 ? ((entry.time / totalTime) * 100).toFixed(1) : \"0.0\";\n\t\tconst pctStr = `${pct}%`;\n\t\treturn ` ${entry.name.padEnd(nameWidth)}${String(entry.count).padStart(countWidth)} ${formatMs(entry.time).padStart(10)} ${pctStr.padStart(8)}`;\n\t});\n\treturn [header, separator, ...rows].join(\"\\n\");\n}\n\nfunction formatPerformanceResult(result: PerformanceResult): string {\n\tconst totalEventTime = result.events.reduce((sum, e) => sum + e.time, 0);\n\tconst totalRuleTime = result.rules.reduce((sum, e) => sum + e.time, 0);\n\tconst { configTime, transformTime, totalTime } = result;\n\tconst eventEntries = result.events.map((e) => ({ name: e.event, count: e.count, time: e.time }));\n\tconst ruleEntries = result.rules.map((e) => ({ name: e.rule, count: e.count, time: e.time }));\n\tconst lines = [\n\t\t\"Performance\",\n\t\t\"\",\n\t\t\"Events:\",\n\t\tformatPerformanceTable(\"event\", eventEntries, totalTime),\n\t\t\"\",\n\t\t\"Rules:\",\n\t\tformatPerformanceTable(\"rule\", ruleEntries, totalTime),\n\t\t\"\",\n\t\t`Total: ${formatMs(totalTime)}`,\n\t\t` Config: ${formatMs(configTime)}`,\n\t\t` Transform: ${formatMs(transformTime)}`,\n\t\t` Events: ${formatMs(totalEventTime - totalRuleTime)}`,\n\t\t` Rules: ${formatMs(totalRuleTime)}`,\n\t\t\"\",\n\t];\n\treturn lines.join(\"\\n\");\n}\n\nfunction renameStdin(report: Report, filename: string): void {\n\tconst stdin = report.results.find((cur: Result) => cur.filePath === \"/dev/stdin\");\n\tif (stdin) {\n\t\tstdin.filePath = filename;\n\t}\n}\n\nexport async function lint(\n\thtmlvalidate: HtmlValidate,\n\tstdout: WritableStreamLike,\n\tstderr: WritableStreamLike,\n\tfiles: string[],\n\toptions: LintOptions,\n): Promise<boolean> {\n\tif (options.performance) {\n\t\thtmlvalidate.startPerformance();\n\t}\n\n\tconst reports: Report[] = [];\n\tfor (const filename of files) {\n\t\ttry {\n\t\t\treports.push(await htmlvalidate.validateFile(filename));\n\t\t} catch (err) {\n\t\t\tconst message = kleur.red(`Validator crashed when parsing \"${filename}\"`);\n\t\t\tstdout.write(`${message}\\n`);\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\tconst merged = Reporter.merge(reports);\n\n\t/* rename stdin if an explicit filename was passed */\n\tif (options.stdinFilename) {\n\t\trenameStdin(merged, options.stdinFilename);\n\t}\n\n\tstdout.write(options.formatter(merged));\n\n\tif (options.performance) {\n\t\tconst performanceResult = htmlvalidate.stopPerformance();\n\t\tstderr.write(formatPerformanceResult(performanceResult));\n\t}\n\n\tif (options.maxWarnings >= 0 && merged.warningCount > options.maxWarnings) {\n\t\tstdout.write(\n\t\t\t`\\nhtml-validate found too many warnings (maximum: ${String(options.maxWarnings)}).\\n`,\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn merged.valid;\n}\n","import { type HtmlValidate } from \"../..\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport async function printConfig(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n): Promise<boolean> {\n\tif (files.length > 1) {\n\t\toutput.write(`\\`--print-config\\` expected a single filename but got multiple:\\n\\n`);\n\t\tfor (const filename of files) {\n\t\t\toutput.write(` - ${filename}\\n`);\n\t\t}\n\t\toutput.write(\"\\n\");\n\t\treturn false;\n\t}\n\tconst config = await htmlvalidate.getConfigFor(files[0]);\n\tconst json = JSON.stringify(config.getConfigData(), null, 2);\n\toutput.write(`${json}\\n`);\n\treturn true;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport betterAjvErrors from \"@sidvind/better-ajv-errors\";\nimport kleur from \"kleur\";\nimport { type SchemaValidationError } from \"../../error\";\n\nfunction prettyError(err: SchemaValidationError): string {\n\tlet json: string | undefined;\n\tif (err.filename && fs.existsSync(err.filename)) {\n\t\tjson = fs.readFileSync(err.filename, \"utf-8\");\n\t}\n\treturn betterAjvErrors(err.schema, err.obj, err.errors, {\n\t\tformat: \"cli\",\n\t\tindent: 2,\n\t\tjson,\n\t});\n}\n\n/**\n * @internal\n */\nexport function handleSchemaValidationError(console: Console, err: SchemaValidationError): void {\n\tif (err.filename) {\n\t\tconst filename = path.relative(process.cwd(), err.filename);\n\t\tconsole.error(kleur.red(`A configuration error was found in \"${filename}\":`));\n\t} else {\n\t\tconsole.error(kleur.red(`A configuration error was found:`));\n\t}\n\tconsole.group();\n\t{\n\t\tconsole.error(prettyError(err));\n\t}\n\tconsole.groupEnd();\n}\n","import kleur from \"kleur\";\nimport { engines } from \"../../../package.json\";\nimport { UserError } from \"../../error\";\n\n/**\n * @internal\n */\nexport class ImportResolveMissingError extends UserError {\n\tpublic constructor() {\n\t\tconst message = `import.meta.resolve(..) is not available on this system`;\n\t\tsuper(message);\n\t\tthis.name = \"ImportResolveMissingError\";\n\t}\n\n\tpublic override prettyFormat(): string {\n\t\tconst { message } = this;\n\t\tconst currentVersion = process.version;\n\t\tconst requiredVersion = engines.node\n\t\t\t.split(\"||\")\n\t\t\t.map((it) => `v${it.replace(/^\\D+/, \"\").trim()}`);\n\t\treturn [\n\t\t\tkleur.red(`Error: ${message}.`),\n\t\t\t\"\",\n\t\t\t`Either ensure you are running a supported NodeJS version:`,\n\t\t\t` Current: ${currentVersion}`,\n\t\t\t` Required: ${requiredVersion.join(\", \")} or later`,\n\t\t\t`Or set NODE_OPTIONS=\"--experimental-import-meta-resolve\"`,\n\t\t].join(\"\\n\");\n\t}\n}\n","/**\n * @internal\n */\nexport function haveImportMetaResolve(): boolean {\n\treturn \"resolve\" in import.meta;\n}\n"],"names":["formatterFactory","fn","init","path","Mode","lines"],"mappings":"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"}
|
package/dist/esm/core.js
CHANGED
|
@@ -12630,7 +12630,7 @@ class EventHandler {
|
|
|
12630
12630
|
}
|
|
12631
12631
|
|
|
12632
12632
|
const name = "html-validate";
|
|
12633
|
-
const version = "11.
|
|
12633
|
+
const version = "11.1.0";
|
|
12634
12634
|
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
12635
12635
|
|
|
12636
12636
|
function freeze(src) {
|
|
@@ -15337,7 +15337,7 @@ var ignoreExports = /*@__PURE__*/ requireIgnore();
|
|
|
15337
15337
|
var ignore = /*@__PURE__*/getDefaultExportFromCjs(ignoreExports);
|
|
15338
15338
|
|
|
15339
15339
|
const engines = {
|
|
15340
|
-
node: "^22.
|
|
15340
|
+
node: "^22.17.0 || >= 24.0.0"
|
|
15341
15341
|
};
|
|
15342
15342
|
|
|
15343
15343
|
var workerPath = "./jest-worker.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { parseArgs } from 'node:util';
|
|
3
4
|
import kleur from 'kleur';
|
|
4
|
-
import minimist from 'minimist';
|
|
5
5
|
import { a3 as name, v as version, y as SchemaValidationError, O as isUserError, a4 as bugs } from './core.js';
|
|
6
6
|
import { M as Mode, m as modeToFlag, C as CLI, h as haveImportMetaResolve, I as ImportResolveMissingError, d as dump, p as printConfig, i as init, l as lint, a as handleSchemaValidationError } from './cli.js';
|
|
7
7
|
import 'ajv';
|
|
@@ -17,7 +17,6 @@ import 'node:fs/promises';
|
|
|
17
17
|
import 'node:url';
|
|
18
18
|
import 'node:module';
|
|
19
19
|
import 'node:path/posix';
|
|
20
|
-
import 'glob';
|
|
21
20
|
import 'prompts';
|
|
22
21
|
|
|
23
22
|
function getMode(argv2) {
|
|
@@ -88,51 +87,38 @@ function handleUnknownError(err) {
|
|
|
88
87
|
)
|
|
89
88
|
);
|
|
90
89
|
}
|
|
91
|
-
const argv =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
f: "formatter",
|
|
120
|
-
p: "preset",
|
|
121
|
-
h: "help"
|
|
122
|
-
},
|
|
123
|
-
default: {
|
|
124
|
-
ext: "html",
|
|
125
|
-
formatter: "stylish"
|
|
126
|
-
},
|
|
127
|
-
unknown: (opt) => {
|
|
128
|
-
if (opt.startsWith("-")) {
|
|
129
|
-
process.stderr.write(`unknown option ${opt}
|
|
90
|
+
const { values: argv, positionals } = (() => {
|
|
91
|
+
try {
|
|
92
|
+
return parseArgs({
|
|
93
|
+
args: process.argv.slice(2),
|
|
94
|
+
options: {
|
|
95
|
+
config: { type: "string", short: "c" },
|
|
96
|
+
"dump-events": { type: "boolean", default: false },
|
|
97
|
+
"dump-source": { type: "boolean", default: false },
|
|
98
|
+
"dump-tokens": { type: "boolean", default: false },
|
|
99
|
+
"dump-tree": { type: "boolean", default: false },
|
|
100
|
+
ext: { type: "string", default: "html" },
|
|
101
|
+
formatter: { type: "string", short: "f", default: "stylish" },
|
|
102
|
+
help: { type: "boolean", short: "h", default: false },
|
|
103
|
+
init: { type: "boolean", default: false },
|
|
104
|
+
"max-warnings": { type: "string" },
|
|
105
|
+
performance: { type: "boolean", default: false },
|
|
106
|
+
preset: { type: "string", short: "p" },
|
|
107
|
+
"print-config": { type: "boolean", default: false },
|
|
108
|
+
rule: { type: "string" },
|
|
109
|
+
stdin: { type: "boolean", default: false },
|
|
110
|
+
"stdin-filename": { type: "string" },
|
|
111
|
+
version: { type: "boolean", default: false }
|
|
112
|
+
},
|
|
113
|
+
allowPositionals: true,
|
|
114
|
+
strict: true
|
|
115
|
+
});
|
|
116
|
+
} catch (err) {
|
|
117
|
+
process.stderr.write(`${err.message}
|
|
130
118
|
`);
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
return true;
|
|
119
|
+
process.exit(1);
|
|
134
120
|
}
|
|
135
|
-
});
|
|
121
|
+
})();
|
|
136
122
|
function showUsage() {
|
|
137
123
|
process.stdout.write(`${name}-${version}
|
|
138
124
|
Usage: html-validate [OPTIONS] [FILENAME..] [DIR..]
|
|
@@ -177,7 +163,7 @@ function showVersion() {
|
|
|
177
163
|
`);
|
|
178
164
|
}
|
|
179
165
|
if (argv.stdin) {
|
|
180
|
-
|
|
166
|
+
positionals.push("-");
|
|
181
167
|
}
|
|
182
168
|
if (argv.version) {
|
|
183
169
|
showVersion();
|
|
@@ -187,7 +173,7 @@ if (argv.help) {
|
|
|
187
173
|
showUsage();
|
|
188
174
|
process.exit();
|
|
189
175
|
}
|
|
190
|
-
if (
|
|
176
|
+
if (positionals.length === 0) {
|
|
191
177
|
const mode = getMode(argv);
|
|
192
178
|
if (mode === Mode.LINT) {
|
|
193
179
|
showUsage();
|
|
@@ -223,9 +209,9 @@ async function run() {
|
|
|
223
209
|
const extensions = argv.ext.split(",").map((cur) => {
|
|
224
210
|
return cur.startsWith(".") ? cur.slice(1) : cur;
|
|
225
211
|
});
|
|
226
|
-
const files = await cli.expandFiles(
|
|
212
|
+
const files = await cli.expandFiles(positionals, { extensions });
|
|
227
213
|
if (files.length === 0 && mode !== Mode.INIT) {
|
|
228
|
-
console.error("No files matching patterns",
|
|
214
|
+
console.error("No files matching patterns", positionals);
|
|
229
215
|
process.exit(1);
|
|
230
216
|
}
|
|
231
217
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit -- as expected from a cli app */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport kleur from \"kleur\";\nimport minimist from \"minimist\";\nimport { type UserErrorData, SchemaValidationError, isUserError } from \"..\";\nimport { bugs as pkgBugs, name, version } from \"../generated/package-json\";\nimport { dump } from \"./actions/dump\";\nimport { init } from \"./actions/init\";\nimport { lint } from \"./actions/lint\";\nimport { printConfig } from \"./actions/print-config\";\nimport { CLI } from \"./cli\";\nimport { ImportResolveMissingError, handleSchemaValidationError } from \"./errors\";\nimport { haveImportMetaResolve } from \"./have-import-meta-resolve\";\nimport { Mode, modeToFlag } from \"./mode\";\n\ninterface ParsedArgs {\n\tconfig?: string;\n\t\"dump-events\": boolean;\n\t\"dump-source\": boolean;\n\t\"dump-tokens\": boolean;\n\t\"dump-tree\": boolean;\n\text: string;\n\tformatter: string;\n\thelp: boolean;\n\tinit: boolean;\n\t\"max-warnings\"?: string;\n\tperformance: boolean;\n\tpreset?: string;\n\t\"print-config\": boolean;\n\trule?: string;\n\tstdin: boolean;\n\t\"stdin-filename\"?: string;\n\tversion: boolean;\n}\n\nfunction getMode(argv: Record<string, unknown>): Mode {\n\tif (argv[\"init\"]) {\n\t\treturn Mode.INIT;\n\t}\n\n\tif (argv[\"dump-events\"]) {\n\t\treturn Mode.DUMP_EVENTS;\n\t}\n\n\tif (argv[\"dump-source\"]) {\n\t\treturn Mode.DUMP_SOURCE;\n\t}\n\n\tif (argv[\"dump-tokens\"]) {\n\t\treturn Mode.DUMP_TOKENS;\n\t}\n\n\tif (argv[\"dump-tree\"]) {\n\t\treturn Mode.DUMP_TREE;\n\t}\n\n\tif (argv[\"print-config\"]) {\n\t\treturn Mode.PRINT_CONFIG;\n\t}\n\n\treturn Mode.LINT;\n}\n\nfunction requiresFilename(mode: Mode): boolean {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn true;\n\t\tcase Mode.INIT:\n\t\t\treturn false;\n\t\tcase Mode.DUMP_EVENTS:\n\t\tcase Mode.DUMP_TOKENS:\n\t\tcase Mode.DUMP_TREE:\n\t\tcase Mode.DUMP_SOURCE:\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn true;\n\t}\n}\n\nfunction handleUserError(err: UserErrorData): void {\n\tconst formatted = err.prettyFormat();\n\tif (formatted) {\n\t\tconsole.error(); /* blank line */\n\t\tconsole.error(formatted);\n\t\treturn;\n\t}\n\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err.prettyFormat() ?? err);\n\t}\n\tconsole.groupEnd();\n}\n\nfunction handleUnknownError(err: unknown): void {\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err);\n\t}\n\tconsole.groupEnd();\n\tconst bugUrl = `${pkgBugs}?issuable_template=Bug`;\n\tconsole.error(kleur.red(`This is a bug in ${name}-${version}.`));\n\tconsole.error(\n\t\tkleur.red(\n\t\t\t[\n\t\t\t\t`Please file a bug at ${bugUrl}`,\n\t\t\t\t`and include this message in full and if possible the content of the`,\n\t\t\t\t`file being parsed (or a reduced testcase).`,\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n}\n\nconst argv = minimist<ParsedArgs>(process.argv.slice(2), {\n\tstring: [\n\t\t\"c\",\n\t\t\"config\",\n\t\t\"ext\",\n\t\t\"f\",\n\t\t\"formatter\",\n\t\t\"max-warnings\",\n\t\t\"p\",\n\t\t\"preset\",\n\t\t\"rule\",\n\t\t\"stdin-filename\",\n\t],\n\tboolean: [\n\t\t\"init\",\n\t\t\"dump-events\",\n\t\t\"dump-source\",\n\t\t\"dump-tokens\",\n\t\t\"dump-tree\",\n\t\t\"h\",\n\t\t\"help\",\n\t\t\"performance\",\n\t\t\"print-config\",\n\t\t\"stdin\",\n\t\t\"version\",\n\t],\n\talias: {\n\t\tc: \"config\",\n\t\tf: \"formatter\",\n\t\tp: \"preset\",\n\t\th: \"help\",\n\t},\n\tdefault: {\n\t\text: \"html\",\n\t\tformatter: \"stylish\",\n\t},\n\tunknown: (opt: string) => {\n\t\tif (opt.startsWith(\"-\")) {\n\t\t\tprocess.stderr.write(`unknown option ${opt}\\n`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\treturn true;\n\t},\n});\n\nfunction showUsage(): void {\n\tprocess.stdout.write(`${name}-${version}\nUsage: html-validate [OPTIONS] [FILENAME..] [DIR..]\n\nCommon options:\n --ext=STRING specify file extensions (commaseparated).\n -f, --formatter=FORMATTER specify the formatter to use.\n --max-warnings=INT number of warnings to trigger nonzero exit code\n -p, --preset=STRING configuration preset to use, use\n comma-separator for multiple presets. (default:\n \"recommended\")\n --rule=RULE:SEVERITY set additional rule, use comma separator for\n multiple.\n --stdin process markup from stdin.\n --stdin-filename=STRING specify filename to report when using stdin\n\nMiscellaneous:\n -c, --config=STRING use custom configuration file.\n --init initialize project with a new configuration\n --print-config output configuration for given file.\n -h, --help show help.\n --version show version.\n\nDebugging options:\n --dump-events output events during parsing.\n --dump-source output post-transformed source data.\n --dump-tokens output tokens from lexing stage.\n --dump-tree output nodes from the dom tree.\n --performance output performance data after validation.\n\nFormatters:\n\nMultiple formatters can be specified with a comma-separated list,\ne.g. \"json,checkstyle\" to enable both.\n\nTo capture output to a file use \"formatter=/path/to/file\",\ne.g. \"checkstyle=dist/html-validate.xml\"\n`);\n}\n\nfunction showVersion(): void {\n\tprocess.stdout.write(`${name}-${version}\\n`);\n}\n\nif (argv.stdin) {\n\targv._.push(\"-\");\n}\n\nif (argv.version) {\n\tshowVersion();\n\tprocess.exit();\n}\n\nif (argv.help) {\n\tshowUsage();\n\tprocess.exit();\n}\n\nif (argv._.length === 0) {\n\tconst mode = getMode(argv);\n\tif (mode === Mode.LINT) {\n\t\tshowUsage();\n\t\tprocess.exit(0);\n\t} else if (requiresFilename(mode)) {\n\t\tconst flag = modeToFlag(mode);\n\t\tconsole.error(`\\`${flag}\\` requires a filename.`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* check that supplied config file exists before creating CLI */\nif (argv.config !== undefined) {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.error(`The file \"${argv.config}\" was not found.`);\n\t\tconsole.error(`The location this file was checked for at was: \"${checkPath}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line complexity -- for now */\nasync function run(): Promise<void> {\n\tconst cli = new CLI({\n\t\tconfigFile: argv.config,\n\t\tpreset: argv.preset,\n\t\trules: argv.rule,\n\t});\n\tconst mode = getMode(argv);\n\tconst formatter = await cli.getFormatter(argv.formatter);\n\tconst maxWarnings = Number.parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\n\tconst htmlvalidate = await cli.getValidator();\n\n\t/* sanity check: ensure maxWarnings has a valid value */\n\tif (Number.isNaN(maxWarnings)) {\n\t\tconsole.error(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\t\tprocess.exit(1);\n\t}\n\n\t/* parse extensions (used when expanding directories) */\n\tconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\t\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n\t});\n\n\tconst files = await cli.expandFiles(argv._, { extensions });\n\tif (files.length === 0 && mode !== Mode.INIT) {\n\t\tconsole.error(\"No files matching patterns\", argv._);\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\t/* istanbul ignore next -- not tested with unittests */\n\t\tif (!haveImportMetaResolve()) {\n\t\t\tthrow new ImportResolveMissingError();\n\t\t}\n\n\t\tlet success: boolean;\n\t\tswitch (mode) {\n\t\t\tcase Mode.LINT: {\n\t\t\t\tsuccess = await lint(htmlvalidate, process.stdout, process.stderr, files, {\n\t\t\t\t\tformatter,\n\t\t\t\t\tmaxWarnings,\n\t\t\t\t\tperformance: argv.performance,\n\t\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.INIT: {\n\t\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.PRINT_CONFIG: {\n\t\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\n\t\t\t}\n\t\t}\n\t\tprocess.exit(success ? 0 : 1);\n\t} catch (err) {\n\t\tif (err instanceof SchemaValidationError) {\n\t\t\thandleSchemaValidationError(console, err);\n\t\t} else if (isUserError(err)) {\n\t\t\thandleUserError(err);\n\t\t} else {\n\t\t\thandleUnknownError(err);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line unicorn/prefer-top-level-await -- technical debt, as long as we bundle and ship commonjs we cannot use TLA here */\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","pkgBugs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"html-validate.js","sources":["../../src/cli/html-validate.ts"],"sourcesContent":["/* eslint-disable no-console, n/no-process-exit -- as expected from a cli app */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseArgs } from \"node:util\";\nimport kleur from \"kleur\";\nimport { type UserErrorData, SchemaValidationError, isUserError } from \"..\";\nimport { bugs as pkgBugs, name, version } from \"../generated/package-json\";\nimport { dump } from \"./actions/dump\";\nimport { init } from \"./actions/init\";\nimport { lint } from \"./actions/lint\";\nimport { printConfig } from \"./actions/print-config\";\nimport { CLI } from \"./cli\";\nimport { ImportResolveMissingError, handleSchemaValidationError } from \"./errors\";\nimport { haveImportMetaResolve } from \"./have-import-meta-resolve\";\nimport { Mode, modeToFlag } from \"./mode\";\n\nfunction getMode(argv: Record<string, unknown>): Mode {\n\tif (argv[\"init\"]) {\n\t\treturn Mode.INIT;\n\t}\n\n\tif (argv[\"dump-events\"]) {\n\t\treturn Mode.DUMP_EVENTS;\n\t}\n\n\tif (argv[\"dump-source\"]) {\n\t\treturn Mode.DUMP_SOURCE;\n\t}\n\n\tif (argv[\"dump-tokens\"]) {\n\t\treturn Mode.DUMP_TOKENS;\n\t}\n\n\tif (argv[\"dump-tree\"]) {\n\t\treturn Mode.DUMP_TREE;\n\t}\n\n\tif (argv[\"print-config\"]) {\n\t\treturn Mode.PRINT_CONFIG;\n\t}\n\n\treturn Mode.LINT;\n}\n\nfunction requiresFilename(mode: Mode): boolean {\n\tswitch (mode) {\n\t\tcase Mode.LINT:\n\t\t\treturn true;\n\t\tcase Mode.INIT:\n\t\t\treturn false;\n\t\tcase Mode.DUMP_EVENTS:\n\t\tcase Mode.DUMP_TOKENS:\n\t\tcase Mode.DUMP_TREE:\n\t\tcase Mode.DUMP_SOURCE:\n\t\tcase Mode.PRINT_CONFIG:\n\t\t\treturn true;\n\t}\n}\n\nfunction handleUserError(err: UserErrorData): void {\n\tconst formatted = err.prettyFormat();\n\tif (formatted) {\n\t\tconsole.error(); /* blank line */\n\t\tconsole.error(formatted);\n\t\treturn;\n\t}\n\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err.prettyFormat() ?? err);\n\t}\n\tconsole.groupEnd();\n}\n\nfunction handleUnknownError(err: unknown): void {\n\tconsole.error(kleur.red(\"Caught exception:\"));\n\tconsole.group();\n\t{\n\t\tconsole.error(err);\n\t}\n\tconsole.groupEnd();\n\tconst bugUrl = `${pkgBugs}?issuable_template=Bug`;\n\tconsole.error(kleur.red(`This is a bug in ${name}-${version}.`));\n\tconsole.error(\n\t\tkleur.red(\n\t\t\t[\n\t\t\t\t`Please file a bug at ${bugUrl}`,\n\t\t\t\t`and include this message in full and if possible the content of the`,\n\t\t\t\t`file being parsed (or a reduced testcase).`,\n\t\t\t].join(\"\\n\"),\n\t\t),\n\t);\n}\n\nconst { values: argv, positionals } = (() => {\n\ttry {\n\t\treturn parseArgs({\n\t\t\targs: process.argv.slice(2),\n\t\t\toptions: {\n\t\t\t\tconfig: { type: \"string\" as const, short: \"c\" },\n\t\t\t\t\"dump-events\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-source\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-tokens\": { type: \"boolean\" as const, default: false },\n\t\t\t\t\"dump-tree\": { type: \"boolean\" as const, default: false },\n\t\t\t\text: { type: \"string\" as const, default: \"html\" },\n\t\t\t\tformatter: { type: \"string\" as const, short: \"f\", default: \"stylish\" },\n\t\t\t\thelp: { type: \"boolean\" as const, short: \"h\", default: false },\n\t\t\t\tinit: { type: \"boolean\" as const, default: false },\n\t\t\t\t\"max-warnings\": { type: \"string\" as const },\n\t\t\t\tperformance: { type: \"boolean\" as const, default: false },\n\t\t\t\tpreset: { type: \"string\" as const, short: \"p\" },\n\t\t\t\t\"print-config\": { type: \"boolean\" as const, default: false },\n\t\t\t\trule: { type: \"string\" as const },\n\t\t\t\tstdin: { type: \"boolean\" as const, default: false },\n\t\t\t\t\"stdin-filename\": { type: \"string\" as const },\n\t\t\t\tversion: { type: \"boolean\" as const, default: false },\n\t\t\t},\n\t\t\tallowPositionals: true,\n\t\t\tstrict: true,\n\t\t});\n\t} catch (err) {\n\t\tprocess.stderr.write(`${(err as Error).message}\\n`);\n\t\tprocess.exit(1);\n\t}\n})();\n\nfunction showUsage(): void {\n\tprocess.stdout.write(`${name}-${version}\nUsage: html-validate [OPTIONS] [FILENAME..] [DIR..]\n\nCommon options:\n --ext=STRING specify file extensions (commaseparated).\n -f, --formatter=FORMATTER specify the formatter to use.\n --max-warnings=INT number of warnings to trigger nonzero exit code\n -p, --preset=STRING configuration preset to use, use\n comma-separator for multiple presets. (default:\n \"recommended\")\n --rule=RULE:SEVERITY set additional rule, use comma separator for\n multiple.\n --stdin process markup from stdin.\n --stdin-filename=STRING specify filename to report when using stdin\n\nMiscellaneous:\n -c, --config=STRING use custom configuration file.\n --init initialize project with a new configuration\n --print-config output configuration for given file.\n -h, --help show help.\n --version show version.\n\nDebugging options:\n --dump-events output events during parsing.\n --dump-source output post-transformed source data.\n --dump-tokens output tokens from lexing stage.\n --dump-tree output nodes from the dom tree.\n --performance output performance data after validation.\n\nFormatters:\n\nMultiple formatters can be specified with a comma-separated list,\ne.g. \"json,checkstyle\" to enable both.\n\nTo capture output to a file use \"formatter=/path/to/file\",\ne.g. \"checkstyle=dist/html-validate.xml\"\n`);\n}\n\nfunction showVersion(): void {\n\tprocess.stdout.write(`${name}-${version}\\n`);\n}\n\nif (argv.stdin) {\n\tpositionals.push(\"-\");\n}\n\nif (argv.version) {\n\tshowVersion();\n\tprocess.exit();\n}\n\nif (argv.help) {\n\tshowUsage();\n\tprocess.exit();\n}\n\nif (positionals.length === 0) {\n\tconst mode = getMode(argv);\n\tif (mode === Mode.LINT) {\n\t\tshowUsage();\n\t\tprocess.exit(0);\n\t} else if (requiresFilename(mode)) {\n\t\tconst flag = modeToFlag(mode);\n\t\tconsole.error(`\\`${flag}\\` requires a filename.`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* check that supplied config file exists before creating CLI */\nif (argv.config !== undefined) {\n\tconst checkPath = path.resolve(argv.config);\n\tif (!fs.existsSync(checkPath)) {\n\t\tconsole.error(`The file \"${argv.config}\" was not found.`);\n\t\tconsole.error(`The location this file was checked for at was: \"${checkPath}\"`);\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line complexity -- for now */\nasync function run(): Promise<void> {\n\tconst cli = new CLI({\n\t\tconfigFile: argv.config,\n\t\tpreset: argv.preset,\n\t\trules: argv.rule,\n\t});\n\tconst mode = getMode(argv);\n\tconst formatter = await cli.getFormatter(argv.formatter);\n\tconst maxWarnings = Number.parseInt(argv[\"max-warnings\"] ?? \"-1\", 10);\n\tconst htmlvalidate = await cli.getValidator();\n\n\t/* sanity check: ensure maxWarnings has a valid value */\n\tif (Number.isNaN(maxWarnings)) {\n\t\tconsole.error(`Invalid value \"${String(argv[\"max-warnings\"])}\" given to --max-warnings`);\n\t\tprocess.exit(1);\n\t}\n\n\t/* parse extensions (used when expanding directories) */\n\tconst extensions = argv.ext.split(\",\").map((cur: string) => {\n\t\treturn cur.startsWith(\".\") ? cur.slice(1) : cur;\n\t});\n\n\tconst files = await cli.expandFiles(positionals, { extensions });\n\tif (files.length === 0 && mode !== Mode.INIT) {\n\t\tconsole.error(\"No files matching patterns\", positionals);\n\t\tprocess.exit(1);\n\t}\n\n\ttry {\n\t\t/* istanbul ignore next -- not tested with unittests */\n\t\tif (!haveImportMetaResolve()) {\n\t\t\tthrow new ImportResolveMissingError();\n\t\t}\n\n\t\tlet success: boolean;\n\t\tswitch (mode) {\n\t\t\tcase Mode.LINT: {\n\t\t\t\tsuccess = await lint(htmlvalidate, process.stdout, process.stderr, files, {\n\t\t\t\t\tformatter,\n\t\t\t\t\tmaxWarnings,\n\t\t\t\t\tperformance: argv.performance,\n\t\t\t\t\tstdinFilename: argv[\"stdin-filename\"] ?? false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.INIT: {\n\t\t\t\tsuccess = await init(cli, process.stdout, { cwd: process.cwd() });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Mode.PRINT_CONFIG: {\n\t\t\t\tsuccess = await printConfig(htmlvalidate, process.stdout, files);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuccess = await dump(htmlvalidate, process.stdout, files, mode);\n\t\t\t}\n\t\t}\n\t\tprocess.exit(success ? 0 : 1);\n\t} catch (err) {\n\t\tif (err instanceof SchemaValidationError) {\n\t\t\thandleSchemaValidationError(console, err);\n\t\t} else if (isUserError(err)) {\n\t\t\thandleUserError(err);\n\t\t} else {\n\t\t\thandleUnknownError(err);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\n/* eslint-disable-next-line unicorn/prefer-top-level-await -- technical debt, as long as we bundle and ship commonjs we cannot use TLA here */\nrun().catch((err: unknown) => {\n\tconsole.error(err);\n\tprocess.exit(1);\n});\n"],"names":["argv","pkgBugs"],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "html-validate",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.1.0",
|
|
4
4
|
"description": "Offline HTML5 validator and linter",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"html",
|
|
@@ -89,12 +89,10 @@
|
|
|
89
89
|
"dist"
|
|
90
90
|
],
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@html-validate/stylish": "^
|
|
93
|
-
"@sidvind/better-ajv-errors": "
|
|
92
|
+
"@html-validate/stylish": "^6.0.0",
|
|
93
|
+
"@sidvind/better-ajv-errors": "6.0.0",
|
|
94
94
|
"ajv": "^8.0.0",
|
|
95
|
-
"glob": "^13.0.0",
|
|
96
95
|
"kleur": "^4.1.0",
|
|
97
|
-
"minimist": "^1.2.0",
|
|
98
96
|
"prompts": "^2.0.0",
|
|
99
97
|
"semver": "^7.0.0"
|
|
100
98
|
},
|
|
@@ -123,6 +121,6 @@
|
|
|
123
121
|
}
|
|
124
122
|
},
|
|
125
123
|
"engines": {
|
|
126
|
-
"node": "^22.
|
|
124
|
+
"node": "^22.17.0 || >= 24.0.0"
|
|
127
125
|
}
|
|
128
126
|
}
|