html-validate-vue 9.2.0 → 9.3.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/README.md +7 -6
- package/dist/cjs/index.cjs +46 -12
- package/dist/cjs/index.cjs.map +4 -4
- package/dist/esm/index.mjs +43 -9
- package/dist/esm/index.mjs.map +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,12 +52,13 @@ If you're using Vue CLI you can add the CLI plugin:
|
|
|
52
52
|
|
|
53
53
|
## Rules
|
|
54
54
|
|
|
55
|
-
| Rule
|
|
56
|
-
|
|
|
57
|
-
| `vue/available-slots`
|
|
58
|
-
| `vue/deprecated-slot`
|
|
59
|
-
| `vue/prefer-
|
|
60
|
-
| `vue/
|
|
55
|
+
| Rule | Recommended | Description |
|
|
56
|
+
| ------------------------------ | ----------- | ------------------------------------------------------------------- |
|
|
57
|
+
| `vue/available-slots` | Error | Validate usage of slots. Only known slots may be used. |
|
|
58
|
+
| `vue/deprecated-slot` | Error | Report errors when deprecated slots are used. |
|
|
59
|
+
| `vue/prefer-boolean-shorthand` | Error | Prefer native boolean syntax (`prop`) over `:prop="true"` bindings. |
|
|
60
|
+
| `vue/prefer-slot-shorthand` | Error | Prefers the usage of `#foo` over `v-slot:foo`. |
|
|
61
|
+
| `vue/required-slots` | Error | Validate required slots. Required slots must be used. |
|
|
61
62
|
|
|
62
63
|
## Element metadata
|
|
63
64
|
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
// src/index.ts
|
|
4
|
-
var
|
|
4
|
+
var import_html_validate9 = require("html-validate");
|
|
5
5
|
|
|
6
6
|
// package.json
|
|
7
7
|
var name = "html-validate-vue";
|
|
@@ -243,6 +243,7 @@ function createConfig() {
|
|
|
243
243
|
"no-self-closing": "off",
|
|
244
244
|
/* enable rules from this plugin */
|
|
245
245
|
"vue/available-slots": "error",
|
|
246
|
+
"vue/prefer-boolean-shorthand": "error",
|
|
246
247
|
"vue/prefer-slot-shorthand": "error",
|
|
247
248
|
"vue/required-slots": "error"
|
|
248
249
|
}
|
|
@@ -403,8 +404,40 @@ var DeprecatedSlot = class extends import_html_validate3.Rule {
|
|
|
403
404
|
}
|
|
404
405
|
};
|
|
405
406
|
|
|
406
|
-
// src/rules/prefer-
|
|
407
|
+
// src/rules/prefer-boolean-shorthand.ts
|
|
407
408
|
var import_html_validate4 = require("html-validate");
|
|
409
|
+
var PreferBooleanShorthand = class extends import_html_validate4.Rule {
|
|
410
|
+
documentation(context) {
|
|
411
|
+
const { prop, originalAttribute } = context;
|
|
412
|
+
return {
|
|
413
|
+
description: [
|
|
414
|
+
`Use \`${prop}\` instead of \`${originalAttribute}="true"\`.`,
|
|
415
|
+
"",
|
|
416
|
+
`The \`${prop}\` prop is declared as a boolean. Vue.js allows omitting the value for boolean props, so \`${prop}\` is equivalent to \`${originalAttribute}="true"\`.`
|
|
417
|
+
].join("\n")
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
setup() {
|
|
421
|
+
this.on("attr", (event) => {
|
|
422
|
+
const { key, value, meta, originalAttribute, target, location } = event;
|
|
423
|
+
if (!originalAttribute) {
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
if (!meta?.boolean) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
if (!(value instanceof import_html_validate4.DynamicValue) || value.expr !== "true") {
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
const context = { prop: key, originalAttribute };
|
|
433
|
+
const message = `Use "${key}" instead of "${originalAttribute}="true""`;
|
|
434
|
+
this.report(target, message, location, context);
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
// src/rules/prefer-slot-shorthand.ts
|
|
440
|
+
var import_html_validate5 = require("html-validate");
|
|
408
441
|
var prefix = "v-slot:";
|
|
409
442
|
function isVSlot(attr) {
|
|
410
443
|
if (!attr.startsWith(prefix)) {
|
|
@@ -423,7 +456,7 @@ function isDeprecatedSlot(attr, value) {
|
|
|
423
456
|
if (attr !== "slot") {
|
|
424
457
|
return null;
|
|
425
458
|
}
|
|
426
|
-
if (value instanceof
|
|
459
|
+
if (value instanceof import_html_validate5.DynamicValue) {
|
|
427
460
|
return null;
|
|
428
461
|
}
|
|
429
462
|
if (value === null || value === "") {
|
|
@@ -431,7 +464,7 @@ function isDeprecatedSlot(attr, value) {
|
|
|
431
464
|
}
|
|
432
465
|
return value;
|
|
433
466
|
}
|
|
434
|
-
var PreferSlotShorthand = class extends
|
|
467
|
+
var PreferSlotShorthand = class extends import_html_validate5.Rule {
|
|
435
468
|
documentation(context) {
|
|
436
469
|
const slot = context?.slot ?? "my-slot";
|
|
437
470
|
return {
|
|
@@ -463,7 +496,7 @@ var PreferSlotShorthand = class extends import_html_validate4.Rule {
|
|
|
463
496
|
};
|
|
464
497
|
|
|
465
498
|
// src/rules/required-slots.ts
|
|
466
|
-
var
|
|
499
|
+
var import_html_validate6 = require("html-validate");
|
|
467
500
|
function difference2(a, b) {
|
|
468
501
|
const result = new Set(a);
|
|
469
502
|
for (const elem of b) {
|
|
@@ -471,7 +504,7 @@ function difference2(a, b) {
|
|
|
471
504
|
}
|
|
472
505
|
return result;
|
|
473
506
|
}
|
|
474
|
-
var RequiredSlots = class extends
|
|
507
|
+
var RequiredSlots = class extends import_html_validate6.Rule {
|
|
475
508
|
documentation(context) {
|
|
476
509
|
if (context) {
|
|
477
510
|
return {
|
|
@@ -490,7 +523,7 @@ var RequiredSlots = class extends import_html_validate5.Rule {
|
|
|
490
523
|
setup() {
|
|
491
524
|
this.on("dom:ready", (event) => {
|
|
492
525
|
const doc = event.document;
|
|
493
|
-
|
|
526
|
+
import_html_validate6.walk.depthFirst(doc, (node) => {
|
|
494
527
|
const meta = node.meta;
|
|
495
528
|
if (!meta?.requiredSlots) {
|
|
496
529
|
return;
|
|
@@ -524,6 +557,7 @@ var RequiredSlots = class extends import_html_validate5.Rule {
|
|
|
524
557
|
var rules = {
|
|
525
558
|
"vue/available-slots": AvailableSlots,
|
|
526
559
|
"vue/deprecated-slot": DeprecatedSlot,
|
|
560
|
+
"vue/prefer-boolean-shorthand": PreferBooleanShorthand,
|
|
527
561
|
"vue/prefer-slot-shorthand": PreferSlotShorthand,
|
|
528
562
|
"vue/required-slots": RequiredSlots
|
|
529
563
|
};
|
|
@@ -560,7 +594,7 @@ var schema_default = {
|
|
|
560
594
|
};
|
|
561
595
|
|
|
562
596
|
// src/hooks/attribute.ts
|
|
563
|
-
var
|
|
597
|
+
var import_html_validate7 = require("html-validate");
|
|
564
598
|
function* processAttribute(attr) {
|
|
565
599
|
yield attr;
|
|
566
600
|
const bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);
|
|
@@ -569,14 +603,14 @@ function* processAttribute(attr) {
|
|
|
569
603
|
yield {
|
|
570
604
|
...attr,
|
|
571
605
|
key,
|
|
572
|
-
value: new
|
|
606
|
+
value: new import_html_validate7.DynamicValue(attr.value ? String(attr.value) : ""),
|
|
573
607
|
originalAttribute: attr.key
|
|
574
608
|
};
|
|
575
609
|
}
|
|
576
610
|
}
|
|
577
611
|
|
|
578
612
|
// src/hooks/element.ts
|
|
579
|
-
var
|
|
613
|
+
var import_html_validate8 = require("html-validate");
|
|
580
614
|
function isBound(node) {
|
|
581
615
|
return node.hasAttribute("v-html");
|
|
582
616
|
}
|
|
@@ -636,7 +670,7 @@ function processElement(node) {
|
|
|
636
670
|
node.meta.templateRoot = false;
|
|
637
671
|
}
|
|
638
672
|
if (isBound(node) || isSlot(node)) {
|
|
639
|
-
node.appendText(new
|
|
673
|
+
node.appendText(new import_html_validate8.DynamicValue(""), node.location);
|
|
640
674
|
}
|
|
641
675
|
}
|
|
642
676
|
|
|
@@ -752,7 +786,7 @@ var transform_default = transformer;
|
|
|
752
786
|
|
|
753
787
|
// src/index.ts
|
|
754
788
|
var range = peerDependencies["html-validate"];
|
|
755
|
-
(0,
|
|
789
|
+
(0, import_html_validate9.compatibilityCheck)(name, range);
|
|
756
790
|
var plugin = {
|
|
757
791
|
name,
|
|
758
792
|
configs: configs_default,
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/index.ts", "../../package.json", "../../src/elements.ts", "../../src/configs/recommended.ts", "../../src/configs/index.ts", "../../src/rules/available-slots.ts", "../../src/utils/strip-templating.ts", "../../src/utils/slots.ts", "../../src/rules/deprecated-slot.ts", "../../src/rules/prefer-slot-shorthand.ts", "../../src/rules/required-slots.ts", "../../src/rules/index.ts", "../../src/schema.json", "../../src/hooks/attribute.ts", "../../src/hooks/element.ts", "../../src/transform/html.transform.ts", "../../src/transform/js.transform.ts", "../../src/transform/sfc.transform.ts", "../../src/transform/auto.transform.ts", "../../src/transform/index.ts", "../../src/entry-cjs.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Plugin, compatibilityCheck } from \"html-validate\";\nimport { name, peerDependencies } from \"../package.json\";\nimport configs from \"./configs\";\nimport rules from \"./rules\";\nimport elementSchema from \"./schema.json\";\nimport transformer from \"./transform\";\n\nconst range = peerDependencies[\"html-validate\"];\ncompatibilityCheck(name, range);\n\nconst plugin: Plugin = {\n\tname,\n\tconfigs,\n\trules,\n\ttransformer,\n\telementSchema,\n};\n\nexport default plugin;\n", "{\n \"name\": \"html-validate-vue\",\n \"version\": \"9.1.0\",\n \"description\": \"vue transform for html-validate\",\n \"keywords\": [\n \"html\",\n \"lint\",\n \"html-validate\",\n \"vue\"\n ],\n \"homepage\": \"https://html-validate.org/frameworks/vue.html\",\n \"bugs\": {\n \"url\": \"https://gitlab.com/html-validate/html-validate-vue/issues/new\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://gitlab.com/html-validate/html-validate-vue.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"David Sveningsson <ext@sidvind.com>\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/esm/index.d.mts\",\n \"default\": \"./dist/esm/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/cjs/index.d.cts\",\n \"default\": \"./dist/cjs/index.cjs\"\n }\n }\n },\n \"main\": \"dist/cjs/index.cjs\",\n \"module\": \"dist/esm/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"prebuild\": \"tsc\",\n \"build\": \"run-s build:*\",\n \"build:lib\": \"node build.mjs\",\n \"build:cjs\": \"dts-bundle-generator --no-banner --project tsconfig.cjs.json -o dist/cjs/index.d.cts src/entry-cjs.ts\",\n \"build:esm\": \"dts-bundle-generator --no-banner --project tsconfig.esm.json -o dist/esm/index.d.mts src/entry-esm.ts\",\n \"eslint\": \"eslint --cache .\",\n \"eslint:fix\": \"eslint --cache --fix .\",\n \"prepack\": \"release-prepack package.json --bundle\",\n \"postpack\": \"release-postpack package.json\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"release-prepack package.json --bundle\",\n \"prettier:check\": \"prettier --check .\",\n \"prettier:write\": \"prettier --write .\",\n \"postpublish\": \"release-postpack package.json\",\n \"attw\": \"attw --no-emoji --pack .\",\n \"test\": \"jest\"\n },\n \"commitlint\": {\n \"extends\": \"@html-validate\"\n },\n \"prettier\": \"@html-validate/prettier-config\",\n \"release\": {\n \"extends\": \"@html-validate/semantic-release-config\"\n },\n \"jest\": {\n \"preset\": \"@html-validate/jest-config\"\n },\n \"dependencies\": {\n \"@html-validate/plugin-utils\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"4.0.1\",\n \"@html-validate/eslint-config\": \"9.1.2\",\n \"@html-validate/eslint-config-jest\": \"9.1.1\",\n \"@html-validate/eslint-config-typescript\": \"9.1.3\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"9.1.3\",\n \"@html-validate/jest-config\": \"3.18.0\",\n \"@html-validate/prettier-config\": \"4.0.1\",\n \"@html-validate/release-scripts\": \"7.2.3\",\n \"@jest/globals\": \"30.4.1\",\n \"@tsconfig/node22\": \"22.0.5\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.9\",\n \"@types/node\": \"22.19.19\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.28.0\",\n \"html-validate\": \"11.3.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.4.2\",\n \"jest-environment-jsdom\": \"30.4.1\",\n \"npm-pkg-lint\": \"5.1.1\",\n \"npm-run-all2\": \"9.0.1\",\n \"semver\": \"7.8.1\",\n \"ts-jest\": \"29.4.11\",\n \"typescript\": \"6.0.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0 || ^11.0.0\"\n },\n \"engines\": {\n \"node\": \"^22.16 || >= 24\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\t\"*\": {\n\t\tattributes: {\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#is */\n\t\t\tis: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#key */\n\t\t\tkey: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#ref */\n\t\t\tref: {},\n\n\t\t\t/* directives */\n\t\t\t\"v-*\": {},\n\n\t\t\t/* props */\n\t\t\t\":*\": {},\n\n\t\t\t/* event listeners */\n\t\t\t\"@*\": {},\n\t\t},\n\t},\n\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\tattributes: {\n\t\t\tis: {\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tinclude: {},\n\t\t\texclude: {},\n\t\t\tmax: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t},\n\t},\n\n\tportal: {\n\t\tdeprecated: {\n\t\t\tsource: \"vue\",\n\t\t\tmessage: \"the <portal> element has been renamed to <teleport>\",\n\t\t\tdocumentation: \"The `<portal>` element has been renamed to `<teleport>`\",\n\t\t},\n\t},\n\n\t\"router-link\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\t\"active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"aria-current-value\": {\n\t\t\t\tenum: [\"location\", \"time\", \"true\", \"false\", \"page\", \"step\", \"date\"],\n\t\t\t},\n\t\t\tcustom: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"exact-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\treplace: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\troute: {},\n\t\t},\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t\tattributes: {\n\t\t\tname: {},\n\t\t\t/* scoped slot can take arbitrary bindings */\n\t\t\t\"*\": {},\n\t\t},\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t\tattributes: {\n\t\t\ttimeout: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tsuspensible: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t},\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\tattributes: {\n\t\t\tdefer: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tdisabled: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n\n\ttemplate: {\n\t\tattributes: {\n\t\t\t\"#*\": {},\n\t\t},\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tmode: {\n\t\t\t\tenum: [\"in-out\", \"out-in\", \"default\"],\n\t\t\t},\n\t\t},\n\t},\n\n\t\"transition-group\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"tag\",\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"move-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttag: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n});\n", "import { type ConfigData } from \"html-validate\";\nimport vueElements from \"../elements\";\n\nexport function createConfig(): ConfigData {\n\tconst config: ConfigData = {\n\t\telements: [vueElements],\n\t\trules: {\n\t\t\t/* vue modifiers often use camelcase so allow by default */\n\t\t\t\"attr-case\": [\"error\", { style: \"camelcase\" }],\n\n\t\t\t/* self closing tags often used in vue code so allow by default*/\n\t\t\t\"void-style\": [\"error\", { style: \"selfclose\" }],\n\t\t\t\"no-self-closing\": \"off\",\n\n\t\t\t/* enable rules from this plugin */\n\t\t\t\"vue/available-slots\": \"error\",\n\t\t\t\"vue/prefer-slot-shorthand\": \"error\",\n\t\t\t\"vue/required-slots\": \"error\",\n\t\t},\n\t};\n\n\treturn config;\n}\n\nexport default createConfig();\n", "import recommended from \"./recommended\";\n\nexport default {\n\trecommended,\n};\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tslots?: string[];\n\t}\n\tinterface MetaElement {\n\t\tslots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tavailable: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class AvailableSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component does not have a slot named \"${context.slot}\". Only known slots can be specified.`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are available\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.available.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"Only known slots can be specified.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.slots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.slots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, slots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst available = new Set(slots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(used, available);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\tavailable: slots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component has no slot \"${missing}\"`,\n\t\t\t\tusedSlots.get(missing),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "/**\n * Strip anything inside `{{ .. }}` in case it contains anything that looks like\n * markup, i.e. it will be ignored\n */\nexport function stripTemplating(str: string): string {\n\t/* eslint-disable-next-line sonarjs/slow-regex -- technical debt, should refactor */\n\treturn str.replaceAll(/{{(.*?)}}/g, (_, m: string) => {\n\t\tconst filler = \" \".repeat(m.length);\n\t\treturn `{{${filler}}}`;\n\t});\n}\n", "import { type HtmlElement, type Location } from \"html-validate\";\n\nconst slotAttr = /(?:v-slot:|#)([^[]+)/;\n\nfunction haveSlot(value: [string, Location] | null): value is [string, Location] {\n\treturn value !== null;\n}\n\n/**\n * Search all children for slots and return both slot names and locations.\n */\nexport function findUsedSlots(node: HtmlElement): Map<string, Location> {\n\tconst template = node.querySelectorAll(\">template, >[slot]\");\n\tconst slots = template.map((child) => findSlotAttribute(child)).filter(haveSlot);\n\tconst initial = new Map<string, Location>();\n\treturn slots.reduce((result: Map<string, Location>, [key, val]) => {\n\t\tresult.set(key, val);\n\t\treturn result;\n\t}, initial);\n}\n\n/**\n * Find the name of the slot and its location used by an element. Searches\n * both v-slot:foo and slot=\"foo\".\n */\nexport function findSlotAttribute(node: HtmlElement): [string, Location] | null {\n\tfor (const attr of node.attributes) {\n\t\t/* find v-slot directive */\n\t\tconst match = slotAttr.exec(attr.key);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if slot matches [1] will exist */\n\t\t\tconst slot = match[1]!;\n\t\t\treturn [slot, attr.keyLocation];\n\t\t}\n\n\t\t/* find deprecated slot attribute */\n\t\tif (attr.key === \"slot\" && typeof attr.value === \"string\") {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- valueLocation will always be set the value is present */\n\t\t\treturn [attr.value, attr.valueLocation!];\n\t\t}\n\t}\n\treturn null;\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n}\n\n/** @internal */\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tinfo: string | null;\n}\n\nexport class DeprecatedSlot extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\tconst preamble = `The slot \\`${context.slot}\\` is deprecated and must not be used`;\n\t\t\treturn {\n\t\t\t\tdescription: context.info ? `${preamble}: ${context.info}.` : `${preamble}.`,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"This slot is deprecated and must not be used.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify deprecated slots */\n\t\t\t\tconst deprecatedSlots = node.meta?.deprecatedSlots;\n\t\t\t\tif (!deprecatedSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, deprecatedSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(\n\t\tnode: HtmlElement,\n\t\tdeprecatedSlots: Record<string, boolean | string>,\n\t): void {\n\t\tconst slots = findUsedSlots(node);\n\t\tfor (const [slot, location] of slots.entries()) {\n\t\t\tconst deprecated = deprecatedSlots[slot];\n\t\t\tif (!deprecated) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot,\n\t\t\t\tinfo: typeof deprecated === \"string\" ? deprecated : null,\n\t\t\t};\n\t\t\tconst preamble = `slot \"${slot}\" is deprecated`;\n\t\t\tconst message = typeof deprecated === \"string\" ? `${preamble}: ${deprecated}` : preamble;\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n}\n", "import { type AttributeEvent, type RuleDocumentation, DynamicValue, Rule } from \"html-validate\";\n\nexport interface RuleContext {\n\tslot: string;\n}\n\nconst prefix = \"v-slot:\";\n\nfunction isVSlot(attr: string): string | null {\n\tif (!attr.startsWith(prefix)) {\n\t\treturn null;\n\t}\n\tif (attr.length <= prefix.length) {\n\t\treturn null;\n\t}\n\tconst slot = attr.slice(prefix.length);\n\tif (/^\\[.*]$/.test(slot)) {\n\t\treturn null;\n\t}\n\treturn slot;\n}\n\nfunction isDeprecatedSlot(attr: string, value: null | string | DynamicValue): string | null {\n\tif (attr !== \"slot\") {\n\t\treturn null;\n\t}\n\tif (value instanceof DynamicValue) {\n\t\treturn null;\n\t}\n\tif (value === null || value === \"\") {\n\t\treturn null;\n\t}\n\treturn value;\n}\n\nexport class PreferSlotShorthand extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tconst slot = context?.slot ?? \"my-slot\";\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Prefer to use \\`#${slot}\\` over \\`v-slot:${slot}\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Vue.js supports a shorthand syntax for slots using `#` instead of `v-slot:` or the deprecated `slot` attribute, e.g. using `#header` instead of `v-slot:header`.\",\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { key: attr, value, target, keyLocation: location } = event;\n\n\t\t\tlet slot: string | null;\n\n\t\t\t/* handle v-slot:xyz */\n\t\t\tslot = isVSlot(attr);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\n\t\t\t/* handle slot=\"xyz\" */\n\t\t\tslot = isDeprecatedSlot(attr, value);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- value is checked by isDeprecatedSlot */\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}=\"${value!.toString()}\"`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\t\t});\n\t}\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\trequiredSlots?: string[];\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\trequired: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class RequiredSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component requires slot \"${context.slot}\" to be implemented. Add \\`<template v-slot:${context.slot}>\\``,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are required\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.required.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"All required slots must be implemented.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.requiredSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.requiredSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, requiredSlots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst required = new Set(requiredSlots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(required, used);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\trequired: requiredSlots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component requires slot \"${missing}\" to be implemented`,\n\t\t\t\tnull,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "import { AvailableSlots } from \"./available-slots\";\nimport { DeprecatedSlot } from \"./deprecated-slot\";\nimport { PreferSlotShorthand } from \"./prefer-slot-shorthand\";\nimport { RequiredSlots } from \"./required-slots\";\n\nconst rules = {\n\t\"vue/available-slots\": AvailableSlots,\n\t\"vue/deprecated-slot\": DeprecatedSlot,\n\t\"vue/prefer-slot-shorthand\": PreferSlotShorthand,\n\t\"vue/required-slots\": RequiredSlots,\n};\n\nexport default rules;\n", "{\n \"properties\": {\n \"component\": {\n \"type\": \"string\",\n \"copyable\": true\n },\n \"deprecatedSlots\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \".*\": {\n \"anyOf\": [{ \"type\": \"boolean\" }, { \"type\": \"string\" }]\n }\n }\n },\n \"requiredSlots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"slots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n}\n", "import { type AttributeData, DynamicValue } from \"html-validate\";\n\nexport function* processAttribute(attr: AttributeData): Iterable<AttributeData> {\n\t/* always yield original attribute */\n\tyield attr;\n\n\t/* setup :foo and v-bind:foo alias */\n\tconst bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);\n\tif (bind) {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if bind matches [1] will exist */\n\t\tconst key = bind[1]!;\n\t\tyield {\n\t\t\t...attr,\n\t\t\tkey,\n\t\t\tvalue: new DynamicValue(attr.value ? String(attr.value) : \"\"),\n\t\t\toriginalAttribute: attr.key,\n\t\t};\n\t}\n}\n", "import {\n\ttype HtmlElement,\n\ttype MetaElement,\n\ttype ProcessElementContext,\n\tDynamicValue,\n} from \"html-validate\";\nimport { findSlotAttribute } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\texport interface MetaData {\n\t\tcomponent?: string;\n\t}\n}\n\nfunction isBound(node: HtmlElement): boolean {\n\treturn node.hasAttribute(\"v-html\");\n}\n\nfunction isSlot(node: HtmlElement): boolean {\n\treturn node.is(\"slot\");\n}\n\nfunction loadSlotMeta(context: ProcessElementContext, slotname: string, node: HtmlElement): void {\n\tconst parent = node.parent;\n\tif (!parent) {\n\t\treturn;\n\t}\n\n\t/* Generate a new virtual tagname to load meta element from */\n\tconst getMetaFor = (tagName: string): MetaElement | null => {\n\t\tconst meta = context.getMetaFor(tagName);\n\t\treturn meta && meta.tagName !== \"*\" ? meta : null;\n\t};\n\tconst key = `${parent.tagName}#${slotname}`;\n\tconst fallbackKey = `${parent.tagName}:${slotname}`;\n\tconst meta = getMetaFor(key) ?? getMetaFor(fallbackKey);\n\tif (!meta) {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* add an annotation so error messages will be more understandable */\n\tnode.setAnnotation(`slot \"${slotname}\" (<${parent.tagName}>)`);\n}\n\n/**\n * Handle <component> or a component with a slot wrapped in it.\n */\nfunction loadComponentMeta(\n\tcontext: ProcessElementContext,\n\tnode: HtmlElement,\n\tcomponent: string,\n): void {\n\tlet src: HtmlElement = node;\n\n\t/* if this is a slot with wrapped in a <component> we fetch attributes from\n\t * the parent element, i.e. the actual component */\n\tif (node.tagName === \"template\" && src.parent) {\n\t\tsrc = src.parent;\n\t}\n\n\t/* try to fetch the attribute containing the element to use */\n\tconst attr = src.getAttribute(component);\n\tif (!attr || attr.isDynamic) {\n\t\treturn;\n\t}\n\n\t/* use the attribute value to lookup new metadata based on the tagname */\n\tconst tagName = attr.value as string;\n\tconst meta = context.getMetaFor(tagName);\n\tif (!meta || meta.tagName === \"*\") {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* update or add new annotation so error messages will be more descriptive */\n\tif (node.isSameNode(src)) {\n\t\tnode.setAnnotation(`<${meta.tagName}> (<${node.tagName}>)`);\n\t} else {\n\t\tconst name = node.annotatedName.replace(\"(<\", `(<${meta.tagName}> via <`);\n\t\tnode.setAnnotation(name);\n\t}\n}\n\nexport function processElement(this: ProcessElementContext, node: HtmlElement): void {\n\tconst slot = findSlotAttribute(node);\n\n\t/* If this element is a slot we load new metadata properties onto the element\n\t * to support adding properties directly to slots, e.g. to allow/disallow\n\t * content in the slot. */\n\tif (slot) {\n\t\tconst [slotname] = slot;\n\t\tloadSlotMeta(this, slotname, node);\n\t}\n\n\t/* handle usage of <component>, either directly or inside a component */\n\tif (node.meta?.component) {\n\t\tloadComponentMeta(this, node, node.meta.component);\n\t}\n\n\t/* Since html-validate v9.5.4 `<template>` tags are generally ignored when\n\t * checking descendants but since v9.6.1 the checks are enabled if this flag\n\t * is disabled. This is a needed both for `<template #slot>` and when using\n\t * `<template>` inside a Vue SFC where the element is transparent instead of\n\t * acting as a `HTMLTemplateElement`. */\n\tif (node.is(\"template\") && node.meta) {\n\t\tnode.meta.templateRoot = false;\n\t}\n\n\t/* Mark as having dynamic text if the element either content bound via v-html\n\t * or if it is a slot. This is needed for rules with requires textual content,\n\t * e.g a heading cannot be empty. */\n\tif (isBound(node) || isSlot(node)) {\n\t\tnode.appendText(new DynamicValue(\"\"), node.location);\n\t}\n}\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Transform a regular HTML file. In practice this only applies hooks without\n * any extraction.\n */\nexport function* transformHTML(source: Source): Iterable<Source> {\n\tyield {\n\t\t...source,\n\t\thooks: {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t},\n\t};\n}\n\ntransformHTML.api = 1;\n", "import { TemplateExtractor } from \"@html-validate/plugin-utils\";\nimport { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Match template property in `Vue.component` call\n */\nexport function transformJS(source: Source): Iterable<Source> {\n\tconst te = TemplateExtractor.fromString(source.data, source.filename);\n\treturn Array.from(te.extractObjectProperty(\"template\"), (cur) => {\n\t\tcur.originalData = source.originalData ?? source.data;\n\t\tcur.hooks = {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t};\n\t\treturn cur;\n\t});\n}\n\ntransformJS.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\nimport { stripTemplating } from \"../utils\";\n\nfunction findLocation(source: string, index: number, preamble: number): [number, number] {\n\tlet line = 1;\n\tlet prev = 0;\n\tlet pos = source.indexOf(\"\\n\");\n\twhile (pos !== -1) {\n\t\tif (pos > index) {\n\t\t\treturn [line, index - prev + preamble + 1];\n\t\t}\n\t\tline++;\n\t\tprev = pos;\n\t\tpos = source.indexOf(\"\\n\", pos + 1);\n\t}\n\treturn [line, 1];\n}\n\nfunction computeIndent(text: string): string {\n\tconst lines = text.split(\"\\n\");\n\tconst initial = null as string | null;\n\tconst common = lines.reduce((common, line) => {\n\t\tconst match = /^(\\s*)\\S/.exec(line);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if match matches [1] will exist */\n\t\t\tconst indent = match[1]!;\n\t\t\treturn common === null || indent.length < common.length ? indent : common;\n\t\t} else {\n\t\t\treturn common;\n\t\t}\n\t}, initial);\n\treturn common ?? \"\";\n}\n\n/**\n * Match templates from SFC <template> tag\n */\nexport function* transformSFC(source: Source): Iterable<Source> {\n\tconst indent = computeIndent(source.data);\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- will only contain whitespace */\n\tconst sfc = new RegExp(`^${indent}(<template([^>]*)>)([^]*?)^${indent}(</template>)`, \"gm\");\n\tlet match: RegExpExecArray | null;\n\twhile ((match = sfc.exec(source.data)) !== null) {\n\t\tconst attr = match[2] ?? \"\";\n\t\tconst data = `${match[1]!}${match[3]!}${match[4]!}`; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- groups exists when regex matches\n\t\tif (!/lang=\".*?\"/.test(attr)) {\n\t\t\tconst [line, column] = findLocation(source.data, match.index, 0);\n\t\t\tyield {\n\t\t\t\tdata: stripTemplating(data),\n\t\t\t\tfilename: source.filename,\n\t\t\t\tline: line + (source.line - 1),\n\t\t\t\tcolumn: column + (source.column - 1),\n\t\t\t\toffset: match.index + source.offset,\n\t\t\t\toriginalData: source.originalData ?? source.data,\n\t\t\t\thooks: {\n\t\t\t\t\tprocessAttribute,\n\t\t\t\t\tprocessElement,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n}\n\ntransformSFC.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\n/**\n * Returns true if the source is considered a SFC component\n */\nfunction isVue(source: Source): boolean {\n\treturn /\\.vue$/i.test(source.filename);\n}\n\n/**\n * Returns true if the source is considered javascript\n */\nfunction isJavascript(source: Source): boolean {\n\treturn /\\.(jsx?|tsx?)$/i.test(source.filename);\n}\n\nexport function* autodetect(source: Source): Iterable<Source> {\n\tif (isVue(source)) {\n\t\tyield* transformSFC(source);\n\t} else if (isJavascript(source)) {\n\t\tyield* transformJS(source);\n\t} else {\n\t\tyield* transformHTML(source);\n\t}\n}\n\nautodetect.api = 1;\n", "import { type Transformer } from \"html-validate\";\nimport { autodetect } from \"./auto.transform\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\nconst transformer: Record<string, Transformer> = {\n\tdefault: autodetect,\n\tauto: autodetect,\n\tjs: transformJS,\n\tsfc: transformSFC,\n\thtml: transformHTML,\n};\n\nexport default transformer;\n", "/* istanbul ignore file */\n\nimport plugin from \"./index\";\n\nexport = plugin;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_html_validate", "import_html_validate", "import_html_validate", "import_html_validate", "import_html_validate", "difference", "import_html_validate", "import_html_validate", "meta", "name", "common"]
|
|
3
|
+
"sources": ["../../src/index.ts", "../../package.json", "../../src/elements.ts", "../../src/configs/recommended.ts", "../../src/configs/index.ts", "../../src/rules/available-slots.ts", "../../src/utils/strip-templating.ts", "../../src/utils/slots.ts", "../../src/rules/deprecated-slot.ts", "../../src/rules/prefer-boolean-shorthand.ts", "../../src/rules/prefer-slot-shorthand.ts", "../../src/rules/required-slots.ts", "../../src/rules/index.ts", "../../src/schema.json", "../../src/hooks/attribute.ts", "../../src/hooks/element.ts", "../../src/transform/html.transform.ts", "../../src/transform/js.transform.ts", "../../src/transform/sfc.transform.ts", "../../src/transform/auto.transform.ts", "../../src/transform/index.ts", "../../src/entry-cjs.ts"],
|
|
4
|
+
"sourcesContent": ["import { type Plugin, compatibilityCheck } from \"html-validate\";\nimport { name, peerDependencies } from \"../package.json\";\nimport configs from \"./configs\";\nimport rules from \"./rules\";\nimport elementSchema from \"./schema.json\";\nimport transformer from \"./transform\";\n\nconst range = peerDependencies[\"html-validate\"];\ncompatibilityCheck(name, range);\n\nconst plugin: Plugin = {\n\tname,\n\tconfigs,\n\trules,\n\ttransformer,\n\telementSchema,\n};\n\nexport default plugin;\n", "{\n \"name\": \"html-validate-vue\",\n \"version\": \"9.2.0\",\n \"description\": \"vue transform for html-validate\",\n \"keywords\": [\n \"html\",\n \"lint\",\n \"html-validate\",\n \"vue\"\n ],\n \"homepage\": \"https://html-validate.org/frameworks/vue.html\",\n \"bugs\": {\n \"url\": \"https://gitlab.com/html-validate/html-validate-vue/issues/new\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://gitlab.com/html-validate/html-validate-vue.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"David Sveningsson <ext@sidvind.com>\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/esm/index.d.mts\",\n \"default\": \"./dist/esm/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/cjs/index.d.cts\",\n \"default\": \"./dist/cjs/index.cjs\"\n }\n }\n },\n \"main\": \"dist/cjs/index.cjs\",\n \"module\": \"dist/esm/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"prebuild\": \"tsc\",\n \"build\": \"run-s build:*\",\n \"build:lib\": \"node build.mjs\",\n \"build:cjs\": \"dts-bundle-generator --no-banner --project tsconfig.cjs.json -o dist/cjs/index.d.cts src/entry-cjs.ts\",\n \"build:esm\": \"dts-bundle-generator --no-banner --project tsconfig.esm.json -o dist/esm/index.d.mts src/entry-esm.ts\",\n \"eslint\": \"eslint --cache .\",\n \"eslint:fix\": \"eslint --cache --fix .\",\n \"prepack\": \"release-prepack package.json --bundle\",\n \"postpack\": \"release-postpack package.json\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"release-prepack package.json --bundle\",\n \"prettier:check\": \"prettier --check .\",\n \"prettier:write\": \"prettier --write .\",\n \"postpublish\": \"release-postpack package.json\",\n \"attw\": \"attw --no-emoji --pack .\",\n \"test\": \"jest\"\n },\n \"commitlint\": {\n \"extends\": \"@html-validate\"\n },\n \"prettier\": \"@html-validate/prettier-config\",\n \"release\": {\n \"extends\": \"@html-validate/semantic-release-config\"\n },\n \"jest\": {\n \"preset\": \"@html-validate/jest-config\"\n },\n \"dependencies\": {\n \"@html-validate/plugin-utils\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"4.0.1\",\n \"@html-validate/eslint-config\": \"9.2.0\",\n \"@html-validate/eslint-config-jest\": \"9.2.0\",\n \"@html-validate/eslint-config-typescript\": \"9.2.0\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"9.2.0\",\n \"@html-validate/jest-config\": \"3.18.0\",\n \"@html-validate/prettier-config\": \"4.0.1\",\n \"@html-validate/release-scripts\": \"7.2.3\",\n \"@jest/globals\": \"30.4.1\",\n \"@tsconfig/node22\": \"22.0.5\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.9\",\n \"@types/node\": \"22.19.19\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.28.0\",\n \"html-validate\": \"11.3.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.4.2\",\n \"jest-environment-jsdom\": \"30.4.1\",\n \"npm-pkg-lint\": \"5.1.1\",\n \"npm-run-all2\": \"9.0.1\",\n \"semver\": \"7.8.1\",\n \"ts-jest\": \"29.4.11\",\n \"typescript\": \"6.0.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0 || ^11.0.0\"\n },\n \"engines\": {\n \"node\": \"^22.16 || >= 24\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\t\"*\": {\n\t\tattributes: {\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#is */\n\t\t\tis: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#key */\n\t\t\tkey: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#ref */\n\t\t\tref: {},\n\n\t\t\t/* directives */\n\t\t\t\"v-*\": {},\n\n\t\t\t/* props */\n\t\t\t\":*\": {},\n\n\t\t\t/* event listeners */\n\t\t\t\"@*\": {},\n\t\t},\n\t},\n\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\tattributes: {\n\t\t\tis: {\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tinclude: {},\n\t\t\texclude: {},\n\t\t\tmax: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t},\n\t},\n\n\tportal: {\n\t\tdeprecated: {\n\t\t\tsource: \"vue\",\n\t\t\tmessage: \"the <portal> element has been renamed to <teleport>\",\n\t\t\tdocumentation: \"The `<portal>` element has been renamed to `<teleport>`\",\n\t\t},\n\t},\n\n\t\"router-link\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\t\"active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"aria-current-value\": {\n\t\t\t\tenum: [\"location\", \"time\", \"true\", \"false\", \"page\", \"step\", \"date\"],\n\t\t\t},\n\t\t\tcustom: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"exact-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\treplace: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\troute: {},\n\t\t},\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t\tattributes: {\n\t\t\tname: {},\n\t\t\t/* scoped slot can take arbitrary bindings */\n\t\t\t\"*\": {},\n\t\t},\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t\tattributes: {\n\t\t\ttimeout: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tsuspensible: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t},\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\tattributes: {\n\t\t\tdefer: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tdisabled: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n\n\ttemplate: {\n\t\tattributes: {\n\t\t\t\"#*\": {},\n\t\t},\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tmode: {\n\t\t\t\tenum: [\"in-out\", \"out-in\", \"default\"],\n\t\t\t},\n\t\t},\n\t},\n\n\t\"transition-group\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"tag\",\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"move-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttag: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n});\n", "import { type ConfigData } from \"html-validate\";\nimport vueElements from \"../elements\";\n\nexport function createConfig(): ConfigData {\n\tconst config: ConfigData = {\n\t\telements: [vueElements],\n\t\trules: {\n\t\t\t/* vue modifiers often use camelcase so allow by default */\n\t\t\t\"attr-case\": [\"error\", { style: \"camelcase\" }],\n\n\t\t\t/* self closing tags often used in vue code so allow by default*/\n\t\t\t\"void-style\": [\"error\", { style: \"selfclose\" }],\n\t\t\t\"no-self-closing\": \"off\",\n\n\t\t\t/* enable rules from this plugin */\n\t\t\t\"vue/available-slots\": \"error\",\n\t\t\t\"vue/prefer-boolean-shorthand\": \"error\",\n\t\t\t\"vue/prefer-slot-shorthand\": \"error\",\n\t\t\t\"vue/required-slots\": \"error\",\n\t\t},\n\t};\n\n\treturn config;\n}\n\nexport default createConfig();\n", "import recommended from \"./recommended\";\n\nexport default {\n\trecommended,\n};\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tslots?: string[];\n\t}\n\tinterface MetaElement {\n\t\tslots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tavailable: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class AvailableSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component does not have a slot named \"${context.slot}\". Only known slots can be specified.`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are available\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.available.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"Only known slots can be specified.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.slots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.slots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, slots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst available = new Set(slots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(used, available);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\tavailable: slots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component has no slot \"${missing}\"`,\n\t\t\t\tusedSlots.get(missing),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "/**\n * Strip anything inside `{{ .. }}` in case it contains anything that looks like\n * markup, i.e. it will be ignored\n */\nexport function stripTemplating(str: string): string {\n\t/* eslint-disable-next-line sonarjs/slow-regex -- technical debt, should refactor */\n\treturn str.replaceAll(/{{(.*?)}}/g, (_, m: string) => {\n\t\tconst filler = \" \".repeat(m.length);\n\t\treturn `{{${filler}}}`;\n\t});\n}\n", "import { type HtmlElement, type Location } from \"html-validate\";\n\nconst slotAttr = /(?:v-slot:|#)([^[]+)/;\n\nfunction haveSlot(value: [string, Location] | null): value is [string, Location] {\n\treturn value !== null;\n}\n\n/**\n * Search all children for slots and return both slot names and locations.\n */\nexport function findUsedSlots(node: HtmlElement): Map<string, Location> {\n\tconst template = node.querySelectorAll(\">template, >[slot]\");\n\tconst slots = template.map((child) => findSlotAttribute(child)).filter(haveSlot);\n\tconst initial = new Map<string, Location>();\n\treturn slots.reduce((result: Map<string, Location>, [key, val]) => {\n\t\tresult.set(key, val);\n\t\treturn result;\n\t}, initial);\n}\n\n/**\n * Find the name of the slot and its location used by an element. Searches\n * both v-slot:foo and slot=\"foo\".\n */\nexport function findSlotAttribute(node: HtmlElement): [string, Location] | null {\n\tfor (const attr of node.attributes) {\n\t\t/* find v-slot directive */\n\t\tconst match = slotAttr.exec(attr.key);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if slot matches [1] will exist */\n\t\t\tconst slot = match[1]!;\n\t\t\treturn [slot, attr.keyLocation];\n\t\t}\n\n\t\t/* find deprecated slot attribute */\n\t\tif (attr.key === \"slot\" && typeof attr.value === \"string\") {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- valueLocation will always be set the value is present */\n\t\t\treturn [attr.value, attr.valueLocation!];\n\t\t}\n\t}\n\treturn null;\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n}\n\n/** @internal */\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tinfo: string | null;\n}\n\nexport class DeprecatedSlot extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\tconst preamble = `The slot \\`${context.slot}\\` is deprecated and must not be used`;\n\t\t\treturn {\n\t\t\t\tdescription: context.info ? `${preamble}: ${context.info}.` : `${preamble}.`,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"This slot is deprecated and must not be used.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify deprecated slots */\n\t\t\t\tconst deprecatedSlots = node.meta?.deprecatedSlots;\n\t\t\t\tif (!deprecatedSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, deprecatedSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(\n\t\tnode: HtmlElement,\n\t\tdeprecatedSlots: Record<string, boolean | string>,\n\t): void {\n\t\tconst slots = findUsedSlots(node);\n\t\tfor (const [slot, location] of slots.entries()) {\n\t\t\tconst deprecated = deprecatedSlots[slot];\n\t\t\tif (!deprecated) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot,\n\t\t\t\tinfo: typeof deprecated === \"string\" ? deprecated : null,\n\t\t\t};\n\t\t\tconst preamble = `slot \"${slot}\" is deprecated`;\n\t\t\tconst message = typeof deprecated === \"string\" ? `${preamble}: ${deprecated}` : preamble;\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n}\n", "import { type AttributeEvent, type RuleDocumentation, DynamicValue, Rule } from \"html-validate\";\n\nexport interface RuleContext {\n\tprop: string;\n\toriginalAttribute: string;\n}\n\nexport class PreferBooleanShorthand extends Rule<RuleContext> {\n\tpublic override documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { prop, originalAttribute } = context;\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Use \\`${prop}\\` instead of \\`${originalAttribute}=\"true\"\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t`The \\`${prop}\\` prop is declared as a boolean. Vue.js allows omitting the value for boolean props, so \\`${prop}\\` is equivalent to \\`${originalAttribute}=\"true\"\\`.`,\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { key, value, meta, originalAttribute, target, location } = event;\n\n\t\t\t/* only handle synthesized attributes produced by the processAttribute hook,\n\t\t\t * i.e. the \"prop\" attribute generated from \":prop\" or \"v-bind:prop\" */\n\t\t\tif (!originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only report for boolean props */\n\t\t\tif (!meta?.boolean) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only report when the bound value is the literal `true` */\n\t\t\tif (!(value instanceof DynamicValue) || value.expr !== \"true\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst context: RuleContext = { prop: key, originalAttribute };\n\t\t\tconst message = `Use \"${key}\" instead of \"${originalAttribute}=\"true\"\"`;\n\t\t\tthis.report(target, message, location, context);\n\t\t});\n\t}\n}\n", "import { type AttributeEvent, type RuleDocumentation, DynamicValue, Rule } from \"html-validate\";\n\nexport interface RuleContext {\n\tslot: string;\n}\n\nconst prefix = \"v-slot:\";\n\nfunction isVSlot(attr: string): string | null {\n\tif (!attr.startsWith(prefix)) {\n\t\treturn null;\n\t}\n\tif (attr.length <= prefix.length) {\n\t\treturn null;\n\t}\n\tconst slot = attr.slice(prefix.length);\n\tif (/^\\[.*]$/.test(slot)) {\n\t\treturn null;\n\t}\n\treturn slot;\n}\n\nfunction isDeprecatedSlot(attr: string, value: null | string | DynamicValue): string | null {\n\tif (attr !== \"slot\") {\n\t\treturn null;\n\t}\n\tif (value instanceof DynamicValue) {\n\t\treturn null;\n\t}\n\tif (value === null || value === \"\") {\n\t\treturn null;\n\t}\n\treturn value;\n}\n\nexport class PreferSlotShorthand extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tconst slot = context?.slot ?? \"my-slot\";\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Prefer to use \\`#${slot}\\` over \\`v-slot:${slot}\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Vue.js supports a shorthand syntax for slots using `#` instead of `v-slot:` or the deprecated `slot` attribute, e.g. using `#header` instead of `v-slot:header`.\",\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { key: attr, value, target, keyLocation: location } = event;\n\n\t\t\tlet slot: string | null;\n\n\t\t\t/* handle v-slot:xyz */\n\t\t\tslot = isVSlot(attr);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\n\t\t\t/* handle slot=\"xyz\" */\n\t\t\tslot = isDeprecatedSlot(attr, value);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- value is checked by isDeprecatedSlot */\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}=\"${value!.toString()}\"`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\t\t});\n\t}\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\trequiredSlots?: string[];\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\trequired: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class RequiredSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component requires slot \"${context.slot}\" to be implemented. Add \\`<template v-slot:${context.slot}>\\``,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are required\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.required.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"All required slots must be implemented.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.requiredSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.requiredSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, requiredSlots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst required = new Set(requiredSlots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(required, used);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\trequired: requiredSlots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component requires slot \"${missing}\" to be implemented`,\n\t\t\t\tnull,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "import { AvailableSlots } from \"./available-slots\";\nimport { DeprecatedSlot } from \"./deprecated-slot\";\nimport { PreferBooleanShorthand } from \"./prefer-boolean-shorthand\";\nimport { PreferSlotShorthand } from \"./prefer-slot-shorthand\";\nimport { RequiredSlots } from \"./required-slots\";\n\nconst rules = {\n\t\"vue/available-slots\": AvailableSlots,\n\t\"vue/deprecated-slot\": DeprecatedSlot,\n\t\"vue/prefer-boolean-shorthand\": PreferBooleanShorthand,\n\t\"vue/prefer-slot-shorthand\": PreferSlotShorthand,\n\t\"vue/required-slots\": RequiredSlots,\n};\n\nexport default rules;\n", "{\n \"properties\": {\n \"component\": {\n \"type\": \"string\",\n \"copyable\": true\n },\n \"deprecatedSlots\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \".*\": {\n \"anyOf\": [{ \"type\": \"boolean\" }, { \"type\": \"string\" }]\n }\n }\n },\n \"requiredSlots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"slots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n}\n", "import { type AttributeData, DynamicValue } from \"html-validate\";\n\nexport function* processAttribute(attr: AttributeData): Iterable<AttributeData> {\n\t/* always yield original attribute */\n\tyield attr;\n\n\t/* setup :foo and v-bind:foo alias */\n\tconst bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);\n\tif (bind) {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if bind matches [1] will exist */\n\t\tconst key = bind[1]!;\n\t\tyield {\n\t\t\t...attr,\n\t\t\tkey,\n\t\t\tvalue: new DynamicValue(attr.value ? String(attr.value) : \"\"),\n\t\t\toriginalAttribute: attr.key,\n\t\t};\n\t}\n}\n", "import {\n\ttype HtmlElement,\n\ttype MetaElement,\n\ttype ProcessElementContext,\n\tDynamicValue,\n} from \"html-validate\";\nimport { findSlotAttribute } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\texport interface MetaData {\n\t\tcomponent?: string;\n\t}\n}\n\nfunction isBound(node: HtmlElement): boolean {\n\treturn node.hasAttribute(\"v-html\");\n}\n\nfunction isSlot(node: HtmlElement): boolean {\n\treturn node.is(\"slot\");\n}\n\nfunction loadSlotMeta(context: ProcessElementContext, slotname: string, node: HtmlElement): void {\n\tconst parent = node.parent;\n\tif (!parent) {\n\t\treturn;\n\t}\n\n\t/* Generate a new virtual tagname to load meta element from */\n\tconst getMetaFor = (tagName: string): MetaElement | null => {\n\t\tconst meta = context.getMetaFor(tagName);\n\t\treturn meta && meta.tagName !== \"*\" ? meta : null;\n\t};\n\tconst key = `${parent.tagName}#${slotname}`;\n\tconst fallbackKey = `${parent.tagName}:${slotname}`;\n\tconst meta = getMetaFor(key) ?? getMetaFor(fallbackKey);\n\tif (!meta) {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* add an annotation so error messages will be more understandable */\n\tnode.setAnnotation(`slot \"${slotname}\" (<${parent.tagName}>)`);\n}\n\n/**\n * Handle <component> or a component with a slot wrapped in it.\n */\nfunction loadComponentMeta(\n\tcontext: ProcessElementContext,\n\tnode: HtmlElement,\n\tcomponent: string,\n): void {\n\tlet src: HtmlElement = node;\n\n\t/* if this is a slot with wrapped in a <component> we fetch attributes from\n\t * the parent element, i.e. the actual component */\n\tif (node.tagName === \"template\" && src.parent) {\n\t\tsrc = src.parent;\n\t}\n\n\t/* try to fetch the attribute containing the element to use */\n\tconst attr = src.getAttribute(component);\n\tif (!attr || attr.isDynamic) {\n\t\treturn;\n\t}\n\n\t/* use the attribute value to lookup new metadata based on the tagname */\n\tconst tagName = attr.value as string;\n\tconst meta = context.getMetaFor(tagName);\n\tif (!meta || meta.tagName === \"*\") {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* update or add new annotation so error messages will be more descriptive */\n\tif (node.isSameNode(src)) {\n\t\tnode.setAnnotation(`<${meta.tagName}> (<${node.tagName}>)`);\n\t} else {\n\t\tconst name = node.annotatedName.replace(\"(<\", `(<${meta.tagName}> via <`);\n\t\tnode.setAnnotation(name);\n\t}\n}\n\nexport function processElement(this: ProcessElementContext, node: HtmlElement): void {\n\tconst slot = findSlotAttribute(node);\n\n\t/* If this element is a slot we load new metadata properties onto the element\n\t * to support adding properties directly to slots, e.g. to allow/disallow\n\t * content in the slot. */\n\tif (slot) {\n\t\tconst [slotname] = slot;\n\t\tloadSlotMeta(this, slotname, node);\n\t}\n\n\t/* handle usage of <component>, either directly or inside a component */\n\tif (node.meta?.component) {\n\t\tloadComponentMeta(this, node, node.meta.component);\n\t}\n\n\t/* Since html-validate v9.5.4 `<template>` tags are generally ignored when\n\t * checking descendants but since v9.6.1 the checks are enabled if this flag\n\t * is disabled. This is a needed both for `<template #slot>` and when using\n\t * `<template>` inside a Vue SFC where the element is transparent instead of\n\t * acting as a `HTMLTemplateElement`. */\n\tif (node.is(\"template\") && node.meta) {\n\t\tnode.meta.templateRoot = false;\n\t}\n\n\t/* Mark as having dynamic text if the element either content bound via v-html\n\t * or if it is a slot. This is needed for rules with requires textual content,\n\t * e.g a heading cannot be empty. */\n\tif (isBound(node) || isSlot(node)) {\n\t\tnode.appendText(new DynamicValue(\"\"), node.location);\n\t}\n}\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Transform a regular HTML file. In practice this only applies hooks without\n * any extraction.\n */\nexport function* transformHTML(source: Source): Iterable<Source> {\n\tyield {\n\t\t...source,\n\t\thooks: {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t},\n\t};\n}\n\ntransformHTML.api = 1;\n", "import { TemplateExtractor } from \"@html-validate/plugin-utils\";\nimport { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Match template property in `Vue.component` call\n */\nexport function transformJS(source: Source): Iterable<Source> {\n\tconst te = TemplateExtractor.fromString(source.data, source.filename);\n\treturn Array.from(te.extractObjectProperty(\"template\"), (cur) => {\n\t\tcur.originalData = source.originalData ?? source.data;\n\t\tcur.hooks = {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t};\n\t\treturn cur;\n\t});\n}\n\ntransformJS.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\nimport { stripTemplating } from \"../utils\";\n\nfunction findLocation(source: string, index: number, preamble: number): [number, number] {\n\tlet line = 1;\n\tlet prev = 0;\n\tlet pos = source.indexOf(\"\\n\");\n\twhile (pos !== -1) {\n\t\tif (pos > index) {\n\t\t\treturn [line, index - prev + preamble + 1];\n\t\t}\n\t\tline++;\n\t\tprev = pos;\n\t\tpos = source.indexOf(\"\\n\", pos + 1);\n\t}\n\treturn [line, 1];\n}\n\nfunction computeIndent(text: string): string {\n\tconst lines = text.split(\"\\n\");\n\tconst initial = null as string | null;\n\tconst common = lines.reduce((common, line) => {\n\t\tconst match = /^(\\s*)\\S/.exec(line);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if match matches [1] will exist */\n\t\t\tconst indent = match[1]!;\n\t\t\treturn common === null || indent.length < common.length ? indent : common;\n\t\t} else {\n\t\t\treturn common;\n\t\t}\n\t}, initial);\n\treturn common ?? \"\";\n}\n\n/**\n * Match templates from SFC <template> tag\n */\nexport function* transformSFC(source: Source): Iterable<Source> {\n\tconst indent = computeIndent(source.data);\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- will only contain whitespace */\n\tconst sfc = new RegExp(`^${indent}(<template([^>]*)>)([^]*?)^${indent}(</template>)`, \"gm\");\n\tlet match: RegExpExecArray | null;\n\twhile ((match = sfc.exec(source.data)) !== null) {\n\t\tconst attr = match[2] ?? \"\";\n\t\tconst data = `${match[1]!}${match[3]!}${match[4]!}`; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- groups exists when regex matches\n\t\tif (!/lang=\".*?\"/.test(attr)) {\n\t\t\tconst [line, column] = findLocation(source.data, match.index, 0);\n\t\t\tyield {\n\t\t\t\tdata: stripTemplating(data),\n\t\t\t\tfilename: source.filename,\n\t\t\t\tline: line + (source.line - 1),\n\t\t\t\tcolumn: column + (source.column - 1),\n\t\t\t\toffset: match.index + source.offset,\n\t\t\t\toriginalData: source.originalData ?? source.data,\n\t\t\t\thooks: {\n\t\t\t\t\tprocessAttribute,\n\t\t\t\t\tprocessElement,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n}\n\ntransformSFC.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\n/**\n * Returns true if the source is considered a SFC component\n */\nfunction isVue(source: Source): boolean {\n\treturn /\\.vue$/i.test(source.filename);\n}\n\n/**\n * Returns true if the source is considered javascript\n */\nfunction isJavascript(source: Source): boolean {\n\treturn /\\.(jsx?|tsx?)$/i.test(source.filename);\n}\n\nexport function* autodetect(source: Source): Iterable<Source> {\n\tif (isVue(source)) {\n\t\tyield* transformSFC(source);\n\t} else if (isJavascript(source)) {\n\t\tyield* transformJS(source);\n\t} else {\n\t\tyield* transformHTML(source);\n\t}\n}\n\nautodetect.api = 1;\n", "import { type Transformer } from \"html-validate\";\nimport { autodetect } from \"./auto.transform\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\nconst transformer: Record<string, Transformer> = {\n\tdefault: autodetect,\n\tauto: autodetect,\n\tjs: transformJS,\n\tsfc: transformSFC,\n\thtml: transformHTML,\n};\n\nexport default transformer;\n", "/* istanbul ignore file */\n\nimport plugin from \"./index\";\n\nexport = plugin;\n"],
|
|
5
|
+
"mappings": ";;;AAAA,IAAAA,wBAAgD;;;ACC9C,WAAQ;AA+FR,uBAAoB;AAAA,EAClB,iBAAiB;AACnB;;;AClGF,2BAA+B;AAE/B,IAAO,uBAAQ,qCAAe;AAAA,EAC7B,KAAK;AAAA,IACJ,YAAY;AAAA;AAAA,MAEX,IAAI,CAAC;AAAA;AAAA,MAGL,KAAK,CAAC;AAAA;AAAA,MAGN,KAAK,CAAC;AAAA;AAAA,MAGN,OAAO,CAAC;AAAA;AAAA,MAGR,MAAM,CAAC;AAAA;AAAA,MAGP,MAAM,CAAC;AAAA,IACR;AAAA,EACD;AAAA,EAEA,WAAW;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,MACX,IAAI;AAAA,QACH,UAAU;AAAA,MACX;AAAA,IACD;AAAA,EACD;AAAA,EAEA,cAAc;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,MACX,SAAS,CAAC;AAAA,MACV,SAAS,CAAC;AAAA,MACV,KAAK;AAAA,QACJ,MAAM,CAAC,OAAO;AAAA,MACf;AAAA,IACD;AAAA,EACD;AAAA,EAEA,QAAQ;AAAA,IACP,YAAY;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,eAAe;AAAA,IAChB;AAAA,EACD;AAAA,EAEA,eAAe;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,MACX,gBAAgB;AAAA,QACf,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACrB,MAAM,CAAC,YAAY,QAAQ,QAAQ,SAAS,QAAQ,QAAQ,MAAM;AAAA,MACnE;AAAA,MACA,QAAQ;AAAA,QACP,SAAS;AAAA,MACV;AAAA,MACA,sBAAsB;AAAA,QACrB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,SAAS;AAAA,QACR,SAAS;AAAA,MACV;AAAA,MACA,IAAI;AAAA,QACH,MAAM,CAAC,MAAM;AAAA,QACb,UAAU;AAAA,MACX;AAAA,IACD;AAAA,EACD;AAAA,EAEA,eAAe;AAAA,IACd,MAAM;AAAA,IACN,OAAO,CAAC,SAAS;AAAA,IACjB,YAAY;AAAA,MACX,MAAM;AAAA,QACL,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,OAAO,CAAC;AAAA,IACT;AAAA,EACD;AAAA,EAEA,MAAM;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,YAAY;AAAA,MACX,MAAM,CAAC;AAAA;AAAA,MAEP,KAAK,CAAC;AAAA,IACP;AAAA,EACD;AAAA,EAEA,UAAU;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,OAAO,CAAC,WAAW,UAAU;AAAA,IAC7B,YAAY;AAAA,MACX,SAAS;AAAA,QACR,MAAM,CAAC,OAAO;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACZ,SAAS;AAAA,MACV;AAAA,IACD;AAAA,EACD;AAAA,EAEA,UAAU;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,YAAY;AAAA,MACX,OAAO;AAAA,QACN,SAAS;AAAA,MACV;AAAA,MACA,UAAU;AAAA,QACT,SAAS;AAAA,MACV;AAAA,MACA,IAAI;AAAA,QACH,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAAA,EAEA,UAAU;AAAA,IACT,YAAY;AAAA,MACX,MAAM,CAAC;AAAA,IACR;AAAA,EACD;AAAA,EAEA,YAAY;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,MACX,MAAM;AAAA,QACL,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,oBAAoB;AAAA,QACnB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACrB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,kBAAkB;AAAA,QACjB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,oBAAoB;AAAA,QACnB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACrB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,kBAAkB;AAAA,QACjB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACL,MAAM,CAAC,cAAc,WAAW;AAAA,MACjC;AAAA,MACA,UAAU;AAAA,QACT,MAAM,CAAC,OAAO;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACJ,SAAS;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACP,SAAS;AAAA,MACV;AAAA,MACA,MAAM;AAAA,QACL,MAAM,CAAC,UAAU,UAAU,SAAS;AAAA,MACrC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,oBAAoB;AAAA,IACnB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,MACX,MAAM;AAAA,QACL,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,oBAAoB;AAAA,QACnB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACrB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,kBAAkB;AAAA,QACjB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,oBAAoB;AAAA,QACnB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACrB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,kBAAkB;AAAA,QACjB,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,MAAM;AAAA,QACL,MAAM,CAAC,cAAc,WAAW;AAAA,MACjC;AAAA,MACA,UAAU;AAAA,QACT,MAAM,CAAC,OAAO;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACJ,SAAS;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,QACP,SAAS;AAAA,MACV;AAAA,MACA,cAAc;AAAA,QACb,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,MACA,KAAK;AAAA,QACJ,MAAM,CAAC,MAAM;AAAA,MACd;AAAA,IACD;AAAA,EACD;AACD,CAAC;;;ACzOM,SAAS,eAA2B;AAC1C,QAAM,SAAqB;AAAA,IAC1B,UAAU,CAAC,gBAAW;AAAA,IACtB,OAAO;AAAA;AAAA,MAEN,aAAa,CAAC,SAAS,EAAE,OAAO,YAAY,CAAC;AAAA;AAAA,MAG7C,cAAc,CAAC,SAAS,EAAE,OAAO,YAAY,CAAC;AAAA,MAC9C,mBAAmB;AAAA;AAAA,MAGnB,uBAAuB;AAAA,MACvB,gCAAgC;AAAA,MAChC,6BAA6B;AAAA,MAC7B,sBAAsB;AAAA,IACvB;AAAA,EACD;AAEA,SAAO;AACR;AAEA,IAAO,sBAAQ,aAAa;;;ACvB5B,IAAO,kBAAQ;AAAA,EACd;AACD;;;ACJA,IAAAC,wBAMO;;;ACFA,SAAS,gBAAgB,KAAqB;AAEpD,SAAO,IAAI,WAAW,cAAc,CAAC,GAAG,MAAc;AACrD,UAAM,SAAS,IAAI,OAAO,EAAE,MAAM;AAClC,WAAO,KAAK,MAAM;AAAA,EACnB,CAAC;AACF;;;ACRA,IAAM,WAAW;AAEjB,SAAS,SAAS,OAA+D;AAChF,SAAO,UAAU;AAClB;AAKO,SAAS,cAAc,MAA0C;AACvE,QAAM,WAAW,KAAK,iBAAiB,oBAAoB;AAC3D,QAAM,QAAQ,SAAS,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC,EAAE,OAAO,QAAQ;AAC/E,QAAM,UAAU,oBAAI,IAAsB;AAC1C,SAAO,MAAM,OAAO,CAAC,QAA+B,CAAC,KAAK,GAAG,MAAM;AAClE,WAAO,IAAI,KAAK,GAAG;AACnB,WAAO;AAAA,EACR,GAAG,OAAO;AACX;AAMO,SAAS,kBAAkB,MAA8C;AAC/E,aAAW,QAAQ,KAAK,YAAY;AAEnC,UAAM,QAAQ,SAAS,KAAK,KAAK,GAAG;AACpC,QAAI,OAAO;AAEV,YAAM,OAAO,MAAM,CAAC;AACpB,aAAO,CAAC,MAAM,KAAK,WAAW;AAAA,IAC/B;AAGA,QAAI,KAAK,QAAQ,UAAU,OAAO,KAAK,UAAU,UAAU;AAE1D,aAAO,CAAC,KAAK,OAAO,KAAK,aAAc;AAAA,IACxC;AAAA,EACD;AACA,SAAO;AACR;;;AFlBA,SAAS,WAAc,GAAW,GAAmB;AACpD,QAAM,SAAS,IAAI,IAAI,CAAC;AACxB,aAAW,QAAQ,GAAG;AACrB,WAAO,OAAO,IAAI;AAAA,EACnB;AACA,SAAO;AACR;AAEO,IAAM,iBAAN,cAA6B,2BAAkB;AAAA,EACrC,cAAc,SAA0C;AACvE,QAAI,SAAS;AACZ,aAAO;AAAA,QACN,aAAa;AAAA,UACZ,QAAQ,QAAQ,OAAO,2CAA2C,QAAQ,IAAI;AAAA,UAC9E;AAAA,UACA;AAAA,QACD,EACE,OAAO,QAAQ,UAAU,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC,EACnD,KAAK,IAAI;AAAA,MACZ;AAAA,IACD,OAAO;AACN,aAAO;AAAA,QACN,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAAA,EAEO,QAAc;AACpB,SAAK,GAAG,aAAa,CAAC,UAAyB;AAC9C,YAAM,MAAM,MAAM;AAClB,iCAAK,WAAW,KAAK,CAAC,SAAsB;AAE3C,cAAM,OAAO,KAAK;AAClB,YAAI,CAAC,MAAM,OAAO;AACjB;AAAA,QACD;AAEA,aAAK,cAAc,MAAM,KAAK,KAAK;AAAA,MACpC,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEQ,cAAc,MAAmB,OAAuB;AAC/D,UAAM,YAAY,cAAc,IAAI;AACpC,UAAM,YAAY,IAAI,IAAI,KAAK;AAC/B,UAAM,OAAO,IAAI,IAAI,UAAU,KAAK,CAAC;AACrC,UAAM,OAAO,WAAW,MAAM,SAAS;AAEvC,eAAW,WAAW,MAAM;AAC3B,YAAM,UAAuB;AAAA,QAC5B,SAAS,KAAK;AAAA,QACd,MAAM;AAAA,QACN,WAAW;AAAA,MACZ;AACA,WAAK;AAAA,QACJ;AAAA,QACA,IAAI,KAAK,OAAO,4BAA4B,OAAO;AAAA,QACnD,UAAU,IAAI,OAAO;AAAA,QACrB;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;;;AGtFA,IAAAC,wBAMO;AAoBA,IAAM,iBAAN,cAA6B,2BAAkB;AAAA,EACrC,cAAc,SAA0C;AACvE,QAAI,SAAS;AACZ,YAAM,WAAW,cAAc,QAAQ,IAAI;AAC3C,aAAO;AAAA,QACN,aAAa,QAAQ,OAAO,GAAG,QAAQ,KAAK,QAAQ,IAAI,MAAM,GAAG,QAAQ;AAAA,MAC1E;AAAA,IACD,OAAO;AACN,aAAO;AAAA,QACN,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAAA,EAEO,QAAc;AACpB,SAAK,GAAG,aAAa,CAAC,UAAyB;AAC9C,YAAM,MAAM,MAAM;AAClB,iCAAK,WAAW,KAAK,CAAC,SAAsB;AAE3C,cAAM,kBAAkB,KAAK,MAAM;AACnC,YAAI,CAAC,iBAAiB;AACrB;AAAA,QACD;AAEA,aAAK,cAAc,MAAM,eAAe;AAAA,MACzC,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEQ,cACP,MACA,iBACO;AACP,UAAM,QAAQ,cAAc,IAAI;AAChC,eAAW,CAAC,MAAM,QAAQ,KAAK,MAAM,QAAQ,GAAG;AAC/C,YAAM,aAAa,gBAAgB,IAAI;AACvC,UAAI,CAAC,YAAY;AAChB;AAAA,MACD;AACA,YAAM,UAAuB;AAAA,QAC5B,SAAS,KAAK;AAAA,QACd;AAAA,QACA,MAAM,OAAO,eAAe,WAAW,aAAa;AAAA,MACrD;AACA,YAAM,WAAW,SAAS,IAAI;AAC9B,YAAM,UAAU,OAAO,eAAe,WAAW,GAAG,QAAQ,KAAK,UAAU,KAAK;AAChF,WAAK,OAAO;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AACD;;;AChFA,IAAAC,wBAAgF;AAOzE,IAAM,yBAAN,cAAqC,2BAAkB;AAAA,EAC7C,cAAc,SAAyC;AACtE,UAAM,EAAE,MAAM,kBAAkB,IAAI;AACpC,WAAO;AAAA,MACN,aAAa;AAAA,QACZ,SAAS,IAAI,mBAAmB,iBAAiB;AAAA,QACjD;AAAA,QACA,SAAS,IAAI,8FAA8F,IAAI,yBAAyB,iBAAiB;AAAA,MAC1J,EAAE,KAAK,IAAI;AAAA,IACZ;AAAA,EACD;AAAA,EAEO,QAAc;AACpB,SAAK,GAAG,QAAQ,CAAC,UAA0B;AAC1C,YAAM,EAAE,KAAK,OAAO,MAAM,mBAAmB,QAAQ,SAAS,IAAI;AAIlE,UAAI,CAAC,mBAAmB;AACvB;AAAA,MACD;AAGA,UAAI,CAAC,MAAM,SAAS;AACnB;AAAA,MACD;AAGA,UAAI,EAAE,iBAAiB,uCAAiB,MAAM,SAAS,QAAQ;AAC9D;AAAA,MACD;AAEA,YAAM,UAAuB,EAAE,MAAM,KAAK,kBAAkB;AAC5D,YAAM,UAAU,QAAQ,GAAG,iBAAiB,iBAAiB;AAC7D,WAAK,OAAO,QAAQ,SAAS,UAAU,OAAO;AAAA,IAC/C,CAAC;AAAA,EACF;AACD;;;AC5CA,IAAAC,wBAAgF;AAMhF,IAAM,SAAS;AAEf,SAAS,QAAQ,MAA6B;AAC7C,MAAI,CAAC,KAAK,WAAW,MAAM,GAAG;AAC7B,WAAO;AAAA,EACR;AACA,MAAI,KAAK,UAAU,OAAO,QAAQ;AACjC,WAAO;AAAA,EACR;AACA,QAAM,OAAO,KAAK,MAAM,OAAO,MAAM;AACrC,MAAI,UAAU,KAAK,IAAI,GAAG;AACzB,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAEA,SAAS,iBAAiB,MAAc,OAAoD;AAC3F,MAAI,SAAS,QAAQ;AACpB,WAAO;AAAA,EACR;AACA,MAAI,iBAAiB,oCAAc;AAClC,WAAO;AAAA,EACR;AACA,MAAI,UAAU,QAAQ,UAAU,IAAI;AACnC,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAEO,IAAM,sBAAN,cAAkC,2BAAkB;AAAA,EAC1C,cAAc,SAA0C;AACvE,UAAM,OAAO,SAAS,QAAQ;AAC9B,WAAO;AAAA,MACN,aAAa;AAAA,QACZ,oBAAoB,IAAI,oBAAoB,IAAI;AAAA,QAChD;AAAA,QACA;AAAA,MACD,EAAE,KAAK,IAAI;AAAA,IACZ;AAAA,EACD;AAAA,EAEO,QAAc;AACpB,SAAK,GAAG,QAAQ,CAAC,UAA0B;AAC1C,YAAM,EAAE,KAAK,MAAM,OAAO,QAAQ,aAAa,SAAS,IAAI;AAE5D,UAAI;AAGJ,aAAO,QAAQ,IAAI;AACnB,UAAI,MAAM;AACT,cAAM,UAAuB,EAAE,KAAK;AACpC,cAAM,UAAU,kBAAkB,IAAI,SAAS,IAAI;AACnD,aAAK,OAAO,QAAQ,SAAS,UAAU,OAAO;AAAA,MAC/C;AAGA,aAAO,iBAAiB,MAAM,KAAK;AACnC,UAAI,MAAM;AACT,cAAM,UAAuB,EAAE,KAAK;AAEpC,cAAM,UAAU,kBAAkB,IAAI,SAAS,IAAI,KAAK,MAAO,SAAS,CAAC;AACzE,aAAK,OAAO,QAAQ,SAAS,UAAU,OAAO;AAAA,MAC/C;AAAA,IACD,CAAC;AAAA,EACF;AACD;;;ACvEA,IAAAC,wBAMO;AAkBP,SAASC,YAAc,GAAW,GAAmB;AACpD,QAAM,SAAS,IAAI,IAAI,CAAC;AACxB,aAAW,QAAQ,GAAG;AACrB,WAAO,OAAO,IAAI;AAAA,EACnB;AACA,SAAO;AACR;AAEO,IAAM,gBAAN,cAA4B,2BAAkB;AAAA,EACpC,cAAc,SAA0C;AACvE,QAAI,SAAS;AACZ,aAAO;AAAA,QACN,aAAa;AAAA,UACZ,QAAQ,QAAQ,OAAO,8BAA8B,QAAQ,IAAI,+CAA+C,QAAQ,IAAI;AAAA,UAC5H;AAAA,UACA;AAAA,QACD,EACE,OAAO,QAAQ,SAAS,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC,EAClD,KAAK,IAAI;AAAA,MACZ;AAAA,IACD,OAAO;AACN,aAAO;AAAA,QACN,aAAa;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAAA,EAEO,QAAc;AACpB,SAAK,GAAG,aAAa,CAAC,UAAyB;AAC9C,YAAM,MAAM,MAAM;AAClB,iCAAK,WAAW,KAAK,CAAC,SAAsB;AAE3C,cAAM,OAAO,KAAK;AAClB,YAAI,CAAC,MAAM,eAAe;AACzB;AAAA,QACD;AAEA,aAAK,cAAc,MAAM,KAAK,aAAa;AAAA,MAC5C,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEQ,cAAc,MAAmB,eAA+B;AACvE,UAAM,YAAY,cAAc,IAAI;AACpC,UAAM,WAAW,IAAI,IAAI,aAAa;AACtC,UAAM,OAAO,IAAI,IAAI,UAAU,KAAK,CAAC;AACrC,UAAM,OAAOA,YAAW,UAAU,IAAI;AAEtC,eAAW,WAAW,MAAM;AAC3B,YAAM,UAAuB;AAAA,QAC5B,SAAS,KAAK;AAAA,QACd,MAAM;AAAA,QACN,UAAU;AAAA,MACX;AACA,WAAK;AAAA,QACJ;AAAA,QACA,IAAI,KAAK,OAAO,8BAA8B,OAAO;AAAA,QACrD;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;;;AChFA,IAAM,QAAQ;AAAA,EACb,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,gCAAgC;AAAA,EAChC,6BAA6B;AAAA,EAC7B,sBAAsB;AACvB;AAEA,IAAO,gBAAQ;;;ACdf;AAAA,EACE,YAAc;AAAA,IACZ,WAAa;AAAA,MACX,MAAQ;AAAA,MACR,UAAY;AAAA,IACd;AAAA,IACA,iBAAmB;AAAA,MACjB,MAAQ;AAAA,MACR,mBAAqB;AAAA,QACnB,MAAM;AAAA,UACJ,OAAS,CAAC,EAAE,MAAQ,UAAU,GAAG,EAAE,MAAQ,SAAS,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,IACA,eAAiB;AAAA,MACf,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,OAAS;AAAA,MACP,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;;;AC3BA,IAAAC,wBAAiD;AAE1C,UAAU,iBAAiB,MAA8C;AAE/E,QAAM;AAGN,QAAM,OAAO,qBAAqB,KAAK,KAAK,GAAG;AAC/C,MAAI,MAAM;AAET,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,OAAO,IAAI,mCAAa,KAAK,QAAQ,OAAO,KAAK,KAAK,IAAI,EAAE;AAAA,MAC5D,mBAAmB,KAAK;AAAA,IACzB;AAAA,EACD;AACD;;;AClBA,IAAAC,wBAKO;AASP,SAAS,QAAQ,MAA4B;AAC5C,SAAO,KAAK,aAAa,QAAQ;AAClC;AAEA,SAAS,OAAO,MAA4B;AAC3C,SAAO,KAAK,GAAG,MAAM;AACtB;AAEA,SAAS,aAAa,SAAgC,UAAkB,MAAyB;AAChG,QAAM,SAAS,KAAK;AACpB,MAAI,CAAC,QAAQ;AACZ;AAAA,EACD;AAGA,QAAM,aAAa,CAAC,YAAwC;AAC3D,UAAMC,QAAO,QAAQ,WAAW,OAAO;AACvC,WAAOA,SAAQA,MAAK,YAAY,MAAMA,QAAO;AAAA,EAC9C;AACA,QAAM,MAAM,GAAG,OAAO,OAAO,IAAI,QAAQ;AACzC,QAAM,cAAc,GAAG,OAAO,OAAO,IAAI,QAAQ;AACjD,QAAM,OAAO,WAAW,GAAG,KAAK,WAAW,WAAW;AACtD,MAAI,CAAC,MAAM;AACV;AAAA,EACD;AAEA,OAAK,SAAS,IAAI;AAGlB,OAAK,cAAc,SAAS,QAAQ,OAAO,OAAO,OAAO,IAAI;AAC9D;AAKA,SAAS,kBACR,SACA,MACA,WACO;AACP,MAAI,MAAmB;AAIvB,MAAI,KAAK,YAAY,cAAc,IAAI,QAAQ;AAC9C,UAAM,IAAI;AAAA,EACX;AAGA,QAAM,OAAO,IAAI,aAAa,SAAS;AACvC,MAAI,CAAC,QAAQ,KAAK,WAAW;AAC5B;AAAA,EACD;AAGA,QAAM,UAAU,KAAK;AACrB,QAAM,OAAO,QAAQ,WAAW,OAAO;AACvC,MAAI,CAAC,QAAQ,KAAK,YAAY,KAAK;AAClC;AAAA,EACD;AAEA,OAAK,SAAS,IAAI;AAGlB,MAAI,KAAK,WAAW,GAAG,GAAG;AACzB,SAAK,cAAc,IAAI,KAAK,OAAO,OAAO,KAAK,OAAO,IAAI;AAAA,EAC3D,OAAO;AACN,UAAMC,QAAO,KAAK,cAAc,QAAQ,MAAM,KAAK,KAAK,OAAO,SAAS;AACxE,SAAK,cAAcA,KAAI;AAAA,EACxB;AACD;AAEO,SAAS,eAA4C,MAAyB;AACpF,QAAM,OAAO,kBAAkB,IAAI;AAKnC,MAAI,MAAM;AACT,UAAM,CAAC,QAAQ,IAAI;AACnB,iBAAa,MAAM,UAAU,IAAI;AAAA,EAClC;AAGA,MAAI,KAAK,MAAM,WAAW;AACzB,sBAAkB,MAAM,MAAM,KAAK,KAAK,SAAS;AAAA,EAClD;AAOA,MAAI,KAAK,GAAG,UAAU,KAAK,KAAK,MAAM;AACrC,SAAK,KAAK,eAAe;AAAA,EAC1B;AAKA,MAAI,QAAQ,IAAI,KAAK,OAAO,IAAI,GAAG;AAClC,SAAK,WAAW,IAAI,mCAAa,EAAE,GAAG,KAAK,QAAQ;AAAA,EACpD;AACD;;;AC9GO,UAAU,cAAc,QAAkC;AAChE,QAAM;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;AAEA,cAAc,MAAM;;;ACjBpB,0BAAkC;AAO3B,SAAS,YAAY,QAAkC;AAC7D,QAAM,KAAK,sCAAkB,WAAW,OAAO,MAAM,OAAO,QAAQ;AACpE,SAAO,MAAM,KAAK,GAAG,sBAAsB,UAAU,GAAG,CAAC,QAAQ;AAChE,QAAI,eAAe,OAAO,gBAAgB,OAAO;AACjD,QAAI,QAAQ;AAAA,MACX;AAAA,MACA;AAAA,IACD;AACA,WAAO;AAAA,EACR,CAAC;AACF;AAEA,YAAY,MAAM;;;ACflB,SAAS,aAAa,QAAgB,OAAe,UAAoC;AACxF,MAAI,OAAO;AACX,MAAI,OAAO;AACX,MAAI,MAAM,OAAO,QAAQ,IAAI;AAC7B,SAAO,QAAQ,IAAI;AAClB,QAAI,MAAM,OAAO;AAChB,aAAO,CAAC,MAAM,QAAQ,OAAO,WAAW,CAAC;AAAA,IAC1C;AACA;AACA,WAAO;AACP,UAAM,OAAO,QAAQ,MAAM,MAAM,CAAC;AAAA,EACnC;AACA,SAAO,CAAC,MAAM,CAAC;AAChB;AAEA,SAAS,cAAc,MAAsB;AAC5C,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,UAAU;AAChB,QAAM,SAAS,MAAM,OAAO,CAACC,SAAQ,SAAS;AAC7C,UAAM,QAAQ,WAAW,KAAK,IAAI;AAClC,QAAI,OAAO;AAEV,YAAM,SAAS,MAAM,CAAC;AACtB,aAAOA,YAAW,QAAQ,OAAO,SAASA,QAAO,SAAS,SAASA;AAAA,IACpE,OAAO;AACN,aAAOA;AAAA,IACR;AAAA,EACD,GAAG,OAAO;AACV,SAAO,UAAU;AAClB;AAKO,UAAU,aAAa,QAAkC;AAC/D,QAAM,SAAS,cAAc,OAAO,IAAI;AAExC,QAAM,MAAM,IAAI,OAAO,IAAI,MAAM,8BAA8B,MAAM,iBAAiB,IAAI;AAC1F,MAAI;AACJ,UAAQ,QAAQ,IAAI,KAAK,OAAO,IAAI,OAAO,MAAM;AAChD,UAAM,OAAO,MAAM,CAAC,KAAK;AACzB,UAAM,OAAO,GAAG,MAAM,CAAC,CAAE,GAAG,MAAM,CAAC,CAAE,GAAG,MAAM,CAAC,CAAE;AACjD,QAAI,CAAC,aAAa,KAAK,IAAI,GAAG;AAC7B,YAAM,CAAC,MAAM,MAAM,IAAI,aAAa,OAAO,MAAM,MAAM,OAAO,CAAC;AAC/D,YAAM;AAAA,QACL,MAAM,gBAAgB,IAAI;AAAA,QAC1B,UAAU,OAAO;AAAA,QACjB,MAAM,QAAQ,OAAO,OAAO;AAAA,QAC5B,QAAQ,UAAU,OAAO,SAAS;AAAA,QAClC,QAAQ,MAAM,QAAQ,OAAO;AAAA,QAC7B,cAAc,OAAO,gBAAgB,OAAO;AAAA,QAC5C,OAAO;AAAA,UACN;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEA,aAAa,MAAM;;;ACxDnB,SAAS,MAAM,QAAyB;AACvC,SAAO,UAAU,KAAK,OAAO,QAAQ;AACtC;AAKA,SAAS,aAAa,QAAyB;AAC9C,SAAO,kBAAkB,KAAK,OAAO,QAAQ;AAC9C;AAEO,UAAU,WAAW,QAAkC;AAC7D,MAAI,MAAM,MAAM,GAAG;AAClB,WAAO,aAAa,MAAM;AAAA,EAC3B,WAAW,aAAa,MAAM,GAAG;AAChC,WAAO,YAAY,MAAM;AAAA,EAC1B,OAAO;AACN,WAAO,cAAc,MAAM;AAAA,EAC5B;AACD;AAEA,WAAW,MAAM;;;ACvBjB,IAAM,cAA2C;AAAA,EAChD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,MAAM;AACP;AAEA,IAAO,oBAAQ;;;ApBPf,IAAM,QAAQ,iBAAiB,eAAe;AAAA,IAC9C,0CAAmB,MAAM,KAAK;AAE9B,IAAM,SAAiB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,IAAO,cAAQ;;;AqBdf,iBAAS;",
|
|
6
|
+
"names": ["import_html_validate", "import_html_validate", "import_html_validate", "import_html_validate", "import_html_validate", "import_html_validate", "difference", "import_html_validate", "import_html_validate", "meta", "name", "common"]
|
|
7
7
|
}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -241,6 +241,7 @@ function createConfig() {
|
|
|
241
241
|
"no-self-closing": "off",
|
|
242
242
|
/* enable rules from this plugin */
|
|
243
243
|
"vue/available-slots": "error",
|
|
244
|
+
"vue/prefer-boolean-shorthand": "error",
|
|
244
245
|
"vue/prefer-slot-shorthand": "error",
|
|
245
246
|
"vue/required-slots": "error"
|
|
246
247
|
}
|
|
@@ -407,8 +408,40 @@ var DeprecatedSlot = class extends Rule2 {
|
|
|
407
408
|
}
|
|
408
409
|
};
|
|
409
410
|
|
|
410
|
-
// src/rules/prefer-
|
|
411
|
+
// src/rules/prefer-boolean-shorthand.ts
|
|
411
412
|
import { DynamicValue, Rule as Rule3 } from "html-validate";
|
|
413
|
+
var PreferBooleanShorthand = class extends Rule3 {
|
|
414
|
+
documentation(context) {
|
|
415
|
+
const { prop, originalAttribute } = context;
|
|
416
|
+
return {
|
|
417
|
+
description: [
|
|
418
|
+
`Use \`${prop}\` instead of \`${originalAttribute}="true"\`.`,
|
|
419
|
+
"",
|
|
420
|
+
`The \`${prop}\` prop is declared as a boolean. Vue.js allows omitting the value for boolean props, so \`${prop}\` is equivalent to \`${originalAttribute}="true"\`.`
|
|
421
|
+
].join("\n")
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
setup() {
|
|
425
|
+
this.on("attr", (event) => {
|
|
426
|
+
const { key, value, meta, originalAttribute, target, location } = event;
|
|
427
|
+
if (!originalAttribute) {
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
if (!meta?.boolean) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
if (!(value instanceof DynamicValue) || value.expr !== "true") {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
const context = { prop: key, originalAttribute };
|
|
437
|
+
const message = `Use "${key}" instead of "${originalAttribute}="true""`;
|
|
438
|
+
this.report(target, message, location, context);
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
// src/rules/prefer-slot-shorthand.ts
|
|
444
|
+
import { DynamicValue as DynamicValue2, Rule as Rule4 } from "html-validate";
|
|
412
445
|
var prefix = "v-slot:";
|
|
413
446
|
function isVSlot(attr) {
|
|
414
447
|
if (!attr.startsWith(prefix)) {
|
|
@@ -427,7 +460,7 @@ function isDeprecatedSlot(attr, value) {
|
|
|
427
460
|
if (attr !== "slot") {
|
|
428
461
|
return null;
|
|
429
462
|
}
|
|
430
|
-
if (value instanceof
|
|
463
|
+
if (value instanceof DynamicValue2) {
|
|
431
464
|
return null;
|
|
432
465
|
}
|
|
433
466
|
if (value === null || value === "") {
|
|
@@ -435,7 +468,7 @@ function isDeprecatedSlot(attr, value) {
|
|
|
435
468
|
}
|
|
436
469
|
return value;
|
|
437
470
|
}
|
|
438
|
-
var PreferSlotShorthand = class extends
|
|
471
|
+
var PreferSlotShorthand = class extends Rule4 {
|
|
439
472
|
documentation(context) {
|
|
440
473
|
const slot = context?.slot ?? "my-slot";
|
|
441
474
|
return {
|
|
@@ -468,7 +501,7 @@ var PreferSlotShorthand = class extends Rule3 {
|
|
|
468
501
|
|
|
469
502
|
// src/rules/required-slots.ts
|
|
470
503
|
import {
|
|
471
|
-
Rule as
|
|
504
|
+
Rule as Rule5,
|
|
472
505
|
walk as walk3
|
|
473
506
|
} from "html-validate";
|
|
474
507
|
function difference2(a, b) {
|
|
@@ -478,7 +511,7 @@ function difference2(a, b) {
|
|
|
478
511
|
}
|
|
479
512
|
return result;
|
|
480
513
|
}
|
|
481
|
-
var RequiredSlots = class extends
|
|
514
|
+
var RequiredSlots = class extends Rule5 {
|
|
482
515
|
documentation(context) {
|
|
483
516
|
if (context) {
|
|
484
517
|
return {
|
|
@@ -531,6 +564,7 @@ var RequiredSlots = class extends Rule4 {
|
|
|
531
564
|
var rules = {
|
|
532
565
|
"vue/available-slots": AvailableSlots,
|
|
533
566
|
"vue/deprecated-slot": DeprecatedSlot,
|
|
567
|
+
"vue/prefer-boolean-shorthand": PreferBooleanShorthand,
|
|
534
568
|
"vue/prefer-slot-shorthand": PreferSlotShorthand,
|
|
535
569
|
"vue/required-slots": RequiredSlots
|
|
536
570
|
};
|
|
@@ -567,7 +601,7 @@ var schema_default = {
|
|
|
567
601
|
};
|
|
568
602
|
|
|
569
603
|
// src/hooks/attribute.ts
|
|
570
|
-
import { DynamicValue as
|
|
604
|
+
import { DynamicValue as DynamicValue3 } from "html-validate";
|
|
571
605
|
function* processAttribute(attr) {
|
|
572
606
|
yield attr;
|
|
573
607
|
const bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);
|
|
@@ -576,7 +610,7 @@ function* processAttribute(attr) {
|
|
|
576
610
|
yield {
|
|
577
611
|
...attr,
|
|
578
612
|
key,
|
|
579
|
-
value: new
|
|
613
|
+
value: new DynamicValue3(attr.value ? String(attr.value) : ""),
|
|
580
614
|
originalAttribute: attr.key
|
|
581
615
|
};
|
|
582
616
|
}
|
|
@@ -584,7 +618,7 @@ function* processAttribute(attr) {
|
|
|
584
618
|
|
|
585
619
|
// src/hooks/element.ts
|
|
586
620
|
import {
|
|
587
|
-
DynamicValue as
|
|
621
|
+
DynamicValue as DynamicValue4
|
|
588
622
|
} from "html-validate";
|
|
589
623
|
function isBound(node) {
|
|
590
624
|
return node.hasAttribute("v-html");
|
|
@@ -645,7 +679,7 @@ function processElement(node) {
|
|
|
645
679
|
node.meta.templateRoot = false;
|
|
646
680
|
}
|
|
647
681
|
if (isBound(node) || isSlot(node)) {
|
|
648
|
-
node.appendText(new
|
|
682
|
+
node.appendText(new DynamicValue4(""), node.location);
|
|
649
683
|
}
|
|
650
684
|
}
|
|
651
685
|
|
package/dist/esm/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/index.ts", "../../package.json", "../../src/elements.ts", "../../src/configs/recommended.ts", "../../src/configs/index.ts", "../../src/rules/available-slots.ts", "../../src/utils/strip-templating.ts", "../../src/utils/slots.ts", "../../src/rules/deprecated-slot.ts", "../../src/rules/prefer-slot-shorthand.ts", "../../src/rules/required-slots.ts", "../../src/rules/index.ts", "../../src/schema.json", "../../src/hooks/attribute.ts", "../../src/hooks/element.ts", "../../src/transform/html.transform.ts", "../../src/transform/js.transform.ts", "../../src/transform/sfc.transform.ts", "../../src/transform/auto.transform.ts", "../../src/transform/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Plugin, compatibilityCheck } from \"html-validate\";\nimport { name, peerDependencies } from \"../package.json\";\nimport configs from \"./configs\";\nimport rules from \"./rules\";\nimport elementSchema from \"./schema.json\";\nimport transformer from \"./transform\";\n\nconst range = peerDependencies[\"html-validate\"];\ncompatibilityCheck(name, range);\n\nconst plugin: Plugin = {\n\tname,\n\tconfigs,\n\trules,\n\ttransformer,\n\telementSchema,\n};\n\nexport default plugin;\n", "{\n \"name\": \"html-validate-vue\",\n \"version\": \"9.1.0\",\n \"description\": \"vue transform for html-validate\",\n \"keywords\": [\n \"html\",\n \"lint\",\n \"html-validate\",\n \"vue\"\n ],\n \"homepage\": \"https://html-validate.org/frameworks/vue.html\",\n \"bugs\": {\n \"url\": \"https://gitlab.com/html-validate/html-validate-vue/issues/new\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://gitlab.com/html-validate/html-validate-vue.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"David Sveningsson <ext@sidvind.com>\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/esm/index.d.mts\",\n \"default\": \"./dist/esm/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/cjs/index.d.cts\",\n \"default\": \"./dist/cjs/index.cjs\"\n }\n }\n },\n \"main\": \"dist/cjs/index.cjs\",\n \"module\": \"dist/esm/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"prebuild\": \"tsc\",\n \"build\": \"run-s build:*\",\n \"build:lib\": \"node build.mjs\",\n \"build:cjs\": \"dts-bundle-generator --no-banner --project tsconfig.cjs.json -o dist/cjs/index.d.cts src/entry-cjs.ts\",\n \"build:esm\": \"dts-bundle-generator --no-banner --project tsconfig.esm.json -o dist/esm/index.d.mts src/entry-esm.ts\",\n \"eslint\": \"eslint --cache .\",\n \"eslint:fix\": \"eslint --cache --fix .\",\n \"prepack\": \"release-prepack package.json --bundle\",\n \"postpack\": \"release-postpack package.json\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"release-prepack package.json --bundle\",\n \"prettier:check\": \"prettier --check .\",\n \"prettier:write\": \"prettier --write .\",\n \"postpublish\": \"release-postpack package.json\",\n \"attw\": \"attw --no-emoji --pack .\",\n \"test\": \"jest\"\n },\n \"commitlint\": {\n \"extends\": \"@html-validate\"\n },\n \"prettier\": \"@html-validate/prettier-config\",\n \"release\": {\n \"extends\": \"@html-validate/semantic-release-config\"\n },\n \"jest\": {\n \"preset\": \"@html-validate/jest-config\"\n },\n \"dependencies\": {\n \"@html-validate/plugin-utils\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"4.0.1\",\n \"@html-validate/eslint-config\": \"9.1.2\",\n \"@html-validate/eslint-config-jest\": \"9.1.1\",\n \"@html-validate/eslint-config-typescript\": \"9.1.3\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"9.1.3\",\n \"@html-validate/jest-config\": \"3.18.0\",\n \"@html-validate/prettier-config\": \"4.0.1\",\n \"@html-validate/release-scripts\": \"7.2.3\",\n \"@jest/globals\": \"30.4.1\",\n \"@tsconfig/node22\": \"22.0.5\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.9\",\n \"@types/node\": \"22.19.19\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.28.0\",\n \"html-validate\": \"11.3.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.4.2\",\n \"jest-environment-jsdom\": \"30.4.1\",\n \"npm-pkg-lint\": \"5.1.1\",\n \"npm-run-all2\": \"9.0.1\",\n \"semver\": \"7.8.1\",\n \"ts-jest\": \"29.4.11\",\n \"typescript\": \"6.0.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0 || ^11.0.0\"\n },\n \"engines\": {\n \"node\": \"^22.16 || >= 24\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\t\"*\": {\n\t\tattributes: {\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#is */\n\t\t\tis: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#key */\n\t\t\tkey: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#ref */\n\t\t\tref: {},\n\n\t\t\t/* directives */\n\t\t\t\"v-*\": {},\n\n\t\t\t/* props */\n\t\t\t\":*\": {},\n\n\t\t\t/* event listeners */\n\t\t\t\"@*\": {},\n\t\t},\n\t},\n\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\tattributes: {\n\t\t\tis: {\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tinclude: {},\n\t\t\texclude: {},\n\t\t\tmax: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t},\n\t},\n\n\tportal: {\n\t\tdeprecated: {\n\t\t\tsource: \"vue\",\n\t\t\tmessage: \"the <portal> element has been renamed to <teleport>\",\n\t\t\tdocumentation: \"The `<portal>` element has been renamed to `<teleport>`\",\n\t\t},\n\t},\n\n\t\"router-link\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\t\"active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"aria-current-value\": {\n\t\t\t\tenum: [\"location\", \"time\", \"true\", \"false\", \"page\", \"step\", \"date\"],\n\t\t\t},\n\t\t\tcustom: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"exact-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\treplace: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\troute: {},\n\t\t},\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t\tattributes: {\n\t\t\tname: {},\n\t\t\t/* scoped slot can take arbitrary bindings */\n\t\t\t\"*\": {},\n\t\t},\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t\tattributes: {\n\t\t\ttimeout: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tsuspensible: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t},\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\tattributes: {\n\t\t\tdefer: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tdisabled: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n\n\ttemplate: {\n\t\tattributes: {\n\t\t\t\"#*\": {},\n\t\t},\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tmode: {\n\t\t\t\tenum: [\"in-out\", \"out-in\", \"default\"],\n\t\t\t},\n\t\t},\n\t},\n\n\t\"transition-group\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"tag\",\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"move-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttag: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n});\n", "import { type ConfigData } from \"html-validate\";\nimport vueElements from \"../elements\";\n\nexport function createConfig(): ConfigData {\n\tconst config: ConfigData = {\n\t\telements: [vueElements],\n\t\trules: {\n\t\t\t/* vue modifiers often use camelcase so allow by default */\n\t\t\t\"attr-case\": [\"error\", { style: \"camelcase\" }],\n\n\t\t\t/* self closing tags often used in vue code so allow by default*/\n\t\t\t\"void-style\": [\"error\", { style: \"selfclose\" }],\n\t\t\t\"no-self-closing\": \"off\",\n\n\t\t\t/* enable rules from this plugin */\n\t\t\t\"vue/available-slots\": \"error\",\n\t\t\t\"vue/prefer-slot-shorthand\": \"error\",\n\t\t\t\"vue/required-slots\": \"error\",\n\t\t},\n\t};\n\n\treturn config;\n}\n\nexport default createConfig();\n", "import recommended from \"./recommended\";\n\nexport default {\n\trecommended,\n};\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tslots?: string[];\n\t}\n\tinterface MetaElement {\n\t\tslots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tavailable: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class AvailableSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component does not have a slot named \"${context.slot}\". Only known slots can be specified.`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are available\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.available.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"Only known slots can be specified.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.slots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.slots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, slots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst available = new Set(slots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(used, available);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\tavailable: slots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component has no slot \"${missing}\"`,\n\t\t\t\tusedSlots.get(missing),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "/**\n * Strip anything inside `{{ .. }}` in case it contains anything that looks like\n * markup, i.e. it will be ignored\n */\nexport function stripTemplating(str: string): string {\n\t/* eslint-disable-next-line sonarjs/slow-regex -- technical debt, should refactor */\n\treturn str.replaceAll(/{{(.*?)}}/g, (_, m: string) => {\n\t\tconst filler = \" \".repeat(m.length);\n\t\treturn `{{${filler}}}`;\n\t});\n}\n", "import { type HtmlElement, type Location } from \"html-validate\";\n\nconst slotAttr = /(?:v-slot:|#)([^[]+)/;\n\nfunction haveSlot(value: [string, Location] | null): value is [string, Location] {\n\treturn value !== null;\n}\n\n/**\n * Search all children for slots and return both slot names and locations.\n */\nexport function findUsedSlots(node: HtmlElement): Map<string, Location> {\n\tconst template = node.querySelectorAll(\">template, >[slot]\");\n\tconst slots = template.map((child) => findSlotAttribute(child)).filter(haveSlot);\n\tconst initial = new Map<string, Location>();\n\treturn slots.reduce((result: Map<string, Location>, [key, val]) => {\n\t\tresult.set(key, val);\n\t\treturn result;\n\t}, initial);\n}\n\n/**\n * Find the name of the slot and its location used by an element. Searches\n * both v-slot:foo and slot=\"foo\".\n */\nexport function findSlotAttribute(node: HtmlElement): [string, Location] | null {\n\tfor (const attr of node.attributes) {\n\t\t/* find v-slot directive */\n\t\tconst match = slotAttr.exec(attr.key);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if slot matches [1] will exist */\n\t\t\tconst slot = match[1]!;\n\t\t\treturn [slot, attr.keyLocation];\n\t\t}\n\n\t\t/* find deprecated slot attribute */\n\t\tif (attr.key === \"slot\" && typeof attr.value === \"string\") {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- valueLocation will always be set the value is present */\n\t\t\treturn [attr.value, attr.valueLocation!];\n\t\t}\n\t}\n\treturn null;\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n}\n\n/** @internal */\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tinfo: string | null;\n}\n\nexport class DeprecatedSlot extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\tconst preamble = `The slot \\`${context.slot}\\` is deprecated and must not be used`;\n\t\t\treturn {\n\t\t\t\tdescription: context.info ? `${preamble}: ${context.info}.` : `${preamble}.`,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"This slot is deprecated and must not be used.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify deprecated slots */\n\t\t\t\tconst deprecatedSlots = node.meta?.deprecatedSlots;\n\t\t\t\tif (!deprecatedSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, deprecatedSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(\n\t\tnode: HtmlElement,\n\t\tdeprecatedSlots: Record<string, boolean | string>,\n\t): void {\n\t\tconst slots = findUsedSlots(node);\n\t\tfor (const [slot, location] of slots.entries()) {\n\t\t\tconst deprecated = deprecatedSlots[slot];\n\t\t\tif (!deprecated) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot,\n\t\t\t\tinfo: typeof deprecated === \"string\" ? deprecated : null,\n\t\t\t};\n\t\t\tconst preamble = `slot \"${slot}\" is deprecated`;\n\t\t\tconst message = typeof deprecated === \"string\" ? `${preamble}: ${deprecated}` : preamble;\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n}\n", "import { type AttributeEvent, type RuleDocumentation, DynamicValue, Rule } from \"html-validate\";\n\nexport interface RuleContext {\n\tslot: string;\n}\n\nconst prefix = \"v-slot:\";\n\nfunction isVSlot(attr: string): string | null {\n\tif (!attr.startsWith(prefix)) {\n\t\treturn null;\n\t}\n\tif (attr.length <= prefix.length) {\n\t\treturn null;\n\t}\n\tconst slot = attr.slice(prefix.length);\n\tif (/^\\[.*]$/.test(slot)) {\n\t\treturn null;\n\t}\n\treturn slot;\n}\n\nfunction isDeprecatedSlot(attr: string, value: null | string | DynamicValue): string | null {\n\tif (attr !== \"slot\") {\n\t\treturn null;\n\t}\n\tif (value instanceof DynamicValue) {\n\t\treturn null;\n\t}\n\tif (value === null || value === \"\") {\n\t\treturn null;\n\t}\n\treturn value;\n}\n\nexport class PreferSlotShorthand extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tconst slot = context?.slot ?? \"my-slot\";\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Prefer to use \\`#${slot}\\` over \\`v-slot:${slot}\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Vue.js supports a shorthand syntax for slots using `#` instead of `v-slot:` or the deprecated `slot` attribute, e.g. using `#header` instead of `v-slot:header`.\",\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { key: attr, value, target, keyLocation: location } = event;\n\n\t\t\tlet slot: string | null;\n\n\t\t\t/* handle v-slot:xyz */\n\t\t\tslot = isVSlot(attr);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\n\t\t\t/* handle slot=\"xyz\" */\n\t\t\tslot = isDeprecatedSlot(attr, value);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- value is checked by isDeprecatedSlot */\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}=\"${value!.toString()}\"`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\t\t});\n\t}\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\trequiredSlots?: string[];\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\trequired: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class RequiredSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component requires slot \"${context.slot}\" to be implemented. Add \\`<template v-slot:${context.slot}>\\``,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are required\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.required.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"All required slots must be implemented.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.requiredSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.requiredSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, requiredSlots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst required = new Set(requiredSlots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(required, used);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\trequired: requiredSlots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component requires slot \"${missing}\" to be implemented`,\n\t\t\t\tnull,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "import { AvailableSlots } from \"./available-slots\";\nimport { DeprecatedSlot } from \"./deprecated-slot\";\nimport { PreferSlotShorthand } from \"./prefer-slot-shorthand\";\nimport { RequiredSlots } from \"./required-slots\";\n\nconst rules = {\n\t\"vue/available-slots\": AvailableSlots,\n\t\"vue/deprecated-slot\": DeprecatedSlot,\n\t\"vue/prefer-slot-shorthand\": PreferSlotShorthand,\n\t\"vue/required-slots\": RequiredSlots,\n};\n\nexport default rules;\n", "{\n \"properties\": {\n \"component\": {\n \"type\": \"string\",\n \"copyable\": true\n },\n \"deprecatedSlots\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \".*\": {\n \"anyOf\": [{ \"type\": \"boolean\" }, { \"type\": \"string\" }]\n }\n }\n },\n \"requiredSlots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"slots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n}\n", "import { type AttributeData, DynamicValue } from \"html-validate\";\n\nexport function* processAttribute(attr: AttributeData): Iterable<AttributeData> {\n\t/* always yield original attribute */\n\tyield attr;\n\n\t/* setup :foo and v-bind:foo alias */\n\tconst bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);\n\tif (bind) {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if bind matches [1] will exist */\n\t\tconst key = bind[1]!;\n\t\tyield {\n\t\t\t...attr,\n\t\t\tkey,\n\t\t\tvalue: new DynamicValue(attr.value ? String(attr.value) : \"\"),\n\t\t\toriginalAttribute: attr.key,\n\t\t};\n\t}\n}\n", "import {\n\ttype HtmlElement,\n\ttype MetaElement,\n\ttype ProcessElementContext,\n\tDynamicValue,\n} from \"html-validate\";\nimport { findSlotAttribute } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\texport interface MetaData {\n\t\tcomponent?: string;\n\t}\n}\n\nfunction isBound(node: HtmlElement): boolean {\n\treturn node.hasAttribute(\"v-html\");\n}\n\nfunction isSlot(node: HtmlElement): boolean {\n\treturn node.is(\"slot\");\n}\n\nfunction loadSlotMeta(context: ProcessElementContext, slotname: string, node: HtmlElement): void {\n\tconst parent = node.parent;\n\tif (!parent) {\n\t\treturn;\n\t}\n\n\t/* Generate a new virtual tagname to load meta element from */\n\tconst getMetaFor = (tagName: string): MetaElement | null => {\n\t\tconst meta = context.getMetaFor(tagName);\n\t\treturn meta && meta.tagName !== \"*\" ? meta : null;\n\t};\n\tconst key = `${parent.tagName}#${slotname}`;\n\tconst fallbackKey = `${parent.tagName}:${slotname}`;\n\tconst meta = getMetaFor(key) ?? getMetaFor(fallbackKey);\n\tif (!meta) {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* add an annotation so error messages will be more understandable */\n\tnode.setAnnotation(`slot \"${slotname}\" (<${parent.tagName}>)`);\n}\n\n/**\n * Handle <component> or a component with a slot wrapped in it.\n */\nfunction loadComponentMeta(\n\tcontext: ProcessElementContext,\n\tnode: HtmlElement,\n\tcomponent: string,\n): void {\n\tlet src: HtmlElement = node;\n\n\t/* if this is a slot with wrapped in a <component> we fetch attributes from\n\t * the parent element, i.e. the actual component */\n\tif (node.tagName === \"template\" && src.parent) {\n\t\tsrc = src.parent;\n\t}\n\n\t/* try to fetch the attribute containing the element to use */\n\tconst attr = src.getAttribute(component);\n\tif (!attr || attr.isDynamic) {\n\t\treturn;\n\t}\n\n\t/* use the attribute value to lookup new metadata based on the tagname */\n\tconst tagName = attr.value as string;\n\tconst meta = context.getMetaFor(tagName);\n\tif (!meta || meta.tagName === \"*\") {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* update or add new annotation so error messages will be more descriptive */\n\tif (node.isSameNode(src)) {\n\t\tnode.setAnnotation(`<${meta.tagName}> (<${node.tagName}>)`);\n\t} else {\n\t\tconst name = node.annotatedName.replace(\"(<\", `(<${meta.tagName}> via <`);\n\t\tnode.setAnnotation(name);\n\t}\n}\n\nexport function processElement(this: ProcessElementContext, node: HtmlElement): void {\n\tconst slot = findSlotAttribute(node);\n\n\t/* If this element is a slot we load new metadata properties onto the element\n\t * to support adding properties directly to slots, e.g. to allow/disallow\n\t * content in the slot. */\n\tif (slot) {\n\t\tconst [slotname] = slot;\n\t\tloadSlotMeta(this, slotname, node);\n\t}\n\n\t/* handle usage of <component>, either directly or inside a component */\n\tif (node.meta?.component) {\n\t\tloadComponentMeta(this, node, node.meta.component);\n\t}\n\n\t/* Since html-validate v9.5.4 `<template>` tags are generally ignored when\n\t * checking descendants but since v9.6.1 the checks are enabled if this flag\n\t * is disabled. This is a needed both for `<template #slot>` and when using\n\t * `<template>` inside a Vue SFC where the element is transparent instead of\n\t * acting as a `HTMLTemplateElement`. */\n\tif (node.is(\"template\") && node.meta) {\n\t\tnode.meta.templateRoot = false;\n\t}\n\n\t/* Mark as having dynamic text if the element either content bound via v-html\n\t * or if it is a slot. This is needed for rules with requires textual content,\n\t * e.g a heading cannot be empty. */\n\tif (isBound(node) || isSlot(node)) {\n\t\tnode.appendText(new DynamicValue(\"\"), node.location);\n\t}\n}\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Transform a regular HTML file. In practice this only applies hooks without\n * any extraction.\n */\nexport function* transformHTML(source: Source): Iterable<Source> {\n\tyield {\n\t\t...source,\n\t\thooks: {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t},\n\t};\n}\n\ntransformHTML.api = 1;\n", "import { TemplateExtractor } from \"@html-validate/plugin-utils\";\nimport { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Match template property in `Vue.component` call\n */\nexport function transformJS(source: Source): Iterable<Source> {\n\tconst te = TemplateExtractor.fromString(source.data, source.filename);\n\treturn Array.from(te.extractObjectProperty(\"template\"), (cur) => {\n\t\tcur.originalData = source.originalData ?? source.data;\n\t\tcur.hooks = {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t};\n\t\treturn cur;\n\t});\n}\n\ntransformJS.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\nimport { stripTemplating } from \"../utils\";\n\nfunction findLocation(source: string, index: number, preamble: number): [number, number] {\n\tlet line = 1;\n\tlet prev = 0;\n\tlet pos = source.indexOf(\"\\n\");\n\twhile (pos !== -1) {\n\t\tif (pos > index) {\n\t\t\treturn [line, index - prev + preamble + 1];\n\t\t}\n\t\tline++;\n\t\tprev = pos;\n\t\tpos = source.indexOf(\"\\n\", pos + 1);\n\t}\n\treturn [line, 1];\n}\n\nfunction computeIndent(text: string): string {\n\tconst lines = text.split(\"\\n\");\n\tconst initial = null as string | null;\n\tconst common = lines.reduce((common, line) => {\n\t\tconst match = /^(\\s*)\\S/.exec(line);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if match matches [1] will exist */\n\t\t\tconst indent = match[1]!;\n\t\t\treturn common === null || indent.length < common.length ? indent : common;\n\t\t} else {\n\t\t\treturn common;\n\t\t}\n\t}, initial);\n\treturn common ?? \"\";\n}\n\n/**\n * Match templates from SFC <template> tag\n */\nexport function* transformSFC(source: Source): Iterable<Source> {\n\tconst indent = computeIndent(source.data);\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- will only contain whitespace */\n\tconst sfc = new RegExp(`^${indent}(<template([^>]*)>)([^]*?)^${indent}(</template>)`, \"gm\");\n\tlet match: RegExpExecArray | null;\n\twhile ((match = sfc.exec(source.data)) !== null) {\n\t\tconst attr = match[2] ?? \"\";\n\t\tconst data = `${match[1]!}${match[3]!}${match[4]!}`; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- groups exists when regex matches\n\t\tif (!/lang=\".*?\"/.test(attr)) {\n\t\t\tconst [line, column] = findLocation(source.data, match.index, 0);\n\t\t\tyield {\n\t\t\t\tdata: stripTemplating(data),\n\t\t\t\tfilename: source.filename,\n\t\t\t\tline: line + (source.line - 1),\n\t\t\t\tcolumn: column + (source.column - 1),\n\t\t\t\toffset: match.index + source.offset,\n\t\t\t\toriginalData: source.originalData ?? source.data,\n\t\t\t\thooks: {\n\t\t\t\t\tprocessAttribute,\n\t\t\t\t\tprocessElement,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n}\n\ntransformSFC.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\n/**\n * Returns true if the source is considered a SFC component\n */\nfunction isVue(source: Source): boolean {\n\treturn /\\.vue$/i.test(source.filename);\n}\n\n/**\n * Returns true if the source is considered javascript\n */\nfunction isJavascript(source: Source): boolean {\n\treturn /\\.(jsx?|tsx?)$/i.test(source.filename);\n}\n\nexport function* autodetect(source: Source): Iterable<Source> {\n\tif (isVue(source)) {\n\t\tyield* transformSFC(source);\n\t} else if (isJavascript(source)) {\n\t\tyield* transformJS(source);\n\t} else {\n\t\tyield* transformHTML(source);\n\t}\n}\n\nautodetect.api = 1;\n", "import { type Transformer } from \"html-validate\";\nimport { autodetect } from \"./auto.transform\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\nconst transformer: Record<string, Transformer> = {\n\tdefault: autodetect,\n\tauto: autodetect,\n\tjs: transformJS,\n\tsfc: transformSFC,\n\thtml: transformHTML,\n};\n\nexport default transformer;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Rule", "walk", "Rule", "walk", "Rule", "Rule", "walk", "difference", "Rule", "walk", "DynamicValue", "DynamicValue", "meta", "name", "DynamicValue", "common"]
|
|
3
|
+
"sources": ["../../src/index.ts", "../../package.json", "../../src/elements.ts", "../../src/configs/recommended.ts", "../../src/configs/index.ts", "../../src/rules/available-slots.ts", "../../src/utils/strip-templating.ts", "../../src/utils/slots.ts", "../../src/rules/deprecated-slot.ts", "../../src/rules/prefer-boolean-shorthand.ts", "../../src/rules/prefer-slot-shorthand.ts", "../../src/rules/required-slots.ts", "../../src/rules/index.ts", "../../src/schema.json", "../../src/hooks/attribute.ts", "../../src/hooks/element.ts", "../../src/transform/html.transform.ts", "../../src/transform/js.transform.ts", "../../src/transform/sfc.transform.ts", "../../src/transform/auto.transform.ts", "../../src/transform/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { type Plugin, compatibilityCheck } from \"html-validate\";\nimport { name, peerDependencies } from \"../package.json\";\nimport configs from \"./configs\";\nimport rules from \"./rules\";\nimport elementSchema from \"./schema.json\";\nimport transformer from \"./transform\";\n\nconst range = peerDependencies[\"html-validate\"];\ncompatibilityCheck(name, range);\n\nconst plugin: Plugin = {\n\tname,\n\tconfigs,\n\trules,\n\ttransformer,\n\telementSchema,\n};\n\nexport default plugin;\n", "{\n \"name\": \"html-validate-vue\",\n \"version\": \"9.2.0\",\n \"description\": \"vue transform for html-validate\",\n \"keywords\": [\n \"html\",\n \"lint\",\n \"html-validate\",\n \"vue\"\n ],\n \"homepage\": \"https://html-validate.org/frameworks/vue.html\",\n \"bugs\": {\n \"url\": \"https://gitlab.com/html-validate/html-validate-vue/issues/new\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://gitlab.com/html-validate/html-validate-vue.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"David Sveningsson <ext@sidvind.com>\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/esm/index.d.mts\",\n \"default\": \"./dist/esm/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/cjs/index.d.cts\",\n \"default\": \"./dist/cjs/index.cjs\"\n }\n }\n },\n \"main\": \"dist/cjs/index.cjs\",\n \"module\": \"dist/esm/index.mjs\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"prebuild\": \"tsc\",\n \"build\": \"run-s build:*\",\n \"build:lib\": \"node build.mjs\",\n \"build:cjs\": \"dts-bundle-generator --no-banner --project tsconfig.cjs.json -o dist/cjs/index.d.cts src/entry-cjs.ts\",\n \"build:esm\": \"dts-bundle-generator --no-banner --project tsconfig.esm.json -o dist/esm/index.d.mts src/entry-esm.ts\",\n \"eslint\": \"eslint --cache .\",\n \"eslint:fix\": \"eslint --cache --fix .\",\n \"prepack\": \"release-prepack package.json --bundle\",\n \"postpack\": \"release-postpack package.json\",\n \"prepare\": \"husky\",\n \"prepublishOnly\": \"release-prepack package.json --bundle\",\n \"prettier:check\": \"prettier --check .\",\n \"prettier:write\": \"prettier --write .\",\n \"postpublish\": \"release-postpack package.json\",\n \"attw\": \"attw --no-emoji --pack .\",\n \"test\": \"jest\"\n },\n \"commitlint\": {\n \"extends\": \"@html-validate\"\n },\n \"prettier\": \"@html-validate/prettier-config\",\n \"release\": {\n \"extends\": \"@html-validate/semantic-release-config\"\n },\n \"jest\": {\n \"preset\": \"@html-validate/jest-config\"\n },\n \"dependencies\": {\n \"@html-validate/plugin-utils\": \"^4.0.0\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"0.18.2\",\n \"@html-validate/commitlint-config\": \"4.0.1\",\n \"@html-validate/eslint-config\": \"9.2.0\",\n \"@html-validate/eslint-config-jest\": \"9.2.0\",\n \"@html-validate/eslint-config-typescript\": \"9.2.0\",\n \"@html-validate/eslint-config-typescript-typeinfo\": \"9.2.0\",\n \"@html-validate/jest-config\": \"3.18.0\",\n \"@html-validate/prettier-config\": \"4.0.1\",\n \"@html-validate/release-scripts\": \"7.2.3\",\n \"@jest/globals\": \"30.4.1\",\n \"@tsconfig/node22\": \"22.0.5\",\n \"@tsconfig/strictest\": \"2.0.8\",\n \"@types/estree\": \"1.0.9\",\n \"@types/node\": \"22.19.19\",\n \"@types/semver\": \"7.7.1\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"esbuild\": \"0.28.0\",\n \"html-validate\": \"11.3.0\",\n \"husky\": \"9.1.7\",\n \"jest\": \"30.4.2\",\n \"jest-environment-jsdom\": \"30.4.1\",\n \"npm-pkg-lint\": \"5.1.1\",\n \"npm-run-all2\": \"9.0.1\",\n \"semver\": \"7.8.1\",\n \"ts-jest\": \"29.4.11\",\n \"typescript\": \"6.0.3\"\n },\n \"peerDependencies\": {\n \"html-validate\": \"^8.21.0 || ^9.0.0 || ^10.0.0 || ^11.0.0\"\n },\n \"engines\": {\n \"node\": \"^22.16 || >= 24\"\n },\n \"externalDependencies\": [\n \"@html-validate/plugin-utils\"\n ]\n}\n", "import { defineMetadata } from \"html-validate\";\n\nexport default defineMetadata({\n\t\"*\": {\n\t\tattributes: {\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#is */\n\t\t\tis: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#key */\n\t\t\tkey: {},\n\n\t\t\t/* https://vuejs.org/api/built-in-special-attributes.html#ref */\n\t\t\tref: {},\n\n\t\t\t/* directives */\n\t\t\t\"v-*\": {},\n\n\t\t\t/* props */\n\t\t\t\":*\": {},\n\n\t\t\t/* event listeners */\n\t\t\t\"@*\": {},\n\t\t},\n\t},\n\n\tcomponent: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"is\",\n\t\tattributes: {\n\t\t\tis: {\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"keep-alive\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tinclude: {},\n\t\t\texclude: {},\n\t\t\tmax: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t},\n\t},\n\n\tportal: {\n\t\tdeprecated: {\n\t\t\tsource: \"vue\",\n\t\t\tmessage: \"the <portal> element has been renamed to <teleport>\",\n\t\t\tdocumentation: \"The `<portal>` element has been renamed to `<teleport>`\",\n\t\t},\n\t},\n\n\t\"router-link\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\t\"active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"aria-current-value\": {\n\t\t\t\tenum: [\"location\", \"time\", \"true\", \"false\", \"page\", \"step\", \"date\"],\n\t\t\t},\n\t\t\tcustom: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"exact-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\treplace: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t\trequired: true,\n\t\t\t},\n\t\t},\n\t},\n\n\t\"router-view\": {\n\t\tflow: true,\n\t\tslots: [\"default\"],\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\troute: {},\n\t\t},\n\t},\n\n\tslot: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tscriptSupporting: true,\n\t\tattributes: {\n\t\t\tname: {},\n\t\t\t/* scoped slot can take arbitrary bindings */\n\t\t\t\"*\": {},\n\t\t},\n\t},\n\n\tsuspense: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tslots: [\"default\", \"fallback\"],\n\t\tattributes: {\n\t\t\ttimeout: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tsuspensible: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t},\n\t},\n\n\tteleport: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\tattributes: {\n\t\t\tdefer: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tdisabled: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tto: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n\n\ttemplate: {\n\t\tattributes: {\n\t\t\t\"#*\": {},\n\t\t},\n\t},\n\n\ttransition: {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tmode: {\n\t\t\t\tenum: [\"in-out\", \"out-in\", \"default\"],\n\t\t\t},\n\t\t},\n\t},\n\n\t\"transition-group\": {\n\t\tflow: true,\n\t\tphrasing: true,\n\t\ttransparent: true,\n\t\tcomponent: \"tag\",\n\t\tattributes: {\n\t\t\tname: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"enter-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-from-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-active-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\t\"leave-to-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttype: {\n\t\t\t\tenum: [\"transition\", \"animation\"],\n\t\t\t},\n\t\t\tduration: {\n\t\t\t\tenum: [/^\\d+$/],\n\t\t\t},\n\t\t\tcss: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\tappear: {\n\t\t\t\tboolean: true,\n\t\t\t},\n\t\t\t\"move-class\": {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t\ttag: {\n\t\t\t\tenum: [\"/.+/\"],\n\t\t\t},\n\t\t},\n\t},\n});\n", "import { type ConfigData } from \"html-validate\";\nimport vueElements from \"../elements\";\n\nexport function createConfig(): ConfigData {\n\tconst config: ConfigData = {\n\t\telements: [vueElements],\n\t\trules: {\n\t\t\t/* vue modifiers often use camelcase so allow by default */\n\t\t\t\"attr-case\": [\"error\", { style: \"camelcase\" }],\n\n\t\t\t/* self closing tags often used in vue code so allow by default*/\n\t\t\t\"void-style\": [\"error\", { style: \"selfclose\" }],\n\t\t\t\"no-self-closing\": \"off\",\n\n\t\t\t/* enable rules from this plugin */\n\t\t\t\"vue/available-slots\": \"error\",\n\t\t\t\"vue/prefer-boolean-shorthand\": \"error\",\n\t\t\t\"vue/prefer-slot-shorthand\": \"error\",\n\t\t\t\"vue/required-slots\": \"error\",\n\t\t},\n\t};\n\n\treturn config;\n}\n\nexport default createConfig();\n", "import recommended from \"./recommended\";\n\nexport default {\n\trecommended,\n};\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tslots?: string[];\n\t}\n\tinterface MetaElement {\n\t\tslots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tavailable: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class AvailableSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component does not have a slot named \"${context.slot}\". Only known slots can be specified.`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are available\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.available.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"Only known slots can be specified.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.slots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.slots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, slots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst available = new Set(slots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(used, available);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\tavailable: slots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component has no slot \"${missing}\"`,\n\t\t\t\tusedSlots.get(missing),\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "/**\n * Strip anything inside `{{ .. }}` in case it contains anything that looks like\n * markup, i.e. it will be ignored\n */\nexport function stripTemplating(str: string): string {\n\t/* eslint-disable-next-line sonarjs/slow-regex -- technical debt, should refactor */\n\treturn str.replaceAll(/{{(.*?)}}/g, (_, m: string) => {\n\t\tconst filler = \" \".repeat(m.length);\n\t\treturn `{{${filler}}}`;\n\t});\n}\n", "import { type HtmlElement, type Location } from \"html-validate\";\n\nconst slotAttr = /(?:v-slot:|#)([^[]+)/;\n\nfunction haveSlot(value: [string, Location] | null): value is [string, Location] {\n\treturn value !== null;\n}\n\n/**\n * Search all children for slots and return both slot names and locations.\n */\nexport function findUsedSlots(node: HtmlElement): Map<string, Location> {\n\tconst template = node.querySelectorAll(\">template, >[slot]\");\n\tconst slots = template.map((child) => findSlotAttribute(child)).filter(haveSlot);\n\tconst initial = new Map<string, Location>();\n\treturn slots.reduce((result: Map<string, Location>, [key, val]) => {\n\t\tresult.set(key, val);\n\t\treturn result;\n\t}, initial);\n}\n\n/**\n * Find the name of the slot and its location used by an element. Searches\n * both v-slot:foo and slot=\"foo\".\n */\nexport function findSlotAttribute(node: HtmlElement): [string, Location] | null {\n\tfor (const attr of node.attributes) {\n\t\t/* find v-slot directive */\n\t\tconst match = slotAttr.exec(attr.key);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if slot matches [1] will exist */\n\t\t\tconst slot = match[1]!;\n\t\t\treturn [slot, attr.keyLocation];\n\t\t}\n\n\t\t/* find deprecated slot attribute */\n\t\tif (attr.key === \"slot\" && typeof attr.value === \"string\") {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- valueLocation will always be set the value is present */\n\t\t\treturn [attr.value, attr.valueLocation!];\n\t\t}\n\t}\n\treturn null;\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t\tdeprecatedSlots?: Record<string, boolean | string>;\n\t}\n}\n\n/** @internal */\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\tinfo: string | null;\n}\n\nexport class DeprecatedSlot extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\tconst preamble = `The slot \\`${context.slot}\\` is deprecated and must not be used`;\n\t\t\treturn {\n\t\t\t\tdescription: context.info ? `${preamble}: ${context.info}.` : `${preamble}.`,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"This slot is deprecated and must not be used.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify deprecated slots */\n\t\t\t\tconst deprecatedSlots = node.meta?.deprecatedSlots;\n\t\t\t\tif (!deprecatedSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, deprecatedSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(\n\t\tnode: HtmlElement,\n\t\tdeprecatedSlots: Record<string, boolean | string>,\n\t): void {\n\t\tconst slots = findUsedSlots(node);\n\t\tfor (const [slot, location] of slots.entries()) {\n\t\t\tconst deprecated = deprecatedSlots[slot];\n\t\t\tif (!deprecated) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot,\n\t\t\t\tinfo: typeof deprecated === \"string\" ? deprecated : null,\n\t\t\t};\n\t\t\tconst preamble = `slot \"${slot}\" is deprecated`;\n\t\t\tconst message = typeof deprecated === \"string\" ? `${preamble}: ${deprecated}` : preamble;\n\t\t\tthis.report({\n\t\t\t\tnode,\n\t\t\t\tmessage,\n\t\t\t\tlocation,\n\t\t\t\tcontext,\n\t\t\t});\n\t\t}\n\t}\n}\n", "import { type AttributeEvent, type RuleDocumentation, DynamicValue, Rule } from \"html-validate\";\n\nexport interface RuleContext {\n\tprop: string;\n\toriginalAttribute: string;\n}\n\nexport class PreferBooleanShorthand extends Rule<RuleContext> {\n\tpublic override documentation(context: RuleContext): RuleDocumentation {\n\t\tconst { prop, originalAttribute } = context;\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Use \\`${prop}\\` instead of \\`${originalAttribute}=\"true\"\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t`The \\`${prop}\\` prop is declared as a boolean. Vue.js allows omitting the value for boolean props, so \\`${prop}\\` is equivalent to \\`${originalAttribute}=\"true\"\\`.`,\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { key, value, meta, originalAttribute, target, location } = event;\n\n\t\t\t/* only handle synthesized attributes produced by the processAttribute hook,\n\t\t\t * i.e. the \"prop\" attribute generated from \":prop\" or \"v-bind:prop\" */\n\t\t\tif (!originalAttribute) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only report for boolean props */\n\t\t\tif (!meta?.boolean) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* only report when the bound value is the literal `true` */\n\t\t\tif (!(value instanceof DynamicValue) || value.expr !== \"true\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst context: RuleContext = { prop: key, originalAttribute };\n\t\t\tconst message = `Use \"${key}\" instead of \"${originalAttribute}=\"true\"\"`;\n\t\t\tthis.report(target, message, location, context);\n\t\t});\n\t}\n}\n", "import { type AttributeEvent, type RuleDocumentation, DynamicValue, Rule } from \"html-validate\";\n\nexport interface RuleContext {\n\tslot: string;\n}\n\nconst prefix = \"v-slot:\";\n\nfunction isVSlot(attr: string): string | null {\n\tif (!attr.startsWith(prefix)) {\n\t\treturn null;\n\t}\n\tif (attr.length <= prefix.length) {\n\t\treturn null;\n\t}\n\tconst slot = attr.slice(prefix.length);\n\tif (/^\\[.*]$/.test(slot)) {\n\t\treturn null;\n\t}\n\treturn slot;\n}\n\nfunction isDeprecatedSlot(attr: string, value: null | string | DynamicValue): string | null {\n\tif (attr !== \"slot\") {\n\t\treturn null;\n\t}\n\tif (value instanceof DynamicValue) {\n\t\treturn null;\n\t}\n\tif (value === null || value === \"\") {\n\t\treturn null;\n\t}\n\treturn value;\n}\n\nexport class PreferSlotShorthand extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tconst slot = context?.slot ?? \"my-slot\";\n\t\treturn {\n\t\t\tdescription: [\n\t\t\t\t`Prefer to use \\`#${slot}\\` over \\`v-slot:${slot}\\`.`,\n\t\t\t\t\"\",\n\t\t\t\t\"Vue.js supports a shorthand syntax for slots using `#` instead of `v-slot:` or the deprecated `slot` attribute, e.g. using `#header` instead of `v-slot:header`.\",\n\t\t\t].join(\"\\n\"),\n\t\t};\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"attr\", (event: AttributeEvent) => {\n\t\t\tconst { key: attr, value, target, keyLocation: location } = event;\n\n\t\t\tlet slot: string | null;\n\n\t\t\t/* handle v-slot:xyz */\n\t\t\tslot = isVSlot(attr);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\n\t\t\t/* handle slot=\"xyz\" */\n\t\t\tslot = isDeprecatedSlot(attr, value);\n\t\t\tif (slot) {\n\t\t\t\tconst context: RuleContext = { slot };\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- value is checked by isDeprecatedSlot */\n\t\t\t\tconst message = `Prefer to use #${slot} over ${attr}=\"${value!.toString()}\"`;\n\t\t\t\tthis.report(target, message, location, context);\n\t\t\t}\n\t\t});\n\t}\n}\n", "import {\n\ttype DOMReadyEvent,\n\ttype HtmlElement,\n\ttype RuleDocumentation,\n\tRule,\n\twalk,\n} from \"html-validate\";\nimport { findUsedSlots } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\tinterface MetaData {\n\t\trequiredSlots?: string[];\n\t}\n\tinterface MetaElement {\n\t\trequiredSlots?: string[];\n\t}\n}\n\nexport interface RuleContext {\n\telement: string;\n\tslot: string;\n\trequired: string[];\n}\n\nfunction difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n\tconst result = new Set(a);\n\tfor (const elem of b) {\n\t\tresult.delete(elem);\n\t}\n\treturn result;\n}\n\nexport class RequiredSlots extends Rule<RuleContext> {\n\tpublic override documentation(context?: RuleContext): RuleDocumentation {\n\t\tif (context) {\n\t\t\treturn {\n\t\t\t\tdescription: [\n\t\t\t\t\t`The <${context.element}> component requires slot \"${context.slot}\" to be implemented. Add \\`<template v-slot:${context.slot}>\\``,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"The following slots are required\",\n\t\t\t\t]\n\t\t\t\t\t.concat(context.required.map((slot) => `- ${slot}`))\n\t\t\t\t\t.join(\"\\n\"),\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tdescription: \"All required slots must be implemented.\",\n\t\t\t};\n\t\t}\n\t}\n\n\tpublic setup(): void {\n\t\tthis.on(\"dom:ready\", (event: DOMReadyEvent) => {\n\t\t\tconst doc = event.document;\n\t\t\twalk.depthFirst(doc, (node: HtmlElement) => {\n\t\t\t\t/* ignore rule if element has no meta or meta does not specify available slots */\n\t\t\t\tconst meta = node.meta;\n\t\t\t\tif (!meta?.requiredSlots) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.validateSlots(node, meta.requiredSlots);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate validateSlots(node: HtmlElement, requiredSlots: string[]): void {\n\t\tconst usedSlots = findUsedSlots(node);\n\t\tconst required = new Set(requiredSlots);\n\t\tconst used = new Set(usedSlots.keys());\n\t\tconst diff = difference(required, used);\n\n\t\tfor (const missing of diff) {\n\t\t\tconst context: RuleContext = {\n\t\t\t\telement: node.tagName,\n\t\t\t\tslot: missing,\n\t\t\t\trequired: requiredSlots,\n\t\t\t};\n\t\t\tthis.report(\n\t\t\t\tnode,\n\t\t\t\t`<${node.tagName}> component requires slot \"${missing}\" to be implemented`,\n\t\t\t\tnull,\n\t\t\t\tcontext,\n\t\t\t);\n\t\t}\n\t}\n}\n", "import { AvailableSlots } from \"./available-slots\";\nimport { DeprecatedSlot } from \"./deprecated-slot\";\nimport { PreferBooleanShorthand } from \"./prefer-boolean-shorthand\";\nimport { PreferSlotShorthand } from \"./prefer-slot-shorthand\";\nimport { RequiredSlots } from \"./required-slots\";\n\nconst rules = {\n\t\"vue/available-slots\": AvailableSlots,\n\t\"vue/deprecated-slot\": DeprecatedSlot,\n\t\"vue/prefer-boolean-shorthand\": PreferBooleanShorthand,\n\t\"vue/prefer-slot-shorthand\": PreferSlotShorthand,\n\t\"vue/required-slots\": RequiredSlots,\n};\n\nexport default rules;\n", "{\n \"properties\": {\n \"component\": {\n \"type\": \"string\",\n \"copyable\": true\n },\n \"deprecatedSlots\": {\n \"type\": \"object\",\n \"patternProperties\": {\n \".*\": {\n \"anyOf\": [{ \"type\": \"boolean\" }, { \"type\": \"string\" }]\n }\n }\n },\n \"requiredSlots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"slots\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n}\n", "import { type AttributeData, DynamicValue } from \"html-validate\";\n\nexport function* processAttribute(attr: AttributeData): Iterable<AttributeData> {\n\t/* always yield original attribute */\n\tyield attr;\n\n\t/* setup :foo and v-bind:foo alias */\n\tconst bind = /^(?:v-bind)?:(.*)$/.exec(attr.key);\n\tif (bind) {\n\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if bind matches [1] will exist */\n\t\tconst key = bind[1]!;\n\t\tyield {\n\t\t\t...attr,\n\t\t\tkey,\n\t\t\tvalue: new DynamicValue(attr.value ? String(attr.value) : \"\"),\n\t\t\toriginalAttribute: attr.key,\n\t\t};\n\t}\n}\n", "import {\n\ttype HtmlElement,\n\ttype MetaElement,\n\ttype ProcessElementContext,\n\tDynamicValue,\n} from \"html-validate\";\nimport { findSlotAttribute } from \"../utils\";\n\ndeclare module \"html-validate\" {\n\texport interface MetaData {\n\t\tcomponent?: string;\n\t}\n}\n\nfunction isBound(node: HtmlElement): boolean {\n\treturn node.hasAttribute(\"v-html\");\n}\n\nfunction isSlot(node: HtmlElement): boolean {\n\treturn node.is(\"slot\");\n}\n\nfunction loadSlotMeta(context: ProcessElementContext, slotname: string, node: HtmlElement): void {\n\tconst parent = node.parent;\n\tif (!parent) {\n\t\treturn;\n\t}\n\n\t/* Generate a new virtual tagname to load meta element from */\n\tconst getMetaFor = (tagName: string): MetaElement | null => {\n\t\tconst meta = context.getMetaFor(tagName);\n\t\treturn meta && meta.tagName !== \"*\" ? meta : null;\n\t};\n\tconst key = `${parent.tagName}#${slotname}`;\n\tconst fallbackKey = `${parent.tagName}:${slotname}`;\n\tconst meta = getMetaFor(key) ?? getMetaFor(fallbackKey);\n\tif (!meta) {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* add an annotation so error messages will be more understandable */\n\tnode.setAnnotation(`slot \"${slotname}\" (<${parent.tagName}>)`);\n}\n\n/**\n * Handle <component> or a component with a slot wrapped in it.\n */\nfunction loadComponentMeta(\n\tcontext: ProcessElementContext,\n\tnode: HtmlElement,\n\tcomponent: string,\n): void {\n\tlet src: HtmlElement = node;\n\n\t/* if this is a slot with wrapped in a <component> we fetch attributes from\n\t * the parent element, i.e. the actual component */\n\tif (node.tagName === \"template\" && src.parent) {\n\t\tsrc = src.parent;\n\t}\n\n\t/* try to fetch the attribute containing the element to use */\n\tconst attr = src.getAttribute(component);\n\tif (!attr || attr.isDynamic) {\n\t\treturn;\n\t}\n\n\t/* use the attribute value to lookup new metadata based on the tagname */\n\tconst tagName = attr.value as string;\n\tconst meta = context.getMetaFor(tagName);\n\tif (!meta || meta.tagName === \"*\") {\n\t\treturn;\n\t}\n\n\tnode.loadMeta(meta);\n\n\t/* update or add new annotation so error messages will be more descriptive */\n\tif (node.isSameNode(src)) {\n\t\tnode.setAnnotation(`<${meta.tagName}> (<${node.tagName}>)`);\n\t} else {\n\t\tconst name = node.annotatedName.replace(\"(<\", `(<${meta.tagName}> via <`);\n\t\tnode.setAnnotation(name);\n\t}\n}\n\nexport function processElement(this: ProcessElementContext, node: HtmlElement): void {\n\tconst slot = findSlotAttribute(node);\n\n\t/* If this element is a slot we load new metadata properties onto the element\n\t * to support adding properties directly to slots, e.g. to allow/disallow\n\t * content in the slot. */\n\tif (slot) {\n\t\tconst [slotname] = slot;\n\t\tloadSlotMeta(this, slotname, node);\n\t}\n\n\t/* handle usage of <component>, either directly or inside a component */\n\tif (node.meta?.component) {\n\t\tloadComponentMeta(this, node, node.meta.component);\n\t}\n\n\t/* Since html-validate v9.5.4 `<template>` tags are generally ignored when\n\t * checking descendants but since v9.6.1 the checks are enabled if this flag\n\t * is disabled. This is a needed both for `<template #slot>` and when using\n\t * `<template>` inside a Vue SFC where the element is transparent instead of\n\t * acting as a `HTMLTemplateElement`. */\n\tif (node.is(\"template\") && node.meta) {\n\t\tnode.meta.templateRoot = false;\n\t}\n\n\t/* Mark as having dynamic text if the element either content bound via v-html\n\t * or if it is a slot. This is needed for rules with requires textual content,\n\t * e.g a heading cannot be empty. */\n\tif (isBound(node) || isSlot(node)) {\n\t\tnode.appendText(new DynamicValue(\"\"), node.location);\n\t}\n}\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Transform a regular HTML file. In practice this only applies hooks without\n * any extraction.\n */\nexport function* transformHTML(source: Source): Iterable<Source> {\n\tyield {\n\t\t...source,\n\t\thooks: {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t},\n\t};\n}\n\ntransformHTML.api = 1;\n", "import { TemplateExtractor } from \"@html-validate/plugin-utils\";\nimport { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\n\n/**\n * Match template property in `Vue.component` call\n */\nexport function transformJS(source: Source): Iterable<Source> {\n\tconst te = TemplateExtractor.fromString(source.data, source.filename);\n\treturn Array.from(te.extractObjectProperty(\"template\"), (cur) => {\n\t\tcur.originalData = source.originalData ?? source.data;\n\t\tcur.hooks = {\n\t\t\tprocessAttribute,\n\t\t\tprocessElement,\n\t\t};\n\t\treturn cur;\n\t});\n}\n\ntransformJS.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { processAttribute, processElement } from \"../hooks\";\nimport { stripTemplating } from \"../utils\";\n\nfunction findLocation(source: string, index: number, preamble: number): [number, number] {\n\tlet line = 1;\n\tlet prev = 0;\n\tlet pos = source.indexOf(\"\\n\");\n\twhile (pos !== -1) {\n\t\tif (pos > index) {\n\t\t\treturn [line, index - prev + preamble + 1];\n\t\t}\n\t\tline++;\n\t\tprev = pos;\n\t\tpos = source.indexOf(\"\\n\", pos + 1);\n\t}\n\treturn [line, 1];\n}\n\nfunction computeIndent(text: string): string {\n\tconst lines = text.split(\"\\n\");\n\tconst initial = null as string | null;\n\tconst common = lines.reduce((common, line) => {\n\t\tconst match = /^(\\s*)\\S/.exec(line);\n\t\tif (match) {\n\t\t\t/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- if match matches [1] will exist */\n\t\t\tconst indent = match[1]!;\n\t\t\treturn common === null || indent.length < common.length ? indent : common;\n\t\t} else {\n\t\t\treturn common;\n\t\t}\n\t}, initial);\n\treturn common ?? \"\";\n}\n\n/**\n * Match templates from SFC <template> tag\n */\nexport function* transformSFC(source: Source): Iterable<Source> {\n\tconst indent = computeIndent(source.data);\n\t/* eslint-disable-next-line security/detect-non-literal-regexp -- will only contain whitespace */\n\tconst sfc = new RegExp(`^${indent}(<template([^>]*)>)([^]*?)^${indent}(</template>)`, \"gm\");\n\tlet match: RegExpExecArray | null;\n\twhile ((match = sfc.exec(source.data)) !== null) {\n\t\tconst attr = match[2] ?? \"\";\n\t\tconst data = `${match[1]!}${match[3]!}${match[4]!}`; // eslint-disable-line @typescript-eslint/no-non-null-assertion -- groups exists when regex matches\n\t\tif (!/lang=\".*?\"/.test(attr)) {\n\t\t\tconst [line, column] = findLocation(source.data, match.index, 0);\n\t\t\tyield {\n\t\t\t\tdata: stripTemplating(data),\n\t\t\t\tfilename: source.filename,\n\t\t\t\tline: line + (source.line - 1),\n\t\t\t\tcolumn: column + (source.column - 1),\n\t\t\t\toffset: match.index + source.offset,\n\t\t\t\toriginalData: source.originalData ?? source.data,\n\t\t\t\thooks: {\n\t\t\t\t\tprocessAttribute,\n\t\t\t\t\tprocessElement,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n}\n\ntransformSFC.api = 1;\n", "import { type Source } from \"html-validate\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\n/**\n * Returns true if the source is considered a SFC component\n */\nfunction isVue(source: Source): boolean {\n\treturn /\\.vue$/i.test(source.filename);\n}\n\n/**\n * Returns true if the source is considered javascript\n */\nfunction isJavascript(source: Source): boolean {\n\treturn /\\.(jsx?|tsx?)$/i.test(source.filename);\n}\n\nexport function* autodetect(source: Source): Iterable<Source> {\n\tif (isVue(source)) {\n\t\tyield* transformSFC(source);\n\t} else if (isJavascript(source)) {\n\t\tyield* transformJS(source);\n\t} else {\n\t\tyield* transformHTML(source);\n\t}\n}\n\nautodetect.api = 1;\n", "import { type Transformer } from \"html-validate\";\nimport { autodetect } from \"./auto.transform\";\nimport { transformHTML } from \"./html.transform\";\nimport { transformJS } from \"./js.transform\";\nimport { transformSFC } from \"./sfc.transform\";\n\nconst transformer: Record<string, Transformer> = {\n\tdefault: autodetect,\n\tauto: autodetect,\n\tjs: transformJS,\n\tsfc: transformSFC,\n\thtml: transformHTML,\n};\n\nexport default transformer;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Rule", "walk", "Rule", "walk", "Rule", "DynamicValue", "Rule", "Rule", "walk", "difference", "Rule", "walk", "DynamicValue", "DynamicValue", "meta", "name", "DynamicValue", "common"]
|
|
7
7
|
}
|