html-validate 8.18.1 → 8.18.2
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 -1
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/core.js +34 -24
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/elements.js +1 -3
- package/dist/cjs/elements.js.map +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/es/cli.js +1 -1
- package/dist/es/cli.js.map +1 -1
- package/dist/es/core.js +34 -24
- package/dist/es/core.js.map +1 -1
- package/dist/es/elements.js +1 -3
- package/dist/es/elements.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +16 -16
package/dist/cjs/cli.js
CHANGED
|
@@ -132,7 +132,7 @@ class IsIgnored {
|
|
|
132
132
|
const relative = path__default.default.relative(current, target);
|
|
133
133
|
const filename = path__default.default.join(current, ".htmlvalidateignore");
|
|
134
134
|
const ig = this.parseFile(filename);
|
|
135
|
-
if (ig
|
|
135
|
+
if (ig == null ? void 0 : ig.ignores(relative)) {
|
|
136
136
|
return true;
|
|
137
137
|
}
|
|
138
138
|
const child = current;
|
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/is-ignored.ts","../../src/cli/init.ts","../../src/cli/parse-severity.ts","../../src/cli/get-rule-config.ts","../../src/cli/cli.ts","../../src/cli/errors/handle-schema-validation-error.ts","../../src/cli/mode.ts","../../src/cli/actions/lint.ts","../../src/cli/actions/init.ts","../../src/cli/actions/print-config.ts","../../src/cli/json.ts","../../src/cli/actions/dump.ts"],"sourcesContent":["import fs from \"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.sort((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 \"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 fs from \"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\t// eslint-disable-next-line no-constant-condition -- breaks out when filesystem is traversed\n\t\twhile (true) {\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 && 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 fs from \"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) reject(err);\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 -- 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 { Severity } from \"..\";\n\n/**\n * @internal\n */\nexport function parseSeverity(ruleId: string, severity: string): Severity {\n\tswitch (severity) {\n\t\tcase \"off\":\n\t\tcase \"0\":\n\t\t\treturn Severity.DISABLED;\n\t\tcase \"warn\":\n\t\tcase \"1\":\n\t\t\treturn Severity.WARN;\n\t\tcase \"error\":\n\t\tcase \"2\":\n\t\t\treturn Severity.ERROR;\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${severity}\" for rule \"${ruleId}\"`);\n\t}\n}\n","import { Severity, type RuleConfig } from \"..\";\nimport { parseSeverity } from \"./parse-severity\";\n\nfunction parseItem(value: string): { ruleId: string; severity: Severity } {\n\tif (value.includes(\":\")) {\n\t\tconst [ruleId, severity] = value.split(\":\", 2);\n\t\treturn { ruleId, severity: parseSeverity(ruleId, severity) };\n\t} else {\n\t\treturn { ruleId: value, severity: Severity.ERROR };\n\t}\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 path from \"node:path\";\nimport {\n\ttype ConfigData,\n\ttype ConfigLoader,\n\ttype Report,\n\tFileSystemConfigLoader,\n\tUserError,\n\tHtmlValidate,\n\tcjsResolver,\n} from \"..\";\nimport { type ExpandOptions, expandFiles } from \"./expand-files\";\nimport { getFormatter } from \"./formatter\";\nimport { IsIgnored } from \"./is-ignored\";\nimport { type InitResult, init } from \"./init\";\nimport { getRuleConfig } from \"./get-rule-config\";\n\nconst defaultConfig: ConfigData = {\n\textends: [\"html-validate:recommended\"],\n};\n\n/**\n * @public\n */\nexport interface CLIOptions {\n\tconfigFile?: string;\n\trules?: string | string[];\n}\n\nfunction getBaseConfig(filename?: string): ConfigData {\n\tif (filename) {\n\t\tconst resolver = cjsResolver();\n\t\tconst configData = 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;\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\tpublic expandFiles(patterns: string[], options: ExpandOptions = {}): string[] {\n\t\treturn expandFiles(patterns, options).filter((filename) => !this.isIgnored(filename));\n\t}\n\n\tpublic getFormatter(formatters: string): (report: Report) => string {\n\t\treturn 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 * 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.ignored.isIgnored(filename);\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(): void {\n\t\tif (this.loader) {\n\t\t\tthis.loader.flushCache();\n\t\t}\n\t\tthis.ignored.clearCache();\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 getLoader(): ConfigLoader {\n\t\tif (!this.loader) {\n\t\t\tthis.loader = new FileSystemConfigLoader(this.getConfig());\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 getValidator(): HtmlValidate {\n\t\tconst loader = this.getLoader();\n\t\treturn new HtmlValidate(loader);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getConfig(): ConfigData {\n\t\tif (!this.config) {\n\t\t\tthis.config = this.resolveConfig();\n\t\t}\n\t\treturn this.config;\n\t}\n\n\tprivate resolveConfig(): ConfigData {\n\t\tconst { options } = this;\n\t\tconst config = getBaseConfig(options.configFile);\n\t\tif (options.rules) {\n\t\t\tconfig.extends = [];\n\t\t\tconfig.rules = getRuleConfig(options.rules);\n\t\t}\n\t\treturn config;\n\t}\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","/**\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 {\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 kleur from \"kleur\";\nimport { type HtmlValidate, type Report, type Result, Reporter } from \"../..\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface LintOptions {\n\tformatter: (report: Report) => string;\n\tmaxWarnings: number;\n\tstdinFilename: false | string;\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\toutput: WritableStreamLike,\n\tfiles: string[],\n\toptions: LintOptions,\n): Promise<boolean> {\n\tconst reports = files.map(async (filename: string) => {\n\t\ttry {\n\t\t\treturn await htmlvalidate.validateFile(filename);\n\t\t} catch (err) {\n\t\t\tconst message = kleur.red(`Validator crashed when parsing \"${filename}\"`);\n\t\t\toutput.write(`${message}\\n`);\n\t\t\tthrow err;\n\t\t}\n\t});\n\n\tconst merged = await 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\toutput.write(options.formatter(merged));\n\n\tif (options.maxWarnings >= 0 && merged.warningCount > options.maxWarnings) {\n\t\toutput.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 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 { 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 { type EventDump, type Location } from \"..\";\n\nconst jsonIgnored = [\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 = [\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 Boolean(key.startsWith(\"_\") || jsonIgnored.includes(key));\n}\n\nfunction isFiltered(key: string, value: unknown): boolean {\n\treturn Boolean(value && jsonFiltered.includes(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","import { type HtmlValidate, type TokenDump } from \"../..\";\nimport { eventFormatter } from \"../json\";\nimport { Mode } from \"../mode\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport function dump(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n\tmode: Mode,\n): Promise<boolean> {\n\tlet lines: string[][] = [];\n\tswitch (mode) {\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\tlines = files.map((filename: string) =>\n\t\t\t\thtmlvalidate.dumpEvents(filename).map(eventFormatter),\n\t\t\t);\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\tlines = files.map((filename: string) =>\n\t\t\t\thtmlvalidate.dumpTokens(filename).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 flat = lines.reduce((s: string[], c: string[]) => s.concat(c), []);\n\toutput.write(flat.join(\"\\n\"));\n\toutput.write(\"\\n\");\n\treturn Promise.resolve(true);\n}\n"],"names":["fs","path","globSync","formatterFactory","legacyRequire","UserError","ensureError","fn","ignore","deepmerge","init","prompts","Severity","cjsResolver","FileSystemConfigLoader","HtmlValidate","betterAjvErrors","kleur","Mode","Reporter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../../src/cli/expand-files.ts","../../src/cli/formatter.ts","../../src/cli/is-ignored.ts","../../src/cli/init.ts","../../src/cli/parse-severity.ts","../../src/cli/get-rule-config.ts","../../src/cli/cli.ts","../../src/cli/errors/handle-schema-validation-error.ts","../../src/cli/mode.ts","../../src/cli/actions/lint.ts","../../src/cli/actions/init.ts","../../src/cli/actions/print-config.ts","../../src/cli/json.ts","../../src/cli/actions/dump.ts"],"sourcesContent":["import fs from \"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.sort((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 \"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 fs from \"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\t// eslint-disable-next-line no-constant-condition -- breaks out when filesystem is traversed\n\t\twhile (true) {\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 fs from \"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) reject(err);\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 -- 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 { Severity } from \"..\";\n\n/**\n * @internal\n */\nexport function parseSeverity(ruleId: string, severity: string): Severity {\n\tswitch (severity) {\n\t\tcase \"off\":\n\t\tcase \"0\":\n\t\t\treturn Severity.DISABLED;\n\t\tcase \"warn\":\n\t\tcase \"1\":\n\t\t\treturn Severity.WARN;\n\t\tcase \"error\":\n\t\tcase \"2\":\n\t\t\treturn Severity.ERROR;\n\t\tdefault:\n\t\t\tthrow new Error(`Invalid severity \"${severity}\" for rule \"${ruleId}\"`);\n\t}\n}\n","import { Severity, type RuleConfig } from \"..\";\nimport { parseSeverity } from \"./parse-severity\";\n\nfunction parseItem(value: string): { ruleId: string; severity: Severity } {\n\tif (value.includes(\":\")) {\n\t\tconst [ruleId, severity] = value.split(\":\", 2);\n\t\treturn { ruleId, severity: parseSeverity(ruleId, severity) };\n\t} else {\n\t\treturn { ruleId: value, severity: Severity.ERROR };\n\t}\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 path from \"node:path\";\nimport {\n\ttype ConfigData,\n\ttype ConfigLoader,\n\ttype Report,\n\tFileSystemConfigLoader,\n\tUserError,\n\tHtmlValidate,\n\tcjsResolver,\n} from \"..\";\nimport { type ExpandOptions, expandFiles } from \"./expand-files\";\nimport { getFormatter } from \"./formatter\";\nimport { IsIgnored } from \"./is-ignored\";\nimport { type InitResult, init } from \"./init\";\nimport { getRuleConfig } from \"./get-rule-config\";\n\nconst defaultConfig: ConfigData = {\n\textends: [\"html-validate:recommended\"],\n};\n\n/**\n * @public\n */\nexport interface CLIOptions {\n\tconfigFile?: string;\n\trules?: string | string[];\n}\n\nfunction getBaseConfig(filename?: string): ConfigData {\n\tif (filename) {\n\t\tconst resolver = cjsResolver();\n\t\tconst configData = 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;\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\tpublic expandFiles(patterns: string[], options: ExpandOptions = {}): string[] {\n\t\treturn expandFiles(patterns, options).filter((filename) => !this.isIgnored(filename));\n\t}\n\n\tpublic getFormatter(formatters: string): (report: Report) => string {\n\t\treturn 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 * 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.ignored.isIgnored(filename);\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(): void {\n\t\tif (this.loader) {\n\t\t\tthis.loader.flushCache();\n\t\t}\n\t\tthis.ignored.clearCache();\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 getLoader(): ConfigLoader {\n\t\tif (!this.loader) {\n\t\t\tthis.loader = new FileSystemConfigLoader(this.getConfig());\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 getValidator(): HtmlValidate {\n\t\tconst loader = this.getLoader();\n\t\treturn new HtmlValidate(loader);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getConfig(): ConfigData {\n\t\tif (!this.config) {\n\t\t\tthis.config = this.resolveConfig();\n\t\t}\n\t\treturn this.config;\n\t}\n\n\tprivate resolveConfig(): ConfigData {\n\t\tconst { options } = this;\n\t\tconst config = getBaseConfig(options.configFile);\n\t\tif (options.rules) {\n\t\t\tconfig.extends = [];\n\t\t\tconfig.rules = getRuleConfig(options.rules);\n\t\t}\n\t\treturn config;\n\t}\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","/**\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 {\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 kleur from \"kleur\";\nimport { type HtmlValidate, type Report, type Result, Reporter } from \"../..\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport interface LintOptions {\n\tformatter: (report: Report) => string;\n\tmaxWarnings: number;\n\tstdinFilename: false | string;\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\toutput: WritableStreamLike,\n\tfiles: string[],\n\toptions: LintOptions,\n): Promise<boolean> {\n\tconst reports = files.map(async (filename: string) => {\n\t\ttry {\n\t\t\treturn await htmlvalidate.validateFile(filename);\n\t\t} catch (err) {\n\t\t\tconst message = kleur.red(`Validator crashed when parsing \"${filename}\"`);\n\t\t\toutput.write(`${message}\\n`);\n\t\t\tthrow err;\n\t\t}\n\t});\n\n\tconst merged = await 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\toutput.write(options.formatter(merged));\n\n\tif (options.maxWarnings >= 0 && merged.warningCount > options.maxWarnings) {\n\t\toutput.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 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 { 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 { type EventDump, type Location } from \"..\";\n\nconst jsonIgnored = [\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 = [\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 Boolean(key.startsWith(\"_\") || jsonIgnored.includes(key));\n}\n\nfunction isFiltered(key: string, value: unknown): boolean {\n\treturn Boolean(value && jsonFiltered.includes(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","import { type HtmlValidate, type TokenDump } from \"../..\";\nimport { eventFormatter } from \"../json\";\nimport { Mode } from \"../mode\";\nimport { type WritableStreamLike } from \"../writable-stream-like\";\n\nexport function dump(\n\thtmlvalidate: HtmlValidate,\n\toutput: WritableStreamLike,\n\tfiles: string[],\n\tmode: Mode,\n): Promise<boolean> {\n\tlet lines: string[][] = [];\n\tswitch (mode) {\n\t\tcase Mode.DUMP_EVENTS:\n\t\t\tlines = files.map((filename: string) =>\n\t\t\t\thtmlvalidate.dumpEvents(filename).map(eventFormatter),\n\t\t\t);\n\t\t\tbreak;\n\t\tcase Mode.DUMP_TOKENS:\n\t\t\tlines = files.map((filename: string) =>\n\t\t\t\thtmlvalidate.dumpTokens(filename).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 flat = lines.reduce((s: string[], c: string[]) => s.concat(c), []);\n\toutput.write(flat.join(\"\\n\"));\n\toutput.write(\"\\n\");\n\treturn Promise.resolve(true);\n}\n"],"names":["fs","path","globSync","formatterFactory","legacyRequire","UserError","ensureError","fn","ignore","deepmerge","init","prompts","Severity","cjsResolver","FileSystemConfigLoader","HtmlValidate","betterAjvErrors","kleur","Mode","Reporter"],"mappings":"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"}
|
package/dist/cjs/core.js
CHANGED
|
@@ -1479,6 +1479,9 @@ class DynamicValue {
|
|
|
1479
1479
|
}
|
|
1480
1480
|
}
|
|
1481
1481
|
|
|
1482
|
+
function isDynamicAttribute(attr) {
|
|
1483
|
+
return Boolean(attr == null ? void 0 : attr.isDynamic);
|
|
1484
|
+
}
|
|
1482
1485
|
class Attribute {
|
|
1483
1486
|
/**
|
|
1484
1487
|
* @param key - Attribute name.
|
|
@@ -1720,7 +1723,8 @@ class DOMNode {
|
|
|
1720
1723
|
}
|
|
1721
1724
|
}
|
|
1722
1725
|
cacheExists(key) {
|
|
1723
|
-
|
|
1726
|
+
var _a;
|
|
1727
|
+
return Boolean((_a = this.cache) == null ? void 0 : _a.has(key));
|
|
1724
1728
|
}
|
|
1725
1729
|
/**
|
|
1726
1730
|
* Get the text (recursive) from all child nodes.
|
|
@@ -2820,7 +2824,7 @@ class HtmlElement extends DOMNode {
|
|
|
2820
2824
|
}
|
|
2821
2825
|
function isClosed(endToken, meta) {
|
|
2822
2826
|
let closed = 0 /* Open */;
|
|
2823
|
-
if (meta
|
|
2827
|
+
if (meta == null ? void 0 : meta.void) {
|
|
2824
2828
|
closed = 2 /* VoidOmitted */;
|
|
2825
2829
|
}
|
|
2826
2830
|
if (endToken.data[0] === "/>") {
|
|
@@ -3466,7 +3470,7 @@ function isAriaHidden(node, details) {
|
|
|
3466
3470
|
function isHTMLHiddenImpl(node) {
|
|
3467
3471
|
const getHiddenAttr = (node2) => {
|
|
3468
3472
|
const hidden = node2.getAttribute("hidden");
|
|
3469
|
-
return hidden
|
|
3473
|
+
return Boolean(hidden == null ? void 0 : hidden.isStatic);
|
|
3470
3474
|
};
|
|
3471
3475
|
return {
|
|
3472
3476
|
byParent: node.parent ? isHTMLHidden(node.parent) : false,
|
|
@@ -3484,7 +3488,7 @@ function isHTMLHidden(node, details) {
|
|
|
3484
3488
|
function isInertImpl(node) {
|
|
3485
3489
|
const getInertAttr = (node2) => {
|
|
3486
3490
|
const inert = node2.getAttribute("inert");
|
|
3487
|
-
return inert
|
|
3491
|
+
return Boolean(inert == null ? void 0 : inert.isStatic);
|
|
3488
3492
|
};
|
|
3489
3493
|
return {
|
|
3490
3494
|
byParent: node.parent ? isInert(node.parent) : false,
|
|
@@ -3521,7 +3525,7 @@ function isPresentation(node) {
|
|
|
3521
3525
|
return Boolean(node.cacheGet(ROLE_PRESENTATION_CACHE));
|
|
3522
3526
|
}
|
|
3523
3527
|
const meta = node.meta;
|
|
3524
|
-
if (meta
|
|
3528
|
+
if (meta == null ? void 0 : meta.interactive) {
|
|
3525
3529
|
return node.cacheSet(ROLE_PRESENTATION_CACHE, false);
|
|
3526
3530
|
}
|
|
3527
3531
|
const tabindex = node.getAttribute("tabindex");
|
|
@@ -3955,10 +3959,11 @@ function parseAllow(value) {
|
|
|
3955
3959
|
};
|
|
3956
3960
|
}
|
|
3957
3961
|
function matchList(value, list) {
|
|
3962
|
+
var _a;
|
|
3958
3963
|
if (list.include && !list.include.some((it) => it.test(value))) {
|
|
3959
3964
|
return false;
|
|
3960
3965
|
}
|
|
3961
|
-
if (list.exclude
|
|
3966
|
+
if ((_a = list.exclude) == null ? void 0 : _a.some((it) => it.test(value))) {
|
|
3962
3967
|
return false;
|
|
3963
3968
|
}
|
|
3964
3969
|
return true;
|
|
@@ -4188,7 +4193,7 @@ class AreaAlt extends Rule {
|
|
|
4188
4193
|
const href = area.getAttribute("href");
|
|
4189
4194
|
const alt = area.getAttribute("alt");
|
|
4190
4195
|
if (href) {
|
|
4191
|
-
if (alt
|
|
4196
|
+
if (isDynamicAttribute(alt)) {
|
|
4192
4197
|
return;
|
|
4193
4198
|
}
|
|
4194
4199
|
const target = area.getAttributeValue("href");
|
|
@@ -4227,7 +4232,7 @@ class AriaHiddenBody extends Rule {
|
|
|
4227
4232
|
this.on("tag:ready", this.isRelevant, (event) => {
|
|
4228
4233
|
const { target } = event;
|
|
4229
4234
|
const attr = target.getAttribute("aria-hidden");
|
|
4230
|
-
if (!attr
|
|
4235
|
+
if (!(attr == null ? void 0 : attr.valueMatches("true", true))) {
|
|
4231
4236
|
return;
|
|
4232
4237
|
}
|
|
4233
4238
|
this.report(target, "aria-hidden must not be used on <body>", attr.keyLocation);
|
|
@@ -4449,8 +4454,9 @@ class AttrCase extends Rule {
|
|
|
4449
4454
|
});
|
|
4450
4455
|
}
|
|
4451
4456
|
isIgnored(node) {
|
|
4457
|
+
var _a;
|
|
4452
4458
|
if (this.options.ignoreForeign) {
|
|
4453
|
-
return Boolean(node.meta
|
|
4459
|
+
return Boolean((_a = node.meta) == null ? void 0 : _a.foreign);
|
|
4454
4460
|
} else {
|
|
4455
4461
|
return false;
|
|
4456
4462
|
}
|
|
@@ -4606,7 +4612,7 @@ class Lexer {
|
|
|
4606
4612
|
* Called when entering a new state.
|
|
4607
4613
|
*/
|
|
4608
4614
|
enter(context, state, data) {
|
|
4609
|
-
if (state === State.TAG && data
|
|
4615
|
+
if (state === State.TAG && (data == null ? void 0 : data[0].startsWith("<"))) {
|
|
4610
4616
|
if (data[0] === "<script") {
|
|
4611
4617
|
context.contentModel = ContentModel.SCRIPT;
|
|
4612
4618
|
} else if (data[0] === "<style") {
|
|
@@ -4823,8 +4829,9 @@ class AttrPattern extends Rule {
|
|
|
4823
4829
|
});
|
|
4824
4830
|
}
|
|
4825
4831
|
isIgnored(node) {
|
|
4832
|
+
var _a;
|
|
4826
4833
|
if (this.options.ignoreForeign) {
|
|
4827
|
-
return Boolean(node.meta
|
|
4834
|
+
return Boolean((_a = node.meta) == null ? void 0 : _a.foreign);
|
|
4828
4835
|
} else {
|
|
4829
4836
|
return false;
|
|
4830
4837
|
}
|
|
@@ -5823,6 +5830,7 @@ class ElementPermittedContent extends Rule {
|
|
|
5823
5830
|
return this.validatePermittedContentImpl(cur, parent, rules);
|
|
5824
5831
|
}
|
|
5825
5832
|
validatePermittedContentImpl(cur, parent, rules) {
|
|
5833
|
+
var _a;
|
|
5826
5834
|
if (!Validator.validatePermitted(cur, rules)) {
|
|
5827
5835
|
const child = `<${cur.tagName}>`;
|
|
5828
5836
|
const message = `${child} element is not permitted as content under ${parent.annotatedName}`;
|
|
@@ -5834,7 +5842,7 @@ class ElementPermittedContent extends Rule {
|
|
|
5834
5842
|
this.report(cur, message, null, context);
|
|
5835
5843
|
return true;
|
|
5836
5844
|
}
|
|
5837
|
-
if (cur.meta
|
|
5845
|
+
if ((_a = cur.meta) == null ? void 0 : _a.transparent) {
|
|
5838
5846
|
const children = getTransparentChildren(cur, cur.meta.transparent);
|
|
5839
5847
|
return children.map((child) => {
|
|
5840
5848
|
return this.validatePermittedContentImpl(child, parent, rules);
|
|
@@ -6225,7 +6233,7 @@ function haveName(name) {
|
|
|
6225
6233
|
}
|
|
6226
6234
|
function allowSharedName(node, shared) {
|
|
6227
6235
|
const type = node.getAttribute("type");
|
|
6228
|
-
return Boolean(type
|
|
6236
|
+
return Boolean(type == null ? void 0 : type.valueMatches(shared, false));
|
|
6229
6237
|
}
|
|
6230
6238
|
function getDocumentation(context) {
|
|
6231
6239
|
const trailer = "Each form control must have a unique name.";
|
|
@@ -6397,8 +6405,9 @@ const defaults$j = {
|
|
|
6397
6405
|
sectioningRoots: ["dialog", '[role="dialog"]', '[role="alertdialog"]']
|
|
6398
6406
|
};
|
|
6399
6407
|
function isRelevant$6(event) {
|
|
6408
|
+
var _a;
|
|
6400
6409
|
const node = event.target;
|
|
6401
|
-
return Boolean(node.meta
|
|
6410
|
+
return Boolean((_a = node.meta) == null ? void 0 : _a.heading);
|
|
6402
6411
|
}
|
|
6403
6412
|
function extractLevel(node) {
|
|
6404
6413
|
const match = node.tagName.match(/^[hH](\d)$/);
|
|
@@ -6814,7 +6823,7 @@ class InputAttributes extends Rule {
|
|
|
6814
6823
|
const HAS_ACCESSIBLE_TEXT_CACHE = Symbol(hasAccessibleName.name);
|
|
6815
6824
|
function isHidden(node, context) {
|
|
6816
6825
|
const { reference } = context;
|
|
6817
|
-
if (reference
|
|
6826
|
+
if (reference == null ? void 0 : reference.isSameNode(node)) {
|
|
6818
6827
|
return false;
|
|
6819
6828
|
} else {
|
|
6820
6829
|
return !inAccessibilityTree(node);
|
|
@@ -6866,7 +6875,7 @@ function hasAccessibleNameImpl(current, context) {
|
|
|
6866
6875
|
if (isHidden(current, context)) {
|
|
6867
6876
|
return false;
|
|
6868
6877
|
}
|
|
6869
|
-
const ignoreHiddenRoot = Boolean(reference
|
|
6878
|
+
const ignoreHiddenRoot = Boolean(reference == null ? void 0 : reference.isSameNode(current));
|
|
6870
6879
|
const text = classifyNodeText(current, { accessible: true, ignoreHiddenRoot });
|
|
6871
6880
|
if (text !== TextClassification.EMPTY_TEXT) {
|
|
6872
6881
|
return true;
|
|
@@ -7711,7 +7720,7 @@ class NoInlineStyle extends Rule {
|
|
|
7711
7720
|
if (include && !include.includes(key)) {
|
|
7712
7721
|
return false;
|
|
7713
7722
|
}
|
|
7714
|
-
if (exclude
|
|
7723
|
+
if (exclude == null ? void 0 : exclude.includes(key)) {
|
|
7715
7724
|
return false;
|
|
7716
7725
|
}
|
|
7717
7726
|
return true;
|
|
@@ -8766,7 +8775,7 @@ class TelNonBreaking extends Rule {
|
|
|
8766
8775
|
return false;
|
|
8767
8776
|
}
|
|
8768
8777
|
const attr = target.getAttribute("href");
|
|
8769
|
-
if (!attr
|
|
8778
|
+
if (!(attr == null ? void 0 : attr.valueMatches(/^tel:/, false))) {
|
|
8770
8779
|
return false;
|
|
8771
8780
|
}
|
|
8772
8781
|
return true;
|
|
@@ -8820,7 +8829,7 @@ class TelNonBreaking extends Rule {
|
|
|
8820
8829
|
|
|
8821
8830
|
function hasNonEmptyAttribute(node, key) {
|
|
8822
8831
|
const attr = node.getAttribute(key);
|
|
8823
|
-
return Boolean(attr
|
|
8832
|
+
return Boolean(attr == null ? void 0 : attr.valueMatches(/.+/, true));
|
|
8824
8833
|
}
|
|
8825
8834
|
function hasDefaultText(node) {
|
|
8826
8835
|
if (!node.is("input")) {
|
|
@@ -8830,7 +8839,7 @@ function hasDefaultText(node) {
|
|
|
8830
8839
|
return false;
|
|
8831
8840
|
}
|
|
8832
8841
|
const type = node.getAttribute("type");
|
|
8833
|
-
return Boolean(type
|
|
8842
|
+
return Boolean(type == null ? void 0 : type.valueMatches(/submit|reset/, false));
|
|
8834
8843
|
}
|
|
8835
8844
|
function isNonEmptyText(node) {
|
|
8836
8845
|
if (isTextNode(node)) {
|
|
@@ -9982,7 +9991,7 @@ function isSubmit(node) {
|
|
|
9982
9991
|
}
|
|
9983
9992
|
function isAssociated(id, node) {
|
|
9984
9993
|
const form = node.getAttribute("form");
|
|
9985
|
-
return Boolean(form
|
|
9994
|
+
return Boolean(form == null ? void 0 : form.valueMatches(id, true));
|
|
9986
9995
|
}
|
|
9987
9996
|
function hasNestedSubmit(form) {
|
|
9988
9997
|
const matches = form.querySelectorAll("button,input").filter(isSubmit).filter((node) => !node.hasAttribute("form"));
|
|
@@ -11344,8 +11353,9 @@ class Parser {
|
|
|
11344
11353
|
/**
|
|
11345
11354
|
* @internal
|
|
11346
11355
|
*/
|
|
11347
|
-
/* eslint-disable-next-line complexity
|
|
11356
|
+
/* eslint-disable-next-line complexity -- technical debt, chould be refactored a bit */
|
|
11348
11357
|
consumeTag(source, startToken, tokenStream) {
|
|
11358
|
+
var _a;
|
|
11349
11359
|
const tokens = Array.from(
|
|
11350
11360
|
this.consumeUntil(tokenStream, TokenType.TAG_CLOSE, startToken.location)
|
|
11351
11361
|
);
|
|
@@ -11361,7 +11371,7 @@ class Parser {
|
|
|
11361
11371
|
);
|
|
11362
11372
|
const isStartTag = !startToken.data[1];
|
|
11363
11373
|
const isClosing = !isStartTag || node.closed !== NodeClosed.Open;
|
|
11364
|
-
const isForeign = node.meta
|
|
11374
|
+
const isForeign = (_a = node.meta) == null ? void 0 : _a.foreign;
|
|
11365
11375
|
if (closeOptional) {
|
|
11366
11376
|
const active = this.dom.getActive();
|
|
11367
11377
|
active.closed = NodeClosed.ImplicitClosed;
|
|
@@ -12689,7 +12699,7 @@ class HtmlValidate {
|
|
|
12689
12699
|
}
|
|
12690
12700
|
|
|
12691
12701
|
const name = "html-validate";
|
|
12692
|
-
const version = "8.18.
|
|
12702
|
+
const version = "8.18.2";
|
|
12693
12703
|
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
12694
12704
|
|
|
12695
12705
|
function definePlugin(plugin) {
|