html-validate 10.8.0 → 10.9.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/core.js +155 -23
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/elements.js +6 -2
- package/dist/cjs/elements.js.map +1 -1
- package/dist/cjs/tsdoc-metadata.json +1 -1
- package/dist/esm/core.js +155 -23
- package/dist/esm/core.js.map +1 -1
- package/dist/esm/elements.js +6 -2
- package/dist/esm/elements.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +1 -1
package/dist/cjs/core.js
CHANGED
|
@@ -4008,7 +4008,7 @@ class Rule {
|
|
|
4008
4008
|
}
|
|
4009
4009
|
}
|
|
4010
4010
|
|
|
4011
|
-
const defaults$
|
|
4011
|
+
const defaults$B = {
|
|
4012
4012
|
allowExternal: true,
|
|
4013
4013
|
allowRelative: true,
|
|
4014
4014
|
allowAbsolute: true,
|
|
@@ -4052,7 +4052,7 @@ class AllowedLinks extends Rule {
|
|
|
4052
4052
|
allowRelative;
|
|
4053
4053
|
allowAbsolute;
|
|
4054
4054
|
constructor(options) {
|
|
4055
|
-
super({ ...defaults$
|
|
4055
|
+
super({ ...defaults$B, ...options });
|
|
4056
4056
|
this.allowExternal = parseAllow(this.options.allowExternal);
|
|
4057
4057
|
this.allowRelative = parseAllow(this.options.allowRelative);
|
|
4058
4058
|
this.allowAbsolute = parseAllow(this.options.allowAbsolute);
|
|
@@ -4220,7 +4220,7 @@ class AllowedLinks extends Rule {
|
|
|
4220
4220
|
}
|
|
4221
4221
|
}
|
|
4222
4222
|
|
|
4223
|
-
const defaults$
|
|
4223
|
+
const defaults$A = {
|
|
4224
4224
|
accessible: true
|
|
4225
4225
|
};
|
|
4226
4226
|
function findByTarget(target, siblings) {
|
|
@@ -4250,7 +4250,7 @@ function getDescription$1(context) {
|
|
|
4250
4250
|
}
|
|
4251
4251
|
class AreaAlt extends Rule {
|
|
4252
4252
|
constructor(options) {
|
|
4253
|
-
super({ ...defaults$
|
|
4253
|
+
super({ ...defaults$A, ...options });
|
|
4254
4254
|
}
|
|
4255
4255
|
static schema() {
|
|
4256
4256
|
return {
|
|
@@ -4329,7 +4329,7 @@ class AriaHiddenBody extends Rule {
|
|
|
4329
4329
|
}
|
|
4330
4330
|
}
|
|
4331
4331
|
|
|
4332
|
-
const defaults$
|
|
4332
|
+
const defaults$z = {
|
|
4333
4333
|
allowAnyNamable: false,
|
|
4334
4334
|
elements: {
|
|
4335
4335
|
include: null,
|
|
@@ -4377,7 +4377,7 @@ function isValidUsage(target, meta) {
|
|
|
4377
4377
|
}
|
|
4378
4378
|
class AriaLabelMisuse extends Rule {
|
|
4379
4379
|
constructor(options) {
|
|
4380
|
-
super({ ...defaults$
|
|
4380
|
+
super({ ...defaults$z, ...options });
|
|
4381
4381
|
}
|
|
4382
4382
|
static schema() {
|
|
4383
4383
|
return {
|
|
@@ -4546,14 +4546,14 @@ class CaseStyle {
|
|
|
4546
4546
|
}
|
|
4547
4547
|
}
|
|
4548
4548
|
|
|
4549
|
-
const defaults$
|
|
4549
|
+
const defaults$y = {
|
|
4550
4550
|
style: "lowercase",
|
|
4551
4551
|
ignoreForeign: true
|
|
4552
4552
|
};
|
|
4553
4553
|
class AttrCase extends Rule {
|
|
4554
4554
|
style;
|
|
4555
4555
|
constructor(options) {
|
|
4556
|
-
super({ ...defaults$
|
|
4556
|
+
super({ ...defaults$y, ...options });
|
|
4557
4557
|
this.style = new CaseStyle(this.options.style, "attr-case");
|
|
4558
4558
|
}
|
|
4559
4559
|
static schema() {
|
|
@@ -4958,7 +4958,7 @@ class AttrDelimiter extends Rule {
|
|
|
4958
4958
|
}
|
|
4959
4959
|
|
|
4960
4960
|
const DEFAULT_PATTERN = "[a-z0-9-:]+";
|
|
4961
|
-
const defaults$
|
|
4961
|
+
const defaults$x = {
|
|
4962
4962
|
pattern: DEFAULT_PATTERN,
|
|
4963
4963
|
ignoreForeign: true
|
|
4964
4964
|
};
|
|
@@ -4991,7 +4991,7 @@ function generateDescription(name, pattern) {
|
|
|
4991
4991
|
class AttrPattern extends Rule {
|
|
4992
4992
|
pattern;
|
|
4993
4993
|
constructor(options) {
|
|
4994
|
-
super({ ...defaults$
|
|
4994
|
+
super({ ...defaults$x, ...options });
|
|
4995
4995
|
this.pattern = generateRegexp(this.options.pattern);
|
|
4996
4996
|
}
|
|
4997
4997
|
static schema() {
|
|
@@ -5038,7 +5038,7 @@ class AttrPattern extends Rule {
|
|
|
5038
5038
|
}
|
|
5039
5039
|
}
|
|
5040
5040
|
|
|
5041
|
-
const defaults$
|
|
5041
|
+
const defaults$w = {
|
|
5042
5042
|
style: "auto",
|
|
5043
5043
|
unquoted: false
|
|
5044
5044
|
};
|
|
@@ -5104,7 +5104,7 @@ class AttrQuotes extends Rule {
|
|
|
5104
5104
|
};
|
|
5105
5105
|
}
|
|
5106
5106
|
constructor(options) {
|
|
5107
|
-
super({ ...defaults$
|
|
5107
|
+
super({ ...defaults$w, ...options });
|
|
5108
5108
|
this.style = parseStyle$3(this.options.style);
|
|
5109
5109
|
}
|
|
5110
5110
|
setup() {
|
|
@@ -5260,13 +5260,13 @@ class AttributeAllowedValues extends Rule {
|
|
|
5260
5260
|
}
|
|
5261
5261
|
}
|
|
5262
5262
|
|
|
5263
|
-
const defaults$
|
|
5263
|
+
const defaults$v = {
|
|
5264
5264
|
style: "omit"
|
|
5265
5265
|
};
|
|
5266
5266
|
class AttributeBooleanStyle extends Rule {
|
|
5267
5267
|
hasInvalidStyle;
|
|
5268
5268
|
constructor(options) {
|
|
5269
|
-
super({ ...defaults$
|
|
5269
|
+
super({ ...defaults$v, ...options });
|
|
5270
5270
|
this.hasInvalidStyle = parseStyle$2(this.options.style);
|
|
5271
5271
|
}
|
|
5272
5272
|
static schema() {
|
|
@@ -5336,13 +5336,13 @@ function reportMessage$1(attr, style) {
|
|
|
5336
5336
|
return "";
|
|
5337
5337
|
}
|
|
5338
5338
|
|
|
5339
|
-
const defaults$
|
|
5339
|
+
const defaults$u = {
|
|
5340
5340
|
style: "omit"
|
|
5341
5341
|
};
|
|
5342
5342
|
class AttributeEmptyStyle extends Rule {
|
|
5343
5343
|
hasInvalidStyle;
|
|
5344
5344
|
constructor(options) {
|
|
5345
|
-
super({ ...defaults$
|
|
5345
|
+
super({ ...defaults$u, ...options });
|
|
5346
5346
|
this.hasInvalidStyle = parseStyle$1(this.options.style);
|
|
5347
5347
|
}
|
|
5348
5348
|
static schema() {
|
|
@@ -5459,7 +5459,7 @@ class AttributeMisuse extends Rule {
|
|
|
5459
5459
|
}
|
|
5460
5460
|
}
|
|
5461
5461
|
|
|
5462
|
-
const defaults$
|
|
5462
|
+
const defaults$t = {
|
|
5463
5463
|
preferred: void 0
|
|
5464
5464
|
};
|
|
5465
5465
|
function isPasswordInput(event) {
|
|
@@ -5476,7 +5476,7 @@ function isGroupingToken(token) {
|
|
|
5476
5476
|
class AutocompletePassword extends Rule {
|
|
5477
5477
|
preferred;
|
|
5478
5478
|
constructor(options) {
|
|
5479
|
-
super({ ...defaults$
|
|
5479
|
+
super({ ...defaults$t, ...options });
|
|
5480
5480
|
this.preferred = options.preferred?.toLowerCase();
|
|
5481
5481
|
}
|
|
5482
5482
|
static schema() {
|
|
@@ -5706,7 +5706,7 @@ class BasePatternRule extends Rule {
|
|
|
5706
5706
|
}
|
|
5707
5707
|
}
|
|
5708
5708
|
|
|
5709
|
-
const defaults$
|
|
5709
|
+
const defaults$s = {
|
|
5710
5710
|
pattern: "kebabcase"
|
|
5711
5711
|
};
|
|
5712
5712
|
class ClassPattern extends BasePatternRule {
|
|
@@ -5714,7 +5714,7 @@ class ClassPattern extends BasePatternRule {
|
|
|
5714
5714
|
super({
|
|
5715
5715
|
ruleId: "class-pattern",
|
|
5716
5716
|
attr: "class",
|
|
5717
|
-
options: { ...defaults$
|
|
5717
|
+
options: { ...defaults$s, ...options },
|
|
5718
5718
|
allowedPatterns: patternNames
|
|
5719
5719
|
// allow all patterns
|
|
5720
5720
|
});
|
|
@@ -5864,13 +5864,13 @@ class CloseOrder extends Rule {
|
|
|
5864
5864
|
}
|
|
5865
5865
|
}
|
|
5866
5866
|
|
|
5867
|
-
const defaults$
|
|
5867
|
+
const defaults$r = {
|
|
5868
5868
|
include: null,
|
|
5869
5869
|
exclude: null
|
|
5870
5870
|
};
|
|
5871
5871
|
class Deprecated extends Rule {
|
|
5872
5872
|
constructor(options) {
|
|
5873
|
-
super({ ...defaults$
|
|
5873
|
+
super({ ...defaults$r, ...options });
|
|
5874
5874
|
}
|
|
5875
5875
|
static schema() {
|
|
5876
5876
|
return {
|
|
@@ -5978,6 +5978,137 @@ function prettySource(source) {
|
|
|
5978
5978
|
}
|
|
5979
5979
|
}
|
|
5980
5980
|
|
|
5981
|
+
function quote(value, char = '"') {
|
|
5982
|
+
return `${char}${value}${char}`;
|
|
5983
|
+
}
|
|
5984
|
+
|
|
5985
|
+
const defaults$q = {
|
|
5986
|
+
classes: []
|
|
5987
|
+
};
|
|
5988
|
+
function isRelevant$6(event) {
|
|
5989
|
+
return event.key.toLowerCase() === "class";
|
|
5990
|
+
}
|
|
5991
|
+
function normalizeEntry(entry) {
|
|
5992
|
+
const { class: className, message, replacement = [], url } = entry;
|
|
5993
|
+
return {
|
|
5994
|
+
class: className,
|
|
5995
|
+
message,
|
|
5996
|
+
replacement: Array.isArray(replacement) ? replacement : [replacement],
|
|
5997
|
+
url
|
|
5998
|
+
};
|
|
5999
|
+
}
|
|
6000
|
+
function formatDeprecatedMessage(className, entry) {
|
|
6001
|
+
let message = `class "${className}" is deprecated`;
|
|
6002
|
+
if (entry.replacement.length > 0) {
|
|
6003
|
+
const joined = utils_naturalJoin.naturalJoin(
|
|
6004
|
+
entry.replacement.map((r) => quote(r)),
|
|
6005
|
+
"or"
|
|
6006
|
+
);
|
|
6007
|
+
message += ` and replaced with ${joined}`;
|
|
6008
|
+
}
|
|
6009
|
+
if (entry.message) {
|
|
6010
|
+
message += `: ${entry.message}`;
|
|
6011
|
+
}
|
|
6012
|
+
return message;
|
|
6013
|
+
}
|
|
6014
|
+
function formatDocumentationDescription(context) {
|
|
6015
|
+
const text = [];
|
|
6016
|
+
const className = context.class;
|
|
6017
|
+
let description = `The class \`${className}\` is deprecated and should not be used`;
|
|
6018
|
+
if (context.message) {
|
|
6019
|
+
description += `: ${context.message}.`;
|
|
6020
|
+
} else {
|
|
6021
|
+
description += ".";
|
|
6022
|
+
}
|
|
6023
|
+
text.push(description);
|
|
6024
|
+
if (context.replacement.length === 1) {
|
|
6025
|
+
text.push(`Use the replacement class ${quote(context.replacement[0], "`")} instead.`);
|
|
6026
|
+
} else if (context.replacement.length > 1) {
|
|
6027
|
+
const listItems = context.replacement.map((r) => `- ${quote(r, "`")}`);
|
|
6028
|
+
text.push(`Use one of the following replacement classes instead:
|
|
6029
|
+
${listItems.join("\n")}`);
|
|
6030
|
+
}
|
|
6031
|
+
if (context.url) {
|
|
6032
|
+
text.push(`For details see: ${context.url}`);
|
|
6033
|
+
}
|
|
6034
|
+
return text.join("\n\n");
|
|
6035
|
+
}
|
|
6036
|
+
class DeprecatedClass extends Rule {
|
|
6037
|
+
deprecatedMap;
|
|
6038
|
+
constructor(options) {
|
|
6039
|
+
super({ ...defaults$q, ...options });
|
|
6040
|
+
const { classes } = this.options;
|
|
6041
|
+
this.deprecatedMap = new Map(classes.map((entry) => [entry.class, normalizeEntry(entry)]));
|
|
6042
|
+
}
|
|
6043
|
+
static schema() {
|
|
6044
|
+
return {
|
|
6045
|
+
classes: {
|
|
6046
|
+
type: "array",
|
|
6047
|
+
items: {
|
|
6048
|
+
type: "object",
|
|
6049
|
+
properties: {
|
|
6050
|
+
class: {
|
|
6051
|
+
type: "string"
|
|
6052
|
+
},
|
|
6053
|
+
message: {
|
|
6054
|
+
type: "string"
|
|
6055
|
+
},
|
|
6056
|
+
replacement: {
|
|
6057
|
+
anyOf: [
|
|
6058
|
+
{
|
|
6059
|
+
type: "string"
|
|
6060
|
+
},
|
|
6061
|
+
{
|
|
6062
|
+
type: "array",
|
|
6063
|
+
items: {
|
|
6064
|
+
type: "string"
|
|
6065
|
+
}
|
|
6066
|
+
}
|
|
6067
|
+
]
|
|
6068
|
+
},
|
|
6069
|
+
url: {
|
|
6070
|
+
type: "string"
|
|
6071
|
+
}
|
|
6072
|
+
},
|
|
6073
|
+
required: ["class"],
|
|
6074
|
+
additionalProperties: false
|
|
6075
|
+
}
|
|
6076
|
+
}
|
|
6077
|
+
};
|
|
6078
|
+
}
|
|
6079
|
+
documentation(context) {
|
|
6080
|
+
return {
|
|
6081
|
+
description: formatDocumentationDescription(context),
|
|
6082
|
+
url: "https://html-validate.org/rules/deprecated-class.html"
|
|
6083
|
+
};
|
|
6084
|
+
}
|
|
6085
|
+
setup() {
|
|
6086
|
+
this.on("attr", isRelevant$6, (event) => {
|
|
6087
|
+
const { value, valueLocation, target } = event;
|
|
6088
|
+
const classes = new DOMTokenList(value, valueLocation);
|
|
6089
|
+
for (const { item, location } of classes.iterator()) {
|
|
6090
|
+
const deprecatedEntry = this.deprecatedMap.get(item);
|
|
6091
|
+
if (!deprecatedEntry) {
|
|
6092
|
+
continue;
|
|
6093
|
+
}
|
|
6094
|
+
const message = formatDeprecatedMessage(item, deprecatedEntry);
|
|
6095
|
+
const context = {
|
|
6096
|
+
class: item,
|
|
6097
|
+
message: deprecatedEntry.message ?? null,
|
|
6098
|
+
replacement: deprecatedEntry.replacement,
|
|
6099
|
+
url: deprecatedEntry.url ?? null
|
|
6100
|
+
};
|
|
6101
|
+
this.report({
|
|
6102
|
+
node: target,
|
|
6103
|
+
message,
|
|
6104
|
+
location,
|
|
6105
|
+
context
|
|
6106
|
+
});
|
|
6107
|
+
}
|
|
6108
|
+
});
|
|
6109
|
+
}
|
|
6110
|
+
}
|
|
6111
|
+
|
|
5981
6112
|
class DeprecatedRule extends Rule {
|
|
5982
6113
|
documentation(context) {
|
|
5983
6114
|
const preamble = context ? `The rule "${context}"` : "This rule";
|
|
@@ -10918,6 +11049,7 @@ const bundledRules = {
|
|
|
10918
11049
|
"close-attr": CloseAttr,
|
|
10919
11050
|
"close-order": CloseOrder,
|
|
10920
11051
|
deprecated: Deprecated,
|
|
11052
|
+
"deprecated-class": DeprecatedClass,
|
|
10921
11053
|
"deprecated-rule": DeprecatedRule,
|
|
10922
11054
|
"doctype-html": NoStyleTag$1,
|
|
10923
11055
|
"doctype-style": DoctypeStyle,
|
|
@@ -12294,7 +12426,7 @@ class EventHandler {
|
|
|
12294
12426
|
}
|
|
12295
12427
|
|
|
12296
12428
|
const name = "html-validate";
|
|
12297
|
-
const version = "10.
|
|
12429
|
+
const version = "10.9.0";
|
|
12298
12430
|
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
12299
12431
|
|
|
12300
12432
|
function freeze(src) {
|